Jump to content
Калькуляторы

Вопрос по настройке smp-affinity на CentOS 5.5

ОС - CentOS 5.5, ядро 2.6.34, проц. - 2 х Intel Xeon E5503 2.00GHz, сетевая - двухпортовая Intel на 82576, драйвер - от Intel 2.2.9.

На сетевых настроены по две очереди. Есть желание раскидать их по ядрам процессоров с помощью smp-affinity.

Собственно, как это сделать понятно, но есть пара вопросов:

1. нужно ли при этом отключать irqbalance? Не появится ли проблем по прерываниям у других устройств?

2. cat /proc/interrupts для eth выводит такую инфу

          CPU0       CPU1       CPU2       CPU3
70:          1          0          0          0   PCI-MSI-edge      eth2
71:     505259          0     508813          0   PCI-MSI-edge      eth2-TxRx-0
72:     445438          5     441560          0   PCI-MSI-edge      eth2-TxRx-1
73:          1          0          0          0   PCI-MSI-edge      eth3
74:     727340          0     711455          0   PCI-MSI-edge      eth3-TxRx-0
75:     646528          0     646928          5   PCI-MSI-edge      eth3-TxRx-1

т.о. получается, что каждая из сетевых карт юзает по 3 прерывания. Отсюда собственно вопрос - как распределить 6 прерываний между 4 ядрами?

 

P.S. Еще один вопрос не совсем по сабж - насколько я понял из readme драйвера, сетевые 82576 умеют MSI-X, но только в режиме одной очереди

IntMode
-------
Valid Range:    0-2
Default Value:  2
0 - Legacy Interrupts, single queue
1 - MSI interrupts, single queue
2 - MSI-X interrupts, single queue (default)

, т.е. при 2-х и более очередях MSI-X не поддерживается. Вопрос собственно такой - может есть смысл юзать MSI-X, вместо "многоочерёдности"?

 

Share this post


Link to post
Share on other sites

service irqbalance stop

RSS вместо VMDQ

MSI-X вместо MSI

Edited by stelsik

Share this post


Link to post
Share on other sites
service irqbalance stop
Ну это понятно.
RSS вместо VMDQ
Как бы так оно и есть. В modprobe.conf
options igb IntMode=2,2,2,2 RSS=2,2,2,2 InterruptThrottleRate=3000,3000,3000,3000 QueuePairs=1,1

MSI-X вместо MSI
А это как определить?

 

P.S. Может быть это в rc.local

/sbin/ethtool -K eth2 tso off tx off sg off
/sbin/ethtool -G eth2 rx 2048
/sbin/ethtool -G eth2 tx 2048
#
/sbin/ethtool -K eth3 tso off tx off sg off
/sbin/ethtool -G eth3 rx 2048
/sbin/ethtool -G eth3 tx 2048
#

переводит сетевые в этот "странный" режим?

 

 

Share this post


Link to post
Share on other sites

MSI-X прерывания должны поддерживаться материнкой, возможно есть выбор в биосе, посмотри dmesg на предмет выбора механизма прерываний для сетевух.

Share this post


Link to post
Share on other sites
2. cat /proc/interrupts для eth выводит такую инфу
          CPU0       CPU1       CPU2       CPU3
70:          1          0          0          0   PCI-MSI-edge      eth2
71:     505259          0     508813          0   PCI-MSI-edge      eth2-TxRx-0
72:     445438          5     441560          0   PCI-MSI-edge      eth2-TxRx-1
73:          1          0          0          0   PCI-MSI-edge      eth3
74:     727340          0     711455          0   PCI-MSI-edge      eth3-TxRx-0
75:     646528          0     646928          5   PCI-MSI-edge      eth3-TxRx-1

т.о. получается, что каждая из сетевых карт юзает по 3 прерывания. Отсюда собственно вопрос - как распределить 6 прерываний между 4 ядрами?

На количество вызовов не пробовали смотреть?

70 и 73 вызываются только до перехода в MSI-X.

Остальные 4 прекрасно раскладываются на 4 ядра.

Share this post


Link to post
Share on other sites

TxRx это VMDQ они немного не то что вам нужно, больше для виртуалок

options igb IntMode=2,2,2,2 RSS=2,2,2,2 InterruptThrottleRate=3000,3000,3000,3000 QueuePairs=1,1
У вас 4 сетевые карты а не 2, и лучше пары в 0 ставить

