[devel] Как пройти сборку если требуется /dev/shm ?

Alexander Bokovoy ab на altlinux.org
Ср Дек 31 17:57:14 MSK 2014


2014-12-30 15:53 GMT+02:00 Andrew V. Stepanov <stanv на altlinux.ru>:
>
> Как выяснилось, Python тут ни причем.
>
> Рассмотрим компьютер в котором один однопоточный процессор, с одним ядром.
>
> И рассмотрим семафор Posix.
>
> $ cat 1.c
> #include <semaphore.h>
> #include <stdio.h>
> #include <errno.h>
> #include <stdlib.h>
> #include <unistd.h>
> #include <sys/types.h>
>
> #include <sys/stat.h>
> #include <fcntl.h>
> #include <sys/mman.h>
>
> int main(int argc, char **argv)
> {
>         sem_t *mutex;
>
>         if ((mutex = sem_open("mysemaphore", O_CREAT, 0644, 1)) ==
> SEM_FAILED) {
>                 perror("semaphore initilization");
>                 exit(1);
>         }
>
>         exit(0);
> }
>
>
>
> $ gcc 1.c -lpthread
>
> $ ./a.out
> semaphore initilization: Function not implemented
>
> Т.е. POSIX семафоры в Linux хотят /dev/shm
>
> Хотеть семафор даже на однопроцессорной машине __вполне законно__.
>
>
> Python multiprocessing модуль написан с использованием POSIX семафоров, что
> также вполне законно.
>
>
> Что видно:
> File "/usr/src/RPM/BUILD/bro-2.3.1/aux/btest/btest", line 198, in
> runSubprocess
>     q = multiprocessing.Queue()
>   File "/usr/lib64/python2.7/multiprocessing/__init__.py", line 218, in
> Queue
>     return Queue(maxsize)
>   File "/usr/lib64/python2.7/multiprocessing/queues.py", line 63, in
> __init__
>     self._rlock = Lock()
>   File "/usr/lib64/python2.7/multiprocessing/synchronize.py", line 147, in
> __init__
>     SemLock.__init__(self, SEMAPHORE, 1, 1)
>   File "/usr/lib64/python2.7/multiprocessing/synchronize.py", line 75, in
> __init__
>     sl = self._semlock = _multiprocessing.SemLock(kind, value, maxvalue)
> OSError: [Errno 38] Function not implemented
>
>
> Семафоры нужны даже на однопоточных машинах.
> А POSIX семафоры хотят /dev/shm
>
> В конкретно в моем случае:
>
> http://git.altlinux.org/gears/p/python.git?p=python.git;a=blob;f=Python/Modules/_multiprocessing/semaphore.c;h=b9e8f345fbb1cd70918fb960377dadaea46fd8f3;hb=55198a185eef2089e6f4eba8654c5d9047a3c3a7#l195
>
> Вывод: Hasher запрещает использование POSIX named semaphore.
Учитывая, что /dev/shm может быть смонтировано в приватное адресное
пространство на современных ядрах, ничего не мешает хэшеру
использовать /dev/shm для сборки приложений.

-- 
/ Alexander Bokovoy


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