日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

Linux - 怎么实现大文件传输

發(fā)布時間:2024/3/26 linux 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux - 怎么实现大文件传输 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一 前言

博文《PageCache》中介紹了 PageCache 的優(yōu)缺點,其實在處理大文件中 PageCache 作用反而沒有那么好。所以本文介紹 Linux 是怎么處理大文件的。

二 起因

首先看一下一個 read() 系統(tǒng)調用流程發(fā)生了什么,如下圖:

  • 當調用 read 方法時,會阻塞著,此時內(nèi)核會向磁盤發(fā)起 I/O 請求。
  • 磁盤收到請求后,便會尋址,當磁盤數(shù)據(jù)準備好后,就會向內(nèi)核發(fā)起 I/O 中斷,告知內(nèi)核磁盤數(shù)據(jù)已經(jīng)準備好。
  • 內(nèi)核收到 I/O 中斷后,就將數(shù)據(jù)從磁盤控制器緩沖區(qū)拷貝到 PageCache 里。
  • 最后,內(nèi)核再把 PageCache 中的數(shù)據(jù)拷貝到用戶緩沖區(qū),于是 read 調用返回。
  • 從上圖不難發(fā)現(xiàn)兩個問題:1,這是一個同步 I/O;2,數(shù)據(jù)多次拷貝。通常分別采用 異步 I/O 和 直接 I/O 來優(yōu)化上面的問題。

    三 異步 I/O、 直接 I/O

    異步 I/O 是指發(fā)起 I/O 請求后,不再阻塞等待。而是先去處理其他任務,當拷貝完成后再進行處理。

    異步 I/O 并沒有涉及到 PageCache,所以使用異步 I/O 就意味著要繞開 PageCache。
    繞開 PageCache 的 I/O 叫直接 I/O,使用 PageCache 的 I/O 則叫緩存 I/O。通常,對于磁盤,異步 I/O 只支持直接 I/O。

    如下圖:

  • 內(nèi)核向磁盤發(fā)起讀請求,但是可以不等待數(shù)據(jù)就位就可以返回,于是進程此時可以處理其他任務。
  • 當內(nèi)核將磁盤中的數(shù)據(jù)拷貝到進程緩沖區(qū)后,進程將接收到內(nèi)核的通知,再去處理數(shù)據(jù)。
  • 四 總結

    針對大文件的傳輸?shù)姆绞?#xff0c;應該使用「異步 I/O + 直接 I/O」來替代零拷貝技術。常見的兩種 直接 I/O 應用場景:

  • 如在 MySQL 數(shù)據(jù)庫中,是使用直接 I/O的。應用程序已經(jīng)實現(xiàn)了磁盤數(shù)據(jù)的緩存,那么可以不需要 PageCache 再次緩存,減少額外的性能損耗。
  • 傳輸大文件的時候,由于大文件難以命中 PageCache 緩存,而且會占滿 PageCache 導致「熱點」文件無法充分利用緩存,從而增大了性能開銷,因此,這時應該使用直接 I/O。
  • 總結

    以上是生活随笔為你收集整理的Linux - 怎么实现大文件传输的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。