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

Linux softrouter

Судя по статистике локов, большая часть из них это шейпер. Но как это влияет на tx_restart_queue, я не знаю (а может все наоборот).

 

Предположение: шейпер загружает CPU, CPU не успевает генерировать прерывания, сетевушка не успевает забирать пакеты из буфера, буфер переполняется, счетчик увеличивается.

 

А если отключить шейпер, убрать qdisc с интерфейса, _ticket_spinlock так же на первом месте? увеличиваются ли tx_restart_queue?

А еще какие-то счетчики увеличиваются вместе с tx_restart_queue?

Я бы еще попробовал обновить ядро и модуль ixgbe

 

Наврятли можно как-то решить проблему с локами в htb, только использовать другие дисциплины (mqprio, multiq), которые лучше параллелятся на несколько CPU и очередей сетевой карты. Но там вылазиет еще куча проблем.

Edited by Painter

Share this post


Link to post
Share on other sites

Судя по статистике локов, большая часть из них это шейпер. Но как это влияет на tx_restart_queue, я не знаю (а может все наоборот).

 

Предположение: шейпер загружает CPU, CPU не успевает генерировать прерывания, сетевушка не успевает забирать пакеты из буфера, буфер переполняется, счетчик увеличивается.

 

А если отключить шейпер, убрать qdisc с интерфейса, _ticket_spinlock так же на первом месте? увеличиваются ли tx_restart_queue?

А еще какие-то счетчики увеличиваются вместе с tx_restart_queue?

Я бы еще попробовал обновить ядро и модуль ixgbe

 

Наврятли можно как-то решить проблему с локами в htb, только использовать другие дисциплины (mqprio, multiq), которые лучше параллелятся на несколько CPU и очередей сетевой карты. Но там вылазиет еще куча проблем.

 

Я снимал стат не на сервере, где ixgbe, а с другого для анализа почему лок в принципе в топе везде. Там где ixgbe он уходил в гораздо более ощутимый отрыв, когда возникала проблема. Однако провести там анализ будет затруднительно, так как там где я тестировал с этими опциями нагрузка на CPU увеличивалась в разы, а значит я даже не смогу прожевать там тот объем трафика, с которого начиналась проблема. Пока наблюдаю за поведением с rx-usecs выставленным в значение, а не адаптивным.

Также все же меня интересует вопрос с gro. Полопатив вчера гуголь и почитав на его тему - я не вижу от него ощутимого вреда для роутера (ну разве что для малых значений скоростей в шейпере). TSO/GSO судя по всему действительно лишнее. А вот с GRO ощутимо уменьшается нагрузка на CPU роутера в то время, как PPS и полоса остаются те же. По крайней мере в моем случае, так как по одну сторону от роутера бордер - 1 мак, по другую несколько агрегаторов - несколько маков. В итоге судя по описанию он на уровне сетевой собирает пакеты и пачкой передает на обработку в ядро, что, по видимому, сказывается в том числе на количестве прерываний и нагрузке. На джиттере также ничего военного не заметил.

Share this post


Link to post
Share on other sites

Кстати полное отключение intel_idle и установка idle_max=1(halt only) вообще не изменило реальное энергопотребление сервера(разница 2-3Вт, это уже погрешность измерений).

Под idle_max=1 - имеется ввиду опция драйвера intel_idle.max_cstate?

Share this post


Link to post
Share on other sites

NiTr0

intel_idle.max_cstate=0 processor.max_cstate=1

Так в tuning guides для 10g карточек рекомендуют, процессор дальше C1(halt) не уходит. И энергосбережение работает, и по ресурсам бесплатно.

Share this post


Link to post
Share on other sites

Кто подскажет как бороться/оптимизировать если:

15.01%  [kernel]                  [k] fib_table_lookup   

?

 

3.12.8-gentoo #1 SMP PREEMPT

i686 Intel® Xeon® CPU E31220 @ 3.10GHz GenuineIntel GNU/Linux

 

313.38 Kpps/2.03 Gbps не ЧНН.

 

 

Подозреваю что это результат вот этого..

http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=89aef8921bfbac22f00e04f8450f6e447db13e42

Edited by Tamahome

Share this post


Link to post
Share on other sites

