Чому "/ dev / rdisk" приблизно в 20 разів швидше, ніж "/ dev / disk" в Mac OS X


129

Відповідно до документації 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.


3
В якості побічної ноти я провів тест, і rdisk фактично зайняв набагато більше часу.
спудер

4
В якості ще однієї сторони, я відчув, що мені довелося тестувати і тоді, і виявив, що копія rdisk (через dd) майже рівно в 4 рази швидше, ніж використання дискового аналога.
Тревіс Гріггс

Mac OSX 10.9.1 (MacBook Pro 15-дюймовий, початок 2011 р.)
Тревіс Гріггс

2
Я думав, що "rdisk" - це друкарська помилка в деяких інструкціях до зображення карти SD SD Raspberry Pi. Після подальшого розслідування я поглянув на різницю і знайшов цю тему. Виявляється, в моєму випадку було в 13 разів швидше написати зображення на 1,7 Гб на SD-карту, використовуючи / dev / rdisk замість / dev / disk! Macbook Pro Retina 13 ", модель початку 2015 року.
tobias.mcnulty

2
Як ще один побічний знак, я щойно створив зображення ARM Ubuntu на моїй недавно придбаній картці MicroSD Sandisk Extreme Pro. / dev / disk1 писав зі швидкістю 2,3 Мб / с, а / dev / rdisk1 - 83,7 Мб / с, або 36,4 рази швидше.
DanielSmedegaardBuus

Відповіді:


93

Від man hdiutil:

/ dev / rdisk - це спеціальні пристрої, але вони є "сирими" в BSD-значенні та вирівнюванням блоку вводу-виводу. Вони ближче до фізичного диска, ніж буфер кеша. / dev / disk-вузли, з іншого боку, є захищеними спеціальними блоками пристроями і використовуються головним чином кодом файлової системи ядра.

Зрозуміло, мирянин /dev/rdiskпереходить майже безпосередньо на диск і /dev/diskпроходить довшим більш дорогим маршрутом


14
навіщо використовувати диск, коли можна використовувати rdisk?
користувач391339

20
@ user391339 Тому що кешування все ще є бажаною справою. У випадках, коли у вас є знімний носій, ви хочете отримати дані на фізичному пристрої якомога швидше, тому що ви хочете отримати дані в іншому фізичному місці. Внутрішні жорсткі диски - це інша історія. Зазвичай їх не носите з собою, тому вам не байдуже, коли дані фактично записуються на пристрій. Коли ви кешуєте дані, записані на читання з пристроїв, це більш дорогий спосіб запису на диск, але ваші програми все ще швидші, оскільки їм не потрібно чекати, поки всі дані, які вони хочуть записати, записуються на диск.
Kritzefitz

@Dan, Re "сила"; значення?
Печер'є

Не впевнений, що пояснення Крита працює для мене. У моєму випадку може бути дещо особливе, що хочу зробити одноразове сканування великого зовнішнього диска, і я не впевнений, який метод працює для цього краще, але в іншому випадку я все одно в порядку при звичайному використанні і чекаю, коли його витягнуть, як це звичайно практика. Однак у Windows я завжди віддав перевагу профілю "швидкого відключення", який, напевно, відображає "сиріший" режим Мака, оскільки він рекламує менше пошкоджень файлової системи в несподіваних подіях втрати з'єднання.
Pysis

96

Прийнята відповідь правильна, але вона не надто детально описується.

Однією з ключових відмінностей між /dev/diskта /dev/rdisk, коли ви отримуєте доступ до них з користувальницького простору, є те, що /dev/diskвони буферні. Шлях читання / запису для /dev/diskрозбиття вводу / виводу на 4КБ фрагменти, який він зчитує в кеш-пам'яті буфера, а потім копіює в буфер простору користувача (а потім видає наступне зчитування 4КБ…). Це приємно тим, що ви можете робити неузгоджене читання та запис, і це просто працює. На відміну від цього, в /dev/rdiskосновному просто передається читання або запис прямо на пристрій, а це означає, що початок і кінець вводу / виводу потрібно вирівняти за секторальними межами.

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

Кешування керованими /dev/diskшляхами читання і запису дуже просте і майже не загине. Це кешує навіть якщо це не суворо необхідно; наприклад, якщо пристрій зможе відобразити карту пам'яті та безпосередньо перенести її в буфер програми. Це робить невеликий (4 Кб) введення / вивід, що призводить до великої накладних витрат вводу / виводу. Це не робить жодного читання вперед або запису ззаду.


