пятница, 26 июня 2009 г.

Ограничение использования процессора процессом

Иногда в процессе работы некоторый процесс отбирает все процессорное время процессора. Например, пережатие фильма в другой формат с помощью ffmpeg может сделать невозможным использование компьютера в течение нескольких часов. И nice не особо помогает. Особенно, если диск активно используется. В таком случае возникает желание просто отрезать кусок процессора этому жадному процессу, и больше не давать.

Как всегда, в Linux нашлось простое решение. Утилита cpulimit достаточно просто и надежно справилась с этой задачей. Можно привязываться к процессу по идентификатору, по имени исполняемого файла и по полному пути. Ограничение задается в процентах. Срабатывает не очень четко, но вполне можно подобрать.

Мануал достаточно простой, и мне показалось, что описывать особенности использования будет лишним. Но если вдруг кому-то все-таки будет непонятно - пишите, с радостью помогу, чем смогу :)

12 комментариев:

  1. Вообще есть еще такая штука, как ionice, ограничивающее приоритет процесса по дисковым операциям.
    Так что необходимость cpulimmit остается под вопросом.

    ОтветитьУдалить
  2. > Например, пережатие фильма в другой формат с помощью ffmpeg может сделать невозможным использование компьютера в течение нескольких часов

    В жизни не видел в линуксе таких проблем. Постоянно занимаюсь пережатием видео в 1-2 потока (на двухядернике) и компиляю софт с j5 (gentoo у меня). Никаких проблем с доступностью системы нету напрочь.

    ОтветитьУдалить
  3. Приходите, покажу :)

    Вообще, я не совсем понял, что Вы хотели этим сказать. Это похоже, как если бы владелец малолитражки сказал, что у него машина плохо тянет, когда он загрузит ее мешками цемента... А водитель камаза ответил бы: "В жизни не видел таких проблем! Постоянно вожу тонны цемента, и еще могу пару пассажиров захватить в салон!" :)

    Слово "может" как бы намекает, что это не обязательно должно происходить у всех. Наверное, стоит уточнить: на слабых компьютерах :)

    ОтветитьУдалить
  4. Я не понимаю логики процесса - где что должно тормозить? Дисковая активность - сомневаюсь. Это пара мегабайт в секунду на чтение, еще пара - на запись. Память? Тоже врядли. Процессор? Ну так у нас многозадачные компы, процесс с дефолтным приоритетом не сможет подвесить систему, чай, не виндовс у нас.

    ОтветитьУдалить
  5. Тормозить должно там, где не хватает ресурсов. Если ресурсов хватает, то тормозить не должно. В моем случае это процессор, потому что он мало того что не многоядерный и у него небольшой кеш, так он к тому же еще и загружен обработкой видео. У мне процессор может тормозить даже если я просто зашел на сайт с множеством анимации. Если же на процессор идет не большая нагрузка, то довольно часто узким местом у меня становится 40-гиговый винт. Если мне не изменяет память, 2 метра в секунду - это близко к его пределу, а может даже и за ним.

    Конечно, такие скудные ресурсы в наш век могут показаться просто смешными. Однако, я не вижу смысла покупать двухъядерный комп, если для выполнения текущих задач может вполне подойти имеющийся.

    ОтветитьУдалить
  6. Вообще говоря, стоимость работы программиста больше стоимости среднерыночных железок. Это я к тому, что вместо изобретения загадочных способов упростить себе работу, проще просто купить более мощный компьютер.

    И это... опишите конфигурацию вашего компа :)

    P.S. Мой 40-гиговый Seagate U6 выдавал до 50 мегабайт в секунду.

    ОтветитьУдалить
  7. Я подозревал, что именно к этому Вы и сведете разговор :) Но, вообще говоря, покупать или не покупать - это личное дело каждого. Да и вопрос изначально технический. Может быть пример не совсем удачный. Можете придумать свой :) А ресурсы всегда можно израсходовать - было бы желание. Так что, давайте оставим тему рациональности, и, если хотите, обсудим техническую сторону проблемы.

    Processor: Intel(R) Celeron(R) CPU 2.00GHz
    Memory: 1027MB (748MB used)
    -Display-
    Resolution: 1280x1024 pixels
    OpenGL Renderer: Mesa DRI Intel(R) 845G 20061017 x86/MMX/SSE2
    -Multimedia-
    Audio Adapter: ICH4 - Intel 82801DB-ICH4
    -IDE Disks-
    ST340015A

    ОтветитьУдалить
  8. > Я подозревал, что именно к этому Вы и сведете разговор :)

    Я просто предпочитаю решать технические проблемы техническими средствами, не городя софтовых костылей :)

    Конфигурация вроде не самая плохая. У меня на похожей интернет-радио работает, кодирует mp3/ogg в 3 потока и декодирует в 1-2. Грузится при этом 80-90% проца, но никаких других проблем не вижу, mysql/apache/php/python не тормозят ни разу.

    ОтветитьУдалить
  9. Это рабочая станция? А видеокарта у вас полноценная, или встроенная фигня как у меня? :) Я подозреваю, что если я поставлю нормальное видео, то большая часть раздражающих меня тормозов исчезнет.

    ОтветитьУдалить
  10. Это сервер на площадке

    ОтветитьУдалить
  11. А где пример ? Но спасибо за упоминание:)

    ОтветитьУдалить