Re: Kernel 4.13.0-rc4-next-20170811 - IP Routing / Forwarding performance vs Core/RSS number / HT on
flat view
From: Paweł Staszewski <hidden>
Date: 2017-09-11 22:13:26
Another test for this patch with linux-next tree with patch: bwm-ng v0.6.1 (probing every 1.000s), press 'h' for help input: /proc/net/dev type: rate - iface Rx Tx Total ============================================================================== vlan1004: 1.00 P/s 606842.31 P/s 606843.31 P/s lo: 0.00 P/s 0.00 P/s 0.00 P/s vlan1016: 0.00 P/s 607730.56 P/s 607730.56 P/s vlan1020: 0.00 P/s 606891.25 P/s 606891.25 P/s vlan1018: 0.00 P/s 607580.88 P/s 607580.88 P/s vlan1014: 0.00 P/s 607606.81 P/s 607606.81 P/s vlan1005: 0.00 P/s 606788.44 P/s 606788.44 P/s enp2s0f0: 2.00 P/s 2.00 P/s 3.99 P/s vlan1017: 0.00 P/s 607643.75 P/s 607643.75 P/s enp132s0: 13079658.00 P/s 0.00 P/s 13079658.00 P/s vlan1000: 0.00 P/s 604409.19 P/s 604409.19 P/s vlan1010: 0.00 P/s 606984.06 P/s 606984.06 P/s vlan1019: 0.00 P/s 607452.12 P/s 607452.12 P/s vlan1008: 0.00 P/s 606803.44 P/s 606803.44 P/s vlan1011: 0.00 P/s 607048.94 P/s 607048.94 P/s vlan1001: 0.00 P/s 606773.50 P/s 606773.50 P/s vlan1006: 0.00 P/s 606811.38 P/s 606811.38 P/s vlan1012: 0.00 P/s 607051.94 P/s 607051.94 P/s vlan1013: 0.00 P/s 607067.88 P/s 607067.88 P/s enp4s0: 2.00 P/s 13020803.00 P/s 13020805.00 P/s vlan1007: 0.00 P/s 606798.44 P/s 606798.44 P/s vlan1002: 0.00 P/s 606840.31 P/s 606840.31 P/s vlan1009: 0.00 P/s 606809.38 P/s 606809.38 P/s enp2s0f1: 100.80 P/s 0.00 P/s 100.80 P/s vlan1015: 0.00 P/s 607089.81 P/s 607089.81 P/s vlan1003: 1.00 P/s 606928.19 P/s 606929.19 P/s ------------------------------------------------------------------------------ total: 13079765.00 P/s 25766758.00 P/s 38846524.00 P/s 13Mpps forwarded (32cores active for two mlx5 nics) 80% cpu load (20%idle all cores) PerfTop: 126552 irqs/sec kernel:99.3% exact: 0.0% [4000Hz cycles], (all, 32 CPUs) --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 8.25% [kernel] [k] fib_table_lookup 7.98% [kernel] [k] do_raw_spin_lock 6.20% [kernel] [k] mlx5e_handle_rx_cqe_mpwrq 4.21% [kernel] [k] mlx5e_xmit 3.37% [kernel] [k] __dev_queue_xmit 2.95% [kernel] [k] ip_rcv 2.72% [kernel] [k] ipt_do_table 2.24% [kernel] [k] ip_finish_output2 2.22% [kernel] [k] __netif_receive_skb_core 2.17% [kernel] [k] ip_forward 2.15% [kernel] [k] __build_skb 1.99% [kernel] [k] ip_route_input_rcu 1.70% [kernel] [k] mlx5e_txwqe_complete 1.54% [kernel] [k] dev_gro_receive 1.45% [kernel] [k] mlx5_cqwq_get_cqe 1.38% [kernel] [k] udp_v4_early_demux 1.35% [kernel] [k] netif_skb_features 1.33% [kernel] [k] inet_gro_receive 1.29% [kernel] [k] dev_hard_start_xmit 1.27% [kernel] [k] ip_rcv_finish 1.19% [kernel] [k] mlx5e_build_rx_skb 1.15% [kernel] [k] __netdev_pick_tx 1.11% [kernel] [k] kmem_cache_alloc 1.09% [kernel] [k] mlx5e_poll_tx_cq 1.07% [kernel] [k] mlx5e_txwqe_build_dsegs 1.00% [kernel] [k] vlan_dev_hard_start_xmit 0.90% [kernel] [k] __napi_alloc_skb 0.87% [kernel] [k] validate_xmit_skb 0.87% [kernel] [k] read_tsc 0.83% [kernel] [k] napi_gro_receive 0.79% [kernel] [k] skb_network_protocol 0.79% [kernel] [k] sch_direct_xmit 0.78% [kernel] [k] __local_bh_enable_ip 0.78% [kernel] [k] netdev_pick_tx 0.75% [kernel] [k] __udp4_lib_lookup 0.72% [kernel] [k] netif_receive_skb_internal 0.71% [kernel] [k] page_frag_free 0.71% [kernel] [k] deliver_ptype_list_skb 0.70% [kernel] [k] fib_validate_source 0.69% [kernel] [k] mlx5_cqwq_get_cqe 0.69% [kernel] [k] __netif_receive_skb 0.68% [kernel] [k] vlan_passthru_hard_header 0.61% [kernel] [k] rt_cache_valid 0.59% [kernel] [k] iptable_filter_hook Without patch: 12,7Mpps forwarded (32cores active for two mlx5 nics) 100% cpu load ( rx drops on receiving side ) TX is about 13.05Mpps from pktgen bwm-ng v0.6.1 (probing every 1.000s), press 'h' for help input: /proc/net/dev type: rate / iface Rx Tx Total ============================================================================== vlan1004: 0.00 P/s 589709.31 P/s 589709.31 P/s lo: 0.00 P/s 0.00 P/s 0.00 P/s vlan1016: 0.00 P/s 589495.50 P/s 589495.50 P/s vlan1020: 0.00 P/s 589968.06 P/s 589968.06 P/s vlan1018: 0.00 P/s 589896.12 P/s 589896.12 P/s vlan1014: 0.00 P/s 589496.50 P/s 589496.50 P/s vlan1005: 0.00 P/s 589502.50 P/s 589502.50 P/s enp2s0f0: 42.96 P/s 2.00 P/s 44.96 P/s vlan1017: 0.00 P/s 589508.50 P/s 589508.50 P/s enp132s0: 12700689.00 P/s 0.00 P/s 12700689.00 P/s vlan1000: 0.00 P/s 587671.38 P/s 587671.38 P/s vlan1010: 0.00 P/s 589330.69 P/s 589330.69 P/s vlan1019: 0.00 P/s 589808.19 P/s 589808.19 P/s vlan1008: 0.00 P/s 589283.75 P/s 589283.75 P/s vlan1011: 0.00 P/s 589482.56 P/s 589482.56 P/s vlan1001: 0.00 P/s 589971.06 P/s 589971.06 P/s vlan1006: 0.00 P/s 589785.25 P/s 589785.25 P/s vlan1012: 0.00 P/s 589494.50 P/s 589494.50 P/s vlan1013: 0.00 P/s 589495.50 P/s 589495.50 P/s enp4s0: 0.00 P/s 12601841.00 P/s 12601841.00 P/s vlan1007: 0.00 P/s 589537.50 P/s 589537.50 P/s vlan1002: 0.00 P/s 589943.06 P/s 589943.06 P/s vlan1009: 0.00 P/s 589306.69 P/s 589306.69 P/s enp2s0f1: 99.90 P/s 0.00 P/s 99.90 P/s vlan1015: 0.00 P/s 589553.44 P/s 589553.44 P/s vlan1003: 0.00 P/s 589823.19 P/s 589823.19 P/s ------------------------------------------------------------------------------ total: 12700832.00 P/s 24981906.00 P/s 37682740.00 P/s PerfTop: 124056 irqs/sec kernel:99.3% exact: 0.0% [4000Hz cycles], (all, 32 CPUs) --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 7.77% [kernel] [k] fib_table_lookup 7.37% [kernel] [k] do_raw_spin_lock 5.43% [kernel] [k] mlx5e_handle_rx_cqe_mpwrq 3.84% [kernel] [k] mlx5e_xmit 3.52% [kernel] [k] rt_cache_valid 3.46% [kernel] [k] ip_finish_output2 3.45% [kernel] [k] skb_dst_force 2.96% [kernel] [k] dst_release 2.62% [kernel] [k] __dev_queue_xmit 2.54% [kernel] [k] ip_rcv 2.26% [kernel] [k] ipt_do_table 1.97% [kernel] [k] __build_skb 1.94% [kernel] [k] __netif_receive_skb_core 1.94% [kernel] [k] ip_route_input_rcu 1.83% [kernel] [k] ip_forward 1.52% [kernel] [k] mlx5e_txwqe_complete 1.42% [kernel] [k] dev_gro_receive 1.31% [kernel] [k] mlx5_cqwq_get_cqe 1.28% [kernel] [k] netif_skb_features 1.21% [kernel] [k] ip_rcv_finish 1.18% [kernel] [k] inet_gro_receive 1.17% [kernel] [k] udp_v4_early_demux 1.14% [kernel] [k] dev_hard_start_xmit 1.03% [kernel] [k] mlx5e_txwqe_build_dsegs 1.02% [kernel] [k] mlx5e_poll_tx_cq 1.02% [kernel] [k] mlx5e_build_rx_skb 1.00% [kernel] [k] kmem_cache_alloc 0.95% [kernel] [k] __netdev_pick_tx 0.93% [kernel] [k] vlan_dev_hard_start_xmit 0.82% [kernel] [k] __napi_alloc_skb 0.79% [kernel] [k] read_tsc 0.76% [kernel] [k] validate_xmit_skb 0.75% [kernel] [k] napi_gro_receive 0.71% [kernel] [k] __local_bh_enable_ip 0.70% [kernel] [k] sch_direct_xmit 0.67% [kernel] [k] page_frag_free 0.66% [kernel] [k] skb_network_protocol 0.66% [kernel] [k] nf_hook_slow 0.63% [kernel] [k] netif_receive_skb_internal 0.62% [kernel] [k] vlan_passthru_hard_header 0.62% [kernel] [k] deliver_ptype_list_skb 0.62% [kernel] [k] __netif_receive_skb 0.61% [kernel] [k] fib_validate_source 0.61% [kernel] [k] mlx5_cqwq_get_cqe 0.55% [kernel] [k] eth_type_trans 0.55% [kernel] [k] iptable_filter_hook 0.53% [kernel] [k] __udp4_lib_lookup 0.53% [kernel] [k] udp_gro_receive 0.51% [kernel] [k] eth_header 0.49% [kernel] [k] fib_lookup.constprop.49 0.48% [kernel] [k] ip_output 0.44% [kernel] [k] netdev_pick_tx 0.43% [kernel] [k] validate_xmit_skb_list 0.42% [kernel] [k] swiotlb_map_page 0.41% [kernel] [k] dma_sync_single_for_cpu.constprop.36 0.41% [kernel] [k] mlx5_cqwq_get_wqe 0.39% [kernel] [k] eth_type_vlan 0.38% [kernel] [k] udp4_gro_receive 0.37% [kernel] [k] __jhash_nwords 0.37% [kernel] [k] ip_forward_finish 0.33% [kernel] [k] ip_finish_output 0.33% [kernel] [k] neigh_connected_output 0.31% [kernel] [k] mlx5e_features_check 0.29% [kernel] [k] ktime_get_with_offset 0.27% [kernel] [k] __udp4_lib_lookup_skb 0.27% [kernel] [k] napi_consume_skb 0.26% [kernel] [k] page_frag_alloc 0.26% [kernel] [k] get_dma_ops 0.25% [kernel] [k] udp4_portaddr_hash.isra.29 0.24% [kernel] [k] skb_dst_drop.isra.76 0.24% [kernel] [k] neigh_resolve_output 0.24% [kernel] [k] skb_release_data 0.22% [kernel] [k] kmem_cache_free_bulk 0.22% [kernel] [k] get_dma_ops 0.22% [kernel] [k] _kfree_skb_defer 0.21% [kernel] [k] ip_skb_dst_mtu 0.21% [kernel] [k] is_swiotlb_buffer 0.21% [kernel] [k] find_exception 0.21% [kernel] [k] compound_head 0.21% [kernel] [k] __net_timestamp.isra.89 W dniu 2017-09-11 o 18:57, Paweł Staszewski pisze:
Tested with connectx-5 Without patch 10Mpps - > 16 cores used PerfTop: 66258 irqs/sec kernel:99.3% exact: 0.0% [4000Hz cycles], (all, 32 CPUs) --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 10.12% [kernel] [k] do_raw_spin_lock 6.31% [kernel] [k] fib_table_lookup 6.12% [kernel] [k] mlx5e_handle_rx_cqe_mpwrq 4.90% [kernel] [k] rt_cache_valid 3.99% [kernel] [k] mlx5e_xmit 3.03% [kernel] [k] ip_rcv 2.68% [kernel] [k] __netif_receive_skb_core 2.54% [kernel] [k] skb_dst_force 2.41% [kernel] [k] ip_finish_output2 2.21% [kernel] [k] __build_skb 2.03% [kernel] [k] __dev_queue_xmit 1.96% [kernel] [k] mlx5e_txwqe_complete 1.79% [kernel] [k] ipt_do_table 1.78% [kernel] [k] inet_gro_receive 1.69% [kernel] [k] ip_forward 1.66% [kernel] [k] udp_v4_early_demux 1.65% [kernel] [k] dst_release 1.56% [kernel] [k] ip_rcv_finish 1.45% [kernel] [k] dev_gro_receive 1.45% [kernel] [k] netif_skb_features 1.39% [kernel] [k] mlx5e_poll_tx_cq 1.35% [kernel] [k] mlx5e_txwqe_build_dsegs 1.35% [kernel] [k] ip_route_input_rcu 1.15% [kernel] [k] dev_hard_start_xmit 1.12% [kernel] [k] napi_gro_receive 1.07% [kernel] [k] netif_receive_skb_internal 0.98% [kernel] [k] sch_direct_xmit 0.95% [kernel] [k] kmem_cache_alloc 0.89% [kernel] [k] read_tsc 0.88% [kernel] [k] mlx5e_build_rx_skb 0.86% [kernel] [k] mlx5_cqwq_get_cqe 0.82% [kernel] [k] page_frag_free 0.78% [kernel] [k] __local_bh_enable_ip 0.69% [kernel] [k] skb_network_protocol 0.68% [kernel] [k] __netif_receive_skb 0.67% [kernel] [k] vlan_dev_hard_start_xmit 0.65% [kernel] [k] mlx5e_poll_rx_cq 0.65% [kernel] [k] validate_xmit_skb 0.60% [kernel] [k] eth_type_trans 0.60% [kernel] [k] deliver_ptype_list_skb 0.60% [kernel] [k] fib_validate_source 0.55% [kernel] [k] eth_header 0.53% [kernel] [k] netdev_pick_tx 0.53% [kernel] [k] __napi_alloc_skb 0.51% [kernel] [k] __udp4_lib_lookup 0.50% [kernel] [k] eth_type_vlan 0.49% [kernel] [k] ip_output 0.49% [kernel] [k] page_frag_alloc 0.49% [kernel] [k] ip_finish_output 0.48% [kernel] [k] neigh_connected_output 0.45% [kernel] [k] nf_hook_slow 0.44% [kernel] [k] udp4_gro_receive 0.39% [kernel] [k] mlx5e_features_check 0.39% [kernel] [k] mlx5e_napi_poll 0.37% [kernel] [k] __jhash_nwords 0.37% [kernel] [k] udp_gro_receive 0.36% [kernel] [k] swiotlb_map_page 0.33% [kernel] [k] mlx5_cqwq_get_wqe 0.33% [kernel] [k] __netdev_pick_tx 0.29% [kernel] [k] ktime_get_with_offset 0.29% [kernel] [k] get_dma_ops 0.29% [kernel] [k] validate_xmit_skb_list 0.26% [kernel] [k] vlan_passthru_hard_header 0.26% [kernel] [k] __udp4_lib_lookup_skb 0.24% [kernel] [k] get_dma_ops 0.24% [kernel] [k] skb_release_data 0.23% [kernel] [k] ip_forward_finish 0.23% [kernel] [k] kmem_cache_free_bulk 0.23% [kernel] [k] timekeeping_get_ns 0.22% [kernel] [k] ip_skb_dst_mtu 0.21% [kernel] [k] compound_head 0.20% [kernel] [k] skb_gro_reset_offset 0.20% [kernel] [k] is_swiotlb_buffer 0.19% [kernel] [k] __net_timestamp.isra.90 0.19% [kernel] [k] dst_metric.constprop.61 0.18% [kernel] [k] skb_orphan_frags.constprop.126 0.18% [kernel] [k] _kfree_skb_defer 0.18% [kernel] [k] irq_entries_start 0.17% [kernel] [k] dev_hard_header.constprop.54 0.17% [kernel] [k] dma_mapping_error 0.17% [kernel] [k] neigh_resolve_output With patch 12Mpps -> 16 cores PerfTop: 66209 irqs/sec kernel:99.3% exact: 0.0% [4000Hz cycles], (all, 32 CPUs) --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 10.67% [kernel] [k] do_raw_spin_lock 6.96% [kernel] [k] fib_table_lookup 6.53% [kernel] [k] mlx5e_handle_rx_cqe_mpwrq 4.17% [kernel] [k] mlx5e_xmit 3.22% [kernel] [k] ip_rcv 3.07% [kernel] [k] __netif_receive_skb_core 2.86% [kernel] [k] __dev_queue_xmit 2.36% [kernel] [k] __build_skb 2.33% [kernel] [k] ip_forward 2.05% [kernel] [k] mlx5e_txwqe_complete 2.02% [kernel] [k] ip_finish_output2 2.00% [kernel] [k] ipt_do_table 1.84% [kernel] [k] ip_rcv_finish 1.83% [kernel] [k] inet_gro_receive 1.80% [kernel] [k] udp_v4_early_demux 1.61% [kernel] [k] dev_gro_receive 1.55% [kernel] [k] netif_skb_features 1.52% [kernel] [k] mlx5e_txwqe_build_dsegs 1.47% [kernel] [k] mlx5e_poll_tx_cq 1.39% [kernel] [k] ip_route_input_rcu 1.38% [kernel] [k] dev_hard_start_xmit 1.17% [kernel] [k] netif_receive_skb_internal 1.16% [kernel] [k] napi_gro_receive 1.03% [kernel] [k] kmem_cache_alloc 1.02% [kernel] [k] sch_direct_xmit 0.97% [kernel] [k] read_tsc 0.94% [kernel] [k] page_frag_free 0.91% [kernel] [k] mlx5_cqwq_get_cqe 0.90% [kernel] [k] mlx5e_build_rx_skb 0.89% [kernel] [k] skb_network_protocol 0.83% [kernel] [k] __local_bh_enable_ip 0.79% [kernel] [k] validate_xmit_skb 0.77% [kernel] [k] vlan_dev_hard_start_xmit 0.74% [kernel] [k] __netif_receive_skb 0.72% [kernel] [k] mlx5e_poll_rx_cq 0.70% [kernel] [k] netdev_pick_tx 0.69% [kernel] [k] eth_type_vlan 0.68% [kernel] [k] __netdev_pick_tx 0.66% [kernel] [k] nf_hook_slow 0.65% [kernel] [k] deliver_ptype_list_skb 0.62% [kernel] [k] fib_validate_source 0.61% [kernel] [k] eth_header 0.60% [kernel] [k] eth_type_trans 0.59% [kernel] [k] __udp4_lib_lookup 0.58% [kernel] [k] __napi_alloc_skb 0.53% [kernel] [k] ip_finish_output 0.51% [kernel] [k] neigh_connected_output 0.50% [kernel] [k] ip_output 0.50% [kernel] [k] rt_cache_valid 0.44% [kernel] [k] udp4_gro_receive 0.43% [kernel] [k] mlx5e_napi_poll 0.40% [kernel] [k] udp_gro_receive 0.40% [kernel] [k] page_frag_alloc 0.40% [kernel] [k] __jhash_nwords 0.39% [kernel] [k] swiotlb_map_page 0.38% [kernel] [k] mlx5_cqwq_get_wqe 0.36% [kernel] [k] mlx5e_features_check 0.32% [kernel] [k] get_dma_ops 0.31% [kernel] [k] ktime_get_with_offset 0.31% [kernel] [k] validate_xmit_skb_list 0.28% [kernel] [k] vlan_passthru_hard_header 0.28% [kernel] [k] get_dma_ops 0.27% [kernel] [k] __udp4_lib_lookup_skb 0.26% [kernel] [k] skb_gro_reset_offset 0.25% [kernel] [k] skb_release_data 0.25% [kernel] [k] timekeeping_get_ns 0.24% [kernel] [k] kmem_cache_free_bulk 0.24% [kernel] [k] ip_forward_finish 0.23% [kernel] [k] compound_head 0.23% [kernel] [k] ip_skb_dst_mtu 0.22% [kernel] [k] __net_timestamp.isra.90 0.22% [kernel] [k] is_swiotlb_buffer 0.21% [kernel] [k] neigh_resolve_output 0.21% [kernel] [k] dst_metric.constprop.61 0.20% [kernel] [k] skb_orphan_frags.constprop.126 0.20% [kernel] [k] irq_entries_start 0.19% [kernel] [k] mlx5e_calc_min_inline 0.19% [kernel] [k] dev_hard_header.constprop.54 0.19% [kernel] [k] _kfree_skb_defer 0.18% [kernel] [k] _raw_spin_lock 0.18% [kernel] [k] ip_route_input_noref W dniu 2017-09-09 o 11:03, Paweł Staszewski pisze:quoted
Hi Are there any plans to have this fix normally in kernel ? Or it is mostly only hack - not longterm fix and need to be different ? All tests that was done shows that without this patch there is about 20-30% network forwarding performance degradation when using vlan interfaces Thanks Paweł W dniu 2017-08-15 o 03:17, Eric Dumazet pisze:quoted
On Mon, 2017-08-14 at 18:07 -0700, Eric Dumazet wrote:quoted
Or try to hack the IFF_XMIT_DST_RELEASE flag on the vlan netdev.Something like :diff --git a/net/8021q/vlan_netlink.c b/net/8021q/vlan_netlink.c index 5e831de3103e2f7092c7fa15534def403bc62fb4..9472de846d5c0960996261cb2843032847fa4bf7 100644 --- a/net/8021q/vlan_netlink.c +++ b/net/8021q/vlan_netlink.c@@ -143,6 +143,7 @@ static int vlan_newlink(struct net *src_net, struct net_device *dev,vlan->vlan_proto = proto; vlan->vlan_id = nla_get_u16(data[IFLA_VLAN_ID]); vlan->real_dev = real_dev; + dev->priv_flags |= (real_dev->priv_flags & IFF_XMIT_DST_RELEASE); vlan->flags = VLAN_FLAG_REORDER_HDR; err = vlan_check_real_dev(real_dev, vlan->vlan_proto, vlan->vlan_id);