2010-08-22 41 views

回答

5

當您正在進行大量隨機(即非順序)讀取/寫入操作時,使用分散/聚集IO,並且希望保存上下文開關/系統調用 - 分散/聚集是這種意義上的批處理形式。但是,除非你有一個非常快的磁盤(或者更可能是大量的磁盤),否則系統調用的成本可以忽略不計。

如果你正在寫一個數據庫服務器,你可能會在意這一點,但任何小於一個大鐵機處理數以百萬計的請求的第二個將看不到任何好處。

+2

現在,在2017年它的情況並不少見,看看100K IOPS SSD在中檔的筆記本電腦。這是否意味着我們正在有效地使用您正在討論的大型機器,並且應該爲隨機讀取實現矢量化IO? – Soonts 2017-05-25 04:57:40

1

我會想象你會使用分散gatehr IO時,(a)您懷疑您的應用程序有一個性能瓶頸,(b)你建立了一個性能分析框架,可以顯示出使用它的顯着改進。

除非您可以證明可以改進,否則額外的代碼複雜性只是一種風險,並且沒有魔術配方說明,當滿足某些條件時,應用程序將自動從一些編程巧妙中獲益。

或 - 換一種說法 - 不基地基礎上的「關於互聯網論壇上的一些人」的陳述主要的架構決策。創建一個測試,並找出答案。

5

保羅 - 一個額外注:一個附加的好處是,你的手在同一時間多個請求到磁盤驅動器。然後司機可以對請求進行排序並按最佳順序發佈。儘管系統調用時間很短,但尋找時間(很多毫秒)可能會產生懲罰性(小於1000 I/O /秒)。

克里斯的有關表現的效率評論是務實的。大自然從來不會說謊。好吧,幾乎從不。

+0

目前在NT中分散的I/O實際上並沒有在一個連續段的不同頁面中執行除地圖以外的任何特殊功能,並且驅動程序不知道它。所以不,司機不會「按照最優順序排序請求併發布它們」。 – wj32 2010-12-07 10:52:23

+0

任何異步I/O也會這樣做,唯一一次你不會得到這個的是,如果你是一個進程將I/O同步到隨機頁面,因爲內核沒有關於你的頁面的信息,我會問下一個 – 2015-04-27 04:08:46

0
在POSIX,readv

和writev可以獲得讀取或寫入不連續的內存,但讀寫不連續的文件從連續內存範圍在一個去你想要readx和writex這是所提出的POSIX增加的一個

做readx更快,然後做大量的讀取,因爲它只有一個系統調用,它可以讓磁盤調度程序有最多的io重新排序我記得有人說ext2/3/.. fsck程序,他們想知道這個,因爲它知道什麼範圍就是了

相關問題