本文延續前篇效能校正的經驗談,上篇文章探討了關於系統呼叫, iptables 可以最佳化的部分,。本篇文章將繼續剩下最佳化步驟的探討。
Perfect Locality
預設情況下, Linux Kernel 會盡量平均地將請求給分配到所有的處理佇列,譬如 network queues, processes, CPUS. 大部分情況下這種機制運作良好不會有太多問題,不過如果今天要追求的不單單只是好的效能,而是極致的效能,則 locality 這個概念就要特別的去注意。
這篇文章中提到很多不同的方式,包含了 CPU Pinning, Receive Side Scaling(RSS), Transmit Packet Sterring(XPS)等,其實用比較簡單的介紹方式就是,希望可以使用固定的 CPU 來處理一條連線上的所有封包(進出),這樣帶來的好處有
1. CPU Cache 可以盡可能的去使用,減少各種 miss 產生的成本
2. 減少 context switch 帶來的成本
3. 減少跨 CPU 之間交換資料帶來的成本
4. 減少 lock 之間帶來的成本
除了 CPU Pin, RSS, XPS 外,還有 irqbalance, smp_affinity_list 等相關的概念需要一併學習,對於這個概念有興趣的讀者非常歡迎去找尋這類型的資料
接者是 SO_REUSEPORT 這個參數,創建 Socket 時使用這個參數能夠使得多個 Process 共用一個連接埠,底層 Kernel 會針對 src/dst{ip/port} 來產生對應的 Hash,並且決定當前封包要送給哪一個 Process。
這個方式搭配前述各種 CPU Pin, 中斷的最佳化則會遇到問題,因為可能底層將該封包送到 CPU2 結果這個函式又把封包重新分配到 CPU0, 這樣就導致該連線要跨 CPU 處理了。
為了解決這個問題, Linux Kernel 4.6 後有新的參數 SO_ATTACH_REUSEPORT_CBPF,使用者可以自行撰寫 BPF 的程式來決定如何分配封包。作者根據這過想法撰寫了一個 BPF 的程式,來確保這個機制可以與前述的最佳化穩定運作。
這次的最佳化帶來的 38% 的成長,這時候的封包處理能力從 603k req/s 提升到 834k req/s
原文中關於這次的最佳化還有一些後續探討,有興趣的可以閱讀
Interrupt Optimizations
當封包透過網路送到網卡後,網卡必須要通知 OS 讓它知道有封包來了,要記得處理。一切處理完畢後網卡就可以繼續等待新的封包過來並且再次發送中斷給 OS 處理封包。這個流程大部分情況也是運作良好,不過當有大量的封包不停傳送來時,頻繁的中斷其實也是會造成不小的額外成本。
為了解決這個問題,目前比較嶄新的網卡都有支援中斷聚合等功能,透過這個功能可以延後中斷一個小週期,而該週期內收到的所有封包只需要透過一次的中斷就可以來處理,藉此降低中斷的次數。更為進階的網卡甚至支援動態自行調整該週期的時間,譬如當網路空閒時,減少週期使得每個封包能夠盡快的發送中斷被處理,而當網路流量很大時則會加大該該週期時間來更有效地處理封包。
註: AWS ENA 有支持這種動態調整的機制
作者基於 AWS 開啟動態調整收端中斷時間的功能,整個效能提升了 14%,從 834k req/s 提升到 955k req/s。作者說這次的調整可以說是整篇文章中幾個非常強的改動,改動的地方少,效能提升明顯,同時背後的隱憂與限制也少。
除了上述中斷的方式外,另外一種則是透過 Busy Polling 這種針對低延遲性的方式。預設情況下其允訓設定為 blocked 的 socket 能夠消耗額外的 CPU Cycle 來讀取接下來的封包,可以將其想成一成一種混合體,當底層網卡告訴我有資料要讀取時,我預期接下來還會有更多的資料,因此我就透過輪詢的方式去多問幾個封包。
由於作者的應用程式是使用 non-blocking 的方式去讀寫封包,所以預設的方式是沒有辦法使用的。而該應用程式又是使用 epoll 來進行底層封包的讀寫。 epoll 於 kenel 4.12 後正式支援 busy polling 的方式,所以這部分就沒有太大的問題。文章中有滿多關於 busy_poll 的一些參數調整。
將這兩個機制給整合後,整體的效能提升達到 28%,從 834k req/s 到達 1060k req/s,同時 99%的 latency 也從 361μs 下降到 292μs.
同時這兩個機制導入後,整個系統每秒產生的硬體中斷數量也從 183k 降到 16k。 Context switches 的數字也從 6k 下降到 1k 左右。
下篇文章會繼續從剩下的三個最佳化策略繼續介紹
https://talawah.io/blog/extreme-http-performance-tuning-one-point-two-million/
同時也有10000部Youtube影片,追蹤數超過2,910的網紅コバにゃんチャンネル,也在其Youtube影片中提到,...
「linux kernel學習」的推薦目錄:
- 關於linux kernel學習 在 矽谷牛的耕田筆記 Facebook 的最讚貼文
- 關於linux kernel學習 在 資策會-數位人才培育中心 Facebook 的最讚貼文
- 關於linux kernel學習 在 軟體開發學習資訊分享 Facebook 的最讚貼文
- 關於linux kernel學習 在 コバにゃんチャンネル Youtube 的最佳貼文
- 關於linux kernel學習 在 大象中醫 Youtube 的精選貼文
- 關於linux kernel學習 在 大象中醫 Youtube 的精選貼文
- 關於linux kernel學習 在 [問題] 非本科以Linux kernel為目標- 看板C_and_CPP 的評價
- 關於linux kernel學習 在 我为何放弃Linux 内核学习 - Peter 的評價
- 關於linux kernel學習 在 0voice/linux_kernel_wiki: linux内核学习资料:200+ ... - GitHub 的評價
- 關於linux kernel學習 在 #請益Linux kernel學習請益 - 軟體工程師板 | Dcard 的評價
- 關於linux kernel學習 在 Linux 核心設計/實作(2022 年): 課程說明 - YouTube 的評價
- 關於linux kernel學習 在 Taiwan Linux Kernel Hackers | Facebook 的評價
- 關於linux kernel學習 在 linux kernel教學-推薦/討論/評價在PTT、Dcard、IG整理一次看 的評價
- 關於linux kernel學習 在 linux kernel教學-推薦/討論/評價在PTT、Dcard、IG整理一次看 的評價
- 關於linux kernel學習 在 [問題] 如何學習Linux Kernel Driver - 看板LinuxDev - PTT網頁版 的評價
- 關於linux kernel學習 在 Linux Kernel 学习路线- muyu01248/log GitHub Wiki 的評價
linux kernel學習 在 資策會-數位人才培育中心 Facebook 的最讚貼文
轉發合作企業徵才訊息:
磐儀科技 RD 職缺一覽 21.05.29
1. Android Firmware or Embedded 資深軟體工程師
工作內容:
1. Linux Kernel 與驅動程式的開發與移植
2. 系統效能優化與問題排除
3. Android BSP 開發
4. rootfs porting
5. 其他主管交辦事項
職務需求:
1. 熟悉 MTK or Rockchip 平台開發者為佳
2. 具 Android BSP/Framework 開發經驗
2. BIOS 工程師/高級工程師
工作內容
1. 專案的 BIOS 研發及維護
2. 應用程式或測試工具的撰寫及維護
3. 替客戶解決問題
4. 完成主管交代任務
職務需求:
1. 具 Legacy / UEFI BIOS 開發經驗者佳
2. 熟悉 Windows 等作業系統及電腦架構
3. 溝通協調、應變表達與學習力強
4. 配合度高、細心負責且抗壓性高
5. 具獨立作業能力者佳
磐儀科技 招募聯繫
劉先生
e-mail address: jeffliu@arbor.com.tw
磐儀科技職缺網址:
https://www.104.com.tw/company/12syxbco?jobsource=cs_2018indexpoc#info06香港商磐旭智能
RD 職缺一覽 21.05.29
1.AI Embedded & MCU Firmware Engineer
工作內容:
1. MCU/AI Chip Firmware 開發
2.AI 學習, 影像辨識
3.電源管理
4.OpenCV porting
職務需求:
1.有 FreeRTOS 開發經驗為佳
2.熟悉 C/C++
3.熟悉 yolov3 & opencv 為佳
4.熟悉 YOCTO Linux 為佳
2. Android Driver/Embeded Linux (ARM 架構) Firmware Engineer
工作內容
1. Android BSP 開發
2.系統效能優化與問題排除
職務需求:
1. Familiar with C++/Java
2. 熟悉 MTK 平台開發者為佳
3. Familiar with Android HAL
4.電子,電機,資訊相關系所
3. EE 硬體工程師
工作內容
1.系統整合電路設計
2.Schematic Design/Layout review
3.電路零件選用及 BOM 建立
4.基板除錯電路 Debug
5.電子訊號, 電源量測和功能驗證
6.熟悉 ORCAD 線路圖繪製、PADS 或 Allegro PCB layout 工具、CAM350 工具
7.專案管理、產品開發及量產經驗
8.文件撰寫能力
職務需求:
1. 大學以上電子電機相關系所畢2.具電子硬體電路設計及相關驗證 debug 知識
3.具 PCB layout 相關知識
4.應用過『聯發科的晶片 IC』或『高通的晶片 IC
香港商磐旭智能 招募聯繫
葉先生
e-mail address: alexyeh@amobile.com.tw
香港商磐旭智能職缺網址:
https://www.104.com.tw/company/1a2x6bk3m2?jobsource=cs_2018indexpoc
linux kernel學習 在 軟體開發學習資訊分享 Facebook 的最讚貼文
NT370 特價中
系統程式設計 – 從頭學習 Netlink Socket、作業系統、可載入核心模組、C 程式設計
從這 3 小時的課程,你會學到
✅ Linux 核心模組( LKM,Linux Kernel Modules )
✅ Netlink Sockets
✅ TLVs (Type Length Value) 的概念(型別長度值)
✅ 使用者空間與核心空間通訊
✅ Linux 核心程式設計
✅ 從核心空間到使用者空間的廣播( Multicast )
✅ 基於事件的核心空間到使用者空間的通知
https://softnshare.com/netlinksockets/
linux kernel學習 在 コバにゃんチャンネル Youtube 的最佳貼文
linux kernel學習 在 大象中醫 Youtube 的精選貼文
linux kernel學習 在 大象中醫 Youtube 的精選貼文
linux kernel學習 在 我为何放弃Linux 内核学习 - Peter 的推薦與評價
经过一段时间的linux 学习, 至今还没发现有学内核的必要. 我不明白会什么要看linux 内核代码. 难道学习linux, 一定要懂内核吗? 简短回答:. 在一次采访 ... ... <看更多>
linux kernel學習 在 0voice/linux_kernel_wiki: linux内核学习资料:200+ ... - GitHub 的推薦與評價
Linux内核Makefile系统文件详解 · 计算机Intel CPU体系结构分析 · QEMU调试Linux内核环境搭建 · Linux Kernel内核整体架构(图文详解) · Linux内核看socket ... ... <看更多>
linux kernel學習 在 [問題] 非本科以Linux kernel為目標- 看板C_and_CPP 的推薦與評價
小弟背景為統計,因工作接觸到linux進而想了解作業系統跟底層面的東西,目前大概知
道方向是補修:演算法,資料結構,作業系統,網路,學習C語言最後是成大黃教授開的linu
x kernel
但還是有些問題想請問
1.除了上述那些課,還有什麼課程是要補足的嗎?
2.雖然我知道要補齊那些課程,但因資源是開放式課程,所以沒有作業跟考試,我要如何
驗證有沒有學好?
3.C語言要會到什麼程度呢?
是要自己有開發side project嗎?因為目前才剛學習,也不太清楚linux kernel所用C的
方向大概是哪(就像python可以應用在AI,開發,資料分析)
我知道以上學完離linux kernel還是有距離,希望大家能給一些方向,謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.226.46.238 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1604062778.A.813.html
※ 編輯: disney82231 (36.226.46.238 臺灣), 10/30/2020 21:13:20
兩位大大抱歉,目前的我其實說不出來,我的認知是想了解整個linux是怎麼運作的,因
此才說是linux kernel
※ 編輯: disney82231 (36.226.46.238 臺灣), 10/30/2020 22:00:01
※ 編輯: disney82231 (36.226.46.238 臺灣), 10/30/2020 22:25:26
... <看更多>