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

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

 

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

 

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

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

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

 

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

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

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


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

Судя по статистике локов, большая часть из них это шейпер. Но как это влияет на 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 мак, по другую несколько агрегаторов - несколько маков. В итоге судя по описанию он на уровне сетевой собирает пакеты и пачкой передает на обработку в ядро, что, по видимому, сказывается в том числе на количестве прерываний и нагрузке. На джиттере также ничего военного не заметил.

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


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

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

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

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


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

NiTr0

intel_idle.max_cstate=0 processor.max_cstate=1

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

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


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

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

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

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

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


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

Добрый вечер, уважаемые коллеги. На форму встречал, что выпиливают 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

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

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


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

roysbike

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

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


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

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

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

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


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

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

 

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

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.

 

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

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


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

softraid?

 

Не-а :( Аппаратный Adaptec 6XXX серии.

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


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

grub-2 ?

 

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

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

 

 

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

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


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

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

 

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

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


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

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

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

 

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

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


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

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

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


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

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 и при загрузке.

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


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

fdisk -l, cat /proc/fstab, mount -v, cat /boot/grub/grub.cfg целиком

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


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

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

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


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

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 ###

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


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

Не проще скомпилить ядро без intel_idle?

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


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

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

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


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

Join the conversation

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

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

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

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

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

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

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