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

FreBSD 9.1 и высокая загрузка шейпера Неправильно режет скорость

Я конечно в ваших BSD ни в зуб ногой, но что мешает сделать для каждой сетевки 6 прерываний вместо 8 и раскидать ровно на 12 ядер без использования ISR?

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


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

как-то решилось?

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


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

Пока пытаемся обновиться.

Но на удаленной техплощадке, где этот сервер стоит, сначала нужно заменить неисправный КВМ =)

Мало ли что ....

Обновлюсь - отпишусь.

 

Я конечно в ваших BSD ни в зуб ногой, но что мешает сделать для каждой сетевки 6 прерываний вместо 8 и раскидать ровно на 12 ядер без использования ISR?

Мысль интересная. Но как-то я сходу не нагуглил такой вариант. Сисцтл для этого нет, а ковырять исходники я не силен.

п.с. Как я понимаю, карточка аппаратно поддерживает 8 очередей. Не факт, что ими вообще можно софтово управлять.

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


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

А можно ещё увидеть вывод sysctl dev.ix?

 

Кстати, как у вас сконфигурировано ng_netflow и насколько уменьшается нагрузка при его отключении?

 

 

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


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

А можно ещё увидеть вывод sysctl dev.ix?

 

Кстати, как у вас сконфигурировано ng_netflow и насколько уменьшается нагрузка при его отключении?

 

sysctl dev.ix.0

 

