日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當(dāng)前位置:首頁(yè) > 科技  > 軟件

零拷貝并非萬(wàn)能解決方案:重新定義數(shù)據(jù)傳輸?shù)男蕵O限

來(lái)源: 責(zé)編: 時(shí)間:2023-09-18 21:42:11 398觀看
導(dǎo)讀/ PageCache 有什么作用? /在我們前面講解零拷貝的內(nèi)容時(shí),我們了解到一個(gè)重要的概念,即內(nèi)核緩沖區(qū)。那么,你可能會(huì)好奇內(nèi)核緩沖區(qū)到底是什么?這個(gè)專有名詞就是 PageCache,也被稱為磁盤高速緩存。也可以看下 windows 下的緩

/ PageCache 有什么作用? /

在我們前面講解零拷貝的內(nèi)容時(shí),我們了解到一個(gè)重要的概念,即內(nèi)核緩沖區(qū)。那么,你可能會(huì)好奇內(nèi)核緩沖區(qū)到底是什么?這個(gè)專有名詞就是 PageCache,也被稱為磁盤高速緩存。也可以看下 windows 下的緩存區(qū):如圖所示:91R28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片91R28資訊網(wǎng)——每日最新資訊28at.com

零拷貝進(jìn)一步提升性能的原因在于 PageCache 技術(shù)的使用。接下來(lái),我們將詳細(xì)探討 PageCache 技術(shù)是如何實(shí)現(xiàn)這一目標(biāo)的。91R28資訊網(wǎng)——每日最新資訊28at.com

讀寫磁盤相比讀寫內(nèi)存的速度慢太多了,但我們可以采取一種方法來(lái)改善這個(gè)問(wèn)題,即將磁盤數(shù)據(jù)部分緩存到內(nèi)核中,也就是將其存儲(chǔ)在 PageCache 緩存區(qū)中。這個(gè)過(guò)程實(shí)際上是通過(guò) DMA(直接內(nèi)存訪問(wèn))控制器將磁盤數(shù)據(jù)拷貝到內(nèi)核緩沖區(qū)中。91R28資訊網(wǎng)——每日最新資訊28at.com

然而,需要注意的是,由于內(nèi)存空間較磁盤空間有限,因此存在一系列算法來(lái)確保 pageCache 占用的內(nèi)存空間不過(guò)大。我們?cè)诔绦蜻\(yùn)行時(shí)都知道存在一種「局部性」,即剛剛被訪問(wèn)的數(shù)據(jù)在短時(shí)間內(nèi)很可能再次被訪問(wèn)到,概率很高。因此,pageCache 被用作緩存最近訪問(wèn)的數(shù)據(jù)。可以將 pageCache 看作是 Redis,而磁盤則類似于 MySQL。此外,pageCache 還使用了內(nèi)存淘汰機(jī)制,在內(nèi)存空間不足時(shí),會(huì)淘汰最近最久未被訪問(wèn)的緩存。91R28資訊網(wǎng)——每日最新資訊28at.com

當(dāng)在項(xiàng)目中使用 Redis 時(shí),你一定知道如何使用它。和 Redis 類似, PageCache 的工作原理也是一樣的。在進(jìn)程需要訪問(wèn)數(shù)據(jù)時(shí),它會(huì)首先檢查 PageCache 是否已經(jīng)存儲(chǔ)了所需的數(shù)據(jù)。如果數(shù)據(jù)已經(jīng)存在于 PageCache 中,內(nèi)核會(huì)直接返回?cái)?shù)據(jù);如果數(shù)據(jù)未被緩存,則會(huì)從磁盤讀取并將數(shù)據(jù)緩存到 PageCache 中,以備下次查詢時(shí)使用。這種方式可以有效提高訪問(wèn)效率。91R28資訊網(wǎng)——每日最新資訊28at.com

