Нагрузка на одно ядро

PPPoE related questions
Post Reply
Termit
Posts: 6
Joined: 14 Dec 2017, 13:43

Нагрузка на одно ядро

Post by Termit »

Добрый день.
Есть сервер с 32 процессорами ( 16 ядер + гипертрейдинг), 16гиг пямяти, стоит линукс, ядро 4.4.88, сетевая 2х10G.
Одна сетевая смотрит в мир, а на вторую через вланы приходят pppoe соединения. Собственно установил accel и нацелил на второй интерфейс, распределил прерывания сетевых по ядрам. И вот тут проблема - на той сетевой на которой все ррр соединения собраны, нагрузка сводиться на одно ядро, как будто нет распределения.
В чем может быть подвох? В какую сторону рыть?
Заранее спасибо
dimka88
Posts: 866
Joined: 13 Oct 2014, 05:51
Contact:

Re: Нагрузка на одно ядро

Post by dimka88 »

Предположение, что нужно использовать RPS.
Покажите топ (нажмите там 1) что бы все ядра показались.
И perf top.
Termit
Posts: 6
Joined: 14 Dec 2017, 13:43

Re: Нагрузка на одно ядро

Post by Termit »

top - 11:46:03 up 20:03, 2 users, load average: 0.10, 0.26, 0.26
Tasks: 378 total, 1 running, 376 sleeping, 0 stopped, 1 zombie
%Cpu0 : 0.0 us, 0.7 sy, 0.0 ni, 99.3 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu1 : 0.3 us, 0.7 sy, 0.0 ni, 98.7 id, 0.0 wa, 0.0 hi, 0.3 si, 0.0 st
%Cpu2 : 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu3 : 0.0 us, 0.3 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu4 : 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu5 : 0.7 us, 0.0 sy, 0.0 ni, 99.3 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu6 : 0.0 us, 0.3 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu7 : 0.0 us, 0.3 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu8 : 0.0 us, 0.3 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu9 : 0.3 us, 1.0 sy, 0.0 ni, 98.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu10 : 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu11 : 0.0 us, 0.3 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu12 : 0.0 us, 0.3 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu13 : 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu14 : 0.0 us, 0.7 sy, 0.0 ni, 96.7 id, 0.0 wa, 0.0 hi, 2.5 si, 0.0 st
%Cpu15 : 0.0 us, 0.4 sy, 0.0 ni, 97.1 id, 0.0 wa, 0.0 hi, 2.5 si, 0.0 st
%Cpu16 : 0.0 us, 0.7 sy, 0.0 ni, 97.1 id, 0.0 wa, 0.0 hi, 2.1 si, 0.0 st
%Cpu17 : 0.0 us, 0.7 sy, 0.0 ni, 96.5 id, 0.0 wa, 0.0 hi, 2.8 si, 0.0 st
%Cpu18 : 0.0 us, 0.7 sy, 0.0 ni, 96.0 id, 0.0 wa, 0.0 hi, 3.2 si, 0.0 st
%Cpu19 : 0.0 us, 0.7 sy, 0.0 ni, 96.4 id, 0.0 wa, 0.0 hi, 2.8 si, 0.0 st
%Cpu20 : 0.4 us, 0.7 sy, 0.0 ni, 96.4 id, 0.0 wa, 0.0 hi, 2.5 si, 0.0 st
%Cpu21 : 0.0 us, 1.1 sy, 0.0 ni, 90.7 id, 0.0 wa, 0.0 hi, 8.2 si, 0.0 st
%Cpu22 : 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu23 : 0.0 us, 0.0 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.3 si, 0.0 st
%Cpu24 : 0.3 us, 0.3 sy, 0.0 ni, 99.3 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu25 : 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu26 : 0.0 us, 0.0 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.3 si, 0.0 st
%Cpu27 : 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu28 : 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu29 : 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu30 : 0.0 us, 2.4 sy, 0.0 ni, 56.9 id, 0.0 wa, 0.0 hi, 40.7 si, 0.0 st
%Cpu31 : 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 16360236 total, 15362532 free, 251596 used, 746108 buff/cache
KiB Swap: 8388604 total, 8388604 free, 0 used. 15578088 avail Mem