Добрый вечер, уважаемые коллеги. На форму встречал, что выпиливают intel_idle из ядра. Подскажите, для чего он и как его выпилить из ядра(слить и пересобрать ядро?), тачка в продакшене , молотить 4 Гбит. Ubuntu 12.04 ядро 3.2.0-43, NAT Карты 82599ES. Вот весь вывод

 

 

8,38%  [kernel]                              [k] intel_idle
 6,57%  [kernel]                              [k] __ticket_spin_lock
 4,50%  [ixgbe]                               [k] ixgbe_clean_rx_irq
 4,24%  [nf_conntrack]                        [k] ____nf_conntrack_find
 3,82%  [kernel]                              [k] ip_route_input_common
 3,30%  [ip_tables]                           [k] ipt_do_table
 2,81%  [kernel]                              [k] irq_entries_start
 2,51%  [ioatdma]                             [k] ioat2_issue_pending
 2,42%  [kernel]                              [k] dma_issue_pending_all
 2,10%  [kernel]                              [k] add_interrupt_randomness
 2,02%  [ixgbe]                               [k] ixgbe_clean_tx_irq
 1,49%  [kernel]                              [k] rcu_needs_cpu
 1,22%  [kernel]                              [k] dev_queue_xmit
 1,21%  [kernel]                              [k] nf_iterate
 1,08%  [kernel]                              [k] kfree
 0,99%  [kernel]                              [k] kmem_cache_free
 0,98%  [ixgbe]                               [k] ixgbe_tx_map
 0,94%  [kernel]                              [k] __netif_receive_skb
 0,93%  [kernel]                              [k] __slab_free
 0,93%  [kernel]                              [k] __slab_alloc
 0,91%  [kernel]                              [k] __napi_complete
 0,71%  [kernel]                              [k] ktime_get_real
 0,66%  [nf_conntrack]                        [k] tcp_in_window
 0,64%  [kernel]                              [k] __alloc_skb
 0,64%  [kernel]                              [k] native_read_tsc
 0,63%  [ixgbe]                               [k] ixgbe_alloc_rx_buffers
 0,62%  [kernel]                              [k] menu_select
 0,58%  [kernel]                              [k] netif_skb_features
 0,58%  [nf_conntrack]                        [k] nf_conntrack_in
 0,57%  [ixgbe]                               [k] ixgbe_poll
 0,56%  [kernel]                              [k] __napi_schedule
 0,56%  [nf_nat]                              [k] find_appropriate_src
 0,55%  [kernel]                              [k] free_pages_prepare
 0,52%  [kernel]                              [k] _raw_read_lock
 0,51%  [nf_conntrack]                        [k] nf_conntrack_tuple_taken
 0,50%  [kernel]                              [k] prep_new_page
 0,49%  [ixgbe]                               [k] ixgbe_select_queue
 0,48%  [kernel]                              [k] rcu_exit_nohz
 0,48%  [kernel]                              [k] do_csum
 0,47%  [kernel]                              [k] ip_finish_output
 0,46%  [ixgbe]                               [k] ixgbe_msix_clean_rings
 0,45%  [kernel]                              [k] net_rx_action
 0,45%  [kernel]                              [k] local_bh_enable

 

В час пик 4 гбит на вход 470 PPS по 50 процентов на ядро (12шт) процессор Intel E5-2430 0 @ 2.20GHz

Edited by roysbike

Share this post


Link to post
Share on other sites

roysbike

Ну дык. Или пересобрать ядро без модуля intel_idle(он так и называется в конфиге), или добавить в параметры загрузки строку парой постов выше. Второй вариант естественно проще.

Share this post


Link to post
Share on other sites

А для чего он, нужен ли он в сервере , если сервак форвардит ?

Edited by roysbike

Share this post


Link to post
Share on other sites

Мистика какая-то блин.

 

Имеется карта:

01:00.0 Ethernet controller: Intel Corporation 82599EB 10-Gigabit SFI/SFP+ Network Connection (rev 01)

 

Имеется постоянно висящий в perf top intel_idle:

