nginx中配置sendfile及詳細(xì)說明

配置示例

http {
    # other directives
    sendfile    on;
    # other directives
}

指令說明

語法: sendfile on | off;
默認(rèn)值: sendfile off;
上下文: http,server,location,if in location

指定是否使用sendfile系統(tǒng)調(diào)用來傳輸文件。
sendfile系統(tǒng)調(diào)用在兩個文件描述符之間直接傳遞數(shù)據(jù)(完全在內(nèi)核中操作),從而避免了數(shù)據(jù)在內(nèi)核緩沖區(qū)和用戶緩沖區(qū)之間的拷貝,操作效率很高,被稱之為零拷貝。

原理解釋

read/write

在傳統(tǒng)的文件傳輸方式(read、write/send方式),具體流程細(xì)節(jié)如下:

  1. 調(diào)用read函數(shù),文件數(shù)據(jù)拷貝到內(nèi)核緩沖區(qū)
  2. read函數(shù)返回,數(shù)據(jù)從內(nèi)核緩沖區(qū)拷貝到用戶緩沖區(qū)
  3. 調(diào)用write/send函數(shù),將數(shù)據(jù)從用戶緩沖區(qū)拷貝到內(nèi)核socket緩沖區(qū)
  4. 數(shù)據(jù)從內(nèi)核socket緩沖區(qū)拷貝到協(xié)議引擎中

在這個過程當(dāng)中,文件數(shù)據(jù)實(shí)際上是經(jīng)過了四次拷貝操作:
硬盤—>內(nèi)核緩沖區(qū)—>用戶緩沖區(qū)—>內(nèi)核socket緩沖區(qū)—>協(xié)議引擎

sendfile

sendfile系統(tǒng)調(diào)用則提供了一種減少拷貝次數(shù),提升文件傳輸性能的方法。

  1. sendfile系統(tǒng)調(diào)用利用DMA引擎將文件數(shù)據(jù)拷貝到內(nèi)核緩沖區(qū),之后數(shù)據(jù)被拷貝到內(nèi)核socket緩沖區(qū)中
  2. DMA引擎將數(shù)據(jù)從內(nèi)核socket緩沖區(qū)拷貝到協(xié)議引擎中

這里沒有用戶態(tài)和內(nèi)核態(tài)之間的切換,也沒有內(nèi)核緩沖區(qū)和用戶緩沖區(qū)之間的拷貝,大大提升了傳輸性能。
這個過程數(shù)據(jù)經(jīng)歷的拷貝操作如下:
硬盤—>內(nèi)核緩沖區(qū)—>內(nèi)核socket緩沖區(qū)—>協(xié)議引擎

帶有DMA收集拷貝功能的sendfile

對于帶有DMA收集拷貝功能的sendfile系統(tǒng)調(diào)用,還可以再減少一次內(nèi)核緩沖區(qū)之間的拷貝。具體流程如下:

  1. sendfile系統(tǒng)調(diào)用利用DMA引擎將文件數(shù)據(jù)拷貝到內(nèi)核緩沖區(qū),之后,將帶有文件位置和長度信息的緩沖區(qū)描述符添加到內(nèi)核socket緩沖區(qū)中
  2. DMA引擎會將數(shù)據(jù)直接從內(nèi)核緩沖區(qū)拷貝到協(xié)議引擎中

這個過程數(shù)據(jù)經(jīng)歷的拷貝操作如下:
硬盤—>內(nèi)核緩沖區(qū)—>協(xié)議引擎

參考資料

1、Linux 中直接 I/O 機(jī)制的介紹
2、Linux 中的零拷貝技術(shù),第 1 部分
3、Linux 中的零拷貝技術(shù),第 2 部分

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 什么是零拷貝 維基上是這么描述零拷貝的:零拷貝描述的是CPU不執(zhí)行拷貝數(shù)據(jù)從一個存儲區(qū)域到另一個存儲區(qū)域的任務(wù),這...
    tomas家的小撥浪鼓閱讀 28,560評論 11 62
  • 本文探討Linux中主要的幾種零拷貝技術(shù)以及零拷貝技術(shù)適用的場景。為了迅速建立起零拷貝的概念,我們拿一個常用的場景...
    卡巴拉的樹閱讀 66,550評論 13 112
  • 目錄 [TOC] 簡介 零拷貝(zero-copy)技術(shù)可以減少數(shù)據(jù)拷貝和共享總線操作的次數(shù),消除通信數(shù)據(jù)在存儲器...
    狼爺?shù)奶?/span>閱讀 1,920評論 0 2
  • 天朗氣清一色秋, 萬里楓葉笑枝頭。 千千落木無情下, 人若有情晚風(fēng)收。 取盡青山做畫屏, 舀干黃河洗心情。 摘得明...
    望舍閱讀 388評論 2 7
  • 習(xí)慣了的事情,不易改變。晚飯過后都會再買簡單的食物來做夜宵,今天忘了。 九點(diǎn)半下樓,有點(diǎn)涼,依然閃爍著霓虹燈,紅的...
    穩(wěn)兒閱讀 361評論 0 1

友情鏈接更多精彩內(nèi)容