網卡綁定核心

來源:互聯網
上載者:User

網卡綁定核心 單進程、非同步I/O應該可以獲得最優的通訊效能,但在現實中,我們常常發現這種模式達不到預期的效果,這可能是由於網卡在和應用程式爭奪CPU資源。硬體中斷的頻繁發生是一件很消耗CPU資源的事情,在多CPU、多核心的條件下,如果有辦法把大量硬體中斷分配給特定的CPU核心進行處理,就能獲得更好的效能。現在的伺服器基本都是多CPU、多核心、多網卡、多硬碟,如果能分散和平衡各個中斷,綁定特定的硬體中斷到特定的CPU核心上,例如讓網卡中斷獨佔1個CPU 核心,磁碟I/O中斷獨佔1個CPU核心,那麼將會大大減輕單一CPU的負擔,提高整體的處理效率。 1、什麼是中斷?   中文教材上對“中斷”的定義太生硬了,簡單的說就是:每個硬體裝置(如硬碟、網卡等)都需要和CPU進行某種形式的通訊,以便CPU及時知道發生了什麼事情,這樣CPU可能就會放下手中的事情去處理應急事件,硬體裝置主動打擾CPU的現象就可以稱為硬體中斷。就像你正在工作的時候受到QQ幹擾一樣,一次QQ頭像閃動就可以被理解為中斷。   中斷是一種比較好的CPU和硬體溝通的方式,還有一種方式叫做輪詢(Polling),就是讓CPU定時地對硬體狀態進行查詢然後做相應處理,就好像你每隔5分鐘去檢查一下QQ,看看有沒有人找你一樣,這種方式是不是很浪費時間呢?所以中斷是硬體主動的方式,比輪詢(CPU主動)更有效。這裡又有了一個問題,每個硬體裝置都中斷,那麼如何區分不同硬體呢?不同裝置同時中斷如何知道哪個中斷是來自硬碟,哪個來自網卡呢?這個其實很容易,就好像每個QQ的號碼都不相同,同樣的,系統會為每個硬體裝置分配一個IRQ號,通過這個唯一的IRQ號就能區別不同的硬體了。   在電腦裡,中斷是一種電訊號,由硬體產生,並直接送到中斷控制器上,然後再由中斷控制器向CPU發送訊號,CPU檢測到該訊號後,就中斷當前的工作轉而去處理中斷。然後,處理器會通知作業系統已經產生中斷,這樣作業系統就會對這個中斷進行適當的處理。現在來看一下中斷控制器,常見的中斷控制器有兩種:可程式化插斷控制器8259A和進階可程式化插斷控制器(APIC)。傳統的8259A只適合單CPU的情況,現在都是多CPU、多核心的SMP體系,所以為了充分利用SMP體繫結構,把中斷傳遞給系統上的每個CPU以便更好實現並行和提高效能,Intel引入了進階可程式化插斷控制器(APIC)。   光有進階可程式化插斷控制器的硬體支援還不夠,Linux核心還必須能利用這些硬體的特質,所以只有kernel 2.4以後的版本才支援把不同的硬體插斷要求(IRQs)分配到特定的CPU核心上,這個綁定技術被稱為SMP IRQ Affinity。更多介紹請參看Linux核心原始碼內建的文檔:linux-2.6.31.8/Documentation/IRQ-affinity.txt。 2、如何使用?   我們首先來瞭解兩個基本命令: cat /proc/interrupts,查看系統上的中斷情況,通常網卡的中斷會被分配到CPU0上。cat cat /proc/cpuinfo,查看CPU資訊,有多少CPU,有多少核心。  然後我們使用命令來查看系統上的中斷是如何分配到CPU上的,很顯然CPU0上處理的中斷多一些: # cat /proc/interrupts   CPU0 CPU1 0: 1: 8: 9: 12: 14: 50: 58: 90: 233: NMI: LOC: ERR: MIS: 918926335 2 0 0 4 8248017 194 31673 1070374 10 5077 918809969 0 0 0 0 0 0 0 0 0 0 0 0 2032 918809894 0 0 IO-APIC-edge IO-APIC-edge IO-APIC-edge IO-APIC-level IO-APIC-edge IO-APIC-edge IO-APIC-level IO-APIC-level PCI-MSI IO-APIC-level timer i8042 rtc acpi i8042 ide0 ohci_hcd:usb2 sata_nv eth0 ehci_hcd:usb1   為了不讓CPU0負載過大,如何將部分中斷轉移到CPU1上呢?或者說如何把eth0網卡的中斷轉到CPU1上呢?首先,我們需要查看一下IRQ 90(即eth0網卡的IRQ號)中斷的smp affinity,看看當前中斷是怎麼分配在不同的CPU上的(ffffffff意味著分配在所有可用CPU上): # cat /proc/irq/90/smp_affinity 7fffffff,ffffffff,ffffffff,ffffffff,ffffffff,ffffffff,ffffffff,ffffffff   在進一步動手之前,我們需要先停掉IRQ自動調節的服務進程,這樣才能手動綁定IRQ到不同CPU上,否則自己手動綁定做的更改將會被自動調節進程覆蓋掉。如果想修改IRQ 90的中斷處理,綁定到第2個CPU(CPU1)上,需要執行以下命令: # /etc/init.d/irqbalance stop # echo "2" > /proc/irq/90/smp_affinity   這裡需要說明一下“echo 2 > /proc/irq/90/smp_affinity”中的“2”是怎麼來的。這其實是個位元字,代表00000010,如果00000001代表CPU0的話,那麼00000010就代表 CPU1,“echo 2 > /proc/irq/90/smp_affinity”的意思就是把90中斷綁定到00000010(CPU1)上。所以,各個CPU可以用二進位和十六進位表示為:       Binary    Hex CPU 0  00000001    1 CPU 1  00000010    2 CPU 2  00000100    4 CPU 3  00001000    8   如果想把IRQ綁定到CPU2(即00000100=4)上,那就執行以下命令: # echo "4" > /proc/irq/90/smp_affinity   如果想把IRQ同時平衡到CPU0和CPU2上,即00000001+00000100=00000101=5,那就執行以下命令: # echo "5" > /proc/irq/90/smp_affinity   還有一個限制是,IO-APIC有兩種工作模式:logic和physical。在logic模式下,IO-APIC可以同時分布同一種中斷到8個CPU核心上(受到bitmask寄存器的限制,因為bitmask只有8位);在physical模式下,不能同時分布同一種中斷到不同的CPU核心上,例如不能讓eth0中斷同時由CPU0和CPU1處理,這個時候只能定位eth0到CPU0,定位eth1到CPU1,也就是說,eth0中斷不能像logic模式那樣可以同時由多個CPU核心進行處理。   過一段時間後,再查看/proc/interrupts資訊,發現90: eth0在CPU1上的中斷增加了145次,不斷列印/proc/interrupts資訊就會發現eth0在CPU0上的中斷數始終保持不變,而在 CPU1上的中斷數是持續增加的,這正是我們想要的結果: # cat /proc/interrupts   CPU0 CPU1 0: 1: 8: 9: 12: 14: 50: 58: 90: 233: NMI: LOC: ERR: MIS: 922506515 2 0 0 4 8280147 194 31907 1073399 10 5093 922389696 0 0 0 0 0 0 0 0 0 0 145 0 2043 922389621 0 0 IO-APIC-edge IO-APIC-edge IO-APIC-edge IO-APIC-level IO-APIC-edge IO-APIC-edge IO-APIC-level IO-APIC-level PCI-MSI IO-APIC-level timer i8042 rtc acpi i8042 ide0 ohci_hcd:usb2 sata_nv eth0 ehci_hcd:usb1 3、有什麼用?   在網路負載非常重的情況下,對於檔案伺服器、高流量Web伺服器這樣的應用來說,把不同的網卡IRQ均衡地綁定到不同的CPU核心上,將會減輕單個CPU的負擔,提高多CPU、多核心的整體處理中斷的能力。對於資料庫伺服器這樣的應用來說,把磁碟控制卡綁到一個CPU核心,把網卡綁定到另一個CPU核心上,將會提高資料庫的回應時間,達到最佳化效能的目的。合理地根據自己的生產環境和應用的特點來平衡IRQ中斷有助於提高系統的整體吞吐能力和效能。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.