然而,pageCache 還具有另一個(gè)優(yōu)點(diǎn),即預(yù)讀功能。當(dāng)訪問(wèn)并讀取磁盤數(shù)據(jù)時(shí),實(shí)際上需要定位磁盤中的位置。對(duì)于機(jī)械硬盤而言,這意味著磁頭必須旋轉(zhuǎn)到數(shù)據(jù)所在的扇區(qū)位置,然后開(kāi)始順序讀取數(shù)據(jù)。然而,旋轉(zhuǎn)磁頭這種物理操作對(duì)計(jì)算機(jī)而言非常耗時(shí)。為了降低其影響,就出現(xiàn)了預(yù)讀功能。通過(guò)預(yù)讀功能,可以提前預(yù)讀下一扇區(qū)的數(shù)據(jù),減少等待磁頭旋轉(zhuǎn)的時(shí)間。91R28資訊網(wǎng)——每日最新資訊28at.com

比如 read 方法需要讀取 32KB 的字節(jié)的數(shù)據(jù),使其在讀取 32KB 字節(jié)數(shù)據(jù)后,繼續(xù)讀取后面的 32-64KB,并將這一塊數(shù)據(jù)一起緩存到 pageCache 緩沖區(qū)。這樣做的好處在于,如果后續(xù)讀取需要的數(shù)據(jù)在這塊緩存中命中,那么讀取成本會(huì)大幅降低??梢灶惐扔?redis 中提前緩存一部分分布式唯一 id 用于插入數(shù)據(jù)庫(kù)時(shí)的分配操作,這樣就無(wú)需每次插入前都去獲取一遍 id。然而,一般情況下,為了避免可能出現(xiàn)的"毛刺"現(xiàn)象,我們通常會(huì)使用雙緩存機(jī)制來(lái)處理。這個(gè)雙緩存機(jī)制可以進(jìn)一步優(yōu)化讀取操作的效果。91R28資訊網(wǎng)——每日最新資訊28at.com

因此,PageCache 的優(yōu)點(diǎn)主要包括兩個(gè)方面:首先,它能夠?qū)?shù)據(jù)緩存到 PageCache 中;其次,它還利用了數(shù)據(jù)的預(yù)讀功能。這兩個(gè)操作極大地增強(qiáng)了讀寫磁盤時(shí)的性能。91R28資訊網(wǎng)——每日最新資訊28at.com

但是,你可以想象一下如果你在傳輸大文件時(shí)比如好幾個(gè) G 的文件,如果還是使用零拷貝技術(shù),內(nèi)核還是會(huì)把他們放入 pageCache 緩存區(qū),那這樣不就產(chǎn)生問(wèn)題了嗎?你也可以想一下如果你往 redis 緩存中放了一個(gè)還幾個(gè) G 大小的 value,而且還知道緩存了也沒(méi)用,那不就相當(dāng)于 redis 形同虛設(shè)了嗎?把其他熱點(diǎn)數(shù)據(jù)也弄沒(méi)了,所以 pageCache 也有這樣的一個(gè)問(wèn)題,一是大文件搶占了 pageCache 的內(nèi)存大小,這樣做會(huì)導(dǎo)致其他熱點(diǎn)數(shù)據(jù)無(wú)法存儲(chǔ)在 pageCache 緩沖區(qū)中,從而降低磁盤的讀寫性能。此外,由于 pageCache 無(wú)法享受到緩存的好處,還會(huì)產(chǎn)生一個(gè) DMA 數(shù)據(jù)拷貝的過(guò)程。91R28資訊網(wǎng)——每日最新資訊28at.com

因此,最佳的優(yōu)化方法是針對(duì)大文件傳輸時(shí)不使用 pageCache,也就是不使用零拷貝技術(shù)。這是因?yàn)榱憧截惣夹g(shù)會(huì)占用大量的內(nèi)存空間,影響其他熱點(diǎn)數(shù)據(jù)的訪問(wèn)優(yōu)化。在高并發(fā)環(huán)境下,這幾乎肯定會(huì)導(dǎo)致嚴(yán)重的性能問(wèn)題。91R28資訊網(wǎng)——每日最新資訊28at.com

/ 大文件傳輸用什么方式實(shí)現(xiàn)? /

