dadv: (Default)
Choose your future ([personal profile] dadv) wrote2012-02-24 06:50 pm

Bindthreads

Выяснилось, что при использовании многоядерных маршрутизаторов под FreeBSD 8 и новее и при использовании loader tunnable net.isr.bindthreads=0 потоки NETISR в некоторых случаях таки могут оказаться привязанными к определенным ядрам CPU из-за ошибки в ядре.

Проверить привязку можно командой:

procstat -at | awk '/swi1: netisr/ {print $5, $6; system("cpuset -g -t " $2);}'

Она должна вывести что-то вроде этого:

netisr 0
tid 100012 mask: 0, 1, 2, 3
netisr 3
tid 100111 mask: 0, 1, 2, 3
netisr 2
tid 100112 mask: 0, 1, 2, 3
netisr 1
tid 100113 mask: 0, 1, 2, 3

То есть, в каждой маске должны быть перечислены все процессорные ядра. В некоторых случаях они там будут не все и тогда будут проблемы с неравномерной загрузкой ядер работой. Исправить проблему с NETISR без перезагрузки можно командой:

procstat -at | awk '/swi1: netisr/ {print $2}' | xargs -n 1 cpuset -l all -t

Тут есть патч к ядру, исправляющий работу net.isr.bindthreads=0. В CURRENT также было внесено исправление для общей проблемы, оно тоже ложится на FreeBSD 8.


Post a comment in response:

This account has disabled anonymous posting.
(will be screened if not validated)
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

If you are unable to use this captcha for any reason, please contact us by email at support@dreamwidth.org