вот как раз cpu30 показано

Samples: 138K of event 'cycles:pp', Event count (approx.): 21103283986
Overhead Shared Object Symbol
7.43% [kernel] [k] acpi_os_write_port
4.99% [kernel] [k] queued_spin_lock_slowpath
4.15% [kernel] [k] bnx2x_start_xmit
4.09% [kernel] [k] pppoe_rcv
3.49% [kernel] [k] _raw_spin_lock
2.83% [kernel] [k] fib_table_lookup
2.59% [kernel] [k] bnx2x_rx_int
2.50% [kernel] [k] __nf_conntrack_find_get
2.18% [kernel] [k] ipt_do_table
1.44% [kernel] [k] cpuidle_enter_state
1.38% [kernel] [k] do_csum
1.29% [kernel] [k] bnx2x_msix_fp_int
1.16% [kernel] [k] tcp_packet
1.14% [kernel] [k] menu_select
1.12% [kernel] [k] bnx2x_poll
1.07% [kernel] [k] nf_conntrack_in
1.06% [kernel] [k] napi_complete_done
1.05% [kernel] [k] __netif_receive_skb_core
0.97% [kernel] [k] nf_iterate
0.97% [kernel] [k] get_nohz_timer_target
0.95% [kernel] [k] dev_gro_receive
0.94% [kernel] [k] __dev_queue_xmit
0.94% [kernel] [k] build_skb
0.92% [kernel] [k] bnx2x_free_tx_pkt
0.89% [kernel] [k] int_sqrt
0.80% [kernel] [k] _raw_spin_lock_bh
0.77% [kernel] [k] __local_bh_enable_ip
0.76% [kernel] [k] ip_forward
0.75% [kernel] [k] find_busiest_group
0.75% [kernel] [k] bnx2x_tx_int
0.74% [kernel] [k] skb_release_head_state
0.69% [kernel] [k] native_irq_return_iret
0.68% [kernel] [k] ip_route_input_noref
0.67% [kernel] [k] __slab_free
0.62% [kernel] [k] ip_finish_output2
0.60% [kernel] [k] kmem_cache_alloc
0.58% [kernel] [k] __copy_skb_header
0.55% [kernel] [k] process_backlog
0.53% [kernel] [k] _raw_spin_lock_irqsave
0.52% [kernel] [k] __schedule
0.51% [kernel] [k] ip_rcv
0.48% [kernel] [k] vlan_do_receive
0.44% [kernel] [k] read_tsc
0.43% [kernel] [k] __do_softirq
0.42% [kernel] [k] get_page_from_freelist
0.41% [kernel] [k] csum_partial_copy_generic
0.41% [kernel] [k] skb_gro_reset_offset
0.41% [kernel] [k] ppp_receive_nonmp_frame
0.41% [kernel] [k] idle_cpu
0.40% [kernel] [k] tcp_error
dimka88
Posts: 866
Joined: 13 Oct 2014, 05:51
Contact:

Re: Нагрузка на одно ядро

Post by dimka88 »

Что за прерывания висят на 30 ядре?
Есть возможность раскинуть прерывания, что бы они не попадали на виртуальные ядра(ht)?
Termit
Posts: 6
Joined: 14 Dec 2017, 13:43

Re: Нагрузка на одно ядро

Post by Termit »

Потоки с сетевых разложены каждый на свое ядро, первый поток с сетевой на которой организовываются ррр-интерфейсы попадает на 30 ядро. Собственно нагрузка переходит на то ядро на котором этот поток перекинут.
По поводу отключения гипетрейдинга - с понедельника как буду на машине попробую отключить его и оставить только реальные ядра. Как по другому отделить ядра - не знаю.
dimka88
Posts: 866
Joined: 13 Oct 2014, 05:51
Contact:

Re: Нагрузка на одно ядро

Post by dimka88 »