dev.ix.0.%desc: Intel(R) PRO/10GbE PCI-Express Network Driver, Version - 2.5.8
dev.ix.0.%driver: ix
dev.ix.0.%location: slot=0 function=0 handle=\_SB_.PCI0.MRP3.S6F0
dev.ix.0.%pnpinfo: vendor=0x8086 device=0x10fb subvendor=0x8086 subdevice=0x0003 class=0x020000
dev.ix.0.%parent: pci2
dev.ix.0.fc: 3
dev.ix.0.enable_aim: 1
dev.ix.0.advertise_speed: 0
dev.ix.0.dropped: 0
dev.ix.0.mbuf_defrag_failed: 0
dev.ix.0.watchdog_events: 0
dev.ix.0.link_irq: 1
dev.ix.0.queue0.interrupt_rate: 100000
dev.ix.0.queue0.irqs: 3245575849
dev.ix.0.queue0.txd_head: 1794
dev.ix.0.queue0.txd_tail: 1794
dev.ix.0.queue0.tso_tx: 5204
dev.ix.0.queue0.no_tx_dma_setup: 0
dev.ix.0.queue0.no_desc_avail: 0
dev.ix.0.queue0.tx_packets: 7707630967
dev.ix.0.queue0.rxd_head: 1547
dev.ix.0.queue0.rxd_tail: 1545
dev.ix.0.queue0.rx_packets: 5696730634
dev.ix.0.queue0.rx_bytes: 4127435434372
dev.ix.0.queue0.rx_copies: 2680896063
dev.ix.0.queue0.lro_queued: 0
dev.ix.0.queue0.lro_flushed: 0
dev.ix.0.queue1.interrupt_rate: 5208
dev.ix.0.queue1.irqs: 3367867347
dev.ix.0.queue1.txd_head: 1495
dev.ix.0.queue1.txd_tail: 1495
dev.ix.0.queue1.tso_tx: 5588
dev.ix.0.queue1.no_tx_dma_setup: 0
dev.ix.0.queue1.no_desc_avail: 0
dev.ix.0.queue1.tx_packets: 7541182101
dev.ix.0.queue1.rxd_head: 759
dev.ix.0.queue1.rxd_tail: 758
dev.ix.0.queue1.rx_packets: 5444797175
dev.ix.0.queue1.rx_bytes: 3893644046552
dev.ix.0.queue1.rx_copies: 2664685587
dev.ix.0.queue1.lro_queued: 0
dev.ix.0.queue1.lro_flushed: 0
dev.ix.0.queue2.interrupt_rate: 100000
dev.ix.0.queue2.irqs: 3389500225
dev.ix.0.queue2.txd_head: 736
dev.ix.0.queue2.txd_tail: 736
dev.ix.0.queue2.tso_tx: 14591
dev.ix.0.queue2.no_tx_dma_setup: 0
dev.ix.0.queue2.no_desc_avail: 0
dev.ix.0.queue2.tx_packets: 7503924748
dev.ix.0.queue2.rxd_head: 348
dev.ix.0.queue2.rxd_tail: 347
dev.ix.0.queue2.rx_packets: 5476968796
dev.ix.0.queue2.rx_bytes: 3952874647231
dev.ix.0.queue2.rx_copies: 2662678150
dev.ix.0.queue2.lro_queued: 0
dev.ix.0.queue2.lro_flushed: 0
dev.ix.0.queue3.interrupt_rate: 500000
dev.ix.0.queue3.irqs: 3362606591
dev.ix.0.queue3.txd_head: 1608
dev.ix.0.queue3.txd_tail: 1608
dev.ix.0.queue3.tso_tx: 12774
dev.ix.0.queue3.no_tx_dma_setup: 0
dev.ix.0.queue3.no_desc_avail: 0
dev.ix.0.queue3.tx_packets: 7662980925
dev.ix.0.queue3.rxd_head: 931
dev.ix.0.queue3.rxd_tail: 930
dev.ix.0.queue3.rx_packets: 5502938019
dev.ix.0.queue3.rx_bytes: 3970629310960
dev.ix.0.queue3.rx_copies: 2672336031
dev.ix.0.queue3.lro_queued: 0
dev.ix.0.queue3.lro_flushed: 0
dev.ix.0.queue4.interrupt_rate: 500000
dev.ix.0.queue4.irqs: 3178439775
dev.ix.0.queue4.txd_head: 325
dev.ix.0.queue4.txd_tail: 325
dev.ix.0.queue4.tso_tx: 5596
dev.ix.0.queue4.no_tx_dma_setup: 0
dev.ix.0.queue4.no_desc_avail: 0
dev.ix.0.queue4.tx_packets: 7620903255
dev.ix.0.queue4.rxd_head: 556
dev.ix.0.queue4.rxd_tail: 546
dev.ix.0.queue4.rx_packets: 5504311846
dev.ix.0.queue4.rx_bytes: 4027712353260
dev.ix.0.queue4.rx_copies: 2637919266
dev.ix.0.queue4.lro_queued: 0
dev.ix.0.queue4.lro_flushed: 0
dev.ix.0.queue5.interrupt_rate: 5208
dev.ix.0.queue5.irqs: 3197680352
dev.ix.0.queue5.txd_head: 1919
dev.ix.0.queue5.txd_tail: 1919
dev.ix.0.queue5.tso_tx: 5832
dev.ix.0.queue5.no_tx_dma_setup: 0
dev.ix.0.queue5.no_desc_avail: 0
dev.ix.0.queue5.tx_packets: 7567804454
dev.ix.0.queue5.rxd_head: 361
dev.ix.0.queue5.rxd_tail: 358
dev.ix.0.queue5.rx_packets: 5581191527
dev.ix.0.queue5.rx_bytes: 4022730551660
dev.ix.0.queue5.rx_copies: 2718453052
dev.ix.0.queue5.lro_queued: 0
dev.ix.0.queue5.lro_flushed: 0
dev.ix.0.queue6.interrupt_rate: 5208
dev.ix.0.queue6.irqs: 3162748067
dev.ix.0.queue6.txd_head: 13
dev.ix.0.queue6.txd_tail: 13
dev.ix.0.queue6.tso_tx: 5182
dev.ix.0.queue6.no_tx_dma_setup: 0
dev.ix.0.queue6.no_desc_avail: 0
dev.ix.0.queue6.tx_packets: 7593992964
dev.ix.0.queue6.rxd_head: 1162
dev.ix.0.queue6.rxd_tail: 1159
dev.ix.0.queue6.rx_packets: 5496908936
dev.ix.0.queue6.rx_bytes: 4014153334680
dev.ix.0.queue6.rx_copies: 2633706860
dev.ix.0.queue6.lro_queued: 0
dev.ix.0.queue6.lro_flushed: 0
dev.ix.0.queue7.interrupt_rate: 22727
dev.ix.0.queue7.irqs: 3204423971
dev.ix.0.queue7.txd_head: 124
dev.ix.0.queue7.txd_tail: 124
dev.ix.0.queue7.tso_tx: 5120
dev.ix.0.queue7.no_tx_dma_setup: 0
dev.ix.0.queue7.no_desc_avail: 0
dev.ix.0.queue7.tx_packets: 7530475406
dev.ix.0.queue7.rxd_head: 738
dev.ix.0.queue7.rxd_tail: 734
dev.ix.0.queue7.rx_packets: 5515039455
dev.ix.0.queue7.rx_bytes: 3967441526997
dev.ix.0.queue7.rx_copies: 2685858950
dev.ix.0.queue7.lro_queued: 0
dev.ix.0.queue7.lro_flushed: 0
dev.ix.0.mac_stats.crc_errs: 0
dev.ix.0.mac_stats.ill_errs: 0
dev.ix.0.mac_stats.byte_errs: 0
dev.ix.0.mac_stats.short_discards: 0
dev.ix.0.mac_stats.local_faults: 15
dev.ix.0.mac_stats.remote_faults: 3
dev.ix.0.mac_stats.rec_len_errs: 0
dev.ix.0.mac_stats.xon_txd: 110
dev.ix.0.mac_stats.xon_recvd: 0
dev.ix.0.mac_stats.xoff_txd: 805
dev.ix.0.mac_stats.xoff_recvd: 0
dev.ix.0.mac_stats.total_octets_rcvd: 32330309465173
dev.ix.0.mac_stats.good_octets_rcvd: 32330309465173
dev.ix.0.mac_stats.total_pkts_rcvd: 44218806776
dev.ix.0.mac_stats.good_pkts_rcvd: 44218806775
dev.ix.0.mac_stats.mcast_pkts_rcvd: 0
dev.ix.0.mac_stats.bcast_pkts_rcvd: 0
dev.ix.0.mac_stats.rx_frames_64: 1836
dev.ix.0.mac_stats.rx_frames_65_127: 20215703412
dev.ix.0.mac_stats.rx_frames_128_255: 1589360895
dev.ix.0.mac_stats.rx_frames_256_511: 1100592840
dev.ix.0.mac_stats.rx_frames_512_1023: 1223976916
dev.ix.0.mac_stats.rx_frames_1024_1522: 20089170876
dev.ix.0.mac_stats.recv_undersized: 0
dev.ix.0.mac_stats.recv_fragmented: 0
dev.ix.0.mac_stats.recv_oversized: 0
dev.ix.0.mac_stats.recv_jabberd: 0
dev.ix.0.mac_stats.management_pkts_rcvd: 0
dev.ix.0.mac_stats.management_pkts_drpd: 0
dev.ix.0.mac_stats.checksum_errs: 1172306718
dev.ix.0.mac_stats.good_octets_txd: 53236660365318
dev.ix.0.mac_stats.total_pkts_txd: 60728940824
dev.ix.0.mac_stats.good_pkts_txd: 60728939908
dev.ix.0.mac_stats.bcast_pkts_txd: 340
dev.ix.0.mac_stats.mcast_pkts_txd: 0
dev.ix.0.mac_stats.management_pkts_txd: 0
dev.ix.0.mac_stats.tx_frames_64: 5480184771
dev.ix.0.mac_stats.tx_frames_65_127: 17282214723
dev.ix.0.mac_stats.tx_frames_128_255: 2403335115
dev.ix.0.mac_stats.tx_frames_256_511: 1161488854
dev.ix.0.mac_stats.tx_frames_512_1023: 1129424821
dev.ix.0.mac_stats.tx_frames_1024_1522: 33272291625

 

 

