linux 网络RPS/RFS/XPS
生活随笔
收集整理的這篇文章主要介紹了
linux 网络RPS/RFS/XPS
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
?
1. 介紹 在網絡非常 heavy 的情況下,對于文件服務器、高流量 Web 服務器這樣的應用來說,把不同的網卡 IRQ 均衡綁定到不同的 CPU 上將會減輕某個 CPU 的負擔,提高多個 CPU 整體處理中斷的能力; 以網卡中斷為例,在沒有設置SMP IRQ affinity時, 所有網卡中斷都關聯到CPU0, 這導致了CPU0負載過高,而無法有效快速的處理網絡數據包,導致了瓶頸。 通過SMP IRQ affinity, 把單網卡多個隊列中斷分配到多個CPU上,可以分散CPU壓力,提高數據處理速度。但是smp_affinity要求網卡支持多隊列,網卡有多隊列,才會有多個中斷號,這樣就可以把不同的中斷號分配到不同CPU上,這樣中斷號就能相對均勻的分配到不同的CPU上。 而單隊列的網卡可以通過RPS/RFS來模擬多隊列的情況,但是該效果并不如網卡本身多隊列+開啟RPS RFS 來的有效。 Linux系統采用中斷機制協同處理CPU與其他設備工作。網卡的中斷默認由cpu0處理,在大量請求的網絡環境下可能出現cpu0負載高,而其他cpu空閑。后來出現網卡多隊列技術解決這個問題。 1)RSS RSS(Receive Side Scaling)是網卡的硬件特性,實現了多隊列,可以將不同的queue中斷分發到不同的CPU上。多隊列網卡是一種技術,最初是用來解決網絡IO QoS?(quality of service)問題的,后來隨著網絡IO的帶寬的不斷提升,單核CPU不能完全處滿足網卡的需求,通過多隊列網卡驅動的支持,將各個隊列通過中斷綁定到不同的核上,以滿足網卡的需求,同時也可以降低CPU0的負載。 雖然說RSS實現了中斷的分配,但是如果隊列數 < 機器總核數 并且CPU與中斷號一一對應了,會出現軟中斷負載跑在0-7核上,其他核不處理軟中斷的情況,0-7核負載依然會很高。 MC40 網卡支持多隊列,但隊列不支持中斷,只有一個總中斷! 2)RPS Receive Packet Steering 可以將軟中斷分給其他 CPU。 RSS需要硬件支持,在只支持單隊列或多隊列的環境中,RPS/RFS提供了軟件的解決方案。 RPS(Receive Packet Steering)是基于RSS軟件方式實現CPU均衡,接收包中斷的優化,是把一個或多個rx隊列的軟中斷分發到多個CPU核上,從而達到全局負載均衡的目的。 3)RFS RFS(Receive Flow Steering)是RPS的擴展,由于RPS只是單純的把數據包均衡到不同的CPU上,此時如果應用程序所在CPU和中斷處理的CPU不在同一個核,將會對CPU Cache影響很大,RFS的作用就是將應用程序和軟中斷處理分配到同一個CPU。 4)XPS http://www.cnhalo.net/2016/10/14/linux-xps/ Why XPS? 如果過多的cpu使用相同的tx隊列,那么加重tx對應的qdisc鎖的爭搶。 如果每個cpu只關聯了一個tx,甚至能消除競爭。 可以減小因為發送完成中斷造成的cache miss。 因此xps_cpus的配置最好結合/proc/irq/xxx/smp_affinity。 2. ARM linux kernel需要打開以下選項:- CONFIG_RPS=y
- CONFIG_RFS_ACCEL=y
- CONFIG_XPS=y
啟用RPS后,約有1/3的soft_irq被隨機分配到另外一個CPU上。
2)XPS ls /sys/class/net/eth0/queues/ rx-0??tx-0ls /sys/class/net/eth0/queues/tx-0/ byte_queue_limits??tx_maxrate?????????xps_cpus traffic_class??????tx_timeout?????????xps_rxqscat /sys/class/net/eth0/queues/tx-0/xps_cpus 0cat /sys/class/net/eth0/queues/tx-0/xps_rxqs 00echo 4 > /sys/class/net/eth1/queues/tx-0/xps_cpus需要隊列支持中斷,且配置好每個隊列中斷的CPU親和smp_affinity。
3)RFS ?cat /proc/sys/net/core/rps_sock_flow_entries 0 cat /sys/class/net/eth0/queues/rx-0/rps_flow_cnt 0echo 32768 > /proc/sys/net/core/rps_sock_flow_entries echo??8192 > /sys/class/net/eth1/queues/rx-0/rps_flow_cnt啟用RPS+RFS后,約有1/3的soft_irq被隨機分配到其它三個CPU core上。
?
總結
以上是生活随笔為你收集整理的linux 网络RPS/RFS/XPS的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 惊了!小米雷军转发奥迪广告片 难道是在暗
- 下一篇: linux修改进程优先级