那針對(duì)大文件的傳輸,我們應(yīng)該使用什么方式呢?91R28資訊網(wǎng)——每日最新資訊28at.com

讓我們首先來(lái)觀察最初的示例。當(dāng)調(diào)用 read 方法讀取文件時(shí),進(jìn)程實(shí)際上會(huì)被阻塞在 read 方法的調(diào)用處,因?yàn)樗枰却疟P數(shù)據(jù)的返回。如下圖所示:91R28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片91R28資訊網(wǎng)——每日最新資訊28at.com

在沒(méi)有使用零拷貝技術(shù)的情況下,我們的用戶進(jìn)程使用同步 IO 的方式,它會(huì)一直阻塞等待系統(tǒng)調(diào)用返回?cái)?shù)據(jù)。讓我們回顧一下之前的具體流程:91R28資訊網(wǎng)——每日最新資訊28at.com

  1. 應(yīng)用程序發(fā)起 read 系統(tǒng)調(diào)用,用戶進(jìn)程開(kāi)始進(jìn)行阻塞等待結(jié)果返回。
  2. 此時(shí)內(nèi)核會(huì)向磁盤發(fā)起 I/O 請(qǐng)求,磁盤收到請(qǐng)求后,開(kāi)始尋址。當(dāng)磁盤數(shù)據(jù)準(zhǔn)備好后,就會(huì)向內(nèi)核發(fā)起 I/O 中斷,告知內(nèi)核磁盤數(shù)據(jù)已經(jīng)準(zhǔn)備好。
  3. 內(nèi)核收到中斷信號(hào)后,將數(shù)據(jù)從磁盤控制器緩存區(qū)拷貝到 pageCache 緩沖區(qū)。
  4. 最后,內(nèi)核會(huì)將 pageCache 中的數(shù)據(jù)再次拷貝到用戶緩沖區(qū),也就是用戶態(tài)的內(nèi)存中,然后 read 調(diào)用返回。

我們知道,既然有同步 IO,就一定有異步 IO 來(lái)解決阻塞的問(wèn)題。異步 IO 的工作方式如下圖所示:91R28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片91R28資訊網(wǎng)——每日最新資訊28at.com

它將讀操作分為兩個(gè)部分:91R28資訊網(wǎng)——每日最新資訊28at.com

  1. 第一部分是用戶進(jìn)程發(fā)起 IO 請(qǐng)求給內(nèi)核,然后進(jìn)程就不再關(guān)心該 IO 操作,而是繼續(xù)處理其他任務(wù)。
  2. 第二部分是當(dāng)內(nèi)核接收到中斷信號(hào)后,將數(shù)據(jù)直接拷貝到用戶緩沖區(qū),并通知用戶進(jìn)程操作成功。然后用戶進(jìn)程開(kāi)始處理數(shù)據(jù)。

我們發(fā)現(xiàn)在這個(gè)過(guò)程中,并沒(méi)有涉及到將數(shù)據(jù)拷貝到 pageCache 中,因此使用異步方式繞開(kāi)了 pageCache。直接 IO 是指繞過(guò) pageCache 的 IO 請(qǐng)求,而緩存 IO 是指使用 pageCache 的 IO 請(qǐng)求。通常,對(duì)于磁盤而言,異步 IO 只支持直接 IO。91R28資訊網(wǎng)——每日最新資訊28at.com

正如前面所提到的,對(duì)于大文件的傳輸,不應(yīng)該使用 PageCache,因?yàn)檫@可能會(huì)導(dǎo)致 PageCache 被大文件占據(jù),從而使得"熱點(diǎn)"小文件無(wú)法充分利用 PageCache 的優(yōu)勢(shì)。91R28資訊網(wǎng)——每日最新資訊28at.com

因此,在高并發(fā)的場(chǎng)景下,對(duì)于大文件傳輸,我們應(yīng)該采用"異步 I/O + 直接 I/O"的方式來(lái)代替零拷貝技術(shù)。91R28資訊網(wǎng)——每日最新資訊28at.com

