Как изменить привязку SMP IRQ к Ubuntu PV внутри Xen XCP?
Я хотел бы изменить привязку IRQ SMP по причинам, изложенным в этом вопросе: CPU0 завален прерываниями eth1
Но я не могу - я вижу Input/output error
когда я пытаюсь написать /proc/irq/*/smp_affinity
,
Пожалуйста, укажите мне HOWTO по этому вопросу. (Официальная ссылка на /proc/irq/*/
было бы круто.)
Гор детали:
Обратите внимание, что это виртуальная машина (PV domU) внутри хоста Xen XCP на основе Ubuntu.
$ uname -a Linux MYHOST 2.6.38-15-virtual # 59-Ubuntu SMP пт 27 апреля 16:40:18 UTC 2012 i686 i686 i386 GNU / Linux $ lsb_release -a Модули LSB не доступны. Идентификатор распространителя: Ubuntu Описание: Ubuntu 11.04 Релиз: 11.04 Кодовое название: natty $ sudo cat / proc / irq / * / smp_affinity 01 01 01 01 01 80 80 80 80 80 80 40 40 40 40 40 40 20 20 20 20 20 20 10 10 10 10 10 10 08 08 08 08 08 08 04 04 04 04 04 04 02 02 02 02 02 02 01 01 01 01 01 01
Обновить. Детали ошибки:
$ N = $ (процессор grep -c / proc / cpuinfo) $ echo $ N 8 $ printf% x $ ((2 ** N-1)) Ф.Ф. $ printf %x $((2**N-1)) | sudo tee /proc/irq/*/smp_affinity fftee: /proc/irq/288/smp_affinity: ошибка ввода / вывода tee: /proc/irq/289/smp_affinity: ошибка ввода / вывода tee: /proc/irq/290/smp_affinity: ошибка ввода / вывода tee: /proc/irq/291/smp_affinity: ошибка ввода / вывода tee: /proc/irq/292/smp_affinity: ошибка ввода / вывода tee: /proc/irq/293/smp_affinity: ошибка ввода / вывода tee: /proc/irq/294/smp_affinity: ошибка ввода / вывода tee: /proc/irq/295/smp_affinity: ошибка ввода / вывода tee: /proc/irq/296/smp_affinity: ошибка ввода / вывода tee: /proc/irq/297/smp_affinity: ошибка ввода / вывода tee: /proc/irq/298/smp_affinity: ошибка ввода / вывода tee: /proc/irq/299/smp_affinity: ошибка ввода / вывода tee: / proc / irq / 300 / smp_affinity: ошибка ввода / вывода tee: / proc / irq / 301 / smp_affinity: ошибка ввода / вывода tee: / proc / irq / 302 / smp_affinity: ошибка ввода / вывода tee: / proc / irq / 303 / smp_affinity: ошибка ввода / вывода tee: /proc/irq/304/smp_affinity: ошибка ввода / вывода tee: /proc/irq/305/smp_affinity: ошибка ввода / вывода tee: /proc/irq/306/smp_affinity: ошибка ввода / вывода tee: /proc/irq/307/smp_affinity: ошибка ввода / вывода tee: /proc/irq/308/smp_affinity: ошибка ввода / вывода tee: /proc/irq/309/smp_affinity: ошибка ввода / вывода tee: / proc / irq / 310 / smp_affinity: ошибка ввода / вывода tee: / proc / irq / 311 / smp_affinity: ошибка ввода / вывода tee: / proc / irq / 312 / smp_affinity: ошибка ввода / вывода tee: / proc / irq / 313 / smp_affinity: ошибка ввода / вывода tee: /proc/irq/314/smp_affinity: ошибка ввода / вывода tee: /proc/irq/315/smp_affinity: ошибка ввода / вывода tee: /proc/irq/316/smp_affinity: ошибка ввода / вывода tee: /proc/irq/317/smp_affinity: ошибка ввода / вывода tee: /proc/irq/318/smp_affinity: ошибка ввода / вывода tee: /proc/irq/319/smp_affinity: ошибка ввода / вывода tee: / proc / irq / 320 / smp_affinity: ошибка ввода / вывода tee: / proc / irq / 321 / smp_affinity: ошибка ввода / вывода tee: / proc / irq / 322 / smp_affinity: ошибка ввода / вывода tee: / proc / irq / 323 / smp_affinity: ошибка ввода / вывода tee: /proc/irq/324/smp_affinity: ошибка ввода / вывода tee: /proc/irq/325/smp_affinity: ошибка ввода / вывода tee: /proc/irq/326/smp_affinity: ошибка ввода / вывода tee: /proc/irq/327/smp_affinity: ошибка ввода / вывода tee: /proc/irq/328/smp_affinity: ошибка ввода / вывода tee: /proc/irq/329/smp_affinity: ошибка ввода / вывода tee: / proc / irq / 330 / smp_affinity: ошибка ввода / вывода tee: / proc / irq / 331 / smp_affinity: ошибка ввода / вывода tee: / proc / irq / 332 / smp_affinity: ошибка ввода / вывода tee: / proc / irq / 333 / smp_affinity: ошибка ввода / вывода tee: /proc/irq/334/smp_affinity: ошибка ввода / вывода tee: /proc/irq/335/smp_affinity: ошибка ввода / вывода
Обновить. irqbalance
бежит:
$ sudo service irqbalance status несбалансированный запуск / запуск, процесс 560
3 ответа
Я не думаю, что перемещение прерываний на разные процессоры - особенно для обработки сетевых событий - увеличит производительность.
Произойдет обратное, поскольку сетевой код больше не может храниться в определенном процессоре.
Поэтому, пока вы не испытываете пропущенные пакеты на сетевом интерфейсе, я бы сказал - это вполне нормальное поведение для сети, которая обслуживает много пакетов.
Вам нужно уменьшить количество прерываний - их перемещение не поможет (наоборот, как я пытался обрисовать).
Я вижу два возможных решения:
- Увеличьте размер MTU, чтобы уменьшить количество прерываний
- Подключите vCPU 0 DomU к выделенному ЦП на Dom0 (который не используется ни одной другой виртуальной машиной или Dom0).
Update 2012-12-17: Since you asked for authoritative links - I tried to ask a general question When not to use virtualisation - I think this is one of the cases, where you are hitting general VM limits. One of the answers to the question contains a different approach: Use containers, instead of virtualization.
Надеюсь, это поможет...
Существует файл с именем Documentation/IRQ-affinity.txt
в исходном коде Linux.
/proc/irq/IRQ#/smp_affinity specifies which target CPUs are permitted
for a given IRQ source. It's a bitmask of allowed CPUs. It's not allowed
to turn off all CPUs, and if an IRQ controller does not support IRQ
affinity then the value will not change from the default 0xffffffff.
Подвох в том, что битовая маска находится в шестнадцатеричном формате. Итак, если у вас N процессоров,
N=$(grep -c processor /proc/cpuinfo)
включить все IRQ для всех процессоров, где у вас есть N процессоров, которые вы можете
printf %x $((2**N-1)) | sudo tee /proc/irq/*/smp_affinity
Ядро 3.0 и позже имеет файл с именем smp_affinity_list
, Этот файл занимает разделенный запятыми список процессоров или диапазонов процессоров. Допустимые примеры: 0
, 2,3,5-7
, 0-7
, Предыдущая команда эквивалентна:
echo 0-$((N-1)) | sudo tee /proc/irq/*/smp_affinity_list
Но я хотел бы увидеть авторитетный ответ о том, почему не работает конфигурация сродства. Меня беспокоит, что все, кажется, считают, что это возможно, но я не могу этого сделать.
Только на этот конкретный вопрос - и я понятия не имею, влияет ли Ксен на этот ответ - вы получаете Input/output error
сообщение, когда в драйвере устройства в данный момент не установлен обработчик для этого прерывания.
Если драйвер устанавливает обработчик на "105", например, то каталог /proc/irq/105
создан и содержит smp_affinity
кроме всего прочего. Теперь вы можете написать smp_affinity
, Если вы закроете устройство, каталог останется с smp_affinity
, но вы больше не можете писать в него. Откройте устройство (через open
или как там в конечном итоге называет request_irq
в драйвере) и теперь можно писать в файл. Проверено только на RHEL/SL 6.
Если вы не знаете, открыто ли устройство в данный момент, проверьте каталог. Он будет содержать имя устройства, если оно открыто.