網卡中斷不均衡處理


在數據量大的時候,硬中斷和軟中斷會形成瓶頸。

網卡接收數據包,從網卡產生中斷信號,CPU將網絡數據包拷貝到內核,然后進行協議棧的處理,最后將數據部分傳遞給用戶空間,但硬件中斷處理僅僅做從網卡拷貝數據的工作,而協議棧的處理的工作就交給軟中斷處理。所以當硬中斷和軟中斷集中在cpu0的時候,會給調度帶來負擔(集中在其他cpu也會造成性能瓶頸,這里舉cpu0的例子,是因為集中在cpu0影響最大)。

  1. 關閉irqbalance服務,service irqbalance stop,irqbalance在負載不高的時候是不錯的服務,但負載太高,就顯得力不從心,關閉irqbalance服務,我們自己手動綁定中斷號到cpu。
  2. 然后確定使用的是哪個網卡,先lshw -C network –short看看都有哪些網卡。

       

可知有eth0 eth1 eth2 eth3四個網卡

  1. 然后ifconfig看下各網卡的流量,跑壓測,再ifconfig,對比前后流量,可知是哪個網卡在跑。

壓測前

      

壓測后

      

對比前后流量,可知用的是eth2

  1. 獲取網卡的中斷號

      

                  可知中斷號是72-80

2.綁定

echo 9 > /proc/irq/72/smp_affinity_list

echo 10 > /proc/irq/73/smp_affinity_list

echo 11 > /proc/irq/74/smp_affinity_list

echo 12 > /proc/irq/75/smp_affinity_list

echo 13 > /proc/irq/76/smp_affinity_list

echo 14 > /proc/irq/77/smp_affinity_list

echo 15> /proc/irq/78/smp_affinity_list

echo 16 > /proc/irq/79/smp_affinity_list

echo 17 > /proc/irq/80/smp_affinity_list

 

         網卡中斷號的綁定可以分散硬中斷,不過這樣還不夠徹底,因為硬中斷集中在上述配置的幾個核上,且軟中斷在硬中斷結束后工作,也在同一個核上,一個核同時跑硬中斷和軟中斷,這樣會大大降低硬中斷和軟中斷的處理速度,會對性能造成極大的瓶頸,因為如果中斷沒處理完,就無法分發請求到haproxy的各進程。

可通過rps和rfs,將軟中斷均衡到各個核上。

echo ffffff > /sys/class/net/eth2/queues/rx-0/rps_cpus     24核,所以設置fffff,分散到各核

echo ffffff > /sys/class/net/eth2/queues/rx-1/rps_cpus

echo ffffff > /sys/class/net/eth2/queues/rx-2/rps_cpus

echo ffffff > /sys/class/net/eth2/queues/rx-3/rps_cpus

echo ffffff > /sys/class/net/eth2/queues/rx-4/rps_cpus

echo ffffff > /sys/class/net/eth2/queues/rx-5/rps_cpus

echo ffffff > /sys/class/net/eth2/queues/rx-6/rps_cpus

echo ffffff > /sys/class/net/eth2/queues/rx-7/rps_cpus

 

echo 4096 > /sys/class/net/eth2/queues/rx-0/rps_flow_cnt    32768/N,N為網卡多隊列的隊列數

echo 4096 > /sys/class/net/eth2/queues/rx-1/rps_flow_cnt

echo 4096 > /sys/class/net/eth2/queues/rx-2/rps_flow_cnt

echo 4096 > /sys/class/net/eth2/queues/rx-3/rps_flow_cnt

echo 4096 > /sys/class/net/eth2/queues/rx-4/rps_flow_cnt

echo 4096 > /sys/class/net/eth2/queues/rx-5/rps_flow_cnt

echo 4096 > /sys/class/net/eth2/queues/rx-6/rps_flow_cnt

echo 4096 > /sys/class/net/eth2/queues/rx-7/rps_flow_cnt

echo 32768 > /proc/sys/net/core/rps_sock_flow_entries


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM