零拷貝的概念
零拷貝:CPU不執行拷貝數據的任務
優點:
- 減少不必要的cpu拷貝
- 減少內存帶寬的使用
- 減少系統態用戶態的切換
傳統IO
四次用戶態系統態的切換
四次數據拷貝(兩次DMA拷貝,兩次cpu拷貝)
- 硬盤到內核空間
- 內核空間到用戶空間(cpu)
- 用戶空間到socket buffer(cpu)
- socket buffer到協議引擎
基於SendFile實現的零拷貝
兩次用戶態系統態的切換
三次數據拷貝,兩次DMA拷貝,一次cpu拷貝
- 硬盤到內核空間緩衝區
- 內核空間緩衝區到socket buffer(cpu)
- socket buffer到協議引擎
帶DMA的sendFile零拷貝
兩次系統態用戶態的切換,兩次DMA拷貝
- 硬盤到內核空間
描述信息拷貝到socket buffer,a)kernel buffer的內存地址;b)kernel buffer的偏移量 - 內核空間緩衝區拷貝到協議引擎
基於mmap實現的零拷貝
四次用戶態系統態的切換,兩次DMA拷貝,一次cpu拷貝。
- 硬盤到內核空間緩衝區
- 內核空間緩衝區到socket buffer
- socket buffer到協議引擎
FileChannel的tranfromTo是零拷貝的實現。