Перейти к содержимому
Калькуляторы

Linux NAT оптимизация для 10G+ трафика

Верно?

IPTABLES -t nat -A POSTROUTING -o $OUT_IFACE2 -s 172.30.0.0/17 -j SNAT --to-source 93.157.x.1-93.157.x.126 --persistent

 

Да. У старых ядер можно сказать:

 

IPTABLES -t nat -A POSTROUTING -o $OUT_IFACE2 -s 172.30.0.0/17 -j SAME --to-source 93.157.x.1-93.157.x.126

 

Можно еще разбить если большой список на деревья и использовать цепочки, тогда пакет будет проходить минимальное количество веток и уходить куда надо.

 

Тут кто-то писал, что это дает сомнительный прирост, зато усложняет диагностику.

Изменено пользователем Dark_Angel

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

-j SNAT --persistent работает только для случая, когда внешние адреса идут один одним блоком. А есть ли возможностьнечто подобное сделать, к примеру, для двух внешних адресов, находящихся в разных /24 ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

У таргета SAME есть ключ --nodst, который будет строить хеш только по сорцу. Это правда получится, как статическая адресация, т.к. человеку по хешу отдадут из пула реальник и он будет с ним сидеть до непонятно когда.

 

Может кто-то попался в сорцах и знает когда происходит рехеш и происходит ли вообще? Ну или в составе хеша есть, например время?

Изменено пользователем Dark_Angel

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Рехеша по времени нет, да и не нужен он

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Тогда получается, что это та же статическая адресация, только без гемороя с правилами. Не круто же.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Вечер добрый!

Хотел тут провести эксперимент по производительности с фиксированной частотой прерываний, уменьшением tx очереди, убиранием intel_idle и последним драйвером ixgbe, но наткнулся на неприятность - драйвер с сайта интела не собирается на последнем ядре centos. соответственно пришлось взлетать на штатном драйвере centos 6.6 (ядро 2.6.32-504.1.3.el6.x86_64, драйвер 3.19.1-k), у которого нет параметра InterruptThrottleRate, то есть количество прерываний всегда динамическое. В итоге менее, чем за сутки:

    fdir_miss: 26236232961
    tx_restart_queue: 3378084
    rx_csum_offload_errors: 24315
    rx_no_dma_resources: 1733158

В пике нагрузка выше - при 7.8 гбит/с - 62% (было <=60% при 8гбит/с), на несколько порядков увеличился показатель context switch (раньше был около 200, сейчас в среднем 10k).

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

Если не получится - придется откатываться назад, либо уходить на 3.10 из elrepo. Скорее всего последнее, хочу посмотреть, как будет работать при отсутствии route cache, раз уж машинка невольно превратилась в тестовый стенд.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ну здесь сюрприза нет: стоковый centos стабилен и стар. Но стабилен. Но стар. За то и любим.

 

Даже не смотря на бэкпорты. Поэтому можно не стеснятся и грейдить ядро с драйвером ( это вообще обязательно ). И лучше самосборное ( если знаете как оптимизировать ). А то прилетит вам апдейт из репозитория и всё поломается.

Изменено пользователем Dark_Angel

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

И вот случилась странность.

Обновил ядро до 3.10.61 из elrepo, собрал под ним ixgbe 3.22.3, зафиксировал ITR на 32000 прерываний на порт (8000 на очередь), поставил intel_idle.max_cstate=0, processor.max_cstate=1. Route cache отсутствует, проверено. Результат - 6.75 гбит/с, нагрузка 57,5%. сравнил с предыдущими показателями (нашел максимально приближенный 6,65 гбит/с при 50,5% нагрузки) и расстроился. и всё так же растут ошибки:

tx_restart_queue: 8103
rx_csum_offload_errors: 34163
rx_no_dma_resources: 1369835

Заметил, что context switches стоит на уровне 2000 в секунду (тогда как раньше было ~130) и очень сильно растет Rescheduling interrupts.

