kayot Опубликовано 28 октября, 2013 · Жалоба Я конечно в ваших BSD ни в зуб ногой, но что мешает сделать для каждой сетевки 6 прерываний вместо 8 и раскидать ровно на 12 ядер без использования ISR? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
911 Опубликовано 30 октября, 2013 · Жалоба как-то решилось? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Elisium Опубликовано 30 октября, 2013 · Жалоба Пока пытаемся обновиться. Но на удаленной техплощадке, где этот сервер стоит, сначала нужно заменить неисправный КВМ =) Мало ли что .... Обновлюсь - отпишусь. Я конечно в ваших BSD ни в зуб ногой, но что мешает сделать для каждой сетевки 6 прерываний вместо 8 и раскидать ровно на 12 ядер без использования ISR? Мысль интересная. Но как-то я сходу не нагуглил такой вариант. Сисцтл для этого нет, а ковырять исходники я не силен. п.с. Как я понимаю, карточка аппаратно поддерживает 8 очередей. Не факт, что ими вообще можно софтово управлять. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Dyr Опубликовано 30 октября, 2013 · Жалоба А можно ещё увидеть вывод sysctl dev.ix? Кстати, как у вас сконфигурировано ng_netflow и насколько уменьшается нагрузка при его отключении? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Elisium Опубликовано 30 октября, 2013 · Жалоба А можно ещё увидеть вывод 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 Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Dyr Опубликовано 30 октября, 2013 · Жалоба Нда, лёгкого способа подсказать не обнаружилось. Трафик у вас раскидывается по потокам прям удивительно хорошо, ошибки checksum чуть менее 2% от трафика... Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
DVM-Avgoor Опубликовано 30 октября, 2013 · Жалоба Да я говорю надо профилировать :D Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Dyr Опубликовано 30 октября, 2013 · Жалоба Ну в общем-то, да. Тем более всяких DTrace'ов понатянули во FreeBSD, должно стать легче. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Elisium Опубликовано 30 октября, 2013 · Жалоба Вот еще вдогонку патчик для нетфлов для настройки размера кэша на лету. Появляется еще одна переменная в сисцтл netflow_cachesize. netflow.c.diff.txt Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
DVM-Avgoor Опубликовано 30 октября, 2013 · Жалоба Вот еще вдогонку патчик для нетфлов для настройки размера кэша на лету. Появляется еще одна переменная в сисцтл netflow_cachesize. Коротенько как-то. А NBUCKETS поправить не надо было? :) Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Elisium Опубликовано 31 октября, 2013 · Жалоба Вот еще вдогонку патчик для нетфлов для настройки размера кэша на лету. Появляется еще одна переменная в сисцтл netflow_cachesize. Коротенько как-то. А NBUCKETS поправить не надо было? :) Может и надо было =) Раз начали, так уже и пишите, на что там поправить надо ) Я же в этих ваших исходниках не разбираюсь. п.с. Теоретически, NBUCKETS=CACHESIZE/4, не ? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
DVM-Avgoor Опубликовано 31 октября, 2013 · Жалоба Может и надо было =) Раз начали, так уже и пишите, на что там поправить надо ) Я же в этих ваших исходниках не разбираюсь. п.с. Теоретически, NBUCKETS=CACHESIZE/4, не ? Я про то, что там NBUCKETS используется при расчетах хэшей и остального. Вы кэш увеличили, а толку если NBUCKETS не меняли? Я вообще советовал бы вернуть все как было. Зачем расширяли кэш? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Elisium Опубликовано 31 октября, 2013 · Жалоба Затем, что было очень много ошибок в NetFlow IPv4 cache. Увеличили кеш - ошибки пропали. п.с. Из-за кучи ошибок были какие-то проблемы в работе. Уже не упомню, что именно. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
DVM-Avgoor Опубликовано 31 октября, 2013 · Жалоба Хз, лезть внутрь модуля от этого, даже не знаю, на правильно это... Там же есть свои расчеты, свои пропорции всего. Можно наверное было бы две ноды сделать. Или три. Или тайминги подкрутить, на худой конец... Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Ivan_83 Опубликовано 31 октября, 2013 · Жалоба Хз, лезть внутрь модуля от этого, даже не знаю, на правильно это... Там же есть свои расчеты, свои пропорции всего. Священный код? На самом деле многое написано чтобы работало и проблем не создавало. Часто писали под малые нагрузки. А дефолтные лимиты в системе вообще из расчёта на слабое железо, а тут именно дефолтный лимит. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
kayot Опубликовано 31 октября, 2013 · Жалоба Я конечно в ваших BSD ни в зуб ногой, но что мешает сделать для каждой сетевки 6 прерываний вместо 8 и раскидать ровно на 12 ядер без использования ISR? Мысль интересная. Но как-то я сходу не нагуглил такой вариант. Сисцтл для этого нет, а ковырять исходники я не силен. п.с. Как я понимаю, карточка аппаратно поддерживает 8 очередей. Не факт, что ими вообще можно софтово управлять. А что за сетевые? Обычно количеством очередей можно управлять параметрами модуля, для igb например. По умолчанию драйвер создает или число очередей равное числу ядер, или если ядер больше чем аппаратно очередей как у вас - максимально возможное количество(8 на интерфейс, они рулятся независимо). Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Elisium Опубликовано 31 октября, 2013 · Жалоба А что за сетевые? Обычно количеством очередей можно управлять параметрами модуля, для igb например. По умолчанию драйвер создает или число очередей равное числу ядер, или если ядер больше чем аппаратно очередей как у вас - максимально возможное количество(8 на интерфейс, они рулятся независимо). Карта 10G Intel какая-то. pnpinfo: vendor=0x8086 device=0x10fb subvendor=0x8086 subdevice=0x0003 class=0x020000 Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
kayot Опубликовано 31 октября, 2013 · Жалоба Elisium Значит драйвер ixgbe(или как оно там у вас) и очереди рулятся стандартно. В линуксах modprobe ixgbe rss=6,6 для bsd вероятно где-то так же. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Hawk128 Опубликовано 31 октября, 2013 · Жалоба Конечно есть: hw.ixgbe.num_queues=4 hw.ixgbe.rx_process_limit=4096 hw.ixgbe.rxd=4096 hw.ixgbe.txd=4096 Примерно так у меня в лоадере. Далее раскидываете очереди как вам надо по ядрам. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Elisium Опубликовано 1 ноября, 2013 (изменено) · Жалоба Конечно есть: 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: Все выставил. Ночью ребутну - проверю. Изменено 1 ноября, 2013 пользователем Elisium Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
DVM-Avgoor Опубликовано 1 ноября, 2013 · Жалоба Священный код? На самом деле многое написано чтобы работало и проблем не создавало. Часто писали под малые нагрузки. А дефолтные лимиты в системе вообще из расчёта на слабое железо, а тут именно дефолтный лимит. Да не священный, просто сбалансированный. Увеличить лишь один его показать - разве это панацея? Возможно в теории эффективней и красивее было бы запустить несколько нод, и раскидать по ним трафик. А не лезть в "священный код" с целью улучшить неулучшаемое :) Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Ivan_83 Опубликовано 1 ноября, 2013 · Жалоба Да не священный, просто сбалансированный. Увеличить лишь один его показать - разве это панацея? Возможно в теории эффективней и красивее было бы запустить несколько нод, и раскидать по ним трафик. А не лезть в "священный код" с целью улучшить неулучшаемое :) Всегда можно сделать лучше. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Elisium Опубликовано 5 ноября, 2013 · Жалоба После пары дней тестов... Ну, что тут сказать. Выставил по 6 очередей на каждую сетевуху. Загрузил все 12 ядер. По сравнению с данными из самого первого поста изменилось только ЛА: с 10 до 8,2 Что, в принципе, ожидаемо - к 8ми ядрам заработали еще +4 ядра. По ппс\трафику изменений +- почти нет: 1200Кпс\4,7ГБт суммарного трафа. Ну и дамминет 5-6% показывает. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...