Events: 13K cycles
15.03%  [kernel]            [k] intel_idle
 5.59%  [ixgbe]             [k] ixgbe_poll
 3.60%  [kernel]            [k] skb_copy_bits
 3.31%  [pf_ring]           [k] copy_data_to_ring
 2.70%  [kernel]            [k] irq_entries_start
 2.40%  [pf_ring]           [k] skb_ring_handler
 2.40%  [kernel]            [k] atomic_add_return
 2.14%  fastnetmon          [.] boost::unordered::detail::ptr_node<std::pair<unsigned int const, map_element> >* boost::unordered::detail::tabl
 1.76%  [kernel]            [k] rcu_needs_cpu
 1.52%  [kernel]            [k] add_interrupt_randomness
 1.49%  [kernel]            [k] __netif_receive_skb
 1.31%  [pf_ring]           [k] add_skb_to_ring
 1.22%  [kernel]            [k] __alloc_skb

 

Как и рекомендуют в сети, делаю вот так:

intel_idle.max_cstate=0 processor.max_cstate=1

 

В параметрах ядра GRUB_CMDLINE_LINUX в /etc/default/grub (у меня Debian 7 + 3.2 ядро).

 

После этого обновляю grub:

update-grub
grub-install /dev/sda
reboot

 

А на выходе имею:

cat /proc/cmdline 
BOOT_IMAGE=/boot/vmlinuz-3.2.0-4-amd64 root=UUID=6b3b84d5-3e4b-4cf7-9aa0-24834403fad1 ro

 

И тот же жрущий проц cpu_idle.

 

Что за барабашка? :)

Share this post


Link to post
Share on other sites

grub-2 ?

 

Если grub-0.9, то в /etc/default/grub не факт что смотрит.

Если grub-2, тогда команды обновления конфига несколько устарели... А если стоят оба, то все на своих местах...

 

 

Edited by passer

Share this post


Link to post
Share on other sites

после груб-апдейт в конфиг груба реально попадает нужная опция?

 

cat /boot/grub/grub.cfg | grep vmlinu

Share this post


Link to post
Share on other sites

Естественно, с конфигами все ок:

root@netflow ~ # update-grub2
Generating grub.cfg ...
Found linux image: /boot/vmlinuz-3.2.0-4-amd64
Found initrd image: /boot/initrd.img-3.2.0-4-amd64
done

 

root@netflow ~ # cat /boot/grub/grub.cfg |grep csta
linux	/boot/vmlinuz-3.2.0-4-amd64 root=UUID=6b3b84d5-3e4b-4cf7-9aa0-24834403fad1 ro intel_idle.max_cstate=0 processor.max_cstate=1 
linux	/boot/vmlinuz-3.2.0-4-amd64 root=UUID=6b3b84d5-3e4b-4cf7-9aa0-24834403fad1 ro single intel_idle.max_cstate=0 processor.max_cstate=1

 

Мистика блин =)

Share this post


Link to post
Share on other sites

может у вас два /boot, а реальный не примонтирован и вы пишите в //boot

Share this post


Link to post
Share on other sites

cat /proc/cmdline что говорит?

 

Как раз он говорит, что таких параметров не знает вовсе:

 cat /proc/cmdline
BOOT_IMAGE=/boot/vmlinuz-3.2.0-4-amd64 root=UUID=6b3b84d5-3e4b-4cf7-9aa0-24834403fad1 ro

 

Блин, мистика :) Отправил техников завтра смотреть по KVM что и как там в BIOS и при загрузке.

Share this post


Link to post
Share on other sites

А можно сразу grub-install. Вдруг там древний LILO, например.

Share this post


Link to post
Share on other sites

fdisk -l

Disk /dev/sda: 899.8 GB, 899785162752 bytes
255 heads, 63 sectors/track, 109392 cylinders, total 1757392896 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0005a249

  Device Boot      Start         End      Blocks   Id  System
/dev/sda1            2048     7813119     3905536   83  Linux

 

cat /etc/fstab
proc /proc proc defaults 0 0
none /dev/pts devpts gid=5,mode=620 0 0
# /dev/sda1 none swap sw 0 0
UUID=3e37ae89-e548-4db1-a52a-4c33d17f29ef none swap sw 0 0
# /dev/sda2 / ext4 defaults 0 0
UUID=6b3b84d5-3e4b-4cf7-9aa0-24834403fad1 / ext4 defaults 0 0

 

Для истории - когда я найду проблему я почувствую себя идиотом :)

 