Code: Select all

cat /proc/cpuinfo | grep -i 'core id'
Должно вернуть id реальных ядер.

Code: Select all

#cat /proc/cpuinfo | grep -i 'core id'
core id         : 0
core id         : 1
core id         : 2
core id         : 3
core id         : 0
core id         : 1
core id         : 2
core id         : 3
У меня определило с 0 по 3 ядро - физические, с 4 по 7 - виртуальные.
ps:// Подсказали, что это не всегда верно, спасибо nuclearcat
Правильнее определить так

Code: Select all

#Покажет ядра. Для многопроцессорных  систем выведет через запятую.
 cat /sys/devices/system/cpu/cpu0/topology/core_siblings_list
 #Покажет физическое ядро и через запятую виртуальное
 cat /sys/devices/system/cpu/cpu0/topology/thread_siblings_list
Чип карты какой? Про RPS прочитали? Так как у l2 нет заголовков IP, для pppoe RSS фактически не работает.
Покажите еще

Code: Select all

 ethtool -S <интерфейс в сторону pppoe клиентов>
Termit
Posts: 6
Joined: 14 Dec 2017, 13:43

Re: Нагрузка на одно ядро

Post by Termit »

По поводу RPS - включил, сначала ругнулось что карта многопоточная, но принудительно включилось. Немного помогло, распределилось, но не так что бы идеально, но уже полегчало. Спасибо
По поводу определения ядер - 2хE5-2660, т.е в каждом проце 8 ядер. Вывод:
cat /proc/cpuinfo | grep -i 'core id'
core id : 0
core id : 1
core id : 2
core id : 3
core id : 4
core id : 5
core id : 6
core id : 7
core id : 0
core id : 1
core id : 2
core id : 3
core id : 4
core id : 5
core id : 6
core id : 7
core id : 0
core id : 1
core id : 2
core id : 3
core id : 4
core id : 5
core id : 6
core id : 7
core id : 0
core id : 1
core id : 2
core id : 3
core id : 4
core id : 5
core id : 6
core id : 7
cat /sys/devices/system/cpu/cpu0/topology/core_siblings_list
0-7,16-23
cat /sys/devices/system/cpu/cpu0/topology/thread_siblings_list
0,16
Честно говоря не понял что я вижу в этом выводе.
Сетевая - 03:00.0 Ethernet controller: Broadcom Corporation NetXtreme II BCM57810 10 Gigabit Ethernet (rev 10)
03:00.1 Ethernet controller: Broadcom Corporation NetXtreme II BCM57810 10 Gigabit Ethernet (rev 10)
обычная двухголовая
Ну и ethtool:
NIC statistics:
[0]: rx_bytes: 804458584682
[0]: rx_ucast_packets: 2099580726
[0]: rx_mcast_packets: 3252
[0]: rx_bcast_packets: 3025308
[0]: rx_discards: 754
[0]: rx_phy_ip_err_discards: 0
[0]: rx_skb_alloc_discard: 0
[0]: rx_csum_offload_errors: 7
[0]: tx_bytes: 415731529018
[0]: tx_ucast_packets: 354172747
[0]: tx_mcast_packets: 267
[0]: tx_bcast_packets: 0
[0]: tpa_aggregations: 0
[0]: tpa_aggregated_frames: 0
[0]: tpa_bytes: 0
[0]: driver_filtered_tx_pkt: 0
[1]: rx_bytes: 11759852
[1]: rx_ucast_packets: 10
[1]: rx_mcast_packets: 1385
[1]: rx_bcast_packets: 44950
[1]: rx_discards: 0
[1]: rx_phy_ip_err_discards: 0
[1]: rx_skb_alloc_discard: 0
[1]: rx_csum_offload_errors: 2
[1]: tx_bytes: 456834749407
[1]: tx_ucast_packets: 373850137
[1]: tx_mcast_packets: 17
[1]: tx_bcast_packets: 0
[1]: tpa_aggregations: 1
[1]: tpa_aggregated_frames: 1
[1]: tpa_bytes: 1422
[1]: driver_filtered_tx_pkt: 0
[2]: rx_bytes: 11245991
[2]: rx_ucast_packets: 11
[2]: rx_mcast_packets: 2554
[2]: rx_bcast_packets: 55280
[2]: rx_discards: 0
[2]: rx_phy_ip_err_discards: 0
[2]: rx_skb_alloc_discard: 0
[2]: rx_csum_offload_errors: 0
[2]: tx_bytes: 446057159599
[2]: tx_ucast_packets: 373332928
[2]: tx_mcast_packets: 1447
[2]: tx_bcast_packets: 0
[2]: tpa_aggregations: 2
[2]: tpa_aggregated_frames: 2
[2]: tpa_bytes: 2844
[2]: driver_filtered_tx_pkt: 0
[3]: rx_bytes: 9514061
[3]: rx_ucast_packets: 7
[3]: rx_mcast_packets: 2530
[3]: rx_bcast_packets: 45822
[3]: rx_discards: 0
[3]: rx_phy_ip_err_discards: 0
[3]: rx_skb_alloc_discard: 0
[3]: rx_csum_offload_errors: 0
[3]: tx_bytes: 466443104873
[3]: tx_ucast_packets: 387672508
[3]: tx_mcast_packets: 377
[3]: tx_bcast_packets: 0
[3]: tpa_aggregations: 1
[3]: tpa_aggregated_frames: 1
[3]: tpa_bytes: 1422
[3]: driver_filtered_tx_pkt: 0
[4]: rx_bytes: 891410002
[4]: rx_ucast_packets: 6
[4]: rx_mcast_packets: 2165
[4]: rx_bcast_packets: 2320821
[4]: rx_discards: 0
[4]: rx_phy_ip_err_discards: 0
[4]: rx_skb_alloc_discard: 0
[4]: rx_csum_offload_errors: 19
[4]: tx_bytes: 457082304458
[4]: tx_ucast_packets: 372366720
[4]: tx_mcast_packets: 0
[4]: tx_bcast_packets: 0
[4]: tpa_aggregations: 0
[4]: tpa_aggregated_frames: 0
[4]: tpa_bytes: 0
[4]: driver_filtered_tx_pkt: 0
[5]: rx_bytes: 29905806
[5]: rx_ucast_packets: 5
[5]: rx_mcast_packets: 641
[5]: rx_bcast_packets: 99183
[5]: rx_discards: 0
[5]: rx_phy_ip_err_discards: 0
[5]: rx_skb_alloc_discard: 0
[5]: rx_csum_offload_errors: 0
[5]: tx_bytes: 468372830252
[5]: tx_ucast_packets: 385106310
[5]: tx_mcast_packets: 0
[5]: tx_bcast_packets: 0
[5]: tpa_aggregations: 0
[5]: tpa_aggregated_frames: 0
[5]: tpa_bytes: 0
[5]: driver_filtered_tx_pkt: 0
[6]: rx_bytes: 8026515
[6]: rx_ucast_packets: 6
[6]: rx_mcast_packets: 906
[6]: rx_bcast_packets: 38636
[6]: rx_discards: 0
[6]: rx_phy_ip_err_discards: 0
[6]: rx_skb_alloc_discard: 0
[6]: rx_csum_offload_errors: 0
[6]: tx_bytes: 450054581022
[6]: tx_ucast_packets: 375748245
[6]: tx_mcast_packets: 0
[6]: tx_bcast_packets: 0
[6]: tpa_aggregations: 2
[6]: tpa_aggregated_frames: 2
[6]: tpa_bytes: 2844
[6]: driver_filtered_tx_pkt: 0
[7]: rx_bytes: 21212017
[7]: rx_ucast_packets: 8
[7]: rx_mcast_packets: 1063
[7]: rx_bcast_packets: 91405
[7]: rx_discards: 0
[7]: rx_phy_ip_err_discards: 0
[7]: rx_skb_alloc_discard: 0
[7]: rx_csum_offload_errors: 0
[7]: tx_bytes: 445088959592
[7]: tx_ucast_packets: 370373906
[7]: tx_mcast_packets: 105
[7]: tx_bcast_packets: 0
[7]: tpa_aggregations: 1
[7]: tpa_aggregated_frames: 1
[7]: tpa_bytes: 1422
[7]: driver_filtered_tx_pkt: 0
rx_bytes: 805441898637
rx_error_bytes: 239711
rx_ucast_packets: 2099580779
rx_mcast_packets: 14496
rx_bcast_packets: 5721405
rx_crc_errors: 0
rx_align_errors: 0
rx_undersize_packets: 0
rx_oversize_packets: 0
rx_fragments: 0
rx_jabbers: 0
rx_discards: 754
rx_filtered_packets: 25221388
rx_mf_tag_discard: 0
pfc_frames_received: 0
pfc_frames_sent: 0
rx_brb_discard: 0
rx_brb_truncate: 0
rx_pause_frames: 0
rx_mac_ctrl_frames: 0
rx_constant_pause_events: 0
rx_phy_ip_err_discards: 0
rx_skb_alloc_discard: 0
rx_csum_offload_errors: 28
tx_bytes: 3605665218221
tx_error_bytes: 0
tx_ucast_packets: 2992623501
tx_mcast_packets: 2213
tx_bcast_packets: 0
tx_mac_errors: 0
tx_carrier_errors: 0
tx_single_collisions: 0
tx_multi_collisions: 0
tx_deferred: 0
tx_excess_collisions: 0
tx_late_collisions: 0
tx_total_collisions: 0
tx_64_byte_packets: 5715152
tx_65_to_127_byte_packets: 374681526
tx_128_to_255_byte_packets: 80649130
tx_256_to_511_byte_packets: 44363175
tx_512_to_1023_byte_packets: 52240456
tx_1024_to_1522_byte_packets: 2429987610
tx_1523_to_9022_byte_packets: 3
tx_pause_frames: 0
tpa_aggregations: 7
tpa_aggregated_frames: 7
tpa_bytes: 9954
recoverable_errors: 0
unrecoverable_errors: 0
driver_filtered_tx_pkt: 0
Tx LPI entry count: 0
А по поводу RSS я подумаю, спасибо
dimka88
Posts: 866
Joined: 13 Oct 2014, 05:51
Contact:

