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

Linux softrouter

Снести grub2, поставить 0.9х, прописать опции вручную в grub.conf и забыть.

Share this post


Link to post
Share on other sites

Решилось. Тупо выключением/включением машины по питанию. По каким-то странным причинам reboot/shutdown -r не ребутали машину полностью. Мистика да и только :) Теперь все ок, intel_idle пропал напрочь.

Share this post


Link to post
Share on other sites

Да, intel_idle выпилен, но все равно perf еще немного смущает:

Events: 2M cycles
 6.85%  [ixgbe]             [k] ixgbe_poll
 5.55%  [kernel]            [k] irq_entries_start
 4.30%  [kernel]            [k] skb_copy_bits
 3.61%  [pf_ring]           [k] copy_data_to_ring
 3.19%  [pf_ring]           [k] skb_ring_handler
 2.92%  fastnetmon          [.] boost::unordered::detail::ptr_node<std::pair<unsigned int const, map_element> >* boost::unordered::detail::
 2.31%  [kernel]            [k] add_interrupt_randomness
 2.28%  [kernel]            [k] atomic_add_return
 2.11%  [kernel]            [k] rcu_needs_cpu
 1.90%  [pf_ring]           [k] add_skb_to_ring
 1.49%  fastnetmon          [.] belongs_to_networks(std::vector<std::pair<unsigned int, unsigned int>, std::allocator<std::pair<unsigned in
 1.44%  [kernel]            [k] __netif_receive_skb
 1.37%  [pf_ring]           [k] parse_raw_pkt.part.18
 1.03%  [kernel]            [k] __alloc_skb
 0.97%  fastnetmon          [.] boost::unordered::detail::buckets<std::allocator<std::pair<unsigned int const, map_element> >, boost::unord
 0.95%  fastnetmon          [.] __gnu_cxx::__normal_iterator<std::pair<unsigned int, unsigned int>*, std::vector<std::pair<unsigned int, un
 0.95%  [kernel]            [k] __write_lock_failed
 0.93%  [kernel]            [k] tick_nohz_stop_sched_tick
 0.93%  fastnetmon          [.] std::vector<std::pair<unsigned int, unsigned int>, std::allocator<std::pair<unsigned int, unsigned int> > >
 0.92%  [pf_ring]           [k] add_pkt_to_ring
 0.90%  [pf_ring]           [k] parse_pkt.isra.19
 0.88%  [kernel]            [k] atomic_inc

 

Что-то можно сделать либо с ixgbe_poll либо с irq_entries_start?

Share this post


Link to post
Share on other sites

Эх, а я так надеялся на чудо после такого легкого отдирания жручего intel_idle =)

Share this post


Link to post
Share on other sites

Вы писали что трафик 4Гбит/с, это кто-то бесплатно должен пропускать? На все есть свои расходы. Но там же копейки, есть ли смысл перелопатить пол-инета чтобы выжать скажем еще 1% за счет оптимизации/отдирания чего-либо?

Share this post


Link to post
Share on other sites

Сейчас трафика гигабита 2 от силы. Хочется выжать все возможное из железа, чтобы на 10Ge снова не бегать в поисказ ресурсов или новых платформ.

Share this post


Link to post
Share on other sites

что за шлак такой fastnetmon ? судя по всему он нехило отъедает

Share this post


Link to post
Share on other sites

он всё и кушает, ещё наверное и кеши вымывает. и оно что, юзерспейс чтоли? судя по описанию это какой-то ддос-детектор, в юзерспейсе ему явно не место

 

хотя судя по тому что оно написано на c++, сделать это модулем ядра - переписать почти полностью

Share this post


Link to post
Share on other sites

Зачем его тащить в кернелспейс? :) Он итак ну очень быстр и ест не более 5% cpu на потоке в 500 kpps :)

Share this post


Link to post
Share on other sites

Вы используете PF_RING а не магию, часть структур ядра как и в netmap все равно остаются работать. Это как минимум фетч, интеррапты, синхронизация рингов. Могу посоветовать разве что DNA, если вы его еще не втыкали.

Share this post


Link to post
Share on other sites

Зачем его тащить в кернелспейс? :) Он итак ну очень быстр и ест не более 5% cpu на потоке в 500 kpps :)

проведите простой эксперимент - смаршрутизируйте трафик через сервер без вашей софтины, посмотрите сколько он прожуёт и с запущенным вашим софтом.

Share this post


Link to post
Share on other sites

s.lobanov, я могу так сказать - 2mpps. С монитором он выдает 1 Mpps, что меня устраивает. При хреновых алгоритмах перенос в ядро не творит чудеса, а доступ к памяти что в ядре, что у меня прямой.

Share this post


Link to post
Share on other sites

Ядро и не может творить чудес - у него локов тьма. PF_RING вполне жизнеспособное решение, чуть-чуть улучшить положение, ИМХО, может лишь DNA (а ныне ZC). Но это даст, мне кажется, лишь копейки профита.

Share this post


Link to post
Share on other sites

коллеги, помогите с проблемой

есть сервер доступа на акцеле

 

