Я имею ввиду конфигурационную директиву для низкоуровнего управления -
сколько воркеров и на каких cpu должны исполняться.
Это было бы интересно. Вопрос - как это описать диреткивами.
Ну например "worker_cpu_affinity_masks" и далее перечисление через пробел
всех
affinity masks, по одной для каждого worker'а. Насколько я понимаю,
максимально просто для реализации и максимально гибко для пользователей.
Синтаксис подходящий. Маски, скорее всего, лучше задавать в бинарном виде
для нагладности:
worker_processes 2;
worker_cpu_affinity 0101 1010;
Первый воркер привязан к 0 и 2, второй - к 1 и 3.
При несовпадении количества процессов и масок выдавать предупреждение
и использовать 11111111...1111 для оставшихся процессов.
А если прописать
worker_processes 17;
worker_cpu_affinity 1000;
То все 17 должны быть на 0 проце.
Появились разночтения. Во-первых, нужно решить, как задавать маску -
как little endian, или как big endian. Во-вторых, нужно решить, что
делать при несовпадении числа процессов и масок. Вариант повторять
маску для оставшихся процессов выглядит логичнее, чем моё первое
предложение, так как
worker_processes 5; worker_cpu_affinity 10;
выглядит логичной заменой
worker_processes 5; worker_cpu_affinity 10 10 10 10 10;
А
worker_processes 5; worker_cpu_affinity 01 10 11 11 11;
получающаяся при первом варианте из
worker_processes 5; worker_cpu_affinity 01 10;
выглядит просто ошибкой конфигурации.
Игорь Сысоев
http://sysoev.ru