6

Здається, це працює /dev/diskі по- /dev/rdiskрізному для HDD та SSD. Хотіли перевірити це на MicroSD-картці. Щойно написав образ диска 2 Гб на Sandisk Ultra MicroSD 64 Гб ( https://www.amazon.com/gp/product/B073JYVKNX ).

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

Я знаю, що це стара тема, але інших людей може зацікавити швидкість того, що я спробував. Я хочу створити резервну копію свого внутрішнього SSD в моєму MacBook Pro 13 "Retina (із силіконовим накопичувачем SSD 1 ТБ) на зовнішній накопичувач жорсткого диска USB 3.0 2.5", бажаючи захопити як розділи macOS, так і BOOTCAMP. Мій початковий командний рядок:

sudo dd if=/dev/disk0 of=/dev/disk2 bs=1m

Результати були швидкістю копіювання ~ 31,3 Мб / секунду. Це було занадто довго, щоб змусити мене чекати. Отже, з другої спроби командний рядок:

sudo dd if=/dev/rdisk0 of=/dev/rdisk2 bs=1m

Використовуючи /dev/rdiskзамість того, щоб /dev/diskзначно покращити речі, приблизно до 98,4 Мб / секунду! Однак стає ще краще. Отже, для третьої спроби я використав цей командний рядок:

sudo dd if=/dev/rdisk0 of=/dev/rdisk2 bs=1m conv=sparse

Редкий параметр вказує DD не турбувати записування до вихідних блоків, які всі 0 на вході. Приємно, що це стає набагато швидше, ніж ви могли б подумати, навіть перебуваючи посеред "повних" областей диска. На будь-якому не повному диску, ви матимете величезні шматки 0, ще більше прискоривши DD. Поки що, щонайменше, DD - це якраз збігання з теоретичною швидкістю передачі мого жорсткого диска: ~ 116,4 Мб / секунду, і він ще не досяг цих великих порожніх областей.

Спробуйте скористатися цими параметрами - вони працюють! Зверніть увагу: ОБЕРЕЖНО змінити if=та  of=правильно вказати на правильні диски, перелічені (для Macs):

diskutil list

1
conv=sparseчудово під час копіювання файлів.    Я б стурбований тим , що це могло б ввести корупцію при копіюванні диска цілком, розділу або в  файлової системі , якщо ви не знаєте , з 100% упевненістю , що цільовий диск не містить нічого , крім нулів.
G-Man

1

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


2
Під час запису розповсюджуваного зображення з розширенням на 4,6 ГБ із внутрішнього SSD-накопичувача на SD-карту з dd та bs 1MB / dev / rdisk все ще працює набагато швидше, ніж / dev / disk на пізній macbook 2013 року під керуванням macOS 10.13.2. Використання / dev / disk зайняло 27,16 хвилин і лише 5,18 хвилин, використовуючи / dev / rdisk.
digitaladdictions

@digitaladdictions щойно зробив кілька тестів на останній macOS: superuser.com/a/1346063/126537
k06a

0

Я думаю, перш ніж сперечатися, який вузол шляху швидший або зануритися в серійні тести. Ми повинні врахувати інший фактор, який різко вплине на швидкість остаточного читання / запису.

як, наприклад, Micro SD-карта, клас 4/10 / HC I ... чіп і інтерфейс зчитувача SD-карт, usb 1.1 / 2.0 / 3.0 / 3.1 os загальна пам'ять / вільна пам'ять, завантаження os, тип жорсткого диска, HDD / SSD, HDD швидкість віджиму та розмір кешу, розмір SSD / кеш / вільний простір / інтерфейс жорсткого диска, ата / sata / esata,

якщо якийсь фактор став вузьким місцем, то ми отримаємо помилковий висновок.

ось мій результат: osx 10.12.6, ssd,

читати microSD 16G за допомогою USB 2.0 карти читання та запису на зовнішній 3,5-дюймовий HDD від usb 3.0,

15193+1 records in
15193+1 records out
15931539456 bytes transferred in 1423.067033 secs (11195214 bytes/sec)

записувати microSD 32G через внутрішнє читання картки, а джерелом даних є зовнішній 3,5-дюймовий HDD від usb 3.0,

0+253945 records in
0+253945 records out
15931539456 bytes transferred in 440.093686 secs (36200336 bytes/sec)

ви можете бачити, швидкість запису> швидкість читання !!

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.