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