options igb IntMode=2,2,2,2 RSS=2,2,2,2 InterruptThrottleRate=3000,3000,3000,3000 QueuePairs=0,0,0,0

У дров под CentOS есть еще очень неприятная особенность, смотря как соберете или откуда возьмете

Скорость TCP сессии непонятно почему режется до 100кбит, не разбирался почему, проще было собрать igb

Получиться должно быть, примерно такое

130:          3          6          0          0          0          0          0          0       PCI-MSI-X  eth0
131:     330901          0 1021290396          0      70617          0          0          0       PCI-MSI-X  eth2-rx-3
138:     774246    2741506          0          0          0          0    2139532 1976379765       PCI-MSI-X  eth0-TxRx-0
139:     387601 1005720580          0     112112          0          0          0          0       PCI-MSI-X  eth2-rx-4
140:          1          0          0          0          0          0          0          0       PCI-MSI-X  eth5
146:     250279     456089    1166090     434912          0          0 2731124521          0       PCI-MSI-X  eth0-rx-1
147: 1003952848          0     106302          0          0          0          0          0       PCI-MSI-X  eth2-rx-5
148:    1427207          0 1753071539          0          0          0          0     884090       PCI-MSI-X  eth5-TxRx-0
154:     248233          0     458374    1148042     445996 2706861336          0          0       PCI-MSI-X  eth0-rx-2
155:     340427      77606          0          0          0          0          0  989280882       PCI-MSI-X  eth2-rx-6
156:     421623 1908224441          0          0          0          0     141982          0       PCI-MSI-X  eth5-rx-1
162:     249869          0          0     461667 2694544396     438318          0          0       PCI-MSI-X  eth0-rx-3
163:     408907          0          0          0          0          0 1003755349          0       PCI-MSI-X  eth2-rx-7
164: 1884949873          0          0          0          0     176345          0          0       PCI-MSI-X  eth5-rx-2
170:     246556          0          0 2733331243     458068    1126965     429233          0       PCI-MSI-X  eth0-rx-4
172:     504005          0          0          0     150672          0          0 1894188489       PCI-MSI-X  eth5-rx-3
178:     248885          0 2711796864          0          0     478788    1143013     428856       PCI-MSI-X  eth0-rx-5
179:          1          0          0          0          0          0          0          0       PCI-MSI-X  eth3
180:     546157          0          0     154875          0          0 1893736485          0       PCI-MSI-X  eth5-rx-4
186:     716416 2790238402          0          0          0          0     463488    1145473       PCI-MSI-X  eth0-rx-6
187:    1428067          0          0          0 1759836985          0          0     751958       PCI-MSI-X  eth3-TxRx-0
188:     499689          0     197166          0          0 1900212012          0          0       PCI-MSI-X  eth5-rx-5
194: 2711386871    1467628          0          0          0          0          0     418487       PCI-MSI-X  eth0-rx-7
195:     372123          0          0  987484072          0          0     102653          0       PCI-MSI-X  eth3-rx-1
196:     537564     189322          0          0 1896669015          0          0          0       PCI-MSI-X  eth5-rx-6
203:     398385          0 1003659107          0          0     117844          0          0       PCI-MSI-X  eth3-rx-2
204:     765693          0          0 1881102524          0          0          0          0       PCI-MSI-X  eth5-rx-7

Если нужен разброс и исходящих очередей, тогда за новым ядром

Edited by stelsik

Share this post


Link to post
Share on other sites
На количество вызовов не пробовали смотреть?

70 и 73 вызываются только до перехода в MSI-X.

Остальные 4 прекрасно раскладываются на 4 ядра.

Ну да, действительно, проглядел..

 

TxRx это VMDQ они немного не то что вам нужно, больше для виртуалок
Если это так, то чем конкретно(какой опцией) я умудрился включить VMDQ? В modprobe.conf нет у меня включения этого режима..

Не этим случайно?

/sbin/ethtool -G eth2 rx 2048
/sbin/ethtool -G eth2 tx 2048

options igb IntMode=2,2,2,2 RSS=2,2,2,2 InterruptThrottleRate=3000,3000,3000,3000 QueuePairs=1,1
У вас 4 сетевые карты а не 2,
Да, всего 4, но 2 из них (он-боард) отключены. Или в этом случае параметры для отключенных сетевых не нужно устанавливать?
и лучше пары в 0 ставить

