From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: From: Ivan Adzhubey To: ALT Linux Sisyphus discussion list Subject: Re: [sisyphus] Shared memory - HELP PLEASE! Date: Thu, 25 Mar 2004 02:59:41 -0500 User-Agent: KMail/1.5.4 References: <20040223182241.028ed881.iadzhubey@rics.bwh.harvard.edu> <200403250217.54298.iadzhubey@rics.bwh.harvard.edu> <200403250229.12542.iadzhubey@rics.bwh.harvard.edu> In-Reply-To: <200403250229.12542.iadzhubey@rics.bwh.harvard.edu> MIME-Version: 1.0 Content-Type: text/plain; charset="koi8-r" Content-Transfer-Encoding: 8bit Content-Disposition: inline Message-Id: <200403250259.41119.iadzhubey@rics.bwh.harvard.edu> X-Authentication-Info: Submitted using SMTP AUTH at out003.verizon.net from [68.163.158.108] at Thu, 25 Mar 2004 02:03:21 -0600 X-BeenThere: sisyphus@altlinux.ru X-Mailman-Version: 2.1.4 Precedence: list Reply-To: ALT Linux Sisyphus discussion list List-Id: ALT Linux Sisyphus discussion list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 25 Mar 2004 08:03:25 -0000 Archived-At: List-Archive: On Thursday 25 March 2004 02:29 am, Ivan Adzhubey wrote: > > > > ------ 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? > > Еще раз спасибо за помощь! Так, слегка запутался: man shmget: int shmget(key_t key, int size, int shmflg); ...shmget() returns the identifier of the shared memory segment associated with the value of the argument key. A new shared memory segment, with size equal to the value of size rounded up to a multiple of PAGE_SIZE, ... PAGE_SIZE у нас вроде бы 0x400 == 1024 bytes shm.h: #define SHMMIN 1 /* min shared seg size (bytes) */ но shmget работает как-то странно: shmtest.c: shmid = shmget(IPC_PRIVATE, 1, IPC_CREAT|0700); ipcs: ------ Shared Memory Segments -------- key shmid owner perms bytes nattch status 0x00000000 1966087 ivan 700 0 1 аналогично shmtest.c: shmid = shmget(IPC_PRIVATE, 1023, IPC_CREAT|0700); ipcs: ------ Shared Memory Segments -------- key shmid owner perms bytes nattch status 0x00000000 1966087 ivan 700 0 1 то есть никакой памяти не выделяется, хотя и ошибки тоже не генерируется. shmtest.c: shmid = shmget(IPC_PRIVATE, 1024, IPC_CREAT|0700); ipcs: ------ Shared Memory Segments -------- key shmid owner perms bytes nattch status 0x00000000 1966087 ivan 700 4096 1 Опа, сразу 4 страницы! shmtest.c: shmid = shmget(IPC_PRIVATE, 2*1024, IPC_CREAT|0700); ipcs: ------ Shared Memory Segments -------- key shmid owner perms bytes nattch status 0x00000000 1966087 ivan 700 8192 1 И так далее, в два раза больше чем запрошено. Грустно, но курение манов совершенно не помогает. Не перекинет ли кто из подписантов этот тред в devel@? Может гуру курят что-то более подходящее к случаю и смогут помочь мне узреть истину? -- Иван