NetFlow настроен так:

mkpeer ipfw: netflow 100 iface0
name ipfw:100 netflow
msg netflow: setdlt { iface = 0 dlt = 12 }
msg netflow: settimeouts { inactive=20 active=20 }
mkpeer netflow: ksocket export inet/dgram/udp
msg netflow:export connect inet/х.х.х.х:уууу

и tee в фаерволе.

 

По нагрузке: на сейчас ЛА=6.3, выключаю - ЛА=4.8, включаю обратно - минуты через 3 опять 6.2

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


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

Нда, лёгкого способа подсказать не обнаружилось. Трафик у вас раскидывается по потокам прям удивительно хорошо, ошибки checksum чуть менее 2% от трафика...

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


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

Да я говорю надо профилировать :D

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


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

Ну в общем-то, да. Тем более всяких DTrace'ов понатянули во FreeBSD, должно стать легче.

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


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

Вот еще вдогонку патчик для нетфлов для настройки размера кэша на лету.

Появляется еще одна переменная в сисцтл netflow_cachesize.

netflow.c.diff.txt

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


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

Вот еще вдогонку патчик для нетфлов для настройки размера кэша на лету.

Появляется еще одна переменная в сисцтл netflow_cachesize.

 

Коротенько как-то.

А NBUCKETS поправить не надо было? :)

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


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

