配置語法
語法: sendfile on | off;
預設值: sendfile off;
上下文: http,server,location,if in location
說明
sendfile值為on,指定使用sendfile系統呼叫來傳輸檔案。
sendfile系統呼叫在兩個檔案描述符之間直接傳遞資料(完全在核心中操作),從而避免了資料在核心緩衝區和使用者緩衝區之間的拷貝,操作效率很高,被稱之為零拷貝。
示例
http {
# ...
sendfile on;
# ...
}
原理
read/write
在傳統的檔案傳輸方式(read、write/send方式),具體流程細節如下:
呼叫read函式,檔案資料拷貝到核心緩衝區
read函式返回,資料從核心緩衝區拷貝到使用者緩衝區
呼叫write/send函式,將資料從使用者緩衝區拷貝到核心socket緩衝區
資料從核心socket緩衝區拷貝到協議引擎中
在這個過程當中,檔案資料實際上是經過了四次拷貝操作:
硬碟—>核心緩衝區—>使用者緩衝區—>核心socket緩衝區—>協議引擎
sendfile系統呼叫則提供了一種減少拷貝次數,提公升檔案傳輸效能的方法。
sendfile系統呼叫利用dma(直接儲存器訪問:外部裝置不通過cpu而直接與系統記憶體交換資料的接**術)將資料拷貝到核心緩衝區,之後資料被拷貝到與socket相關的核心緩衝區。這裡沒有 使用者態和核心態 之間的切換,在核心中直接完成了從乙個 buffer 到另乙個 buffer 的拷貝
dma擎將資料從核心socket緩衝區拷貝到協議引擎中
這裡沒有使用者態和核心態之間的切換,也沒有核心緩衝區和使用者緩衝區之間的拷貝,大大提公升了傳輸效能。
這個過程資料經歷的拷貝操作如下:
硬碟—>核心緩衝區—>核心socket緩衝區—>協議引擎
帶有dma收集拷貝功能的sendfile
對於帶有dma收集拷貝功能的sendfile系統呼叫,還可以再減少一次核心緩衝區之間的拷貝。具體流程如下:
dfile系統呼叫利用dma引擎將檔案資料拷貝到核心緩衝區,之後,將帶有檔案位置和長度資訊的緩衝區描述符新增到核心socket緩衝區中
引擎會將資料直接從核心緩衝區拷貝到協議引擎中
這個過程資料經歷的拷貝操作如下:
硬碟—>核心緩衝區—>協議引擎
nginx sendfile 引數解釋
sendfile 現在流行的web 伺服器裡面都提供 sendfile 選項用來提高伺服器效能,那到底 sendfile是什麼,怎麼影響效能的呢?sendfile實際上是 linux2.0 以後的推出的乙個系統呼叫,web伺服器可以通過調整自身的配置來決定是否利用 sendfile這個系統呼叫。先來...
DNS原理 HTTP原理 TCP原理
開啟網頁 輸入 檢視本地的dns庫是否存在該 的網域名稱與對應ip位址 接下有兩種情況 本地存在該 網域名稱對應的ip hosts檔案 然後我們直接根據本地快取的dns進行解析,並訪問該網域名稱對應的ip位址,在進行tcp的三次握手,進行與 的連線,當然我們訪問 完畢之後,又進行了四次揮手斷開 本地...
mvcc原理 MySQL MVCC原理
1 mvcc基本原理 mvcc 多版本併發控制 mvcc,multiversion currency control 一般情況下,事務性儲存引擎不是只使用表鎖,行加鎖的處理資料,而是結合了mvcc機制,以處理更多的併發問題。mvcc處理高併發能力最強,但系統開銷 比最大 較表鎖 行級鎖 這是最求高併...