哈哈哈哈哈操欧洲电影,久草网在线,亚洲久久熟女熟妇视频,麻豆精品色,久久福利在线视频,日韩中文字幕的,淫乱毛视频一区,亚洲成人一二三,中文人妻日韩精品电影

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

io_uring 優(yōu)化 nginx,基于通用應用 nginx 的實戰(zhàn)

Linux閱碼場 ? 來源:Linuxer ? 作者:Linuxer ? 2020-10-10 16:19 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

引言

io_uring是Linux內(nèi)核在v5.1引入的一套異步IO接口,隨著其迅速發(fā)展,現(xiàn)在的io_uring已經(jīng)遠遠超過了純IO的范疇。從Linux v5.3版本開始,io_uring陸續(xù)添加了網(wǎng)絡編程相關(guān)的API,對用戶提供sendmsg、recvmsg、accept、connect等接口的異步支持,將io_uring的生態(tài)范圍擴大到了網(wǎng)絡領(lǐng)域。

另外從Linux v5.7開始,io_uring對這些異步接口提供FAST POLL機制,用戶無需再使用像select、event poll等多路復用機制來監(jiān)聽文件句柄,只要把讀寫請求直接丟到io_uring的submit queue中并提交,當文件句柄不可讀寫時,內(nèi)核會主動添加poll handler,當文件句柄可讀寫時主動調(diào)用poll handler再次下發(fā)讀寫請求,從而減少系統(tǒng)調(diào)用次數(shù)提高性能。

上一篇我們初探了 io_uring 用于網(wǎng)絡的編程模型以及 echo server benchmark 下的性能表現(xiàn),這篇文章我們將基于通用應用 nginx 實戰(zhàn)。

Nginx io_uring 代碼優(yōu)化

Nginx是一款輕量級的Web服務器、反向代理服務器,由于它的內(nèi)存占用少,啟動極快,高并發(fā)能力強,在互聯(lián)網(wǎng)項目中廣泛應用。

從架構(gòu)上看,Nginx由一個master和多個worker進程組成,多個worker之間不需要加鎖,獨立處理與client的連接和網(wǎng)絡請求。worker是一個單線程大循環(huán),這與上一篇“你認為 io_uring 只適用于存儲 IO?大錯特錯!”文章中描述的 echo server 模型基本一致。

基于event poll的編程模型

event poll是Nginx在Linux下的默認事件模型。

event poll事件模型把listen fd以及新建連接的sock fd都注冊進event poll中,當這些fd上有數(shù)據(jù)可讀時,等待在epoll_wait()的worker進程會被喚醒,調(diào)用相應的回調(diào)函數(shù)進行處理,這里的recv、writev請求都為同步請求。

基于io_uring的編程模型

前面提到,io_uring的FAST POLL機制允許數(shù)據(jù)在未ready的情況下就直接下發(fā),不需要再把普通連接的fd注冊進event poll。另外這里的讀寫請求通過io_uring異步下發(fā),處理流程大致如下:

事實上,accept()也可以采取FAFST POLL機制,無需等待listen_fd數(shù)據(jù)可讀就直接下發(fā),以減少系統(tǒng)調(diào)用次數(shù)。但在調(diào)試過程中發(fā)現(xiàn)這樣accept()失敗概率大大增加,而每次失敗的accept()都會帶來一次無效的sock內(nèi)存申請和釋放,這個開銷較大,因此依然采用類似event poll的方式來偵聽listen fd。后續(xù)針對這塊可以做一些優(yōu)化。

測試結(jié)果

測試環(huán)境

測試機器
CPU: Intel(R) Xeon(R) CPU E5-2682 v4 @ 2.50GHz 64邏輯核
server cmdline添加:mitigation=on

nginx配置

