本文延續前篇效能校正的經驗談,上篇文章探討了關於Locality與中斷中可以最佳化的部分,。本篇文章將繼續剩下最佳化步驟的探討。
The Case of the Nosy Neighbor
從前述最後的火焰圖中,作者觀察到幾個跟網路有關的 kernel call,譬如 dev_queue_xmit_nit 以及 __netif_receive_skb_core 等有可能有成長的空間,於是輾轉前往這邊去研究。
作者觀察到 packet_rev 這個函式有不少的比例,而該函式的意思是有人嘗試透過使用 AF_PACKET 等方式開啟了 RAW socket 來處理封包。透過 ss 這個指令,作者觀察到系統中有其他的應用程式透過 AF_PACKET/SOCKET_RAW 也在處理封包,最後輾轉發現原來是系統上的 dhclient。
DHCP Client 必須要在系統有 IP 以前就有收送封包的能力,所以使用 AF_PACKET 也滿合理的。作者思考是否有辦法可以讓 DHCP Client 拿到 IP 之後就關閉 AF_PACKET,改使用純 UDP 的方式來進行後續的 DHCP Renewal 功能,可惜這個方向沒有辦法達成。
根據 AWS 的官方文件,當一個 IP 被分配到一個機器後,這個 IP 會跟該機器同生死,因此這種情況下 其實不需要透過 DHCP Renewal 來反覆取得 IP,只要取得一次 IP 即可。
作者變修改相關腳本,當 DHCP 取得 IP 後關閉 dhclient,此外還必須要記得去修改網卡層級關於該 IP 的記憶,預設期間是一小時,作者將其修改為永遠。
透過這樣簡單的設定,整體的效能又再度提升了 6%,從 1.06M req/s 提升到 1.12M req/s
The Battle Against the Spin Lock
作者陳述自己花了非常多時間與 Spin Lock(作者心魔的大白鯨) 奮戰,幾乎是茶不思飯不想的滿腦都在思考如何加速,然後再經歷過反反覆覆的失敗後,作者最後決定還是要寫出一些關於 Spin Lock 的嘗試與研究心得,算是一個很精彩的踩雷心得。
這部分的篇幅很長,而且內容也滿深的,最後的解決方式也只有提升 2%左右的效能,所以對這部分有興趣的讀者再自行閱讀囉
This Goes to Twelve
終於來到最後的最佳化步驟了,這個步驟中的範疇都只能勉強壓榨出些許的效能,包含了關閉 GRO, TCP壅塞控制以及靜態中斷處理。
(Generic Receive Offload)GRO 是一個網路相關的功能,目的是用來將 Kernel 層級的封包給聚合起來變成一個大封包,而 Kernel 收到這個封包後會把該大封包重新組合變成本來的小封包,對於使用者的應用程式來說不會有任何感覺,但是對於整體的封包傳輸來說能夠節省花費的並提升效能。大部分情況下這個功能都是開啟的,Amazon Linux 2 預設也是打開這個選項。
然而針對作者的測試情境,由於所有的封包基本上都是同一條連線且資料量也不大,因此 GRO 雖然可以帶來聚合的效果,但是也會拖延封包進入到 Linux Kernel Network Stack 的時間點,因此開啟 GRO 帶來的好處沒有很大。
TCP 壅塞控制有不同的演算法,Amazon Linux2 內建兩種演算法 Cubic 以及 Reno,除此這兩個之外常見的還有 Google 多年前貢獻的 BBR。根據作者測試,其實驗環境中有比較好效能的則是 Reno
註: 不同算法針對不同應用場景,所以要切換演算法前要先釐清自己的應用情境以及用哪種演算法比較合適。
全部零零總總的修改後提升了 4%,整體的效能服務來到了 1.2M reqs/s
這篇文章真的很長,有些最佳化的方式是針對該應用場景而特別去使用的,這也意味者並非所有的修正方式都可以套用到各位的應用程式。
本篇文章還是很值得一讀,整個分析的思路與想法都非常有趣,雖然不一定用得到但是也許未來有一天會有機會使用。
https://talawah.io/blog/extreme-http-performance-tuning-one-point-two-million/
同時也有53部Youtube影片,追蹤數超過1,900的網紅野武士のゲーム実況プレイCh. Nobusi Game Let's Play Ch,也在其Youtube影片中提到,【PC 返校 -Detention-再生リスト】►https://youtube.com/playlist?list=PLJQTXK6AJZwFOOzb1L0hGwvsBUCITQSDb 【チャンネル登録リンク/Subscribe Link】►https://www.youtube.com/chan...
「linux校時」的推薦目錄:
- 關於linux校時 在 矽谷牛的耕田筆記 Facebook 的精選貼文
- 關於linux校時 在 矽谷牛的耕田筆記 Facebook 的最佳解答
- 關於linux校時 在 矽谷牛的耕田筆記 Facebook 的精選貼文
- 關於linux校時 在 野武士のゲーム実況プレイCh. Nobusi Game Let's Play Ch Youtube 的最讚貼文
- 關於linux校時 在 野武士のゲーム実況プレイCh. Nobusi Game Let's Play Ch Youtube 的最佳貼文
- 關於linux校時 在 吳老師教學部落格 Youtube 的最讚貼文
- 關於linux校時 在 linux ntp server架設-在PTT/IG/網紅社群上服務品牌流行穿搭 的評價
linux校時 在 矽谷牛的耕田筆記 Facebook 的最佳解答
本文延續前篇效能校正的經驗談,上篇文章探討了關於系統呼叫, 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/
linux校時 在 矽谷牛的耕田筆記 Facebook 的精選貼文
本文延續前篇效能校正的經驗談,上篇文章探討了關於應用程式本身可以最佳化的部分,包含了應用程式以及框架兩個部分。本篇文章將繼續剩下最佳化步驟的探討。
Speculative Execution Mitigations
接下來探討這個最佳化步驟對於效能有顯著的提升,但是本身卻是一個非常具有爭議性的步驟,因為其涉及到整個系統的安全性問題。
如果大家對前幾年非常著名的安全性漏洞 Spectre/Meltdown 還有印象的話,本次這個最佳化要做的就是關閉這類型安全性漏洞的處理方法。
標題的名稱 Speculative Execution Migitations 主要跟這漏洞的執行概念與 Pipeline 有關,有興趣理解這兩種漏洞的可以自行研究。
作者提到,大部分情況下這類型的防護能力都應該打開,不應該關閉。不過作者認為開關與否應該是一個可以討論的空間,特別是如果已經確認某些特別情境下,關閉防護能力帶來的效能如果更好,其實也是一個可以考慮的方向。
舉例來說,假設今天你運行了基於 Linux 使用者權限控管與 namespaces 等機制來建立安全防護的多使用者系統,那這類型的防護能力就不能關閉,必須要打開來防護確保整體的 Security Boundary 是完整的。 但是如果今天透過 AWS EC2 運行一個單純的 API Server,假設整個機器不會運行任何不被信任的程式碼,同時使用 AWS Nitro Enclaves 來保護任何的機密資訊,那這種情況下是否有機會可以關閉這類型的檢查?
作者根據 AWS 對於安全性的一系列說明認為 AWS 本身針對記憶體的部分有很強烈的保護,包含使用者之間沒有辦法存取 Hyperviosr 或是彼此 instance 的 Memory。
總之針對這個議題,有很多的空間去討論是否要關閉,以下就單純針對關閉防護能力帶來的效能提升。
作者總共關閉針對四種攻擊相關的處理能力,分別是
Spectre V1 + SWAPGS
Spectre V2
Spectre V3/Meltdown
MDS/Zombieload, TSX Anynchronous Abort
與此同時也保留剩下四個,如 iTLB multihit, SRBDS 等
這種設定下,整體的運作效能再次提升了 28% 左右,從 347k req/s 提升到 446k req/s。
註: 任何安全性的問題都不要盲從亂遵循,都一定要評估判斷過
Syscall Auditing/Blocking
大部分的情況下,Linux/Docker 處理關於系統呼叫 Auditing/Blocking 兩方面所帶來的效能影響幾乎微乎其微,不過當系統每秒執行數百萬個系統呼叫時,這些額外的效能負擔則不能忽視,如果仔細觀看前述的火焰圖的話就會發線 audit/seccomp 等數量也不少。
Linux Kernel Audit 子系統提供了一個機制來收集與紀錄任何跟安全性有關的事件,譬如存取敏感的機密檔案或是呼叫系統呼叫。透過這些內容可以幫助使用者去除錯任何不被預期的行為。
Audit 子系統於 Amazon Linux2 的環境下預設是開啟,但是本身並沒有被設定會去紀錄系統呼叫的資訊。
即使 Audit 子系統沒有真的去紀錄系統呼叫的資訊,該子系統還是會對每次的系統呼叫產生一點點的額外處理,所以作者透過 auditctl -a never,task 這個方式來將整體關閉。
註: 根據 Redhat bugzilla issue #1117953, Fedora 預設是關閉這個行為的
Docker/Container 透過一連串 Linux Kernel 的機制來隔離與控管 Container 的執行權限,譬如 namespace, Linux capabilities., cgroups 以及 seccomp。
Seccomp 則是用來限制這些 Container 能夠執行的系統呼叫類型
大部分的容器化應用程式即使沒有開啟 Seccomp 都能夠順利的執行,執行 docker 的時候可以透過 --security-opt seccomp=unconfined 這些參數告訴系統運行 Container 的時候不要套用任何 seccomp 的 profile.
將這兩個機制關閉後,系統帶來的效能提升了 11%,從 446k req/s 提升到 495k req/s。
從火焰圖來看,關閉這兩個設定後,syscall_trace_enter 以及 syscall_slow_exit_work 這兩個系統呼叫也從火焰圖中消失,此外作者發現 Amazon Linux2 預設似乎沒有啟動 Apparmor 的防護,因為不論有沒有關閉效能都沒有特別影響。
Disabling iptables/netfilter
再來的最佳化則是跟網路有關,大名鼎鼎的 netfilter 子系統,其中非常著名的應用 iptables 可以提供如防火牆與 NAT 相關功能。根據前述的火焰圖可以觀察到,netfilter 的進入 function nf_hook_slow 佔據了大概 18% 的時間。
將 iptables 關閉相較於安全性來說比較沒有爭議,反而是功能面會不會有應用程式因為 iptables 關閉而不能使用。預設情況下 docker 會透過 iptables 來執行 SNAT與 DNAT(有-p的話)。
作者認為現在環境大部分都將 Firewall 的功能移到外部 Cloud 來處理,譬如 AWS Security Group 了,所以 Firewall 的需求已經減少,至於 SNAT/DNAT 這類型的處理可以讓容器與節點共享網路來處理,也就是運行的時候給予 “–network=host” 的模式來避免需要 SNAT/DNAT 的情境。
作者透過修改腳本讓開機不會去預設載入相關的 Kernel Module 來達到移除的效果,測試起來整體的效能提升了 22%,從 495k req/s 提升到 603k req/s
註: 這個議題需要想清楚是否真的不需要,否則可能很多應用都會壞掉
作者還特別測試了一下如果使用 iptables 的下一代框架 nftables 的效能,發現 nftables 的效能好非常多。載入 nftables 的kernel module 並且沒有規則的情況下,效能幾乎不被影響(iptables 則相反,沒有規則也是會影響速度)。作者認為採用 nftables 似乎是個更好的選擇,能夠有效能的提升同時也保有能力的處理。
不過 nftables 的支援相較於 iptables 來說還是比較差,不論是從 OS 本身的支援到相關第三方工具的支援都還沒有這麼完善。就作者目前的認知, Debian 10, Fedora 32 以及 RHEL 8 都已經轉換到使用 nftables 做為預設的處理機制,同時使用 iptables-nft 這一個中介層的轉換者,讓所有 user-space 的規則都會偷偷的轉換為底層的 nftables。
Ubuntu 似乎要到 20.04/20.10 的正式版本才有嘗試轉移到的動作,而 Amazon Linux 2 依然使用 iptables 來處理封包。
下篇文章會繼續從剩下的五個最佳化策略繼續介紹
https://talawah.io/blog/extreme-http-performance-tuning-one-point-two-million/
linux校時 在 野武士のゲーム実況プレイCh. Nobusi Game Let's Play Ch Youtube 的最讚貼文
【PC 返校 -Detention-再生リスト】►https://youtube.com/playlist?list=PLJQTXK6AJZwFOOzb1L0hGwvsBUCITQSDb
【チャンネル登録リンク/Subscribe Link】►https://www.youtube.com/channel/UC6J9ndMt6-wojFBbhAqGMlA?sub_confirmation=1
チャンネル登録、評価、コメント等して頂けると励みになります!/Please subscribe to my channel!
【プレイスタイル】
初見
【チャプター】
00:00 四章
02:39 エンディング(同窓会)
【注意事項】
※2020/09/17放送の分割(6/6)アーカイブです。
【ゲーム概要】
タイトル:返校 -Detention-/Detention
ハッシュタグ:#ホラーゲーム #ADV #返校 #Detention
ジャンル:アドベンチャー、パズル、ホラー
対応機種:Microsoft Windows、macOS、Linux、PlayStation 4、Nintendo Switch
開発元:RedCandleGames
発売元:RedCandleGames、AGM PLAYISM
デベロッパー公式サイト:http://redcandlegames.com/detention/?lang=jp
ゲームストアリンク:https://store.steampowered.com/app/555220/Detention/?utm_source=hp
PLAYIZM公式サイト:https://playism.com/
作品著作表記:©Red Candle Games / Coconut Island Games. All Rights Reserved.
【サブチャンネルやその他のリンク】►https://www.youtube.com/c/nobusiletsplay/about
チャンネル概要欄下部のリンクをご参照ください。
linux校時 在 野武士のゲーム実況プレイCh. Nobusi Game Let's Play Ch Youtube 的最佳貼文
【PC 返校 -Detention-再生リスト】►https://www.youtube.com/playlist?list=PLJQTXK6AJZwH3XNh87Qj0PAA9fRU-K_7b
【チャンネル登録リンク/Subscribe Link】►https://www.youtube.com/channel/UC6J9ndMt6-wojFBbhAqGMlA?sub_confirmation=1
チャンネル登録、評価、コメント等して頂けると励みになります!/Please subscribe to my channel!
【プレイスタイル】
初見
【チャプター】
00:00 四章
02:39 エンディング(同窓会)
【注意事項】
※2020/09/17放送の分割(6/6)アーカイブです。
【ゲーム概要】
タイトル:返校 -Detention-/Detention
ハッシュタグ:#ホラーゲーム #ADV #返校 #Detention
ジャンル:アドベンチャー、パズル、ホラー
対応機種:Microsoft Windows、macOS、Linux、PlayStation 4、Nintendo Switch
開発元:RedCandleGames
発売元:RedCandleGames、AGM PLAYISM
公式サイト:http://redcandlegames.com/detention/?lang=jp
【その他リンク】
▼YouTubeプレイ動画チャンネル
https://www.youtube.com/c/nobusigameplay
▼Blog
http://nobusiblog.blog.fc2.com/
▼Twitter
https://twitter.com/NOBUSI_SHOGUN
linux校時 在 吳老師教學部落格 Youtube 的最讚貼文
更多學習訊息:
硬體裝修丙級免費線上影音教學
http://terry55wu.blogspot.tw/2009/05/blog-post.html
丙級硬體裝修通過經驗影音分享
http://terry55wu.blogspot.tw/2012/02/httpterry55wu.html
賀喜學員有為一個月快速取得丙級硬體裝修證照
http://terry55wu.blogspot.com/2010/08/blog-post.html
如何更換CPU?我的CPU換囉!!
http://terry55wu.blogspot.tw/2009/09/cpucpu.html
虛擬電腦 VITUAL PC 2007 使用說明
http://terry55wu.blogspot.tw/2009/06/vitual-pc-2007.html
資料夾.EXE病毒解毒流程(有線上影音教學)
http://terry55wu.blogspot.tw/2009/06/blog-post_14.html
如何檢查隨身碟是否中毒
http://terry55wu.blogspot.tw/2007/06/blog-post_09.html
有為在七月初來到湜憶,告知想在八月份報考職訓局的乙級硬體裝修課程,
但基本資格為具有丙級硬體裝修資格,想在短時間學習完畢,並一定要取得證照,
在多方打聽之後,知道湜憶提供一對一短期雲端教學,於是用待業優惠方案,
由吳老師輔導學習,由吳老師親自教導,運用雲端學習平台,
並提供兩台電腦給有為練習拆裝與安裝 Windows XP 與 Fedora2,
也提供網路現才讓有為使用,並貼心借給有為網路工具,讓考試順利。
由於一個月要拿到丙級硬體裝修證照是個不可能的任務,
以在學校上課的方式進行約要一學期以上的時間,才有辦法上完課程,
加上學校單位硬體設備通常是多人使用一台電腦拆裝,要有機會練習就是要等待,
加上幾十個學生,一個老師的狀況下,分到的資源其實非常的少,
因此花費長時間,卻沒有辦法得到成效,時間拉長讓學習更沒效率,
一學期結束還不一定學的到東西,上課其實浪費在等待的時間相當多。
但在湜憶提供一對一教學之外,還提供多種規格電腦提供拆裝,讓學員能完全掌握各種機型的特性,
不會因為考場的不同而有不同的表現,並提供多次的模擬考,讓考生考出程度,
並知道自己的弱點,再繼續加強,因此這次有為能考 100 分我們並不意外。
拿到證照之後有為也要繼續往乙級努力,祝福他,但以我門的建議是希望他能除了硬體類證照外,
還能補充軟體與網路的知識,畢竟現在的公司用人,還是以多技能為主,最好可以維護電腦硬體外,
還會軟體與網路維護,還要能有其他的技能,所以建議有有為能繼續把軟體與網路補足,
這樣在找工作會更加順利。
從有為的快速學習並取得證照可以得知,雲端教學平台與一對一教學的成功,
除了學習效率的提升,也更能讓學員以自己的期望去學習,必然可以在很短的時間內,
除了學習專業以外,更能取得專業證照,在職場上成為當紅炸子雞,
之前有志昱、曹大哥等人為例子,從職場失意者,並成公司延攬重用對象,
證明證照的效用除了面試時的證明外,也是學習成果的展現,讓為來更加美好。
部落格:
http://terry55wu.blogspot.com/
linux校時 在 linux ntp server架設-在PTT/IG/網紅社群上服務品牌流行穿搭 的美食出口停車場
本篇介紹如何在Linux 中安裝並設定NTP 網路校時服務,讓系統自動校正時間。 ... 13 Apr 11:16:01 ntpdate[19617]: step time server 118.163.81.61 . ... <看更多>