第3章 Linux内核调试手段之三
之前的內核調試,我覺得應該再加上下面的東西,只有好好把下面的幾個問題研究透了,你可能才是一個真正的內核高手,或者說,你還不是一個高手,就是一個內核的普通工程師,這個是我和Z總聊天說的,我當時問他,你對Linux內核熟悉嗎?Z總給我說了一句,還可以吧。然后,這些內容都是他給我總結的,這些內容,我覺得,沒有經過多年的項目捶打,光靠看書看報,百度搜狗出來是沒有用的,現在總結出來,希望給正在一線的同學們一些幫助和建議。
性能優化方式總結:
多核多隊列并行處理
將多個任務分發綁定在不同核上,減少任務調度切換上下文的開銷,提升了cache命中率,并行處理提升性能
將不同任務間的資源分離,不要共享,比如每個核有單獨的首發隊列,避免競爭
負載均衡,設備端處理后的數據散列到不同的CPU收發隊列中,均衡各core的負載
DMA
使用設備的DMA引擎,降低CPU占用率,提升性能
負載均衡,CPU給不同的DMA引擎收發隊列散列差不多的數據,保證各個DMA引擎負載均衡
中斷聚合
保證時延的情況下將設備的多個中斷匯聚成1個中斷,在一次中斷函數中處理,減少中斷搶占帶來的開銷
中斷中處理讀寫BD時,盡量按照cache lin對齊的方式,比如一個BD是16字節,cacheline是 ?64字節,那就一次處理4個BD,提升cache命中率
設置中斷親和性,是中斷處理綁定在指定的core上,可以通過cat /proc/interrupts命令查看中斷在各個CPU上的分布
降低TLB miss
可以采用huge page,采用huge page的虛擬地址和物理地址的轉換映射條目就比較少,而且TLB中有專門的條目保存huge page映射,保證在huge page的命中率,減少了進程頁表的頻繁讀取,提升了性能
減少內存拷貝
用戶態驅動用mmap將物理地址映射到用戶態虛擬地址,減少內核態與用戶態數據的拷貝
提升cache命中率
代碼中少用靜態變量和全局變量,因為他們保存在數據段和BSS段,不在棧內(棧使用頻繁,一般都會cache命中),頻繁的訪問靜態變量和全局變量就需要多次對cache換入換出,影響性能。
cache line
數據結構cache line對齊,因為CPU每次按照cache line大小從內存取數據,不對齊就需要取2次,對齊就只要取1次
多核共享的數據,盡量將只讀數據和可寫數據分開,因為某個core寫數據后與其他core的cache中數據不一致了,就需要將數據刷入內存,其他core從內存讀,才能保證數據一致性
分支預測
代碼中if else分支用likely/unlikely這樣的宏,這樣編譯時就把likely分支和前面的代碼靠近,提升指令cache的命中率同時減少跳轉指令的開銷。
總結
以上是生活随笔為你收集整理的第3章 Linux内核调试手段之三的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 台式机设成仅计算机,如何把台式电脑设置成
- 下一篇: ubuntu 系统获取和阅读 linux