И в top очень интересно распределяется процессорное время:

  13 root      20   0     0    0    0 S  0.0  0.0   2:20.96 rcu_sched                                                                                 
  14 root      20   0     0    0    0 S  0.0  0.0   1:49.89 rcuos/0                                                                                   
  17 root      20   0     0    0    0 S  0.0  0.0   1:49.68 rcuos/3        
  16 root      20   0     0    0    0 S  0.0  0.0   1:49.63 rcuos/2                                                                                   
  15 root      20   0     0    0    0 S  0.0  0.0   1:49.62 rcuos/1                                                                                   
  31 root      20   0     0    0    0 S  0.0  0.0   0:55.31 ksoftirqd/3
   3 root      20   0     0    0    0 R  0.0  0.0   0:54.14 ksoftirqd/0
  21 root      20   0     0    0    0 S  0.0  0.0   0:53.96 ksoftirqd/1
  26 root      20   0     0    0    0 S  0.0  0.0   0:51.77 ksoftirqd/2

Я вот не совсем уверен, что Read-Copy-Update нужен мне в системе, где точно не будет cpu hotplug, mem hotplug. Прав ли я и подскажите, как это убрать, желательно без пересборки ядра, а установкой параметров sysctl и загрузки. Или всё же придется вернуться на 2.6.32.431 и ждать новую версию ixgbe, которая будет собираться под 504м ядром для центоса

Изменено пользователем junjunk2

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Указанные ошибки драйвера не являются драйверо или ядро зависимыми же. Поэтому от апдейта ядра и драйвера не уйдут. Если конечно драйвер не багованый. В вашем случае не похоже.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Я вот не совсем уверен, что Read-Copy-Update нужен мне в системе, где точно не будет cpu hotplug, mem hotplug. Прав ли я и подскажите, как это убрать, желательно без пересборки ядра, а установкой параметров sysctl и загрузки. Или всё же придется вернуться на 2.6.32.431 и ждать новую версию ixgbe, которая будет собираться под 504м ядром для центоса

 

read-copy-update вообще-то не имеет специфического отношения к hotplug. Скорее к SMP.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Dark_Angel

новую версию ждать, чтобы быть в треде centos с новыми ядрами. а вот по поводу ошибок - вопрос откуда они остался открытым. предположения, что из-за плавающего ITR и работающего intel_idle, не подтвердились. уменьшение ring для tx тоже не помогло. Осталось только поиграть с lowmem_reserve_ratio, чем и займусь в ближайшие 2 дня, но это возможно решит проблему с rx_no_dma_resources, а что тогда делать с tx_restart_queue?

nuclearcat

Если я правильно понял из описания, то процессы rcu_shed и rcuos/x вынесены были из ksoftirq для уменьшения latency ядра. Однако в тестах видно, что нагрузка реально увеличивается за счет бОльшего количества переключений контекста (ну возможно и еще из-за чего-то). Происходит это видимо из-за того, что процесс rcu_shed не прибит к ядру (если я правильно понимаю, то rcuos/x как раз выполняются каждый на своём ядре). Можно ли как-то заставить rcu_shed работать на одном ядре? И вообще, имеет ли смысл это вынесение в отдельные процессы, если нагрузка в итоге увеличивается?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Наверное можно, taskset.

А вообще, centos IMHO немного не та система, на которой можно выжимать все возможности из железа.

Стабильная, универсальная, но не быстрая и не свежая.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Или всё же придется вернуться на 2.6.32.431 и ждать новую версию ixgbe, которая будет собираться под 504м ядром для центоса

Зачем вам именно 3.22.3? Ставьте 3.21.2 да и всё. Всяко новее центосовского 3.19.1. Новой версии можно ждать пол года.

Изменено пользователем aabc

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

nuclearcat

прибивание rcu_shed к одному ядру не дало особого эффекта. прибивание rcuos/x к ядрам только ухудшило ситуацию. Вероятно, причина не в этом, или не только в этом.

А вообще, centos IMHO немного не та система, на которой можно выжимать все возможности из железа.

А какие варианты? Gentoo и полная самостоятельная сборка всего и вся?

aabc

