在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

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

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

Linux閱碼場(chǎng) ? 來源:Linuxer ? 作者:Linuxer ? 2020-10-10 16:19 ? 次閱讀

引言

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

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

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

Nginx io_uring 代碼優(yōu)化

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

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

基于event poll的編程模型

event poll是Nginx在Linux下的默認(rèn)事件模型。

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

基于io_uring的編程模型

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

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

測(cè)試結(jié)果

測(cè)試環(huán)境

測(cè)試機(jī)器
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,否則會(huì)寫日志,影響測(cè)試 location / { return 200; // 不讀本地文件,直接返回200 } }}

benchmark
使用輕量級(jí)HTTP性能測(cè)試工具wrk進(jìn)行壓測(cè)。

測(cè)試命令

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

測(cè)試結(jié)果

長(zhǎng)連接

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

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

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

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

短連接

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

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

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

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

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

責(zé)任編輯:xj

原文標(biāo)題:面對(duì)疾風(fēng)吧!io_uring 優(yōu)化 nginx 實(shí)戰(zhàn)演練

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

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

    關(guān)注

    87

    文章

    11331

    瀏覽量

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

    關(guān)注

    0

    文章

    31

    瀏覽量

    13431
  • nginx
    +關(guān)注

    關(guān)注

    0

    文章

    152

    瀏覽量

    12195

原文標(biāo)題:面對(duì)疾風(fēng)吧!io_uring 優(yōu)化 nginx 實(shí)戰(zhàn)演練

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

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    EulerOS+Nginx+MySQL 部署 GLPI 資產(chǎn)管理系統(tǒng)

    安全保障,幫助企業(yè)實(shí)現(xiàn)資源的按需擴(kuò)展,提升業(yè)務(wù)響應(yīng)速度,確保服務(wù)的連續(xù)性和數(shù)據(jù)的安全性。??使用的操作系統(tǒng)鏡像版本如下: ??檢查 Nginx 是否部署成功,如果返回如下信息表示 Nginx 安裝成功: ??接下來就可以在瀏覽器中訪問https://124.70.44
    的頭像 發(fā)表于 01-03 09:28 ?160次閱讀
    EulerOS+<b class='flag-5'>Nginx</b>+MySQL 部署 GLPI 資產(chǎn)管理系統(tǒng)

    玩轉(zhuǎn)Nginx日志管理:高效排查問題的終極指南

    Nginx日志對(duì)于統(tǒng)計(jì)、系統(tǒng)服務(wù)排錯(cuò)很有用。Nginx日志主要分為兩種:access_log(訪問日志)和error_log(錯(cuò)誤日志)。通過訪問日志我們可以得到用戶的IP地址、瀏覽器的信息,請(qǐng)求
    的頭像 發(fā)表于 12-30 13:50 ?140次閱讀

    nginx+lua+redis實(shí)現(xiàn)灰度發(fā)布

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

    Nginx代理轉(zhuǎn)發(fā)實(shí)戰(zhàn):零基礎(chǔ)掌握服務(wù)器流量分發(fā)技巧

    Nginx 是最常用的反向代理工具之一,一個(gè)指令 proxy_pass搞定反向代理,對(duì)于接口代理、負(fù)載均衡很是實(shí)用,但 proxy_pass指令后面的參數(shù)很有講究,通常一個(gè)“/”都可能引發(fā)一個(gè)血案
    的頭像 發(fā)表于 12-09 12:28 ?844次閱讀

    Nginx日常運(yùn)維方法Linux版

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

    「服務(wù)器」Nginx Proxy Manager申請(qǐng)cloudflare泛域名

    一概述NginxProxyManager是一個(gè)基于Nginx的反向代理管理工具,它提供了一個(gè)用戶友好的Web界面,方便用戶管理和配置Nginx反向代理。主要功能包括:簡(jiǎn)易的用戶界面:通過圖形界面
    的頭像 發(fā)表于 12-06 01:03 ?223次閱讀
    「服務(wù)器」<b class='flag-5'>Nginx</b> Proxy Manager申請(qǐng)cloudflare泛域名

    詳解nginx中的正則表達(dá)式

    前言,我這里驗(yàn)證的nginx-v1.23.2單機(jī)環(huán)境下的nginx中的正則表達(dá)式、location路徑匹配規(guī)則和優(yōu)先級(jí)。
    的頭像 發(fā)表于 12-03 09:59 ?298次閱讀
    詳解<b class='flag-5'>nginx</b>中的正則表達(dá)式

    確保網(wǎng)站無縫運(yùn)行:Keepalived高可用與Nginx集成實(shí)戰(zhàn)

    目錄 keepalived高可用(nginx) keepalived簡(jiǎn)介 keepalived的重要功能 keepalived高可用架構(gòu)圖 keepalived工作原理描述 keepalived實(shí)現(xiàn)
    的頭像 發(fā)表于 11-27 09:08 ?607次閱讀
    確保網(wǎng)站無縫運(yùn)行:Keepalived高可用與<b class='flag-5'>Nginx</b>集成<b class='flag-5'>實(shí)戰(zhàn)</b>

    nginx隱藏版本號(hào)與WEB服務(wù)器信息

    nginx不僅可以隱藏版本信息,還支持自定義web服務(wù)器信息 先看看最終的隱藏結(jié)果吧 具體怎么實(shí)現(xiàn)呢,其實(shí)也很簡(jiǎn)單,請(qǐng)往下看 1 官網(wǎng)下載最新穩(wěn)定版 wget http://nginx
    的頭像 發(fā)表于 11-22 10:25 ?210次閱讀
    <b class='flag-5'>nginx</b>隱藏版本號(hào)與WEB服務(wù)器信息

    nginx負(fù)載均衡配置介紹

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

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

    前言,我這里驗(yàn)證的nginx-v1.23.2單機(jī)環(huán)境下的nginx中的正則表達(dá)式、location路徑匹配規(guī)則和優(yōu)先級(jí)。
    的頭像 發(fā)表于 09-29 16:02 ?892次閱讀
    <b class='flag-5'>nginx</b>中的正則表達(dá)式和location路徑匹配指南

    Jtti:美國(guó)VPS開啟nginx狀態(tài)監(jiān)控,查看web服務(wù)器的并發(fā)連接數(shù)

    Nginx的ngx_http_stub_status_module提供能夠獲取Nginx自上次啟動(dòng)以來的工作狀態(tài)的功能。如果需要啟用此功能的話,需要在編譯的過程中添加如下參數(shù)
    的頭像 發(fā)表于 08-26 15:42 ?322次閱讀

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

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

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

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

    Apache服務(wù)器和Nginx服務(wù)器

    Apache和Nginx都是常見的開源Web服務(wù)器軟件,它們用于處理HTTP請(qǐng)求并提供網(wǎng)站和應(yīng)用程序的服務(wù)。下面是對(duì)Apache和Nginx的一些基本特點(diǎn)的比較: 一、Apache HTTP
    的頭像 發(fā)表于 01-22 16:48 ?587次閱讀
    主站蜘蛛池模板: 天堂中文资源在线地址| 成 人 黄 色视频免费播放| 我不卡老子影院午夜伦我不卡四虎| 成人免费看黄页网址大全| 嫩草影院在线入口| 五月婷婷激情视频| 天天色天天综合网| 黄a级免费| 女人大毛片一级毛片一| 欧美成人精品福利网站| 色手机在线| 午夜剧场黄| 美女被网站免费看九色视频 | 综合爱| 中文字幕第13亚洲另类| 久久国产午夜精品理论片34页| 天天在线天天综合网色| 一本到在线观看视频不卡| 高清国产在线观看| 国产激爽大片在线播放| 国产综合图片| 韩国三级中文字幕hd| 国产精品三级视频| 午夜在线观看免费观看大全| 506rr亚洲欧美| 一级免费看片| 日韩免费一级| 久久夜夜肉肉热热日日| 人人草人人插| 免费福利影院| 福利午夜最新| 五月婷婷六月丁香激情| 播放一级毛片| 激情综合婷婷丁香六月花| 国产三级在线| 九九精品久久久久久噜噜| 可以直接看的黄色网址| 老色鬼久久综合第一| www.乱| 91精品欧美激情在线播放| 色综合久久88色综合天天|