女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

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

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

3天內不再提示

io_uring 優化 nginx,基于通用應用 nginx 的實戰

Linux閱碼場 ? 來源:Linuxer ? 作者:Linuxer ? 2020-10-10 16:19 ? 次閱讀

引言

io_uring是Linux內核在v5.1引入的一套異步IO接口,隨著其迅速發展,現在的io_uring已經遠遠超過了純IO的范疇。從Linux v5.3版本開始,io_uring陸續添加了網絡編程相關的API,對用戶提供sendmsg、recvmsg、accept、connect等接口的異步支持,將io_uring的生態范圍擴大到了網絡領域。

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

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

Nginx io_uring 代碼優化

Nginx是一款輕量級的Web服務器、反向代理服務器,由于它的內存占用少,啟動極快,高并發能力強,在互聯網項目中廣泛應用。

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

基于event poll的編程模型

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

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

基于io_uring的編程模型

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

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

測試結果

測試環境

測試機器
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; // 關閉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

測試結果

長連接

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

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

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

可以看到單worker情況下,500個連接以上,QPS有20%以上的提升。從系統調用數目上看,io uring的系統調用數基本上在event poll的1/10以內。

短連接

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

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

總結及下一步工作

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

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

責任編輯:xj

原文標題:面對疾風吧!io_uring 優化 nginx 實戰演練

文章出處:【微信公眾號:Linuxer】歡迎添加關注!文章轉載請注明出處。

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

    關注

    87

    文章

    11465

    瀏覽量

    212805
  • IO接口
    +關注

    關注

    0

    文章

    31

    瀏覽量

    13691
  • nginx
    +關注

    關注

    0

    文章

    163

    瀏覽量

    12497

原文標題:面對疾風吧!io_uring 優化 nginx 實戰演練

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

收藏 人收藏

    評論

    相關推薦
    熱點推薦

    Nginx核心功能深度解析

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

    Nginx緩存配置詳解

    Nginx 是一個功能強大的 Web 服務器和反向代理服務器,它可以用于實現靜態內容的緩存,緩存可以分為客戶端緩存和服務端緩存。
    的頭像 發表于 05-07 14:03 ?416次閱讀
    <b class='flag-5'>Nginx</b>緩存配置詳解

    Nginx實戰全攻略

    Nginx 是一個高性能的 HTTP 和反向代理服務器,也是一個 IMAP/POP3 代理服務器。它以其高并發處理能力、穩定性、豐富的功能模塊和低內存消耗而聞名。
    的頭像 發表于 03-31 10:44 ?2748次閱讀
    <b class='flag-5'>Nginx</b><b class='flag-5'>實戰</b>全攻略

    Nginx服務優化教程

    隱藏Nginx版本號,避免安全漏洞泄漏:修改配置文件法;修改源碼法
    的頭像 發表于 03-12 15:57 ?440次閱讀
    <b class='flag-5'>Nginx</b>服務<b class='flag-5'>優化</b>教程

    Nginx常見面試題總結

    Nginx是一個 輕量級/高性能的反向代理Web服務器,用于 HTTP、HTTPS、SMTP、POP3 和 IMAP 協議。
    的頭像 發表于 03-03 09:36 ?377次閱讀
    <b class='flag-5'>Nginx</b>常見面試題總結

    如何通過優化Nginx配置來提高網絡環境的安全性

    簡介:?在當今數字化時代,網絡安全至關重要。Nginx作為流行的Web服務器,不僅提供高性能,還具備強大的安全保障功能。然而,默認配置可能無法抵御所有安全威脅,因此對Nginx進行安全加固尤為重要
    的頭像 發表于 02-14 17:49 ?1379次閱讀

    nginx+lua+redis實現灰度發布

    作者:馬仁喜 前言: 授人以魚不如授人以漁 .先學會用,在學原理,在學創造,可能一輩子用不到這種能力,但是不能不具備這種能力。這篇文章主要是沉淀使用nginx+lua+redis實現灰度,當我們具備
    的頭像 發表于 12-17 10:01 ?374次閱讀

    Nginx日常運維方法Linux版

    1,安裝? 下載RPM:wget http://nginx.org/packages/centos/7/x86_64/RPMS/nginx
    的頭像 發表于 12-06 16:38 ?417次閱讀
    <b class='flag-5'>Nginx</b>日常運維方法Linux版

    詳解nginx中的正則表達式

    前言,我這里驗證的nginx-v1.23.2單機環境下的nginx中的正則表達式、location路徑匹配規則和優先級。
    的頭像 發表于 12-03 09:59 ?777次閱讀
    詳解<b class='flag-5'>nginx</b>中的正則表達式

    確保網站無縫運行:Keepalived高可用與Nginx集成實戰

    目錄 keepalived高可用(nginx) keepalived簡介 keepalived的重要功能 keepalived高可用架構圖 keepalived工作原理描述 keepalived實現
    的頭像 發表于 11-27 09:08 ?1086次閱讀
    確保網站無縫運行:Keepalived高可用與<b class='flag-5'>Nginx</b>集成<b class='flag-5'>實戰</b>

    nginx隱藏版本號與WEB服務器信息

    nginx不僅可以隱藏版本信息,還支持自定義web服務器信息 先看看最終的隱藏結果吧 具體怎么實現呢,其實也很簡單,請往下看 1 官網下載最新穩定版 wget http://nginx
    的頭像 發表于 11-22 10:25 ?522次閱讀
    <b class='flag-5'>nginx</b>隱藏版本號與WEB服務器信息

    nginx負載均衡配置介紹

    目錄 nginx負載均衡 nginx負載均衡介紹 反向代理與負載均衡 nginx負載均衡配置 Keepalived高可用nginx負載均衡器 修改Web服務器的默認主頁 開啟
    的頭像 發表于 11-10 13:39 ?644次閱讀
    <b class='flag-5'>nginx</b>負載均衡配置介紹

    nginx中的正則表達式和location路徑匹配指南

    前言,我這里驗證的nginx-v1.23.2單機環境下的nginx中的正則表達式、location路徑匹配規則和優先級。
    的頭像 發表于 09-29 16:02 ?1587次閱讀
    <b class='flag-5'>nginx</b>中的正則表達式和location路徑匹配指南

    nginx重啟命令linux步驟是什么?

      1、驗證nginx配置文件是否正確   方法一:進入nginx安裝目錄sbin下,輸入命令./nginx -t   看到如下顯示nginx.conf syntax is ok
    發表于 07-11 17:13

    nginx重啟命令linux步驟是什么?

      1、驗證nginx配置文件是否正確   方法一:進入nginx安裝目錄sbin下,輸入命令./nginx -t   看到如下顯示nginx.conf syntax is ok
    發表于 07-10 16:40