網絡流量相關

中斷

     簡單的說,每個設備(網卡、硬盤等)都需要和CPU有某種形式的通信以便CPU及時知道發生了什麼事情,這樣CPU就會放下手中的事情去處理應急事件,硬件設備主動打擾CPU的現象就是硬件中斷。
     硬中斷的特點:
  • 硬中斷是由硬件產生,比如硬盤、網卡、鍵盤燈。每個設備都有它自己的IRQ(中斷請求)。基於IRQ,CPU可以相應的將請求分配到對應的硬件驅動(硬件驅動通常是內核中的一個子程序,而不是一個獨立的進程)。
  • 處理中斷的驅動是需要運行在CPU上的,因此當中斷產生的時候,CPU會中斷當前正在運行的任務,來處理中斷。有多核的系統上,一箇中斷通常只能中斷一個CPU(也有特殊的情況,就是在大型主機上有硬件通道的,它可以沒有主CPU的支持下,可以同時處理多箇中斷)。
  • 硬中斷可以直接中斷CPU。它會引起內核中相關的代碼被觸發。對於那些需要花費一些時間去處理的進程,中斷代碼本身可以被其他硬中斷中斷。
  • 對於時鐘中斷,內核調度代碼會將當前正在運行的進程掛起,從而讓其他的進程運行。它的存在是爲了讓調度器可以調度多任務。
     軟中斷特點:
  • 軟中斷的處理非常像硬中斷。然而,它們僅僅是由當前運行的進程產生的。
  • 通常,軟中斷是一些對IO請求。這些請求會調用內核中可以調度IO發生的程序。對於某些設備,IO請求需要被立即處理,而磁盤IO請求通常可以排隊並且稍後處理。根據IO模型的不同,進程或許會被掛起直到IO完成,此時內核調度器會選擇另一個進程去運行。IO可以在進程之間產生並且調度過程和磁盤IO的方式相同。
  • 軟中斷僅與內核有聯繫。而內核主要負責對需要運行的其他的進程進行調度。一些內核允許設備驅動的一部分在用戶空間,並且當需要的時候內核也會調度這個進程去運行。
  • 軟中斷不會直接中斷CPU。而只有當前運行的代碼(進程)纔會產生軟中斷。這種中斷是一種需要內核爲正在運行的進程去做一些事情的請求。
SMP IRQ Affinity

     新的內核,Linux改進了分配特定中斷到指定的處理器(或處理器組)的功能,這被稱爲SMP IRQ Affinity,它可以控制系統如何響應各種硬件時間。允許你限制或者重新分配服務器的工作負載,從而讓服務器更有效的工作,以網卡中斷爲例,在沒有設置SMP IRQ Affinity時,所有網卡中斷都關聯到CPU0,這導致了CPU0負載過高,而無法有效快速的處理網絡數據包,導致了瓶頸。通過SMP IRQ Affinity,把網卡多箇中斷分配到多個CPU上,可以分散CPU壓力,提高數據處理速度。

Irqbalance

     irqbalance用於優化中斷分配,它會自動收集系統數據以分析使用模式,並根據系統負載狀況將工作狀態置於Performance mode或 Power-save mode。處於Performance mode時,irqbalance會將中斷儘可能均勻地發給各個CPU以充分利用CPU多核,提高性能。Power-save mode時,irqbalance會將中斷集中分配給第一個CPU,以保證其他空閒CPU的睡眠時間,降低能耗。
     在非常繁重的系統中,並沒有節能的需求,而是充分利用各個cpu的性能,而事實上在一個大量小包的系統上,irqbalance優化並沒有達到效果,而是使得cpu消耗非常不均衡,導致機器性能得到不到充分的利用。

多隊列網卡技術

     多隊列網卡是一種技術,最初用於解決網絡IO Qos問題的,隨着網絡IO帶寬的不斷提升,單核CPU不能完全滿足網卡的需求,通過多隊列網卡驅動的支持,將各個隊列通過中斷綁定到不同的核上。其實用bonding網卡綁定在一定程度上可以做中斷負載均衡,不同的網卡中斷號綁定在不同的cpu核上。

操作過程


cat  /proc/interrupts可以查看中斷情況,同時可以看到網卡是否支持多隊列方式。

在上面的命令中可以看到是否爲多隊列方式。如果是對隊列方式,那麼左邊的數字即爲當前網卡中斷對應的終端號,這裏以94爲例,可以通過設置94中斷號(即爲eth1-TxRx-2隊列中斷)。
在/proc/irq/$num下面可以配置當前中斷綁定設置。
修改當前中斷對應的cpu核,有兩種方式,一種是smp_affinity,一個是smp_affinity_list,其中smp_affinity_list用十進制表示,這裏設置的爲當前終端綁定到cpu2



參考文章:
http://blog.netzhou.net/?p=181
http://rfyiamcool.blog.51cto.com/1030776/1335700




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章