Re: Нагрузка на одно ядро

Post by dimka88 »

Значит первое предположение было верным, об этом говорит вывод ethtool

Code: Select all

[0]: rx_bytes: 804458584682

[1]: rx_bytes: 11759852
[2]: rx_bytes: 11245991
[3]: rx_bytes: 9514061
[4]: rx_bytes: 891410002
[5]: rx_bytes: 29905806
[6]: rx_bytes: 8026515
[7]: rx_bytes: 21212017
Видим что на большинство входящих кадров попадает на первое прерывание. RPS как раз поможет, но не так как хотелось бы, потому что software.
Хорошей практикой считается использовать RFS, то есть это реализация похожая как RSS для ip заголовков, только для mac (ну может не совсем точно, но близко к правде). По поводу вашего BCM57810 нужно смотреть документацию о поддержке в чипе RFS.

По поводу отделить мух от котлет(реальные от HT), тут нужно поиграться, что бы понять.
cat /sys/devices/system/cpu/cpu0/topology/thread_siblings_list
cat /sys/devices/system/cpu/cpu1/topology/thread_siblings_list
cat /sys/devices/system/cpu/cpu2/topology/thread_siblings_list
cat /sys/devices/system/cpu/cpu3/topology/thread_siblings_list
cat /sys/devices/system/cpu/cpu4/topology/thread_siblings_list
Termit
Posts: 6
Joined: 14 Dec 2017, 13:43

Re: Нагрузка на одно ядро

Post by Termit »

Спасибо за консультацию. Пока остановился на том что буду использовать RPS, хоть и не идеально выровнялось, но вполне приятно. А про RFS - буду читать и думать.
Post Reply