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. А смысл теста -- вещь, в данном контексте, десятая. -- С уважением. Алексей.