首頁 後端開發 php教程 nginx sendfile 參數解釋

nginx sendfile 參數解釋

Jul 29, 2016 am 09:05 AM
buffer kernel mode user

sendfile
現在流行的web 伺服器裡面都提供 sendfile 選項來提升伺服器效能,那到底 sendfile是什麼,又怎麼影響效能的呢? sendfile其實是 Linux2.0+以後的推出的一個系統調用,web伺服器可以透過調整自身的配置來決定是否要利用 sendfile這個系統調用。先來看看不用 sendfile的傳統網路傳輸過程:
read(file,tmp_buf, len);
write(socket,tmp_buf, len);
硬碟 >> kernel buffer >> user buffer>> kernel socket buffer >>協定棧
一般來說一個網路應用是透過讀取硬碟數據,然後寫數據到socket 來完成網路傳輸的。上面2行用程式碼解釋了這一點,不過上面2行簡單的程式碼掩蓋了底層的許多操作。來看看底層是怎麼執行上面2行程式碼的:
1.系統呼叫 read()產生一個上下文切換:從 user mode 切換到 kernel mode,然後 DMA 執行拷貝,把文件資料從硬碟讀到一個 kernel buffer 裡。
2、資料從 kernel buffer拷貝到 user buffer,然後系統呼叫 read() 返回,這時又產生一個上下文切換:從kernel mode 切換到 user mode。
3. 系統呼叫write()產生一個上下文切換:從user mode切換到kernel mode,然後把步驟2讀到user buffer的資料拷貝到kernel buffer(資料第2次拷貝到kernel buffer),不過這次是個不同的kernel buffer,這個buffer和socket相關聯。
4、系統呼叫 write()返回,產生一個上下文切換:從 kernel mode 切換到 user mode(第4次切換了),然後 DMA 從 kernel buffer拷貝資料到協定堆疊(第4次拷貝了)。
上面4個步驟有4次上下文切換,有4次拷貝,我們發現如果能減少切換次數和拷貝次數將會有效提升效能。在kernel2.0+ 版本中,系統呼叫 sendfile() 就是用來簡化上面步驟提升效能的。 sendfile() 不只減少切換次數而且還能減少拷貝次數。
再來看看用 sendfile()來進行網路傳輸的過程:
sendfile(socket,file, len);
硬碟 >> kernel buffer (快速拷貝到kernelsocket buffer) >>協定堆疊
1、 系統呼叫sendfile()透過 DMA把硬碟資料拷貝到 kernel buffer,然後資料被 kernel直接拷貝到另外一個與 socket相關的 kernel buffer。這裡沒有 user mode和 kernel mode之間的切換,在 kernel直接完成了從一個 buffer到另一個 buffer的拷貝。
2、DMA 把資料從 kernelbuffer 直接拷貝給協定棧,沒有切換,也不需要資料從 user mode 拷貝到 kernel mode,因為資料就在 kernel 裡。

文章參考:http://www.th7.cn/system/lin/201306/41314.shtml

').addClass('pre-numbering').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i ').text(i)); }; $numbering.fadeIn(1700); }); });

以上就介紹了nginx sendfile 參數解釋,包含了方面的內容,希望對PHP教學有興趣的朋友有幫助。

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

解決kernel_security_check_failure藍色畫面的17種方法 解決kernel_security_check_failure藍色畫面的17種方法 Feb 12, 2024 pm 08:51 PM

Kernelsecuritycheckfailure(內核檢查失敗)就是一個比較常見的停止代碼類型,可藍屏錯誤出現不管是什麼原因都讓很多的有用戶們十分的苦惱,下面就讓本站來為用戶們來仔細的介紹一下17種解決方法吧。 kernel_security_check_failure藍色畫面的17種解決方法方法1:移除全部外部裝置當您使用的任何外部裝置與您的Windows版本不相容時,則可能會發生Kernelsecuritycheckfailure藍色畫面錯誤。為此,您需要在嘗試重新啟動電腦之前拔下全部外部裝置。

linux kernel是什麼 linux kernel是什麼 Mar 23, 2023 am 10:20 AM

linux kernel是linux核心的意思,主要起到完成IO驅動設備管理,T​​CP/IP以及任務調度;linux核心是Linux作業系統的主要組件,也是電腦硬體與其進程之間的核心接口,它負責兩者之間的通信,還要盡可能有效率地管理資源。

docker掛載目錄權限問題怎麼解決 docker掛載目錄權限問題怎麼解決 Feb 29, 2024 am 10:04 AM

在Docker中,掛載目錄的權限問題通常可以透過以下方法解決:使用-v參數指定掛載目錄時新增權限相關的選項。可以透過在掛載的目錄後面新增:ro或:rw來指定掛載目錄的權限,分別表示只讀和讀寫權限。例如:dockerrun-v/host/path:/container/path:roimage_name在Dockerfile中定義USER指令來指定容器中執行的用戶,以確保容器內部的操作符合權限要求。例如:FROMimage_name#CreateanewuserRUNuseradd-ms/bin/

高併發情況下 Linux 系統及 kernel 參數優化 高併發情況下 Linux 系統及 kernel 參數優化 Aug 04, 2023 pm 04:41 PM

眾所周知在預設參數情況下Linux對高並發支援並不好,主要受限於單一進程最大開啟檔案數限制、核心TCP參數方面和IO事件分配機制等。以下就從幾方面來調整讓Linux系統能夠支援高並發環境。

java中Buffer的概念是什麼 java中Buffer的概念是什麼 Apr 28, 2023 pm 05:13 PM

1.概念使用JavaNIOBuffers與NIOChannel互動。從Channel讀取資料到buffers裡,從Buffer把資料寫入到Channels;必須對Buffer的三個屬性進行控制,也就是capacities能力、position-location、limit限制。 2.實例publicstaticvoidmain(String[]args){//產生一個長度為10的緩衝區IntBufferintBuffer=IntBuffer.allocate(10);for(inti=0;i

Linux 因核心恐慌而出現藍色畫面死機 Linux 因核心恐慌而出現藍色畫面死機 Jun 24, 2024 pm 06:47 PM

去年年底,Linux 系統管理服務 systemd 255 版本被賦予了在全螢幕模式下顯示藍色畫面死機 (BSOD) 樣式錯誤訊息的能力。然而,這個解決方案不適用於核心錯誤,因此即將推出的

CentOS7用戶需更新:Linux Kernel補丁發布 CentOS7用戶需更新:Linux Kernel補丁發布 Jan 07, 2024 pm 09:21 PM

基於RedHatEnterpriseLinux7的自由發布來源,CentOS7分支繼承了總是能獲得最新核心安全更新的特性。今天,系統團隊發布了一個非常重要的補丁,對近期發現的4個漏洞進行了及時修復,並推薦用戶盡快安裝補丁,升級至kernel-3.10.0-514.10.2.el7。根據RHSA-2017:0386-1安全公告,這個核心修補修復的漏洞之一是LinuxKernelKVM(Kernel-basedVirtualMachine)部署(CVE-2016-8630),在未定義指令被執行模擬的時

MODE幣近期暴漲的原因 MODE幣近期暴漲的原因 Dec 06, 2024 am 11:43 AM

Mode 幣在 OKX 交易所上市,標誌著它進入主流加密貨幣市場的里程碑。幣安執行長趙長鵬對該專案表示看好,為 Mode 幣帶來了信心和信譽。一個活躍而不斷壯大的社區為計畫營造了熱情和參與。 Mode 幣的代幣經濟學獎勵長期持有者和社群貢獻者,而 DeFi 產業的蓬勃發展為其提供了成長的背景。

See all articles