[sisyphus] Shared memory - HELP PLEASE!
Ivan Adzhubey
=?iso-8859-1?q?iadzhubey_=CE=C1_rics=2Ebwh=2Eharvard=2Eedu?=
Чт Мар 25 10:17:54 MSK 2004
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 ядро должно
было остаться...
--
Иван
Подробная информация о списке рассылки Sisyphus