Вы попытались изменить свои планировщики ввода-вывода?
mccoy:/sys/block/sdb/queue # cat scheduler
noop anticipatory deadline [cfq]
mccoy:/sys/block/sdb/queue # echo noop > scheduler
mccoy:/sys/block/sdb/queue # cat scheduler
[noop] anticipatory deadline cfq
Значение по умолчанию является CFQ обычно для большинства систем "в настоящее время".
Для сравнения планировщиков ввода-вывода делают следующее:
Тестирование чтения:
# echo 3 > /proc/sys/vm/drop_caches
Это удостоверится, что Вы тестируете диск и не кэшируемые страницы RAM, это сбросит кэш.
Тестирование записи:
Скопируйте свои файлы многократно одновременно. После того как записи являются полной проблемой a sync
Если Вы тестируете обоих, которые можно хотеть drop_caches
и звоните sync
когда копия сделана. В дополнение к планировщику существуют tunables для каждого планировщика. Но, быстрый тест должен был бы изменить планировщик и попробовать еще раз. Если у Вас есть хороший контроллер noop
разгрузит "Планирование ввода-вывода' к нему и не выполнит любое планирование данных уровня ОС.
Так или иначе это стоит попытки, и это только берет echo
задерживать его.
Мы пошли с cgroups, поскольку на самом деле, похоже, нет другого подхода, который позволил бы это сделать.
Cgroups позволяют ограничивать загрузку процессора через планировщик ядра, используя cpu.cfs_period_us
и cpu.cfs_quota_us
. Это позволяет избежать явной спецификации ядер ЦП.
Это могло бы быть слишком много служебным для Вас, но если я должен протестировать что-то на меньшем количестве ядер, чем моя машина имеет в наличии, я устанавливаю VirtualBox VM и указываю количество центральных процессоров в конфигурации.
Ну, поскольку привязка ЦП укусила, это обычно предназначается для решения другого набора проблем, которые принадлежат физическому ЦП, которые выполняют программу. Вот почему необходимо указать, о котором конкретном ЦП Вы говорите с привязкой ЦП.
От того, что Вы не заботитесь, который привыкает ЦП, я предполагаю, что Вы просто пытаетесь изменить интервалы времени. cgroups на самом деле выполняют то, что Вы желаете там и являетесь механизмом для корректировки процессорного времени независимо от выполнения ЦП.
Различие в определении в основном сводится к этому: или Вы заботитесь, как, какие физические ядра Ваш процесс работают или Вы не делаете. Если у Вас нет требований к производительности, которые требуют, чтобы процессы работали на конкретном ЦП (определенные кэши ЦП остаются теплыми, гарантируют, чтобы связанные процессы не выполнялись на внешних узлах NUMA, что особые прерывания обрабатываются определенным набором ЦП, и т.д.), затем все, что Вы, вероятно, просто пытаетесь управлять выделением процессорного времени. В этом случае это - ошибка думать с точки зрения "ядер процессора", когда то, что Вы действительно имеете в виду, является "Процессорным временем".
Какие части cgroups Вам нелегко интегрировать? Я могу обновить свой ответ, после того как я знаю, с какой определенной проблемой Вы сталкиваетесь.