я попробовал все версии до 3.17.3 - ни одна не собирается под 504м ядром центоса.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

прибивание rcu_shed к одному ядру не дало особого эффекта. прибивание rcuos/x к ядрам только ухудшило ситуацию. Вероятно, причина не в этом, или не только в этом.

потому что это не про то.

 

А какие варианты? Gentoo и полная самостоятельная сборка всего и вся?

aabc

я попробовал все версии до 3.17.3 - ни одна не собирается под 504м ядром центоса.

я бы попробовал взять ядро >=3.15, из-за этого

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

junjunk2, а много ли собирать? Имхо лучше Gentoo нет ничего на роутерах/натах

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

я бы попробовал взять ядро >=3.15, из-за этого

Ух как интересно. У меня была сначала мысль поставить 3.17 main line, но я потом отверг ее. Сейчас склонен к тому, чтобы по крайней мере попробовать. Если сейчас на тестовой железке всё взлетит, ночью переставлю и попробую.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

aabc

я попробовал все версии до 3.17.3 - ни одна не собирается под 504м ядром центоса.

 

Действительно. Просто у меня на 2.6.32-358.18.1.el6.x86_64 собралось. Можно откатить ядро до 2.6.32-358.18.1.el6.x86_64 тогда, ради драйвера.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

aabc

спасибо за помощь, ночью подправлю rx_ring и посмотрю, как будет работать. Соответственно установку ядра 3.17 придется отложить, хотя и не надолго.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

я бы попробовал взять ядро >=3.15, из-за этого

Ух как интересно. У меня была сначала мысль поставить 3.17 main line, но я потом отверг ее. Сейчас склонен к тому, чтобы по крайней мере попробовать. Если сейчас на тестовой железке всё взлетит, ночью переставлю и попробую.

вообще, я в netdev вижу в последнее время много интересных фиксов.

 

Drop performance in "raw": 11.3Mpps

Drop performance in "raw" with ipset: 8Mpps

 

With RCU locking, the RW-lock is gone.

Drop performance in "raw" with ipset with RCU-locking: 11.3Mpps

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

После легких танцев с бубном вокруг драйвера ixgbe, получилось-таки его собрать под ядро 3.17.4. Соответственно сегодня буду смотреть, как ведет себя машинка с увеличенной до 4096 очередью, а ночью взлетит новое ядро с новым модулем и завтра уже будем смотреть, насколько интересно стало с новым nf_conntrack.

Вообще, появилась дикая идея сделать back-port nf_conntrack в ядро 2.6.х, т.к. пока что видно, что оно показывает более высокую производительность в конкретно этой задаче NAT.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Имхо лучше Gentoo нет ничего на роутерах/натах

На роутерах/натах лучше вообще специализированные дистры, работающие в памяти и грузящиеся с мелкого DOM/USB flash. Мы LEAF юзаем/пилим под себя к примеру...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Имхо лучше Gentoo нет ничего на роутерах/натах

На роутерах/натах лучше вообще специализированные дистры, работающие в памяти и грузящиеся с мелкого DOM/USB flash. Мы LEAF юзаем/пилим под себя к примеру...

То есть для роутера/ната лучше старая 486тушка, а не современный 8ядерный комп с 10G интеловыми карточками?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

NiTr0, сейчас цена ssd пренебрежительно мала, не вижу никакого смысла экономить на этом.

Никто не говорит что собирать на каждой копии, сделать образ для каждой железки, и копировать за несколько минут.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Имхо лучше Gentoo нет ничего на роутерах/натах

На роутерах/натах лучше вообще специализированные дистры, работающие в памяти и грузящиеся с мелкого DOM/USB flash. Мы LEAF юзаем/пилим под себя к примеру...

Хотя не спорю, если есть время и люди, которые способны напилить туда драйверов (из описания я так понял, для интелловских карточек есть только e1000e и igb более-менее свежие), то возможно и будет прирост... Но имхо - это еще гемморойнее, нежели Gentoo. И опять же боязно в продакшн ставить такой сборник...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Join the conversation

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

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.