直接 I/O 有兩種常見(jiàn)的應(yīng)用場(chǎng)景:91R28資訊網(wǎng)——每日最新資訊28at.com

  1. 首先,如果應(yīng)用程序已經(jīng)實(shí)現(xiàn)了磁盤數(shù)據(jù)的緩存,就不需要再次使用 PageCache 進(jìn)行緩存,這樣可以減少額外的性能損耗。例如,在 MySQL 數(shù)據(jù)庫(kù)中,可以通過(guò)參數(shù)設(shè)置來(lái)開(kāi)啟直接 I/O,避免重復(fù)的緩存操作,默認(rèn)情況下是不開(kāi)啟的。
  2. 其次,在傳輸大文件時(shí),由于大文件很難命中 PageCache 的緩存,而且會(huì)占滿 PageCache 導(dǎo)致"熱點(diǎn)"文件無(wú)法充分利用緩存,增加了性能開(kāi)銷。因此,在這種情況下,應(yīng)該使用直接 I/O 來(lái)繞過(guò) PageCache 的緩存,以提高性能。

需要注意的是,直接 I/O 繞過(guò)了 PageCache,因此無(wú)法享受內(nèi)核的兩項(xiàng)優(yōu)化。91R28資訊網(wǎng)——每日最新資訊28at.com

  1. 首先,內(nèi)核的 I/O 調(diào)度算法會(huì)在 PageCache 中緩存盡可能多的 I/O 請(qǐng)求,然后將它們合并成一個(gè)更大的 I/O 請(qǐng)求發(fā)送給磁盤,以減少磁盤的尋址操作。
  2. 其次,內(nèi)核會(huì)預(yù)讀后續(xù)的 I/O 請(qǐng)求并將其放入 PageCache 中,同樣是為了減少對(duì)磁盤的操作。這些優(yōu)化在直接 I/O 中無(wú)法享受到。

于是,當(dāng)我們需要傳輸大文件時(shí),我們可以利用異步 I/O 和直接 I/O 的組合來(lái)實(shí)現(xiàn)無(wú)阻塞的文件讀取。這種方式可以有效避免 PageCache 的影響,提高文件傳輸?shù)男省?span style="display:none">91R28資訊網(wǎng)——每日最新資訊28at.com

因此,在文件傳輸過(guò)程中,我們可以根據(jù)文件的大小來(lái)選擇不同的優(yōu)化方式,以提高傳輸效率。對(duì)于大文件,使用異步 I/O 和直接 I/O 可以避免 PageCache 的影響;而對(duì)于小文件,則可以使用零拷貝技術(shù)來(lái)減少數(shù)據(jù)拷貝次數(shù),提高傳輸速度。91R28資訊網(wǎng)——每日最新資訊28at.com

在 Nginx 中,我們可以通過(guò)以下配置來(lái)根據(jù)文件的大小選擇不同的優(yōu)化方式:91R28資訊網(wǎng)——每日最新資訊28at.com

location /video/ {     sendfile on;     aio on;     directio 1024m; }

在這個(gè)配置中,我們開(kāi)啟了 sendfile 選項(xiàng),這允許 Nginx 使用零拷貝技術(shù)來(lái)傳輸文件。同時(shí),我們也啟用了 aio 選項(xiàng),這使得 Nginx 可以使用異步 I/O 來(lái)提高文件傳輸?shù)男省?span style="display:none">91R28資訊網(wǎng)——每日最新資訊28at.com

而通過(guò)設(shè)置 directio 參數(shù)為 1024m,我們告訴 Nginx 當(dāng)文件大小超過(guò) 1024MB 時(shí),使用直接 I/O 來(lái)進(jìn)行文件傳輸。這意味著在傳輸大文件時(shí),Nginx 將使用異步 I/O 和直接 I/O 的組合來(lái)實(shí)現(xiàn)無(wú)阻塞的文件讀取,避免了 PageCache 的影響。而對(duì)于小文件,Nginx 將繼續(xù)使用零拷貝技術(shù),以減少數(shù)據(jù)拷貝次數(shù),提高傳輸速度。91R28資訊網(wǎng)——每日最新資訊28at.com

