讀 Zero Copy I: User-Mode Perspective

  • 使用 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 呢?

0 意見: