dadv: (Default)
[personal profile] dadv

Выяснилось, что при использовании многоядерных маршрутизаторов под 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.

Date: 2012-02-25 00:29 (UTC)
From: [identity profile] click0.livejournal.com


# procstat -at | awk '/swi1: netisr/ {print $5, $6; system("cpuset -g -t " $2);}'
netisr 0
tid 100009 mask: 0, 1, 2, 3, 4, 5
# procstat -at | awk '/swi1: netisr/ {print $2}' | xargs -n 1 cpuset -l all -t
# procstat -at | awk '/swi1: netisr/ {print $5, $6; system("cpuset -g -t " $2);}'
netisr 0
tid 100009 mask: 0, 1, 2, 3, 4, 5

Date: 2012-02-25 06:03 (UTC)
From: [identity profile] dadv.livejournal.com
В loader.conf добавь net.isr.maxthreads=6

Profile

dadv: (Default)
Choose your future

July 2024

M T W T F S S
12 34567
891011121314
15161718192021
22232425262728
293031    

Tags

Style Credit

Powered by Dreamwidth Studios