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