Вот еще вдогонку патчик для нетфлов для настройки размера кэша на лету.

Появляется еще одна переменная в сисцтл netflow_cachesize.

 

Коротенько как-то.

А NBUCKETS поправить не надо было? :)

Может и надо было =)

Раз начали, так уже и пишите, на что там поправить надо )

Я же в этих ваших исходниках не разбираюсь.

 

п.с. Теоретически, NBUCKETS=CACHESIZE/4, не ?

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


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

Может и надо было =)

Раз начали, так уже и пишите, на что там поправить надо )

Я же в этих ваших исходниках не разбираюсь.

 

п.с. Теоретически, NBUCKETS=CACHESIZE/4, не ?

 

Я про то, что там NBUCKETS используется при расчетах хэшей и остального. Вы кэш увеличили, а толку если NBUCKETS не меняли?

Я вообще советовал бы вернуть все как было. Зачем расширяли кэш?

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


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

Затем, что было очень много ошибок в NetFlow IPv4 cache.

Увеличили кеш - ошибки пропали.

п.с. Из-за кучи ошибок были какие-то проблемы в работе. Уже не упомню, что именно.

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


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

Хз, лезть внутрь модуля от этого, даже не знаю, на правильно это...

Там же есть свои расчеты, свои пропорции всего.

 

Можно наверное было бы две ноды сделать. Или три.

Или тайминги подкрутить, на худой конец...

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


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

Хз, лезть внутрь модуля от этого, даже не знаю, на правильно это... Там же есть свои расчеты, свои пропорции всего.

Священный код?

На самом деле многое написано чтобы работало и проблем не создавало. Часто писали под малые нагрузки. А дефолтные лимиты в системе вообще из расчёта на слабое железо, а тут именно дефолтный лимит.

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


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

Я конечно в ваших BSD ни в зуб ногой, но что мешает сделать для каждой сетевки 6 прерываний вместо 8 и раскидать ровно на 12 ядер без использования ISR?

Мысль интересная. Но как-то я сходу не нагуглил такой вариант. Сисцтл для этого нет, а ковырять исходники я не силен.

п.с. Как я понимаю, карточка аппаратно поддерживает 8 очередей. Не факт, что ими вообще можно софтово управлять.

А что за сетевые? Обычно количеством очередей можно управлять параметрами модуля, для igb например. По умолчанию драйвер создает или число очередей равное числу ядер, или если ядер больше чем аппаратно очередей как у вас - максимально возможное количество(8 на интерфейс, они рулятся независимо).

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


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

