On Thu, Apr 11, 2013 at 04:51:28PM +0400, Aleksey Avdeev wrote: > 10.04.2013 21:39, Dmitry V. Levin пишет: > > On Wed, Apr 10, 2013 at 09:06:04PM +0400, Aleksey Avdeev wrote: > >> 10.04.2013 19:47, Dmitry V. Levin пишет: > >>> On Wed, Apr 10, 2013 at 06:41:36PM +0400, Aleksey Avdeev wrote: > >>>> 10.04.2013 17:45, Dmitry V. Levin пишет: > >>>>> On Wed, Apr 10, 2013 at 05:36:15PM +0400, Aleksey Avdeev wrote: > >>>>>> 10.04.2013 16:53, Dmitry V. Levin пишет: > >>>>>>> On Wed, Apr 10, 2013 at 01:11:56PM +0400, Aleksey Avdeev wrote: > >>>>>>>> Приветствую. > >>>>>>>> > >>>>>>>> Я правильно понимаю, что установка пользовательским процессом RLIMIT > >>>>>>>> в 1000000, запрещена настройками hasher`а? > >>>>>>> > >>>>>>> $ hsh-run -- sh -c 'ulimit -Ha' > >>>>>>> core file size (blocks, -c) unlimited > >>>>>>> data seg size (kbytes, -d) unlimited > >>>>>>> scheduling priority (-e) 0 > >>>>>>> file size (blocks, -f) unlimited > >>>>>>> pending signals (-i) 1032915 > >>>>>>> max locked memory (kbytes, -l) 64 > >>>>>>> max memory size (kbytes, -m) unlimited > >>>>>>> open files (-n) 4096 > >>>>>>> pipe size (512 bytes, -p) 8 > >>>>>>> POSIX message queues (bytes, -q) 819200 > >>>>>>> real-time priority (-r) 0 > >>>>>>> stack size (kbytes, -s) unlimited > >>>>>>> cpu time (seconds, -t) 7260 > >>>>>>> max user processes (-u) 1024 > >>>>>>> virtual memory (kbytes, -v) unlimited > >>>>>>> file locks (-x) unlimited > >>>>>>> > >>>>>>> Привысить значения этих hard limits ядро не даст. > >>>>>>> > >>>>>>>> PS: В Python-3.3.1 такую операцию пытается сделать > >>>>>>>> test.test_resource.ResourceTest. Если у нас это запрещено -- отключу тест. > >>>>>>> > >>>>>>> Какой именно лимит? > >>>>>> > >>>>>> В коде (см. > >>>>>> ): > >>>>>> > >>>>>> # Issue 6083: Reference counting bug > >>>>>> def test_setrusage_refcount(self): > >>>>>> try: > >>>>>> limits = resource.getrlimit(resource.RLIMIT_CPU) > >>>>>> except AttributeError: > >>>>>> pass > >>>>>> else: > >>>>>> class BadSequence: > >>>>>> def __len__(self): > >>>>>> return 2 > >>>>>> def __getitem__(self, key): > >>>>>> if key in (0, 1): > >>>>>> return len(tuple(range(1000000))) > >>>> ^^^^^^^ > >>>>>> raise IndexError > >>>>>> > >>>>>> resource.setrlimit(resource.RLIMIT_CPU, BadSequence()) > >>>>> > >>>>> И какие значения RLIMIT_CPU в результате пытается установить этот код? > >>>> > >>>> 1000000 (см. выделение). > >>>> > >>>> Там в конечном итоге setrlimit(resource, &rl)(см. функцию > >>>> resource_setrlimit(PyObject *self, PyObject *args) в > >>>> ) > >>>> возвращает errno == EPERM. > >>> > >>> Сколько значений RLIMIT_CPU передается в одном вызове setrlimit? > >>> Какие значения RLIMIT_CPU в результате пытается установить этот код? > >> > >> Вызов происходит так: > >> > >> setrlimit(resource, &rl) > >> > >> где: > >> > >> resource = 0 (константа RLIMIT_CPU из /usr/include/bits/resource.h) > >> > >> rl -- структура, содержащая: > >> > >> rl.rlim_cur = 1000000 > >> > >> rl.rlim_max = 1000000 > > > > Верно. > > > >>> На какое поведение setrlimit рассчитывает этот тест? > >> > >> Что setrlimit(resource, &rl) вернёт нечто отличное от -1. > > > > Верно. > > > >>> Что вообще тестирует тест по имени test_setrusage_refcount? > >> > >> Похоже он проверяет работоспособность вызова setrlimit (судя по коду). > > > > Неверно. > > Это не важно, т. к., судя по логу, проблема именно в возврате -1, > вызовом setrlimit. В логе: > > ====================================================================== > ERROR: test_setrusage_refcount (test.test_resource.ResourceTest) > ---------------------------------------------------------------------- > Traceback (most recent call last): > File "/usr/src/RPM/BUILD/python3-3.3.1/Lib/test/test_resource.py", > line 125, in test_setrusage_refcount > resource.setrlimit(resource.RLIMIT_CPU, BadSequence()) > ValueError: not allowed to raise maximum limit > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ > > А строка "not allowed to raise maximum limit" присутствует только в: > > if (setrlimit(resource, &rl) == -1) { > if (errno == EINVAL) > PyErr_SetString(PyExc_ValueError, > "current limit exceeds maximum limit"); > else if (errno == EPERM) > PyErr_SetString(PyExc_ValueError, > "not allowed to raise maximum limit"); > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ > else > PyErr_SetFromErrno(PyExc_OSError); > goto error; > } > > Т. е. до вызова setrlimit, с указанными выше параметрами, дело > доходит. И корень проблемы в том, что он возвращает -1. > > А смысл теста -- вещь, в данном контексте, десятая. Ну хватит уже позориться. -- ldv