#linux #pthreads
#linux #pthreads
Вопрос:
Я пишу приложение на c и NetBeans на opensuse 11.4 с ядром 2.6.37.1-1.2 (вошел в систему как root). Это приложение создает поток и при запуске выдает этот результат:
sched_param param;
param.__sched_priority = -1;
policy = SCHED_FIFO;
param.__sched_priority = 50;
result = pthread_setschedparam(m_thread,policy,amp;param);
результат = 1(EPERM (not permitted))
Почему?
Комментарии:
1. Вы уверены, что запускаете его от имени root?
Ответ №1:
эмм … потому что это не разрешено? Проверьте следующие настройки:
Непривилегированный процесс не может установить приоритет реального времени выше, чем его значение RLIMIT_RTPRIO. Вы можете изменить это с помощью записи «
rtprio
» в/etc/security/limits.conf
(настройки применяются при входе в систему, поэтому изменения не повлияют на существующие сеансы входа).Привилегия определяется
CAP_SYS_NICE
возможностями.
Что-то подобное должно быть в файле конфигурации:
domain type item value
@group soft rtprio 100
Данная группа будет иметь мягкое ограничение rtprio до 100.
Это сработает, если предположить, что ваша конфигурация PAM использует pam_limits.
Возможно, вам также придется убедиться в жестком ограничении:
@group hard rtprio 100
Комментарии:
1. kernel.org/doc/man-pages/online/pages/man2 /… все подробности приведены в разделе «Привилегии и ограничения ресурсов».
2. извините за задержку, у моего младшего произошла более серьезная санитарная ошибка, и, как вы знаете, приоритеты реальной жизни каким-то образом переопределяют приоритеты реального времени 🙂 Сейчас завершены правки
3. он запускается от имени root с SCHED_FIFO в качестве приоритета. я воссоздаю fftw3.a со следующими конфигурациями: ./configure —enable-float —enable-threads —with-combined-threads —disable-fortran —with-slow-timer —enable-sse —enable-sse2 —enable-avx теперь среднее время ожидания составляет 0,4 мс! но поскольку я загружаю fftw.lib, я не знаю его конфигураций, которые являются наилучшей конфигурацией для максимальной производительности (с sse и нет mpi)?