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

routing vs lro

Господа, требуется общественное мнение. Решил немного подебажить свой BGP, в данный момент он таскает приблизительно 1,2GBit/s симметрично на 5 1GBit портах, 4 из которых это Quad на чипе 82576 и один 80003ES2LAN набортный. 2 входящих с сетки и 3 исхода на разные пиры. Тот, что встроенный NIC - исход на слабо-нагруженный пир ~ 120-150 MBit/s. Решил к этой системе присобачить наблюдение за CPU (8 ядер = 2 ксеона E5450), так выяснил, что в моменты 1,2-1,3GBit/s система нагружена на 30%. Подумал и решил, что много. ;))) Вспоминалось, когда то тягал практически тоже на 4 ядернике беспородном с 45-50% загрузки. Систему собирал на RHEL6 и примечательно, беседовал при сборке с разработчиками Intel, которые сразу порекомендовали при роутинге отключать lro/gso...

 

===

Try using ethtool to turn off generic-receive-offload. It should be disabled in routing configurations as well.

===

 

Теперь у меня дико чешется попробовать включить gro и tso, что бы разгрузить систему. Собственно вопрос, кто нибудь юзает Linux 2.6.32 + igb + gro с роутингом?

 

p.s. Большую часть процессора поедают si, собственно они и фигурируют в загрузке системы. Используется MSI, все параллелится прекрасно. Через машину идет суммарно где-то 400 kpps в пике.

Share this post


Link to post
Share on other sites

при включенном GRO (собирательный термин) на i82576 включается RSS (Recieve-Side Scaling)

В деталях про него можно почитать здесь

Если вкратце: по IPSRC:PORT:IPDST:PORT в железе вычисляется хеш, и по нему пакет ставится в определенную очередь обработки софту. Это позволяет процессам на локалхосте принимать данные без routing-decision от ядра на каждый пакет.

Для цепочки FORWARD оно никак не помогает.

При этом есть минус (и собсно, почему его просят выключать) используется недостаточно сильная хэш-функция (привет, мелкософт!) и поэтому при большом пуле разнообразных входящих IPSRC:PORT:IPDST:PORT оно может пакет, предназначавшийся для форвардинга отправить локалхосту. Ну и так как IPPROTO не используется вообще, то (worst-case scenario) оно может попасть например в очередь отработки ICMP-пингов и из-за несоответствия полей вызвать kernel panic.

Share this post


Link to post
Share on other sites

при включенном GRO (собирательный термин) на i82576 включается RSS (Recieve-Side Scaling)

В деталях про него можно почитать здесь

Если вкратце: по IPSRC:PORT:IPDST:PORT в железе вычисляется хеш, и по нему пакет ставится в определенную очередь обработки софту. Это позволяет процессам на локалхосте принимать данные без routing-decision от ядра на каждый пакет.

Для цепочки FORWARD оно никак не помогает.

При этом есть минус (и собсно, почему его просят выключать) используется недостаточно сильная хэш-функция (привет, мелкософт!) и поэтому при большом пуле разнообразных входящих IPSRC:PORT:IPDST:PORT оно может пакет, предназначавшийся для форвардинга отправить локалхосту. Ну и так как IPPROTO не используется вообще, то (worst-case scenario) оно может попасть например в очередь отработки ICMP-пингов и из-за несоответствия полей вызвать kernel panic.

 

Спасибо за развернутый ответ. Обязательно сейчас поштудирую datasheet. А может быть подскажите, что бы придумать, что бы на машине, занимающейся роутингом уменьшить si? Имхо очень много потребляет. Какие методы оптимизации есть для 82576?

Share this post


Link to post
Share on other sites

ваши 1,2GBit/s это сколько в pps?

 

Приблизительно суммарно 350 kpps. На входных интерфейсах по 80 kpps (2 штуки), на одном выходном 100 kpps, на другом 50 kpps и на самом слабом 15 kpps. (везде речь идет о pps в одну сторону, то есть, например, на входном 80 kpps вход и 80 kpps на выход (траф симметричный))

Edited by tartila

Share this post


Link to post
Share on other sites

сильно зависит от платформы мать/проц/память, могу ошибаться, но на E5450 сейчас максимум что-то около 600 kpps выжимают

тут было несколько тем, можете поискать по "kpps"

 

если нужно больше - то смотрите лучше в сторону ASR1002 и MX80-48T

Share this post


Link to post
Share on other sites

Господа, требуется общественное мнение. Решил немного подебажить свой BGP, в данный момент он таскает приблизительно 1,2GBit/s симметрично на 5 1GBit портах, 4 из которых это Quad на чипе 82576 и один 80003ES2LAN набортный. 2 входящих с сетки и 3 исхода на разные пиры. Тот, что встроенный NIC - исход на слабо-нагруженный пир ~ 120-150 MBit/s. Решил к этой системе присобачить наблюдение за CPU (8 ядер = 2 ксеона E5450), так выяснил, что в моменты 1,2-1,3GBit/s система нагружена на 30%. Подумал и решил, что много. ;))) Вспоминалось, когда то тягал практически тоже на 4 ядернике беспородном с 45-50% загрузки. Систему собирал на RHEL6 и примечательно, беседовал при сборке с разработчиками Intel, которые сразу порекомендовали при роутинге отключать lro/gso...

 

===

Try using ethtool to turn off generic-receive-offload. It should be disabled in routing configurations as well.

===

 

Теперь у меня дико чешется попробовать включить gro и tso, что бы разгрузить систему. Собственно вопрос, кто нибудь юзает Linux 2.6.32 + igb + gro с роутингом?

 

p.s. Большую часть процессора поедают si, собственно они и фигурируют в загрузке системы. Используется MSI, все параллелится прекрасно. Через машину идет суммарно где-то 400 kpps в пике.

 

oprofile погоняйте, может в других местах затыки также присутствуют, в любом случае более наглядная картинка что отъело процессор.

400кппс для писюка уже норм, если вся таблица не нужна, то вполне можно попытаться найти сравнимое по стоимости с писюком бу решение для этих целей.

Edited by Art1x

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.