/ 總結(jié) /

至此,我們的計(jì)算機(jī)基礎(chǔ)專欄就結(jié)束了,不知道大家有沒(méi)有發(fā)現(xiàn),操作系統(tǒng)底層提供了豐富的解決方案來(lái)支持應(yīng)用程序的復(fù)雜性和可擴(kuò)展性。對(duì)于任何工作中遇到的問(wèn)題,我們都可以從操作系統(tǒng)的角度尋找解決方法。91R28資訊網(wǎng)——每日最新資訊28at.com

今天這一篇其實(shí)就是來(lái)打破零拷貝的方案神話的,沒(méi)有一種技術(shù)是最好的,只有最合適的方法。我們需要根據(jù)具體的需求和情況來(lái)選擇適合的解決方案,以提高應(yīng)用程序的性能和可擴(kuò)展性。謝謝大家的閱讀和關(guān)注,希望這個(gè)專欄能對(duì)大家有所啟發(fā)和幫助!91R28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://m.www897cc.com/showinfo-26-10483-0.html零拷貝并非萬(wàn)能解決方案:重新定義數(shù)據(jù)傳輸?shù)男蕵O限

聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com

上一篇: 竟然可以在一個(gè)項(xiàng)目中混用 Vue 和 React?

下一篇: JsonPath詳細(xì)使用教程,你了解多少?

