零拷貝zero copy

零拷貝的概念


零拷貝:CPU不執行拷貝數據的任務

優點:

  • 減少不必要的cpu拷貝
  • 減少內存帶寬的使用
  • 減少系統態用戶態的切換

傳統IO


在這裏插入圖片描述
四次用戶態系統態的切換
四次數據拷貝(兩次DMA拷貝,兩次cpu拷貝)

  1. 硬盤到內核空間
  2. 內核空間到用戶空間(cpu)
  3. 用戶空間到socket buffer(cpu)
  4. socket buffer到協議引擎

基於SendFile實現的零拷貝


在這裏插入圖片描述
兩次用戶態系統態的切換
三次數據拷貝,兩次DMA拷貝,一次cpu拷貝

  1. 硬盤到內核空間緩衝區
  2. 內核空間緩衝區到socket buffer(cpu)
  3. socket buffer到協議引擎

帶DMA的sendFile零拷貝


在這裏插入圖片描述
兩次系統態用戶態的切換,兩次DMA拷貝

  1. 硬盤到內核空間
    描述信息拷貝到socket buffer,a)kernel buffer的內存地址;b)kernel buffer的偏移量
  2. 內核空間緩衝區拷貝到協議引擎

基於mmap實現的零拷貝


在這裏插入圖片描述
四次用戶態系統態的切換,兩次DMA拷貝,一次cpu拷貝。

  1. 硬盤到內核空間緩衝區
  2. 內核空間緩衝區到socket buffer
  3. socket buffer到協議引擎

FileChannel的tranfromTo是零拷貝的實現。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章