本篇文章是個經驗談,作者想要聊聊是如何將一個 4vCPU 的VM給調整到可以達到每秒處理 1.2M(120萬)個 JSON Reuqest,本篇文章非常的長,所以會分多天來介紹。
整篇文章探討的是各種 turning 的步驟,來聊聊如何從最初每秒 224k(22萬四千) 給調整到每秒 1.2M 的處理能力。
整個過程分成九大步驟,後面同時標示每個過程後的每秒請求能力
1. Application Optimizations (347k)
2. Speculative Execution Migtigations (446k)
3. Syscall Auditing/Blocking (495k)
4. Disabling iptables/netfilter (603k)
5. Perfect Locality (834k)
6. Interrypt Optimizations (1.06M)
7. The Case of the Nosy Neighbor (1.12M)
8. The Battle Against the Spin Lock (1.15M)
9. This Gost to Twelv (1.20M)
作者強調,上述的過程不一定適合你的應用程式,但是透過這些步驟能夠讓你更佳瞭解應用程式的運作行為,同時也有機會發現一些潛在的瓶頸問題。
環境介紹
1. 團隊使用 Techempower 來進行 JSON Serialization 的測試
2. 使用 libreactor(event-driven框架) 來搭建一個簡單的 API Server
3. HTTP 的解析使用 picohttpparser,同時使用 libclo 來處理 JSON 的編碼
4. 硬體環境
- Server: 4 vCPU, c5n.xlarge AWS VM
- Client: 16 vCPU, c5n.4xlarge AWS VM (clinet太弱會變成瓶頸)
- Network: Server/Client 屬於同一個可用區域(AZ)
5. 軟體環境
- 作業系統: Amazon Linux2 (Kernel 4.14)
- Server: 使用 libreactor (使用不同版本,分別是 Round18 以及 Round20)
- Client: 修改 wrk 這個知名的工具並重新命名為 twrk,詳細差異自己看文章內部,主要都跟顯示有關
6. 實驗方式
- 每個測試跑三次,取中間值
- 256 連線,16 threads,同時每個 thread 都會 pin 到一個固定的 CPU
- 每個實驗都有兩秒的暖機時間來建立連線
Ground Zero
第一個要探討的就是什麼最佳化都還沒有使用前,到底當前應用程式可能的瓶頸在哪裏
首先團隊將該應用程式與其他常見的應用程式或是開發框架比較,譬如 Netty, Nginx, Actix, aspcore 等, libreactor 的效能不錯,有中上水準。
接者作者使用火焰圖(Flame Graphs)來 Profile 該伺服器,作者很好心地將文章中所有的火焰圖都調整了一下,讓所有的 user-space 相關的 function call 都轉成藍色,而剩下跟 kernel 相關都維持紅色。
1. 大部分的時間都在 Kernel 處理
2. 主要是花費在收封包與送封包
3. 應用程式本身主要是分兩大部分,解析 HTTP 的封包以及處理請求與回應。
從上述兩點來看,作者認為目前的應用程式寫得算不錯,因為瓶頸很明顯是卡在 Kernel 端
接下來就正式進入到各種 Turning 的章節探討
Application Optimizations
長話短說:
- 作者基於 libreactor Round18 的框架進行修改,並且所有的修改都已經被合併到 Round20 的版本中,而這些修改主要是實作方面的強化以及整個框架的最佳化。
1. 作者首先透過 htop 觀察運行過程,發現 Server 只有使用 2vCPU 而已(系統有 4vCPU),因此這是作者進行的第一個修改,讓 Server 使用了 4vCPU,這個簡單調整就讓效能提升 25%
註: 作者特別強調,不要覺得從 2vCPU 變成 4vCPU 效能就可以變成兩倍,主要是1) 沒有使用的 vCPU 還有很多其他的工作要處理,因此不是完全都送給你應用程式處理。2)基於 hypter-thread vCPU 的架構,環境只有兩個真正的 CPU 而是透過邏輯的方式產生四個抽象的 CPU,所以全用一定會變快,但是基於很多資源還是要競爭與共用,數字不是單純翻倍
2. 作者自己的應用程式本身使用 gcc 建置時有使用 "-o3" 的方式來最佳化處理,然而框架本身卻沒有使用 "-o3" 的方式來弄,因此作者也針對這個部分來處理,讓建制框架時能夠使用 -o3
3. 從實作方面來看,作者觀察到 libreactor 1.0 版本使用的是 read/write 這兩個常見的方式來處理封包的送收,作者將其修改成 recv/send 整個效能就提升了將近 10%。
註: write(針對 FD,更全面廣泛的用法) 與 send(針對 Socket,更針對的用法) 使用上差異不大,但是 write 於底層 Kernel 最終還是會呼叫到 send 來處理,所以基本上可以理解就是在沒有特別參數需求時,可以直接跳過幾個 kernel function 來達到加速的效果。
write kernel 內的走向: sys_write -> vfs_write -> __vfs_write -> sock_write_iter -> sock_sendmsg
send kernel 內的走向: sendto -> sock_sendmsg
4. 作者觀察到火焰圖中有一些 pthread 相關的資料,進而發現 libreactor 會創造一個 thread pool 來處理非同步的 DNS 名稱解析問題。對於一個 HTTP Client 來說,如果今天要發送請求到多個不同的 domain,而每個 domain 都會需要進行一個 blocking 的解析過程,透過這種方式可以減少 DNS 解析造成的 blocking 問題。然而對於 HTTP Server 來說,這個使用情境帶來的效益似乎就稍微低了些,畢竟 Server 只有 Bind Socket 之前可能會需要去解析一次 DNS 而已。
大部分的情境下, thread pool 都是應用程式初期會去創造而接者就不太會管她,但是對於錙銖必較的效能除錯人來說,任何能夠調整的部分都可能是個值得探討的地方。
作者透過修改 Server 端(準確來說是 libreactor 框架內的程式碼)關於 Thread Pool 的一些用法,成長的讓整個效能提升了 2~3%
結論來說,透過上述四個概念來提升的程式碼效能。
1. vCPU 盡量使用: 25%-27%
2. 使用 gcc -O3 來建置框架的程式碼: 5%-10%
3. 使用 march=native 等參數來建置最後的 server 應用程式: 5%-10%
4. 使用 send/recv 而非 write/read: 5%-10%
5. 修改 pthread 的用法: 2%-3%
註: 作者強調每個最佳化的結果並非是單純累積的概念,反而還會有互補的效果。
可能前述的操作實際上也會讓後續的操作達到更好的效果,
譬如如果先跑 vCPU 的調整,效能大概提升 25%,但是如果先執行別的最佳化過程,最後再來調整 vCPU,就可以達到 40% 的效果,主要是 CPU 可以共有效率的去執行程式。
最後,這個部分讓整個處理封包能力從 224k 提升了 55% 到 347k (req/s)。
從火焰圖來看,整個 user-space 的範圍縮小許多,同時 send/recv 的處理也有使得整體的高度下降一點點(大概四格..)
為了避免文章過長,本篇文章就探討第一個最佳化的過程,剩下的就敬請期待後續!
https://talawah.io/blog/extreme-http-performance-tuning-one-point-two-million/
同時也有1部Youtube影片,追蹤數超過7萬的網紅肥貓丸 FatCatBall,也在其Youtube影片中提到,OTK:06:02、08:55 BGM:https://youtu.be/qIIOza9ZaXw?t=50s BGM:Bouncey、Lost Native、Atlanta ※本牌組勝率很低,請斟酌使用 更多貓貓請看:https://youtu.be/93jSIQf58Pc 火砲彈幕 Canno...
「native to用法」的推薦目錄:
- 關於native to用法 在 矽谷牛的耕田筆記 Facebook 的精選貼文
- 關於native to用法 在 Hapa Eikaiwa Facebook 的最佳解答
- 關於native to用法 在 Hapa Eikaiwa Facebook 的最佳貼文
- 關於native to用法 在 肥貓丸 FatCatBall Youtube 的最佳解答
- 關於native to用法 在 [單字] native用法- 看板Eng-Class - 批踢踢實業坊 的評價
- 關於native to用法 在 Alexander Wang 王梓沅英文, profile picture - Facebook 的評價
- 關於native to用法 在 British vs. American English | 英美用法大不同【公寓篇】 的評價
- 關於native to用法 在 【英文易開罐】這些字差在哪?用法大不同的英文同義字! 的評價
native to用法 在 Hapa Eikaiwa Facebook 的最佳解答
=================================
「〜っぽい」を英語で表現
=================================
今日のコラムでは「子供っぽい」「外国っぽい」「風邪っぽい」など、日本語の「〜っぽい」の英表現について触れてみようと思います。表現の仕方は話す人や状況によって様々ですが、その中でもよく耳にする3つの表現方法をご紹介いたします。どれも用法は簡単なので覚えておきましょう!
--------------------------------------------------
1) _____ish
→「〜っぽい・〜ごろ」
--------------------------------------------------
“ish”は日常会話で口語的な表現として用いられ、日本語の「〜っぽい」を意味します。用法も日本語と同様に単語の語尾に付け足すだけです。「Childish(子供っぽい)」や「Selfish(自分勝手な)」のように既に正式な単語になっているものもあれば、「Yellowish(黄色っぽい)」や「Boyish(男っぽい)」のように任意の単語(形容詞/名詞)の語尾に付け加えて表現することもあります。しかし、会話で使うインフォーマルな表現なので、フォーマルな文章やスピーチで使用するのは避けましょう。
✔使い方:形容詞 or 名詞 + ish
✔その他、時間や年齢など、おおよその数字を示す場合の「〜頃」や「〜くらい」の意味としても使われる。例えば「8時頃に行く」は「I'll be there around 8-ish.」、「彼は40歳くらいです」は「He's 40-ish」となる。
<例文>
My suitcase is a brownish color.
(私のスーツケースは茶色っぽい色です。)
I feel feverish. I might be coming down with a cold.
(熱っぽいな。風邪をひきかけているかも。)
I get off work around 6 ish. I'll call you when I'm done.
(仕事は6時頃に終わるで。終わったら連絡するわ。)
--------------------------------------------------
2) Like _____
→「〜っぽい・〜みたい」
--------------------------------------------------
何かに似ていたり、何かしらの傾向が強いことを日本語では「〜みたい」や「〜っぽい」と表現しますが、それに相当する英語が“Like”になります。例えば、喋り方や仕草、ジェスチャーなどがまるで日本人のような外国人に「日本人っぽいね」と伝える場合は「You are like a Japanese person.」となります。
✔「Look(s) like _____(〜のように見える)」、「sound(s) like _____(〜のように聞こえる)」、「taste(s) like _____(〜のような味がする)」のように“Like”の前に任意の動詞を入れて表現することもできる。
<例文>
Your son talks like an adult.
(あなたの息子さん、大人っぽい話し方をしますね。)
You sound like a native English speaker. Did you study abroad or something?
(ネイティブっぽい発音だね。海外留学とかしてたの?)
He acts like a little kid sometimes.
(時々、彼は幼稚な行動すんねんな・・・)
--------------------------------------------------
3) Taste(s) _____y
→「〜っぽい味がする」
--------------------------------------------------
「〜っぽい味がする」と表現する際、アメリカ人はよく「It tastes _____y」のように語尾に「y」を加えて表現します。例えば「カボチャっぽい味がする」は「It tastes pumpkiny.」となります。友達同士で使うかなりインフォーマルな言い方です。
✔基本的なルールは「名詞 + y」
✔“Fishy”は「魚っぽい味/魚臭い」を意味するが、その他、日常会話では「胡散臭い」や「嘘っぽい」という意味としても使われる。
<例文>
Doesn't "Ukon" taste mediciny?
(ウコンって薬みたいな味しない?)
This drink tastes really soapy.
(この飲み物、めっちゃ石鹸っぽい味がするんだけど・・・)
His story sounds a bit fishy to me.
(彼の話ってなんか胡散臭いわ〜。)
~~~~~~~~~~~~~~~~~~~
無料メルマガ『1日1フレーズ!生英語』配信中!
通勤・通学などのちょとした合間を利用して英語が学べるメルマガ『1日1フレーズ!生英語』を平日の毎朝6時に配信中!ただ単にフレーズを紹介しているだけではなく、音声を使った学習プロセスが組み込まれているので、メルマガを読むこと自体が学習方法!
https://hapaeikaiwa.com/mailmagazine/
~~~~~~~~~~~~~~~~~~~
native to用法 在 Hapa Eikaiwa Facebook 的最佳貼文
=================================
「〜っぽい」を英語で表現
=================================
今日のコラムでは「子供っぽい」「外国っぽい」「風邪っぽい」など、日本語の「〜っぽい」の英表現について触れてみようと思います。表現の仕方は話す人や状況によって様々ですが、その中でもよく耳にする3つの表現方法をご紹介いたします。どれも用法は簡単なので覚えておきましょう!
--------------------------------------------------
1) _____ish
→「〜っぽい・〜ごろ」
--------------------------------------------------
“ish”は日常会話で口語的な表現として用いられ、日本語の「〜っぽい」を意味します。用法も日本語と同様に単語の語尾に付け足すだけです。「Childish(子供っぽい)」や「Selfish(自分勝手な)」のように既に正式な単語になっているものもあれば、「Yellowish(黄色っぽい)」や「Boyish(男っぽい)」のように任意の単語(形容詞/名詞)の語尾に付け加えて表現することもあります。しかし、会話で使うインフォーマルな表現なので、フォーマルな文章やスピーチで使用するのは避けましょう。
✔使い方:形容詞 or 名詞 + ish
✔その他、時間や年齢など、おおよその数字を示す場合の「〜頃」や「〜くらい」の意味としても使われる。例えば「8時頃に行く」は「I'll be there around 8-ish.」、「彼は40歳くらいです」は「He's 40-ish」となる。
<例文>
My suitcase is a brownish color.
(私のスーツケースは茶色っぽい色です。)
I feel feverish. I might be coming down with a cold.
(熱っぽいな。風邪をひきかけているかも。)
I get off work around 6 ish. I'll call you when I'm done.
(仕事は6時頃に終わるで。終わったら連絡するわ。)
--------------------------------------------------
2) Like _____
→「〜っぽい・〜みたい」
--------------------------------------------------
何かに似ていたり、何かしらの傾向が強いことを日本語では「〜みたい」や「〜っぽい」と表現しますが、それに相当する英語が“Like”になります。例えば、喋り方や仕草、ジェスチャーなどがまるで日本人のような外国人に「日本人っぽいね」と伝える場合は「You are like a Japanese person.」となります。
✔「Look(s) like _____(〜のように見える)」、「sound(s) like _____(〜のように聞こえる)」、「taste(s) like _____(〜のような味がする)」のように“Like”の前に任意の動詞を入れて表現することもできる。
<例文>
Your son talks like an adult.
(あなたの息子さん、大人っぽい話し方をしますね。)
You sound like a native English speaker. Did you study abroad or something?
(ネイティブっぽい発音だね。海外留学とかしてたの?)
He acts like a little kid sometimes.
(時々、彼は幼稚な行動すんねんな・・・)
--------------------------------------------------
3) Taste(s) _____y
→「〜っぽい味がする」
--------------------------------------------------
「〜っぽい味がする」と表現する際、アメリカ人はよく「It tastes _____y」のように語尾に「y」を加えて表現します。例えば「カボチャっぽい味がする」は「It tastes pumpkiny.」となります。友達同士で使うかなりインフォーマルな言い方です。
✔基本的なルールは「名詞 + y」
✔“Fishy”は「魚っぽい味/魚臭い」を意味するが、その他、日常会話では「胡散臭い」や「嘘っぽい」という意味としても使われる。
<例文>
Doesn't "Ukon" taste mediciny?
(ウコンって薬みたいな味しない?)
This drink tastes really soapy.
(この飲み物、めっちゃ石鹸っぽい味がするんだけど・・・)
His story sounds a bit fishy to me.
(彼の話ってなんか胡散臭いわ〜。)
~~~~~~~~~~~~~~~~~~~
無料メルマガ『1日1フレーズ!生英語』配信中!
通勤・通学などのちょとした合間を利用して英語が学べるメルマガ『1日1フレーズ!生英語』を平日の毎朝6時に配信中!ただ単にフレーズを紹介しているだけではなく、音声を使った学習プロセスが組み込まれているので、メルマガを読むこと自体が学習方法!
https://hapaeikaiwa.com/mailmagazine/
~~~~~~~~~~~~~~~~~~~
native to用法 在 肥貓丸 FatCatBall Youtube 的最佳解答
OTK:06:02、08:55
BGM:https://youtu.be/qIIOza9ZaXw?t=50s
BGM:Bouncey、Lost Native、Atlanta
※本牌組勝率很低,請斟酌使用
更多貓貓請看:https://youtu.be/93jSIQf58Pc
火砲彈幕
Cannon Barrage
對一個隨機敵人造成3點傷害,然後再依你場上海盜數量重複施放
Deal 3 damage to a random enemy. Repeat for each of your Pirates.
海盜派奇
Patches the Pirate
在你打出海盜後,從你的牌堆召喚這個手下
After you play a Pirate, summon this minion from your deck.
倚多為勝
Gang Up
選擇一個手下。將3張該手下的卡牌洗入你的牌堆
Choose a minion. Shuffle 3 copies of it into your deck.
前置動作
派奇1+倚多2+倚多2+暗影0
費用:
法師4+準備0+彈幕3+準備0+彈幕3
共10費
缺一張準備
共13費(需大帝降費)
傷害:最高70點
※本牌組勝率很低,請斟酌使用
附上牌組:
火砲彈幕
職業:盜賊
規則:開放
2x (0) 暗影閃現
2x (0) 準備
2x (0) 背刺
1x (1) 海盜派奇
2x (2) 倚多為勝
1x (2) 剔骨
2x (2) 掠寶囤積者
1x (2) 血法師薩爾諾斯
1x (3) 索妮雅‧影舞者
2x (3) 飛舞刀刃
2x (4) 法多雷蛛行者
2x (4) 精靈說唱人
1x (4) 進化的狗頭人
1x (4) 逼迫下海
1x (4) 黑巫森林吹笛手
1x (5) 古董治療機器人
1x (5) 惡棘屠殺者
1x (5) 蒼藍龍
1x (6) 消失
2x (6) 火砲彈幕
1x (6) 索瑞森大帝
AAEBAaIHDMQB7QW5BogH9Q/WEYisApG8AoHCAs/hAqbwAs6MAwm0AfsB7QKbBYYJgBLc0QLb4wLbjAMA
#爐石OTK

native to用法 在 Alexander Wang 王梓沅英文, profile picture - Facebook 的推薦與評價
【Speak like a native speaker】「固執」和「恆毅力」有時只有「一線之隔」? 「一線之隔」的英文應該要怎麼說呢? 在美國唸研究所時,常常聽到教授們使用這個用法, ... ... <看更多>
native to用法 在 British vs. American English | 英美用法大不同【公寓篇】 的推薦與評價

在美國叫apartment,但在英國卻叫flat究竟在英美之間還有哪些不同的說法與 用法 ? ... You Can Speak Like a Native English Speaker. ... <看更多>
native to用法 在 [單字] native用法- 看板Eng-Class - 批踢踢實業坊 的推薦與評價
The durian fruit is a native to Malaysia and Indonesia.
查字典 native當名詞 後面都是接of 還特別加粗體強調 : a native of New York
當形容詞
native sth of 地方
be native to 地方
想問 這句的to也可以嗎?
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.41.67.19
※ 文章網址: https://www.ptt.cc/bbs/Eng-Class/M.1474601336.A.1BF.html
另一個想很久決定這個句子不對 要把a去掉
英文真的不簡單
※ 編輯: blue5566 (114.41.87.115), 09/24/2016 22:08:58
... <看更多>