- 使用 read(file, tmp_buf, len) 及 write(socket, tmp_buf, len) 會有四次 user/kernel context switches 及四次資料複製:hard disk -> kernel buffer -> user buffer -> socket buffer -> NIC
- 使用 tmp_buf = mmap(file, len) 及 write(socket, tmp_buf, len) 可共用 kernel buffer 及 user buffer,可減少一次複製,但需要處理 write() 的時候,file 有變更造成的錯誤
- 使用 sendfile(socket, file, len) 複製次數一樣,但 user/kernel context switches 變為兩次
- 如果 NIC 支援 gather,sendfile(socket, file, len) 可再減少一次複製,不用複製到 socket buffer 就能將資料傳給 NIC
- 有沒有可能直接 hard disk 到 NIC 呢?
6/24/2009
讀 Zero Copy I: User-Mode Perspective
標籤: Linux
訂閱:
張貼意見 (Atom)
0 意見:
張貼意見