[sisyphus] Shared memory - HELP PLEASE!

Ivan Adzhubey =?iso-8859-1?q?iadzhubey_=CE=C1_rics=2Ebwh=2Eharvard=2Eedu?=
Чт Мар 25 10:29:12 MSK 2004


On Thursday 25 March 2004 02:17 am, Ivan Adzhubey wrote:
> On Thursday 25 March 2004 02:05 am, Ivan Adzhubey wrote:
> > On Thursday 25 March 2004 01:42 am, Grigory Batalov wrote:
> > > On Wed, 24 Mar 2004 23:36:15 -0500
> > >
> > > Ivan Adzhubey <iadzhubey на rics.bwh.harvard.edu> wrote:
> > > > Видимо придется все же самому разбираться. Может кто-нибудь поделится
> > > > исходниками чего-то работающего с shm, что у него самого - работает?
> > > > Или хотя бы фрагментом. Буду признателен.
> > >
> > >   У меня сохранился небольшой тест. Кажется, без ошибок =).
> > >   Во время sleep(5) запустите ipcs - увидите выделенный 1К.
> > >
> > > $ gcc -g -Wall -O2 -o shmtest shmtest.c
> > > $ ./shmtest &
> > > $ ipcs
> > >
> > > ------ Shared Memory Segments --------
> > > key        shmid      owner      perms      bytes      nattch    
> > > status 0x00000000 1245187    bga       700        1048576    1
> >
> > Спасибо, Григорий!
> >
> > К сожалению, там все сложнее. Ваша программа работает, и такие простые
> > тесты я уже научился сам писать ;). Проблема возникает когда a) есть
> > минимум два процесса пользующихся этой памятью (хотя бы по очереди,
> > например форкнутый child и его parent) b) используется блокировка (lock)
> >
> > А хотя нет, погодите! Кажется что-то видно... у вас запрашивается 2K
> > памяти и выделяется 2K. А у меня вашей программе выделяется в четыре раза
> > больше:
> >
> > ------ Shared Memory Segments --------
> > key        shmid      owner      perms      bytes      nattch     status
> > 0x00000000 1736711    ivan      700        4194304    1
> >
> > Кажется это все-таки баг. Сейчас проверю под другим ядром...
>
> Конечно, 2MB а не 2KB, опечатка.
>
> Странно, проверил на кластерном ноде под 2.4.22, там тоже выделяется 4MB.
> Что-то с выравниванием памяти? Вы каким компилятором собирали? И на какой
> системе запускали (ядро, libc)? Может это из-за того что я пробовал только
> на smp ядрах, сейчас буду дальше проверять, где-то в сетке у меня up ядро
> должно было остаться...

Проверил, на 2.4.25-std-up-alt1 тоже самое - выделяется 4MB вместо 2MB. И 8-й 
тест IPC::ShareLite так же виснет. Похоже это все-таки баг. Только на что его 
вешать? На ядро, glibc, gcc?

Еще раз спасибо за помощь!

-- 
Иван




Подробная информация о списке рассылки Sisyphus