基本思路是如何讓cpu的超執行緒或者多核更加均衡和高效的利用起來,我們知道總是有一塊cpu去專門響應網絡卡的中斷請求,如果網路請求包非常大,很可能單個cpu就處理不過來,因此,需要啟用多核或者超執行緒,把網絡卡中斷請求分發到多個cpu去執行,從而提高整體伺服器的接入效能,也是提高cpu資源利用率的好辦法。下面分別進行討論:
一, 雙cpu超執行緒的伺服器
我們知道,在linux下,對於雙cpu超執行緒的伺服器而已,如果核心啟用了cpu的超執行緒功能(ht), 則通過cat /proc/cpuinfo 可以識別到4塊cpu: cpu0-3,其中cpu0和cpu1是同一真實cpu的本身和它的超執行緒出的cpu,cpu2和cpu3也是同理一對。
我們可以配置網絡卡的irq路由,來選擇指定的一塊cpu來處理對應網絡卡中斷請求,從而使得多塊網絡卡的中斷處理分別分攤到2塊真實的cpu上,達到充分發揮雙cpu的效能。
1, 首先我們可以通過訪問/proc/cpuinfo的資訊檢視到cpu的具體資訊。
cat /proc/cpuinfo
cat /proc/cpuinfo | grep processor
cat /proc/cpuinfo | grep processor| wc –l
最後的命令可以得到當前cpu的個數。
2, 分別獲取eth0和eth1網絡卡的中斷irq號,並且賦值給shell變數
eth0_irq_num =`cat /proc/interrupts | grep eth0 | awk -f ':' ''`
eth1_irq_num =`cat /proc/interrupts | grep eth1 | awk -f ':' ''`
3, 指定cpu來處理對應網絡卡的中斷請求
首先可以檢視一下現有的cpu情況(需要root使用者):
cat /proc/irq/$eth0_irq_num/smp_affinity
cat /proc/irq/$eth1_irq_num/smp_affinity
echo 8 > /proc/irq/$eth0_irq_num/smp_affinity
(指定cpu3來處理網絡卡eth0的中斷請求)
echo 2 >/proc/irq/$eth1_irq_num/smp_affinity
(指定cpu1來處理網絡卡eth1的中斷請求)
4, 檢視切換後的效果
watch cat /proc/interrupts
可以看到每隔2s的時間間隔的中斷處理效果
二, 雙cpu雙核的伺服器
在linux下,對雙cpu雙核的伺服器來說,若核心沒有開啟超執行緒ht選項,則訪問cat /proc/cpuinfo可以識別到4塊cpu,分別是cpu0-3,其中cpu0和cpu1是同一真實cpu的兩個核,同理,cpu2和cpu3是另外乙個真實cpu的兩個核。並且對同屬於真實乙個cpu的核共享4m的二級cache,因此,如果我們將一塊網絡卡的中斷請求對應到同一真實cpu的2個核上,可以在保證二級cache命中率的前提下,充分發揮雙核心cpu的效能優勢,從而提高整體伺服器的效能。
具體的設定方法,如上說明。
三, 附加說明
注意:對smp_affinity,乙個位元組(8個bit)本質上對應二進位制位:******xx,分別表示cpu7,cpu6,cpu5,cpu4,cpu3,cpu2,cpu1,cpu0,對應的位為1, 表示對應的cpu選中狀態。
1, echo 8 > /proc/irq/$eth0_nu/smp_affinity,由於8 = 1000,所以是指定cpu3來響應。
2, echo 2 > /proc/irq/$eth1_nu/smp_affinity,由於2 = 0010,所以是指定cpu1來響應。
3, echo c > /proc/irq/$eth0_nu/smp_affinity,由於c = 1100,所以是指定cpu2和cpu3來響應。
4, echo 3 > /proc/irq/$eth1_nu/smp_affinity,由於3 = 0011,所以是指定cpu0和cpu1來響應。
充分利用會議
這是我的好朋友patroklos組織的2017年我的最後一次會議,即塞薩洛尼基voxxed day 我幾年前開始參加會議。參加會議是一項投資,無論是時間上的還是金錢上的 或兩者兼有 您應該確保從投資中獲得最大收益。在這篇文章中,我想寫下實現這一目標的方法。未雨綢繆 要做的第一件事是提前獲得可用對話的...
充分利用Unique Index
假如我們是一服裝公司,在接受定單的時候,我們就要檢測,乙個季度是否有重複的訂單,但然,在我們接受打單的時候,也要做乙個檢測。怎麼完成這項任務呢?我想,除了我們在程式級設定檢測以外,最重要的就是資料庫本身了。下面我們就試著來解決這個問題 下面是我們的資料庫設計,當然是簡略版的 orders 訂單表,主...
用 taskset 充分利用多核cpu
常常感覺系統資源不夠用,一台機子上跑了不下3個比較重要的服務,但是每天我們還要在上面進行個備份壓縮等處理,網路長時間傳輸,這在就很影響本就不夠用的系統資源 這個時候我們就可以把一些不太重要的比如copy 備份 同步等工作限定在一顆cpu上,或者是多核的cpu的一顆核心上進行處理,雖然這不一定是最有效...