Вопрос: Почему «/ dev / rdisk» примерно в 20 раз быстрее, чем «/ dev / disk» в Mac OS X


Согласно документация rasbery pi, Вы можете загрузить свою ОС на флеш-карту с помощью / dev / disk или / dev / rdisk.

rdisk обозначает необработанный диск.

/ dev / disk - это устройство уровня блока, почему бы rdisk быть в 20 раз быстрее? 

Использование Mac OSX

Примечание. В OS X каждый диск может иметь две ссылки на пути в / dev:   / dev / disk # - это буферизованное устройство, что означает, что любые отправляемые данные   подвергается дополнительной обработке. / dev / rdisk # - это необработанный путь, который   быстрее и отлично работает при использовании программы dd. На SD 4 класса   карта разница была примерно в 20 раз быстрее, используя путь rdisk.


114
2017-08-13 22:26


Источник


В качестве побочного примечания я провел тест, и rdisk на самом деле занял гораздо больше времени. - spuder
В качестве еще одной заметки, я чувствовал, что мне тоже нужно было протестировать, и обнаружил, что копия rdisk (через dd) была почти ровно в 4 раза быстрее, чем использование диска. - Travis Griggs
@TravisGriggs Мне любопытно, какая ОС, Mac или Linux? - spuder
Я думал, что «rdisk» был опечаткой в ​​некоторых инструкциях для изображения карты Raspberry Pi SD, которое я читал. После дальнейшего изучения я искал разницу и нашел эту нить. Оказывается, в моем случае было 13 раз быстрее записать изображение 1,7 ГБ на SD-карту, используя / dev / rdisk вместо / dev / disk! Macbook Pro Retina 13 ", модель начала 2015 года. - tobias.mcnulty
Как еще один побочный эффект, я просто обратил внимание на изображение Ubuntu ARM на мою недавно купленную карту Sandisk Extreme Pro MicroSD. / dev / disk1 написал на 2,3 МБ / с, а / dev / rdisk1 написал на 83,7 МБ / с, или в 36,4 раза быстрее. - DanielSmedegaardBuus


Ответы:


Из man hdiutil:

/ dev / rdisk - это специальные символы, но являются «сырыми» в смысле BSD и принудительно выровнены по строкам. Они ближе к физическому диску, чем буферный кеш. / dev / disk узлы, с другой стороны, являются буферизованными блочно-специальными устройствами и используются в основном кодом файловой системы ядра.

В условиях неспециалиста /dev/rdisk идет почти непосредственно на диск и /dev/disk идет по более дорогостоящему маршруту


83
2017-08-13 23:23



зачем использовать диск, когда вы можете использовать rdisk? - user391339
@ user391339 Потому что кэширование по-прежнему является желательным. В случаях, когда у вас есть съемные носители, вы хотите как можно быстрее получить данные на физическом устройстве, потому что вам нужны данные в другом физическом месте. Внутренние жесткие диски - это совсем другая история. Обычно вы не носите их, поэтому вам все равно, когда данные фактически записаны на устройство. Когда вы кешируете данные, записанные на / чтение с устройств, которые являются более дорогим способом записи на диск, но ваши программы все еще быстрее, так как им не нужно ждать, пока все данные, которые они хотят записать, будут записаны на диск. - Kritzefitz
@Dan, Re "force"; имея в виду? - Pacerier


Принятый ответ прав, но он не вдавался в подробности.

Одно из ключевых различий между /dev/disk а также /dev/rdisk, когда вы обращаетесь к ним из пользовательского пространства, это /dev/disk буферизуется. Путь чтения / записи для /dev/disk разрывает ввод-вывод в 4KB-фрагменты, которые он считывает в буферный кеш, а затем копирует в буфер пространства пользователя (а затем выдает следующее чтение 4KB ...). Это приятно, потому что вы можете делать неглавные чтения и записи, и это просто работает. В противоположность, /dev/rdisk в основном просто передает чтение или запись прямо на устройство, что означает, что начало и конец ввода-вывода необходимо выровнять по границам сектора.

Если вы читаете или пишете больше одного сектора, /dev/rdisk, этот запрос будет передан прямо. Нижние уровни могут сломаться (например, USB разрывает его на 128 КБ штук из-за максимального размера полезной нагрузки в USB-протоколе), но вы, как правило, можете увеличить и повысить эффективность ввода-вывода. При потоковой передаче, например, через dd, 128 КБ до 1 МБ - довольно хорошие размеры, чтобы получить почти оптимальную производительность на текущем оборудовании, отличном от RAID.

Кэширование выполняется /dev/diskПрочитанные и написанные пути очень просты и почти мертвы. Он кэшируется, если не строго необходим; например, если устройство может отображать карту памяти и напрямую передавать ее в буфер приложения. Он делает небольшие (4KB) ввода-вывода, что приводит к большому количеству накладных расходов на ввод-вывод. Он не читает и не пишет.


88
2018-03-23 04:54





Для записи в macOS High Sierra, по крайней мере, / dev / disk выглядит намного быстрее, чем / dev / rdisk. Запустив dd или ddrescue, мое сравнение сравнения пропускной способности с магнитного HD на SSD составляло 3,7 Мбит / с с использованием / dev / rdisk и 45 Мбит / с с использованием / dev / disk. Таким образом, в более поздних версиях macOS лучше всего использовать / dev / disk вместо / dev / rdisk для лучшей производительности.


1
2018-01-14 18:07



При написании изображения на RGB-растяжке на 4,6 ГБ с внутреннего хранилища SSD на SD-карту с dd и bs 1MB / dev / rdisk все еще выполняется намного быстрее, чем / dev / disk, в Macbook MacBook 10.13.2 в конце 2013 года. Это заняло 27,16 минуты, используя / dev / disk и только 5.18 минут, используя / dev / rdisk. - digitaladdictions
@digitaladdictions только что провела несколько тестов на последнем macOS: superuser.com/a/1346063/126537 - k06a


Кажется /dev/disk а также /dev/rdisk подходит для жестких дисков и твердотельных накопителей. Хотите проверить его на карту MicroSD. Просто написал 2GB-образ диска для Sandisk Ultra MicroSD 64GB (https://www.amazon.com/gp/product/B073JYVKNX).

Повторные тесты несколько раз, но результаты были стабильными: 17MB / с для /dev/disk против 20Мб / с для /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 / с для /dev/disk против 87MB / с для /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)
    

0
2017-08-04 06:56