精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

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

    文章

    11227

    瀏覽量

    208924
  • IO接口
    +關注

    關注

    0

    文章

    30

    瀏覽量

    13395
  • nginx
    +關注

    關注

    0

    文章

    143

    瀏覽量

    12163

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

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

收藏 人收藏

    評論

    相關推薦

    使用lsof實現對linux文件的誤刪除恢復練習

    本文記錄使用lsof實現對linux文件的誤刪除恢復練習。題目如下: 1.確保當前nginx進程運行中 2.刪除日志文件,rm -f /var/log/nginx/access.log 3.以
    的頭像 發表于 11-24 11:14 ?81次閱讀
    使用lsof實現對linux文件的誤刪除恢復練習

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

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

    nginx負載均衡配置介紹

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

    nginx日志配置方法

    access_log用來定義日志級別,日志位置。
    的頭像 發表于 10-24 17:43 ?198次閱讀

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

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

    Jtti:美國VPS開啟nginx狀態監控,查看web服務器的并發連接數

    Nginx的ngx_http_stub_status_module提供能夠獲取Nginx自上次啟動以來的工作狀態的功能。如果需要啟用此功能的話,需要在編譯的過程中添加如下參數
    的頭像 發表于 08-26 15:42 ?228次閱讀

    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

    如何使用nginx反向代理功能?保姆級教程!

    一關于nginxnginx是一款高性能的開源Web服務器軟件,也可以用于反向代理、負載均衡等,并且具有高性能、低內存消耗等優點。本文我們主要講解關于nginx的反向代理功能,并在服務器上實現如下功能
    的頭像 發表于 06-21 08:21 ?573次閱讀
    如何使用<b class='flag-5'>nginx</b>反向代理功能?保姆級教程!

    核心開發者因安全策略分歧離隊,Nginx分叉出freenginx項目

    值得注意的是,Nginx是一款由俄羅斯人伊戈爾?賽索耶夫(Igor Sysoev)創作,并于2004年起向公眾公開的異步網頁服務器平臺,廣泛用于反向代理、負載均衡和HTTP緩存等功能。據官方公布的2021年6月數據,Nginx已經超越Apache成為全球最受歡迎的網頁服務
    的頭像 發表于 02-19 15:51 ?390次閱讀

    Apache服務器和Nginx服務器

    Apache和Nginx都是常見的開源Web服務器軟件,它們用于處理HTTP請求并提供網站和應用程序的服務。下面是對Apache和Nginx的一些基本特點的比較: 一、Apache HTTP
    的頭像 發表于 01-22 16:48 ?519次閱讀

    【愛芯派?Pro?開發板試用體驗】實現簡單視頻直播系統

    nginx-http-flv-module簡介 來自官方的介紹: nginx [engine x] 是一個 HTTP 和反向代理服務器、一個郵件代理服務器和一個通用的 TCP/UDP 代理服務器,最初由 Igor
    發表于 01-21 16:36

    Nginx在Windows/docker中的使用

    nginx 是一個高性能的開源反向代理服務器和 web 服務器,一般用來搭建靜態資源服務器、負載均衡器、反向代理,本文將分享其在 Windows/docker 中的使用,使用 nssm 部署成服務的方案腳本,局域網中自定義域名解決https提示不安全的解決方案,以及一路踩過的坑。
    的頭像 發表于 01-03 10:20 ?1753次閱讀
    <b class='flag-5'>Nginx</b>在Windows/docker中的使用

    如何通過Nginx實現禁止國外IP訪問網站

    最近不少小伙伴反饋自己維護的項目中,經常在后臺可以看到來自國外IP的攻擊,令人頭疼。今天浩道跟大家分享如何通過Nginx來實現禁止國外IP訪問網站,確保你網站免遭國外IP攻擊了!
    的頭像 發表于 12-01 11:12 ?1376次閱讀
    如何通過<b class='flag-5'>Nginx</b>實現禁止國外IP訪問網站

    Nginx的配置文件如何設置頭信息保留真實IP不丟失

    Nginx 配置中設置頭信息以保留客戶端的真實 IP 地址通常是在使用反向代理的場景中需要的。當 Nginx 作為反向代理時,客戶端的真實 IP 地址可能會在轉發請求時丟失,因為到達應用服務器
    的頭像 發表于 11-30 10:54 ?1884次閱讀