#
# DO NOT EDIT THIS FILE
#
# It is automatically generated by grub-mkconfig using templates
# from /etc/grub.d and settings from /etc/default/grub
#

### BEGIN /etc/grub.d/00_header ###
if [ -s $prefix/grubenv ]; then
 load_env
fi
set default="0"
if [ "${prev_saved_entry}" ]; then
 set saved_entry="${prev_saved_entry}"
 save_env saved_entry
 set prev_saved_entry=
 save_env prev_saved_entry
 set boot_once=true
fi

function savedefault {
 if [ -z "${boot_once}" ]; then
   saved_entry="${chosen}"
   save_env saved_entry
 fi
}

function load_video {
 insmod vbe
 insmod vga
 insmod video_bochs
 insmod video_cirrus
}

insmod part_msdos
insmod ext2
set root='(/dev/sda,msdos2)'
search --no-floppy --fs-uuid --set=root 6b3b84d5-3e4b-4cf7-9aa0-24834403fad1
if loadfont /usr/share/grub/unicode.pf2 ; then
 set gfxmode=640x480
 load_video
 insmod gfxterm
 insmod part_msdos
 insmod ext2
 set root='(/dev/sda,msdos2)'
 search --no-floppy --fs-uuid --set=root 6b3b84d5-3e4b-4cf7-9aa0-24834403fad1
 set locale_dir=($root)/boot/grub/locale
 set lang=en_US
 insmod gettext
fi
terminal_output gfxterm
set timeout=5
### END /etc/grub.d/00_header ###

### BEGIN /etc/grub.d/05_debian_theme ###
set menu_color_normal=cyan/blue
set menu_color_highlight=white/blue
### END /etc/grub.d/05_debian_theme ###

### BEGIN /etc/grub.d/10_linux ###
menuentry 'Debian GNU/Linux, with Linux 3.2.0-4-amd64' --class debian --class gnu-linux --class gnu --class os {
load_video
insmod gzio
insmod part_msdos
insmod ext2
set root='(/dev/sda,msdos2)'
search --no-floppy --fs-uuid --set=root 6b3b84d5-3e4b-4cf7-9aa0-24834403fad1
echo	'Loading Linux 3.2.0-4-amd64 ...'
linux	/boot/vmlinuz-3.2.0-4-amd64 root=UUID=6b3b84d5-3e4b-4cf7-9aa0-24834403fad1 ro intel_idle.max_cstate=0 processor.max_cstate=1 
echo	'Loading initial ramdisk ...'
initrd	/boot/initrd.img-3.2.0-4-amd64
}
menuentry 'Debian GNU/Linux, with Linux 3.2.0-4-amd64 (recovery mode)' --class debian --class gnu-linux --class gnu --class os {
load_video
insmod gzio
insmod part_msdos
insmod ext2
set root='(/dev/sda,msdos2)'
search --no-floppy --fs-uuid --set=root 6b3b84d5-3e4b-4cf7-9aa0-24834403fad1
echo	'Loading Linux 3.2.0-4-amd64 ...'
linux	/boot/vmlinuz-3.2.0-4-amd64 root=UUID=6b3b84d5-3e4b-4cf7-9aa0-24834403fad1 ro single intel_idle.max_cstate=0 processor.max_cstate=1
echo	'Loading initial ramdisk ...'
initrd	/boot/initrd.img-3.2.0-4-amd64
}
### END /etc/grub.d/10_linux ###

### BEGIN /etc/grub.d/20_linux_xen ###
### END /etc/grub.d/20_linux_xen ###

### BEGIN /etc/grub.d/30_os-prober ###
### END /etc/grub.d/30_os-prober ###

### BEGIN /etc/grub.d/40_custom ###
# This file provides an easy way to add custom menu entries.  Simply type the
# menu entries you want to add after this comment.  Be careful not to change
# the 'exec tail' line above.
### END /etc/grub.d/40_custom ###

### BEGIN /etc/grub.d/41_custom ###
if [ -f  $prefix/custom.cfg ]; then
 source $prefix/custom.cfg;
fi
### END /etc/grub.d/41_custom ###

Share this post


Link to post
Share on other sites

Неа, не проще :) Машина не профильный софт-роутер, а анализатор пакетов, поэтому очень не хочется городить с кастомными ядрами.

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