options igb IntMode=2,2,2,2 RSS=2,2,2,2 InterruptThrottleRate=3000,3000,3000,3000 QueuePairs=0,0,0,0

Если возможно, вкратце, можете пояснить, в чем тут смысл?
У дров под CentOS есть еще очень неприятная особенность, смотря как соберете или откуда возьмете

Скорость TCP сессии непонятно почему режется до 100кбит, не разбирался почему, проще было собрать igb

Драйвера брал с сайта Intel.
Получиться должно быть, примерно такое

130:          3          6          0          0          0          0          0          0       PCI-MSI-X  eth0
131:     330901          0 1021290396          0      70617          0          0          0       PCI-MSI-X  eth2-rx-3
138:     774246    2741506          0          0          0          0    2139532 1976379765       PCI-MSI-X  eth0-TxRx-0
....

Ну как бы примерно такое (с MSI-X) и было изначально, до манипуляций с modprobe.conf и ethtool. Скорее всего последним я и отключил MSI-X.

Кстати, возможно как-то без ребута (машина уже в продакшен, часто не в кайф ребутать) изменять режимы сетевых?

Если нужен разброс и исходящих очередей, тогда за новым ядром
Куда уж новее! ;) И так уже 2.6.34 стоИт..

Да, и еще один вопрос - что подразумевается под "single queue" в IntMode-2? Только один тип очереди (несколько только rx, или несколько только tx), или вообще только одна очередь (одна rx, или одна tx)?

Edited by AlKov

Share this post


Link to post
Share on other sites

Там README есть вместе с igb, достаточно все подробно расписано

Share this post


Link to post
Share on other sites
Собственно, как это сделать понятно, но есть пара вопросов:
Уважаемый, мы вроде бы с Вам этоти вопросы уже обсуждали.

Чего же Вы все не угомонитесь? :)

1. нужно ли при этом отключать irqbalance? Не появится ли проблем по прерываниям у других устройств?
Нужно. Обычно с другими устройствами проблем нет. Прерывания от них обычно на первом процессоре кучкуются.

Их тоже можно развести руками.

Однако никто Вам не мешает попробовать оставить irqbalance включенным но сконфигурировать его так, что бы он не трогал прерывания с 70-го по 75-е.

2. cat /proc/interrupts для eth выводит такую инфу

          CPU0       CPU1       CPU2       CPU3
70:          1          0          0          0   PCI-MSI-edge      eth2
71:     505259          0     508813          0   PCI-MSI-edge      eth2-TxRx-0
72:     445438          5     441560          0   PCI-MSI-edge      eth2-TxRx-1
73:          1          0          0          0   PCI-MSI-edge      eth3
74:     727340          0     711455          0   PCI-MSI-edge      eth3-TxRx-0
75:     646528          0     646928          5   PCI-MSI-edge      eth3-TxRx-1

т.о. получается, что каждая из сетевых карт юзает по 3 прерывания. Отсюда собственно вопрос - как распределить 6 прерываний между 4 ядрами?

Нет - каждая использует два. 70 и 73 не тикают.

Вот и разнесите каждую пару TxRx на отдельное ядро.

P.S. Еще один вопрос не совсем по сабж - насколько я понял из readme драйвера, сетевые 82576 умеют MSI-X, но только в режиме одной очереди
IntMode
-------
Valid Range:    0-2
Default Value:  2
0 - Legacy Interrupts, single queue
1 - MSI interrupts, single queue
2 - MSI-X interrupts, single queue (default)

, т.е. при 2-х и более очередях MSI-X не поддерживается. Вопрос собственно такой - может есть смысл юзать MSI-X, вместо "многоочерёдности"?

Все поддерживается.

И вообще успокойтесь, у Вас MSI-X включилось нормально. Если бы не включилось, то хрен бы Вы очередей увидели.

 

Отвечая на нижеследующие вопросы:

 

1. Менять параметры igb на ходу практически нельзя. Несколько можно рулить interrupt moderation, и еще кое чем по немногу, но не более.

2. Параметр -G у ethtools регулирует размер кольцевого буфера сетевого интерфейса. Это никак VMQD включить не может. Да и вообще не включено оно у Вас - так что забейте Вы на него.

 

Вы лучше скажите что Вас сподвигло опять похожую тему создать? - Ведь работает оно у Вас, что не нравиться или в чем проблемы наблюдаете?

Share this post


Link to post
Share on other sites

Есть ли смысл таймер прибивать к определенному ядру?

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this