題 為什麼“/ dev / rdisk”比Mac OS X中的“/ dev / disk”快20倍


根據 rasbery pi文檔,您可以使用/ dev / disk或/ dev / rdisk將操作系統加載到閃存卡。

rdisk代表原始磁盤。

/ dev / disk是塊級設備, 為什麼rdisk要快20倍? 

使用Mac OSX

注意:在OS X中,每個磁盤在/ dev中可能有兩個路徑引用:   / dev / disk#是一個緩衝設備,表示正在發送的任何數據   經過額外的處理。 / dev / rdisk#是一條原始路徑,它很多   使用dd程序時更快,完全正常。在Class 4 SD上   使用rdisk路徑,差異大約快20倍。


115
2017-08-13 22:26


起源


作為旁注,我進行了測試,rdisk實際上需要更長的時間。 - spuder
另外,我覺得我必須進行測試,並發現rdisk副本(通過dd)幾乎比使用磁盤副本快4倍。 - Travis Griggs
@TravisGriggs我很好奇哪個操作系統,Mac或Linux? - spuder
我認為“rdisk”在我正在閱讀的Raspberry Pi SD卡圖像的一些說明中是一個錯字。經過進一步調查,我搜索了差異並找到了這個帖子。事實證明,使用/ dev / rdisk而不是/ dev / disk將1.7GB映像寫入SD卡的速度要快13倍! Macbook Pro Retina 13“,2015年初型號。 - tobias.mcnulty
作為另一個旁注,我剛剛在我新購買的Sandisk Extreme Pro MicroSD卡上添加了Ubuntu ARM映像。 / dev / disk1以2.3 MB / s的速度寫入,而/ dev / rdisk1以83.7 MB / s的速度寫入,或者速度為36.4倍。 - DanielSmedegaardBuus


答案:


man hdiutil

/ dev / rdisk節點是字符特殊設備,但在BSD意義上是“原始”並且強制塊對齊I / O.它們比緩衝區緩存更接近物理磁盤。另一方面,/ dev / disk節點是緩衝塊特殊設備,主要由內核的文件系統代碼使用。

用外行人的話說 /dev/rdisk 幾乎直接進入磁盤和 /dev/disk 通過更長的更昂貴的路線


84
2017-08-13 23:23



為什麼在使用rdisk時使用磁盤? - user391339
@ user391339因為緩存仍然是一件令人滿意的事情。如果您有可移動媒體,您希望盡可能快地獲取物理設備上的數據,因為您希望數據位於另一個物理位置。內部硬盤驅動器是另一回事。您通常不隨身攜帶它們,因此您不必關心數據實際寫入設備的時間。當您緩存寫入/讀取設備的數據時,這是一種更昂貴的寫入磁盤的方式,但您的程序仍然更快,因為他們不需要等到他們想要寫入的所有數據都寫入磁盤。 - Kritzefitz
@Dan,Re“force”;含義? - Pacerier


接受的答案是正確的,但它沒有詳細說明。

其中一個關鍵區別 /dev/disk 和 /dev/rdisk當你從用戶空間訪問它們時,就是這樣 /dev/disk 是緩衝的。讀/寫路徑 /dev/disk 將I / O分成4KB塊,將其讀入緩衝區緩存,然後復製到用戶空間緩衝區(然後發出下一個4KB讀取...)。這很好,因為你可以做不對齊的讀寫,它只是工作。相反, /dev/rdisk 基本上只是將讀或寫直接傳遞給設備,這意味著I / O的開始和結束需要在扇區邊界上對齊。

如果你做一個大於一個扇區的讀或寫 /dev/rdisk,該請求將直接通過。較低層可能會將其分解(例如,由於USB協議中的最大有效載荷大小,USB會將其分解為128KB),但通常可以獲得更大,更高效的I / O.流式傳輸時,如via dd128KB到1MB是相當不錯的尺寸,可以在當前的非RAID硬件上獲得接近最佳的性能。

緩存由。完成 /dev/disk讀寫路徑非常簡單,幾乎腦死亡。即使不是絕對必要,它也會緩存;就好像設備可以存儲地圖並直接傳輸到應用程序的緩衝區。它執行小型(4KB)I / O,這會導致大量的每I / O開銷。它不會提前讀取或寫入後面。


90
2018-03-23 04:54



非常感謝您詳細解釋。 - gpanda


它似乎 /dev/disk 和 /dev/rdisk 適用於HDD和SSD的工作方式不同。想檢查它的MicroSD卡。剛寫入2GB磁盤映像到Sandisk Ultra MicroSD 64GB(https://www.amazon.com/gp/product/B073JYVKNX)。

多次重複測試,但結果穩定: 17MB / S 對於 /dev/disk VS 20MB /秒 對於 /dev/rdisk。更改 bs=1m 至 bs=16m 絕對沒有寫作速度的差異。

  1. 寫給 /dev/disk2

    sudo dd if=~/Downloads/ubuntu-18.04-4.14-minimal-odroid-xu4-20180531.img of=/dev/disk2 bs=1m
    2094006272 bytes transferred in 121.860007 secs (17183704 bytes/sec)
    
  2. 寫給 /dev/rdisk2

    $ sudo dd if=~/Downloads/ubuntu-18.04-4.14-minimal-odroid-xu4-20180531.img of=/dev/rdisk2 bs=1m
    2094006272 bytes transferred in 102.743870 secs (20380839 bytes/sec)
    

然後我決定測試閱讀速度: 26MB / S 對於 /dev/disk VS 87MB / S 對於 /dev/rdisk。更改 bs=1m 至 bs=16m 絕對沒有閱讀速度的差異。

  1. 從中讀 /dev/disk2

    sudo dd if=/dev/disk2 of=~/Downloads/ubuntu-18.04-4.14-minimal-odroid-xu4-20180531-2.img bs=1m
    257949696 bytes transferred in 9.895572 secs (26067184 bytes/sec)
    
  2. 從中讀 /dev/rdisk2

    $ sudo dd if=/dev/rdisk2 of=~/Downloads/ubuntu-18.04-4.14-minimal-odroid-xu4-20180531.img bs=1m
    877658112 bytes transferred in 10.021974 secs (87573377 bytes/sec)
    

2
2017-08-04 06:56





為了記錄,至少在macOS High Sierra中,/ dev / disk似乎比/ dev / rdisk快得多。運行dd或ddrescue,使用/ dev / rdisk從磁性HD複製到SSD的吞吐量比較為3.7MBps,使用/ dev / disk為45MBps。因此,在更高版本的macOS上,最好使用/ dev / disk而不是/ dev / rdisk來獲得最佳性能。


1
2018-01-14 18:07



從內部SSD存儲器寫入4.6GB的raspbian-stretch圖像到具有dd和1MB / dev / rdisk的SD卡仍然比2013年末運行macOS 10.13.2的macbook pro上的/ dev / disk快得多。使用/ dev / disk花了27.16分鐘,使用/ dev / rdisk花了5.18分鐘。 - digitaladdictions
@digitaladdictions剛剛對最新的macOS進行了一些測試: superuser.com/a/1346063/126537 - k06a