本文延續前篇效能校正的經驗談,上篇文章探討了關於系統呼叫, 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/
同時也有2部Youtube影片,追蹤數超過13萬的網紅Sky game,也在其Youtube影片中提到,因為有蠻多的朋友組隊的時候會碰到斷線跟連線不穩的問題,所以就想說在魔物獵人崛起推出之前教大家把自己的網路先提升到更好組隊的網路環境,如果你也是C或D,看這片就對了。 魔物獵人崛起總資訊 : https://youtu.be/875tHZYVgZw DMZ 深入講解 : https://www.yo...
「switch port設定」的推薦目錄:
- 關於switch port設定 在 矽谷牛的耕田筆記 Facebook 的精選貼文
- 關於switch port設定 在 Jan Ho 的網絡世界 Facebook 的最讚貼文
- 關於switch port設定 在 Sky game Youtube 的最佳貼文
- 關於switch port設定 在 Wilson說給你聽 Youtube 的最佳解答
- 關於switch port設定 在 同一switch,不同port,用相同的虛擬IP,有辦法嗎? - Mobile01 的評價
- 關於switch port設定 在 打Game為什麼需要開Port? 什麼是NAT Open? Port forwarding? 的評價
switch port設定 在 Jan Ho 的網絡世界 Facebook 的最讚貼文
Console Cable 也要介紹???
當溫故知新好不好。。。🙇🏻🙇🏻
一隻全新的 Router 或 Switch 開箱時,裡面只有 Default Configuration,因此必需透過 Console Port 去進行設定。本篇文章介紹一下不同的 Console Port 連接方法。
switch port設定 在 Sky game Youtube 的最佳貼文
因為有蠻多的朋友組隊的時候會碰到斷線跟連線不穩的問題,所以就想說在魔物獵人崛起推出之前教大家把自己的網路先提升到更好組隊的網路環境,如果你也是C或D,看這片就對了。
魔物獵人崛起總資訊 : https://youtu.be/875tHZYVgZw
DMZ 深入講解 : https://www.youtube.com/watch?v=dqlzQXo1wqo
PORT 深入講解 : https://www.youtube.com/watch?v=2G1ueMDgwxw
portforward : https://portforward.com/monster-hunter-rise/
官方推薦使用port文章 : https://reurl.cc/o9mG7V
中華電信數據機後台設定教學 : https://reurl.cc/KxEg29
哈囉,我是SKY,歡迎來到我的頻道,是個愛分享的實況主,這裡會有我的實況、影片剪輯,會呈現各種不同的主題給大家。只要新遊戲的推出,一定會先超前部屬,預習並補足這款遊戲的前導資訊給大家,玩後也會出《實際遊玩的心得》給大家,避免各位踩到雷,要是遊戲更有延展性,也會推出攻略出來。你要是喜歡,歡迎各位可以加入我的頻道,必定會繼續努力下去!
喜歡我,可以訂閱SKY頻道!
►https://goo.gl/XnqAYp
關於工商/合作請洽詢:
►fritgc0204@gmail.com
►cathy@ninedr.com
讓SKY不用愁每個月的飯錢所在:
►Youtube 加入頻道會員 : https://pse.is/QP9GH
►paybal(適用國外) : https://streamlabs.com/skyy204
►歐付寶(適用國內) :https://goo.gl/RNzQeW
►歐付寶(直播時使用,會覆誦你的留言) : https://goo.gl/G9oYuE
關於Sky所有經營 :
►Sky Game頻道 : https://www.youtube.com/c/Skygame204
►Sky facebook專頁 : https://www.facebook.com/sky204/
►Sky Discord : https://discord.gg/9Tpxh8F
►Sky IG : https://www.instagram.com/sky_game204/?hl=zh-tw
-----------------------------------------------------------------------------------
分享請使用本影片
1.禁止轉載營利之使用.
2.禁止放置自身頻道之使用.
#sky #NAT #魔物獵人崛起
魔物獵人崛起 monster hunter rise 網路環境 NAT DHCP DMZ Port NS SWITCH SKYGAME mhr
switch port設定 在 Wilson說給你聽 Youtube 的最佳解答
#portforwarding #路由器 #nintendoswitch #dmz
打Game為什麼需要開Port? 什麼是NAT Open? Port forwarding? - Wilson說給你踢
常常在玩XBOX, PS, Switch會遇到連線多人遊戲的時候沒辦法穩定配對 像是Switch就會提示因為網路防火牆關係 造成沒辦法建立遊戲連線 像這種情況 多半是因爲家中的路由器加上電信商的Modem導致NAT型態比較相對封閉 才導致連線配對問題 這邊Wilson就要說給你聽 為何每個遊戲官網 都會提到一些需要將路由器的Port開啟的動作 其實對於多人連線遊戲 幫助是很大的
Port forwarding 社群 統整世界各種路由器 以及各種遊戲搭配設定開port的教學
https://portforward.com
switch port設定 在 打Game為什麼需要開Port? 什麼是NAT Open? Port forwarding? 的推薦與評價
請問照這方法 設定 後 switch 一定要有線網路才能type A還是Wi-Fi也可以 ... 整世界各種路由器以及各種遊戲搭配 設定 開 port 的教學https://portforward.com. ... <看更多>
switch port設定 在 同一switch,不同port,用相同的虛擬IP,有辦法嗎? - Mobile01 的推薦與評價
A: 一般來說設備1上面應該有DHCP server 這樣接到設備1的所有設備(不管哪個port) 都會拿到192.168.100.0/24的IP(以管理型SWITCH出廠設定論尚未設定其他管理功能) 接在 ... ... <看更多>