標(biāo)簽:
  • 熱門焦點(diǎn)
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
欧美精品一区二区三区在线看午夜| 中文日韩电影网站| 国产日韩欧美一区二区三区在线观看| 国产精品欧美风情| 国产亚洲欧洲一区高清在线观看| 伊人夜夜躁av伊人久久| 日韩视频在线一区二区三区| 日韩午夜在线| 亚洲中字在线| 久久人人爽国产| 欧美激情一区二区三区蜜桃视频| 国产精品videosex极品| 国产中文一区| 亚洲最新合集| 亚洲制服av| 久热国产精品视频| 欧美日韩国产一区二区| 国产日韩欧美精品综合| 亚洲区在线播放| 午夜精品视频| 欧美精品99| 国产一区二区三区的电影| 99av国产精品欲麻豆| 欧美在线在线| 欧美日韩成人在线观看| 国产一区视频在线看| 日韩亚洲欧美高清| 久久久不卡网国产精品一区| 欧美日韩国产123| 激情一区二区三区| 亚洲一区在线免费观看| 欧美va亚洲va国产综合| 国产欧美日韩视频在线观看| 亚洲精品美女久久久久| 欧美自拍丝袜亚洲| 欧美日韩一区二区在线播放| 狠狠色香婷婷久久亚洲精品| 亚洲午夜电影网| 美国成人直播| 国产日韩亚洲欧美| 在线中文字幕一区| 久久亚洲图片| 国产农村妇女毛片精品久久麻豆 | 欧美日韩精品在线观看| 国内精品久久久| 亚洲一级免费视频| 欧美国产激情二区三区| 韩日精品中文字幕| 午夜精品久久久久久久99黑人| 欧美美女bbbb| 在线日韩欧美视频| 久久动漫亚洲| 国产精品美女久久久免费| 99re热精品| 欧美高清免费| 亚洲缚视频在线观看| 久久精品夜色噜噜亚洲aⅴ| 国产精品久久久久秋霞鲁丝| 日韩性生活视频| 欧美电影在线免费观看网站| 韩国精品主播一区二区在线观看| 午夜精品久久久久| 国产精品毛片a∨一区二区三区|国| 夜夜嗨av一区二区三区四区| 欧美大色视频| 最新国产乱人伦偷精品免费网站 | 欧美不卡激情三级在线观看| 国产一区亚洲| 欧美一区二区在线观看| 国产精品青草综合久久久久99| 日韩一级欧洲| 欧美日韩黄视频| 日韩一区二区精品在线观看| 欧美精品国产精品| 亚洲日本成人女熟在线观看| 女同性一区二区三区人了人一| 狠狠色狠狠色综合系列| 久久亚洲欧美国产精品乐播| 激情欧美一区二区三区在线观看| 久久久精彩视频| 有坂深雪在线一区| 美国十次成人| 亚洲激情欧美激情| 欧美福利小视频| 亚洲精品视频免费在线观看| 欧美精品一区二区三| 一本色道精品久久一区二区三区 | 国产精品久久久久久亚洲毛片 | 亚洲免费不卡| 欧美视频在线观看 亚洲欧| 在线亚洲一区观看| 国产精品自拍一区| 久久精品99国产精品| 国产在线视频欧美| 美女视频网站黄色亚洲| 亚洲精品韩国| 欧美午夜不卡在线观看免费| 亚洲免费一在线| 国产一区在线看| 免费欧美日韩国产三级电影| 日韩午夜av在线| 国产精品高清在线| 午夜久久久久久| 红桃av永久久久| 欧美福利小视频| 亚洲一区二区三区国产| 国产欧美婷婷中文| 久久综合伊人77777蜜臀| 亚洲人成人99网站| 欧美午夜一区二区| 欧美一区二区视频网站| 在线观看三级视频欧美| 欧美日韩另类视频| 午夜精品免费视频| 伊人久久大香线蕉av超碰演员| 欧美国产视频一区二区| 中文亚洲视频在线| 国产一区再线| 欧美乱在线观看| 性感少妇一区| 亚洲高清视频的网址| 欧美午夜精品| 久久久久久久尹人综合网亚洲 | 一本一本大道香蕉久在线精品| 国产精品视频一区二区高潮| 久久欧美中文字幕| 在线一区欧美| 精品成人一区二区| 欧美日韩一区二区三区在线看| 欧美影院在线| 亚洲精品乱码久久久久久| 国产精品高潮久久| 免费观看亚洲视频大全| 亚洲一区二区三区欧美| 精品99一区二区| 国产精品多人| 免费av成人在线| 亚洲尤物在线视频观看| 在线观看国产精品淫| 欧美性理论片在线观看片免费| 久久久久亚洲综合| 在线午夜精品| **性色生活片久久毛片| 国产精品免费看片| 欧美成人四级电影| 欧美在线观看视频在线| 一本色道**综合亚洲精品蜜桃冫| 国产在线国偷精品产拍免费yy| 欧美日韩国产91| 久久全国免费视频| 亚洲综合视频一区| 亚洲美女视频在线观看| 国内精品国产成人| 国产精品久久91| 欧美极品在线视频| 久久久久久夜| 亚洲综合日韩| 日韩亚洲在线观看| 亚洲第一精品影视| 国产亚洲视频在线| 国产精品第一页第二页第三页| 欧美 亚欧 日韩视频在线| 欧美一区二区三区男人的天堂| 一本到12不卡视频在线dvd| 亚洲风情在线资源站| 国产一区二区高清视频| 国产精品久久9| 欧美精品1区2区| 美女黄网久久| 久久精品国产精品亚洲精品| 亚洲一区二区三区国产| 亚洲精品永久免费| 在线观看日韩专区| 好看不卡的中文字幕| 国产人成精品一区二区三| 欧美日韩综合视频| 欧美精品一区二区精品网| 模特精品裸拍一区| 久久综合一区二区| 久久精品国产一区二区三区免费看| 亚洲在线一区二区| 亚洲一区二区欧美| 国产精品99久久久久久www| 亚洲毛片在线观看| 亚洲精品国产精品乱码不99 | 国产日韩精品一区二区| 国产精品久久久久7777婷婷| 欧美日韩另类视频| 欧美日韩国产二区| 欧美人与性动交a欧美精品| 欧美风情在线观看| 欧美国产一区在线| 欧美成人午夜激情在线| 美女图片一区二区| 蜜臀久久99精品久久久久久9| 久久亚洲一区二区| 老司机精品视频网站| 久久综合网hezyo| 麻豆成人在线播放| 欧美a级片网| 欧美岛国在线观看| 欧美日本在线观看| 欧美日韩国产精品一区| 欧美日韩中文字幕|