А что за сетевые? Обычно количеством очередей можно управлять параметрами модуля, для igb например. По умолчанию драйвер создает или число очередей равное числу ядер, или если ядер больше чем аппаратно очередей как у вас - максимально возможное количество(8 на интерфейс, они рулятся независимо).

 

Карта 10G Intel какая-то.

pnpinfo: vendor=0x8086 device=0x10fb subvendor=0x8086 subdevice=0x0003 class=0x020000

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


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

Elisium

Значит драйвер ixgbe(или как оно там у вас) и очереди рулятся стандартно.

В линуксах modprobe ixgbe rss=6,6 для bsd вероятно где-то так же.

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


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

Конечно есть:

 

hw.ixgbe.num_queues=4
hw.ixgbe.rx_process_limit=4096
hw.ixgbe.rxd=4096
hw.ixgbe.txd=4096

 

Примерно так у меня в лоадере. Далее раскидываете очереди как вам надо по ядрам.

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


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

Конечно есть:

 

hw.ixgbe.num_queues=4
hw.ixgbe.rx_process_limit=4096
hw.ixgbe.rxd=4096
hw.ixgbe.txd=4096

 

Примерно так у меня в лоадере. Далее раскидываете очереди как вам надо по ядрам.

о_О

 

Посмотрел в sysctl hw - тут такого нет. Разные em\igb\bxe есть. А ixgbe - нет.

 

Апдейт:

а тут есть ... как так.

[root@router /usr/src/sys/dev/ixgbe]# grep TUNABLE_INT ./*
./ixgbe.c:TUNABLE_INT("hw.ixgbe.enable_aim", &ixgbe_enable_aim);
./ixgbe.c:TUNABLE_INT("hw.ixgbe.max_interrupt_rate", &ixgbe_max_interrupt_rate);
./ixgbe.c:TUNABLE_INT("hw.ixgbe.rx_process_limit", &ixgbe_rx_process_limit);
./ixgbe.c:TUNABLE_INT("hw.ixgbe.tx_process_limit", &ixgbe_tx_process_limit);
./ixgbe.c:TUNABLE_INT("hw.ixgbe.enable_msix", &ixgbe_enable_msix);
./ixgbe.c:TUNABLE_INT("hw.ixgbe.num_queues", &ixgbe_num_queues);
./ixgbe.c:TUNABLE_INT("hw.ixgbe.txd", &ixgbe_txd);
./ixgbe.c:TUNABLE_INT("hw.ixgbe.rxd", &ixgbe_rxd);

 

Апдейт2:

Погуглил. Пишут, что параметры таки есть, но через сисцтл недоступны.

Вот тут в рассылке про это

 

Апдейт3:

Все выставил. Ночью ребутну - проверю.

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

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


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

Священный код?

На самом деле многое написано чтобы работало и проблем не создавало. Часто писали под малые нагрузки. А дефолтные лимиты в системе вообще из расчёта на слабое железо, а тут именно дефолтный лимит.

 

Да не священный, просто сбалансированный. Увеличить лишь один его показать - разве это панацея?

Возможно в теории эффективней и красивее было бы запустить несколько нод, и раскидать по ним трафик. А не лезть в "священный код" с целью улучшить неулучшаемое :)

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


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

Да не священный, просто сбалансированный. Увеличить лишь один его показать - разве это панацея? Возможно в теории эффективней и красивее было бы запустить несколько нод, и раскидать по ним трафик. А не лезть в "священный код" с целью улучшить неулучшаемое :)

Всегда можно сделать лучше.

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


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

После пары дней тестов...

Ну, что тут сказать.

Выставил по 6 очередей на каждую сетевуху.

Загрузил все 12 ядер.

По сравнению с данными из самого первого поста изменилось только ЛА: с 10 до 8,2

Что, в принципе, ожидаемо - к 8ми ядрам заработали еще +4 ядра.

По ппс\трафику изменений +- почти нет: 1200Кпс\4,7ГБт суммарного трафа.

Ну и дамминет 5-6% показывает.

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


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

Join the conversation

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

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

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

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

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

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

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