user root;http { access_log off; server { access_log off; // 關(guān)閉access log,否則會寫日志,影響測試 location / { return 200; // 不讀本地文件,直接返回200 } }}

benchmark
使用輕量級HTTP性能測試工具wrk進行壓測。

測試命令

長連接 wrk -c $connection -t $thread -d 120 $url短連接wrk-c$connection-t$thread-H"Connection:Close"-d120$url

測試結(jié)果

長連接

? connection=1000,thread=200, 測試server上不同worker數(shù)目性能。

worker數(shù)目在8以下時,QPS有20%左右的提升。隨著worker數(shù)目增大,CPU不成為瓶頸,收益逐漸降低。

server單worker,測試client端不同連接數(shù)性能(thread取默認數(shù)2)。

可以看到單worker情況下,500個連接以上,QPS有20%以上的提升。從系統(tǒng)調(diào)用數(shù)目上看,io uring的系統(tǒng)調(diào)用數(shù)基本上在event poll的1/10以內(nèi)。

短連接

? connection=1000,thread=200, 測試server上不同worker數(shù)目性能。

短連接場景,io uring相對于event poll非但沒有提升,甚至在某些場景下有5%~10%的性能下降。究其原因,除了io uring框架本身帶來的開銷以外,還可能跟io uring編程模式下請求批量下發(fā)而帶來的延遲有關(guān)。

總結(jié)及下一步工作

從筆者目前的測試來看,io_uring在網(wǎng)絡編程方面的優(yōu)化更適合長連接場景,在長連接場景下最高有20%多的提升。短連接場景還有待優(yōu)化,主要考慮以下兩方面:
? io uring本身框架開銷的優(yōu)化,當然這個優(yōu)化對長連接同樣適用。
? 針對短連接的優(yōu)化,如針對accept()請求,先檢查是否有數(shù)據(jù)可讀,避免無效內(nèi)存申請釋放;多個accept()一起下發(fā)等。

nginx 和 echo server 等優(yōu)化實踐相關(guān)內(nèi)容(包含源代碼),我們都已經(jīng)在 OpenAnolis 社區(qū)高性能存儲 SIG 開源(openanolis.org)。也歡迎大家積極參與討論和貢獻,一起探索 io_uring 的高性能之路。

責任編輯:xj

原文標題:面對疾風吧!io_uring 優(yōu)化 nginx 實戰(zhàn)演練

文章出處:【微信公眾號:Linuxer】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • Linux
    +關(guān)注

    關(guān)注

    88

    文章

    11817

    瀏覽量

    219549
  • IO接口
    +關(guān)注

    關(guān)注

    0

    文章

    33

    瀏覽量

    14066
  • nginx
    +關(guān)注

    關(guān)注

    0

    文章

    194

    瀏覽量

    13210

原文標題:面對疾風吧!io_uring 優(yōu)化 nginx 實戰(zhàn)演練

文章出處:【微信號:LinuxDev,微信公眾號:Linux閱碼場】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    Nginx性能優(yōu)化應該先改哪些參數(shù)

    Nginx 是高性能 HTTP 服務器和反向代理服務器,默認配置適合低流量場景。當 QPS(每秒請求數(shù))達到數(shù)千甚至數(shù)萬時,默認配置會成為性能瓶頸。表現(xiàn)為:服務器 CPU 使用率不高但請求開始排隊、響應時間隨并發(fā)增加急劇上升、連接數(shù)達到上限后開始拒絕服務。
    的頭像 發(fā)表于 04-21 11:40 ?157次閱讀

    Nginx的限流機制深度解析

    很多運維工程師對 Nginx 的認知停留在"反向代理"和"負載均衡",但實際上 Nginx 在安全防護方面也相當強大——限流可以防止 CC 攻擊和 API 濫用,黑白名單可以精準控制訪問來源,基礎(chǔ)安全配置可以防護常見的 Web 攻擊。
    的頭像 發(fā)表于 04-10 16:40 ?669次閱讀

    Nginx中Master與Worker進程的工作機制

    Nginx是現(xiàn)代互聯(lián)網(wǎng)架構(gòu)中最常用的Web服務器和反向代理軟件。很多運維工程師使用Nginx多年,卻對其核心架構(gòu)一知半解,配置優(yōu)化時只會機械地調(diào)整幾個參數(shù)。本文從Nginx進程模型出發(fā)
    的頭像 發(fā)表于 04-08 14:21 ?113次閱讀

    Nginx高并發(fā)連接調(diào)優(yōu)實戰(zhàn)手冊

    Nginx 的高性能源自其事件驅(qū)動架構(gòu)。與 Apache 的"每連接一線程"模型不同,Nginx 使用單線程事件循環(huán)處理數(shù)千個并發(fā)連接。理解這套架構(gòu)是調(diào)優(yōu)的前提。
    的頭像 發(fā)表于 03-16 15:28 ?416次閱讀

    Nginx常見故障排查手冊

    Nginx 報 502、504、連接超時,看起來都是“請求沒成功”,但根因完全不是一類問題。502 更多是上游服務直接返回無效響應、連接被拒絕或進程掛了;504 更像是請求已經(jīng)到上游,但超時窗口內(nèi)沒
    的頭像 發(fā)表于 03-11 09:47 ?459次閱讀

    Nginx反向代理和負載均衡配置實戰(zhàn)

    負載均衡則是反向代理的進階玩法。當一臺后端服務器扛不住流量的時候,就需要多臺服務器一起分擔壓力。Nginx負責把請求分發(fā)到不同的服務器上,這就是負載均衡。
    的頭像 發(fā)表于 01-23 13:44 ?973次閱讀

    如何基于Nginx構(gòu)建微服務網(wǎng)關(guān)

    今天,我將分享我們團隊如何基于Nginx構(gòu)建了一個日均處理10億+請求的微服務網(wǎng)關(guān),以及踩過的那些坑。這套方案已經(jīng)穩(wěn)定運行2年+,經(jīng)歷過多次大促考驗。
    的頭像 發(fā)表于 09-02 16:29 ?962次閱讀

    Nginx高并發(fā)優(yōu)化方案

    作為一名在生產(chǎn)環(huán)境中摸爬滾打多年的運維工程師,我見過太多因為Nginx配置不當導致的性能瓶頸。今天分享一套完整的Nginx高并發(fā)優(yōu)化方案,幫助你的系統(tǒng)從10萬QPS突破到百萬級別。
    的頭像 發(fā)表于 08-13 15:51 ?1218次閱讀

    Nginx在企業(yè)環(huán)境中的調(diào)優(yōu)策略

    Nginx作為現(xiàn)代互聯(lián)網(wǎng)架構(gòu)中最重要的Web服務器和反向代理服務器,其性能調(diào)優(yōu)對企業(yè)級應用的穩(wěn)定性和效率至關(guān)重要。本指南將從運維實踐角度出發(fā),詳細介紹Nginx在企業(yè)環(huán)境中的各種調(diào)優(yōu)策略和最佳實踐。
    的頭像 發(fā)表于 07-14 11:13 ?791次閱讀

    Nginx和Apache的差異

    Nginx是一個 輕量級/高性能 的反向代理Web服務器,用于 HTTP、HTTPS、SMTP、POP3 和IMAP 協(xié)議。
    的頭像 發(fā)表于 07-09 09:45 ?784次閱讀

    Nginx配置終極指南

    Nginx 是開源、高性能、高可靠的 Web 和反向代理服務器,而且支持熱部署,幾乎可以做到 7 * 24 小時不間斷運行,即使運行幾個月也不需要重新啟動,還能在不間斷服務的情況下對軟件版本進行熱
    的頭像 發(fā)表于 06-18 15:56 ?1205次閱讀
    <b class='flag-5'>Nginx</b>配置終極指南

    云原生環(huán)境里Nginx的故障排查思路

    本文聚焦于云原生環(huán)境下Nginx的故障排查思路。隨著云原生技術(shù)的廣泛應用,Nginx作為常用的高性能Web服務器和反向代理服務器,在容器化和編排的環(huán)境中面臨著新的故障場景和挑戰(zhàn)。
    的頭像 發(fā)表于 06-17 13:53 ?1154次閱讀
    云原生環(huán)境里<b class='flag-5'>Nginx</b>的故障排查思路

    Nginx性能優(yōu)化終極指南

    而worker 進程數(shù)默認為 1 。單進程最大連接數(shù)為1024。如下圖(打開Nginx目錄下的/conf/nginx.conf 文檔),現(xiàn)在我們來對這兩個數(shù)值進行調(diào)優(yōu)
    的頭像 發(fā)表于 06-16 13:44 ?1551次閱讀
    <b class='flag-5'>Nginx</b>性能<b class='flag-5'>優(yōu)化</b>終極指南

    Nginx核心功能深度解析

    Nginx核心功能深度解析
    的頭像 發(fā)表于 05-09 10:50 ?1009次閱讀

    Nginx緩存配置詳解

    Nginx 是一個功能強大的 Web 服務器和反向代理服務器,它可以用于實現(xiàn)靜態(tài)內(nèi)容的緩存,緩存可以分為客戶端緩存和服務端緩存。
    的頭像 發(fā)表于 05-07 14:03 ?1381次閱讀
    <b class='flag-5'>Nginx</b>緩存配置詳解
    绥宁县| 灵武市| 芦山县| 大化| 湘西| 隆昌县| 郑州市| 阿拉善左旗| 驻马店市| 龙海市| 苏尼特右旗| 嘉峪关市| 江永县| 乌拉特后旗| 汉中市| 青岛市| 历史| 茂名市| 扎赉特旗| 施甸县| 白城市| 息烽县| 霍林郭勒市| 昭通市| 灵丘县| 广东省| 白河县| 上杭县| 雷山县| 河西区| 含山县| 赤壁市| 吉木萨尔县| 亳州市| 资兴市| 平利县| 鸡泽县| 嫩江县| 兰考县| 衡南县| 威远县|