astra / # uname -a
Linux astra 3.3.8-gentoo #2 SMP Sun Oct 14 04:01:37 EEST 2012 i686 Intel(R) Core(TM) i5 CPU 650 @ 3.20GHz GenuineIntel GNU/Linux

 

на борту сетевые

04:00.0 Ethernet controller: Intel Corporation 82574L Gigabit Network Connection
05:00.0 Ethernet controller: Intel Corporation 82574L Gigabit Network Connection

 

в последнее время после прохождения порога в 750 сессий и примерно 350 мбит, начинает жутко все тупить, в тоннеле больше 3-4 мегабит не прокачать(

 

top показывал большую нагрузку ksoftirqd, в htop все красиво, 4 ядра ровненько не более 40%

 

раскидал сетевые по ядрам, немного помогло, в тоннелях поднялась скорость, но странное событие

обе сетевухи имеют по 2 очереди eth0-rx-0 и eth0-tx-0

ессна раскидал ровненько на 4 ядра

теперь htop показывает бешенную нагрузку 2 и 3 ядра, 2 - до 100%, 3 - до 80%

первое и второе нагрузка ни о чем - до 10%

последующая игра с перекидыванием очередей по ядрам не помогла, грузят именно прерывания на eth0-rx-0 и eth1-rx-0

 

куда рыть?

Share this post


Link to post
Share on other sites

грузят именно прерывания на eth0-rx-0 и eth1-rx-0

Ессно. Обработка пакета - на том же ядре идет, которое его приняло.

 

куда рыть?

Чтобы параллелить - RPS заюзать (и на интерфейсе и на туннеле).

Ну и файрвол/шейпер покрутить. Т.к. что-то чересчур мало 350 мбит, у меня 350-400 мбит жевал древний атлон 5000+...

Share this post


Link to post
Share on other sites

perf top покажи.

показал бы, да систему не обновлял пару лет, теперь пакет не могу поставить

обновил дерево портежей теперь вообще тупик, гребаный генту)

 

Ессно. Обработка пакета - на том же ядре идет, которое его приняло.

ага это я уже нагуглил

 

Чтобы параллелить - RPS заюзать (и на интерфейсе и на туннеле).

можно подробней ?

 

Ну и файрвол/шейпер покрутить.

в файрволе нефик крутить там только для акцела:

-A FORWARD -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

 

а шейпер был украден тут:

http://abills.net.ua/wiki/doku.php/abills:docs:linux:pppd_radattr:ru

 

шейпер вызываем через pppd-compat

Share this post


Link to post
Share on other sites

Чтобы параллелить - RPS заюзать (и на интерфейсе и на туннеле).

по теме нашел http://forum.nag.ru/forum/index.php?showtopic=59217&view=findpost&p=594166

это мне че, ручками на всех ppp ифейсах?

Share this post


Link to post
Share on other sites

RPS - https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Performance_Tuning_Guide/network-rps.html

Принцип тот же что и irq affinity , но софтовое , можно применять к любум интерфейсам а не только физическим , но не факт что поможет в твоем случае.

 

Насчет генты необновляемой (у самого на ней все :) ) - можно собрать где нибудь binary пакет (желательно с USE='static' чтоб от либ не зависело) и установить в target систему.

 

Далее. На 4 ядра раскидывать не стоит (irq_affinity) - одну сетевую на 1е 2 ядра 2ю на вторые , так как кэш общий у 2х ядер. (т.е affinity 0x3 , 0x0C).

Увеличить буферы (ethtool -G).

Показать conntrack -S (если с ним нет проблемы как с perf конечно :) )

Какой clocksource (/sys/devices/system/clocksource/clocksource0/current_clocksource) - должен быть tsc.

Share this post


Link to post
Share on other sites
astra / # cat /sys/devices/system/clocksource/clocksource0/current_clocksource

tsc

 

Показать conntrack -S (если с ним нет проблемы как с perf конечно :) )

печаль, у меня ничего теперь не собирается))) как вернуть обратно дерево?)

 

Увеличить буферы (ethtool -G).

насколько?

 

astra / # ethtool -g eth0

Ring parameters for eth0:

Pre-set maximums:

RX: 4096

RX Mini: 0

RX Jumbo: 0

TX: 4096

Current hardware settings:

RX: 256

RX Mini: 0

RX Jumbo: 0

TX: 256

 

зы

 

astra / # ethtool -k eth0

Offload parameters for eth0:

rx-checksumming: on

tx-checksumming: on

scatter-gather: on

tcp-segmentation-offload: off

udp-fragmentation-offload: off

generic-segmentation-offload: off

generic-receive-offload: off

large-receive-offload: off

rx-vlan-offload: on

tx-vlan-offload: on

ntuple-filters: off

receive-hashing: off

Share this post


Link to post
Share on other sites

а шейпер был украден тут:

Вроде как нечему там вообще грузить. Ну т.е. совсем нечему. Страно однако.

Что за туннели юзаются? Шифрование/сжатие надеюсь отключено?

 

это мне че, ручками на всех ppp ифейсах?

Изначально - да. Новосозданные - в ip_up скрипте добавить.

 

так как кэш общий у 2х ядер

Там вообще-то всего 2 ядра, с гипертредингом. Который стоило бы попробовать выключить вообще нафиг.

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