Выполнить процесс за n циклов процессора

Как выполнить процесс за n циклов процессора в Linux? У меня есть система пакетной обработки на многоядерном сервере, и я хотел бы убедиться, что каждая задача получает одинаковое количество процессорного времени. Как только количество процессора будет израсходовано, я хотел бы остановить процесс. До сих пор я пытался что-то сделать с /proc/pid/stats utime и stime, но мне это не удалось.


person joe-jeff    schedule 06.01.2015    source источник
comment
Попытка сделать это вручную (или с помощью скрипта), скорее всего, приведет к тому, что все задания будут выполняться медленнее, чем могли бы. Вам лучше просто дать им всем одинаковый приоритет и позволить планировщику ядра Linux разобраться в деталях. Если вы не написали планировщик, шансы, что вы можете вручную сделать работу лучше, чем он, находятся на низком уровне...   -  person twalberg    schedule 07.01.2015


Ответы (1)


Я считаю, что это невозможно (задать одинаковое количество циклов нескольким процессам; цикл ЦП часто меньше наносекунды). Вы можете выполнить процесс за x секунд ЦП. Для этого используйте setrlimit(2) с RLIMIT_CPU

Ваш пакетный процессор также может сам управлять временем, см. время(7). Вы можете использовать таймеры (см. timer_create(2) и timerfd_create(2)), иметь цикл событий вокруг poll(2), измерьте время с помощью clock_getttime(2)

Я не уверен, что полезно писать собственную систему пакетной обработки. Вы можете использовать существующий пакет или slurm или gnqs (см. также коммерческие продукты, такие как pbsworks, lsf ..)

person Basile Starynkevitch    schedule 07.01.2015