Question Pourquoi "/ dev / rdisk" est environ 20 fois plus rapide que "/ dev / disk" dans Mac OS X


Selon le documentation de rasbery piVous pouvez charger votre système d'exploitation sur une carte flash avec / dev / disk ou / dev / rdisk.

rdisk représente le disque brut.

/ dev / disk est un périphérique de niveau bloc, pourquoi rdisk serait 20 fois plus rapide? 

Utiliser Mac OSX

Remarque: sous OS X, chaque disque peut avoir deux références de chemin dans / dev:   / dev / disk # est un périphérique en mémoire tampon, ce qui signifie que toutes les données sont envoyées   subit un traitement supplémentaire. / dev / rdisk # est un chemin brut, ce qui est beaucoup   plus rapide et parfaitement OK lors de l'utilisation du programme dd. Sur une classe 4 SD   carte la différence était environ 20 fois plus rapide en utilisant le chemin rdisk.


114
2017-08-13 22:26


origine


En passant, j'ai effectué un test et rdisk a pris beaucoup plus de temps. - spuder
Comme une autre note, j'ai senti que je devais tester aussi alors, et a constaté qu'une copie de rdisk (via dd) était presque exactement 4 fois plus rapide qu'en utilisant la contrepartie de disque. - Travis Griggs
@TravisGriggs Je suis curieux de savoir quel OS, Mac ou Linux? - spuder
Je pensais que "rdisk" était une faute de frappe dans certaines instructions pour une image de carte SD Raspberry Pi que je lisais. Après une enquête plus approfondie, j'ai cherché la différence et trouvé ce fil. Dans mon cas, il est 13 fois plus rapide d’écrire une image de 1,7 Go sur une carte SD en utilisant / dev / rdisk au lieu de / dev / disk! Macbook Pro Retina 13 ", modèle début 2015. - tobias.mcnulty
En tant qu'autre sujet, j'ai simplement ajouté une image ARM Ubuntu à ma nouvelle carte Sandisk Extreme Pro MicroSD. / dev / disk1 a écrit à 2,3 Mo / s, tandis que / dev / rdisk1 a écrit à 83,7 Mo / s, soit 36,4 fois plus vite. - DanielSmedegaardBuus


Réponses:


De man hdiutil:

Les nœuds / dev / rdisk sont des périphériques spéciaux, mais ils sont "bruts" dans le sens BSD et les E / S alignées sur le bloc de force. Ils sont plus proches du disque physique que le cache du tampon. Les nœuds / dev / disk, quant à eux, sont des périphériques de blocs spéciaux et sont principalement utilisés par le code du système de fichiers du noyau.

En termes simples /dev/rdisk va presque directement sur le disque et /dev/disk passe par une route plus longue et plus chère


84
2017-08-13 23:23



pourquoi utiliser le disque quand vous pouvez utiliser rdisk? - user391339
@ user391339 Parce que la mise en cache est toujours souhaitable. Dans les cas où vous disposez d'un support amovible, vous souhaitez obtenir les données sur le périphérique physique aussi rapidement que possible, car vous souhaitez les données dans un autre emplacement physique. Les disques durs internes sont une autre histoire. Vous ne les portez généralement pas, vous ne vous souciez donc pas de savoir si les données sont réellement écrites sur le périphérique. Lorsque vous mettez en cache des données écrites / lues sur des périphériques plus coûteux, mais que vos programmes sont encore plus rapides, car ils n'ont pas besoin d'attendre que toutes les données qu'ils souhaitent écrire soient écrites sur le disque. - Kritzefitz
@ Dan, Re "force"; sens? - Pacerier


La réponse acceptée a raison, mais elle ne rentre pas dans les détails.

L'une des principales différences entre /dev/disk et /dev/rdisk, lorsque vous y accédez à partir de l'espace utilisateur, est-ce /dev/disk est tamponné. Le chemin de lecture / écriture pour /dev/disk décompose les E / S en blocs de 4 Ko, qu'il lit dans le cache de mémoire tampon, puis copie dans le tampon de l'espace utilisateur (puis lance la lecture de 4 Ko suivante ...). C'est bien car vous pouvez faire des lectures et des écritures non alignées, et ça marche. En revanche, /dev/rdisk Fondamentalement, il suffit de passer la lecture ou d'écrire directement sur le périphérique, ce qui signifie que le début et la fin des E / S doivent être alignés sur les limites du secteur.

Si vous faites une lecture ou écrivez plus grand qu'un secteur à /dev/rdisk, cette demande sera transmise directement. Les couches inférieures peuvent le casser (par exemple., USB, il se brise en morceaux 128Ko en raison de la taille de la charge utile maximale dans le protocole USB), mais vous pouvez généralement obtenir E / S de plus en plus efficace. En streaming, comme via dd, 128Ko à 1Mo sont de très bonnes tailles pour obtenir des performances quasi optimales sur le matériel non RAID actuel.

La mise en cache étant effectuée par /dev/diskLe chemin de lecture et d'écriture est très simple et presque mort cérébrale. Il se cache même si pas strictement nécessaire; comme si l'appareil pouvait mémoriser et transférer directement dans le tampon de votre application. Il effectue de petites (4 Ko) d'entrées / sorties, ce qui entraîne beaucoup de surcharge par E / S. Il ne fait pas de lecture anticipée ni d'écriture.


88
2018-03-23 04:54





Pour mémoire, dans macOS High Sierra au moins, / dev / disk semble être beaucoup plus rapide que / dev / rdisk. En exécutant dd ou ddrescue, ma comparaison de débit entre un disque dur magnétique et un disque SSD était de 3,7 Mbits / s avec / dev / rdisk et de 45 Mbits / s avec / dev / disk. Ainsi, sur les versions ultérieures de macOS, il peut être préférable d'utiliser / dev / disk au lieu de / dev / rdisk pour de meilleures performances.


1
2018-01-14 18:07



Lors de l'écriture d'une image raspbian-stretch de 4,6 Go à partir du stockage SSD interne sur une carte SD avec dd et un bs de 1 Mo, / dev / rdisk fonctionne toujours beaucoup plus rapidement que / dev / disk sur un Macbook Pro de Mac OS 10.13.2. Il a fallu 27,16 minutes avec / dev / disk et seulement 5,18 minutes avec / dev / rdisk. - digitaladdictions
@digitaladdictions vient de faire quelques tests sur les derniers macOS: superuser.com/a/1346063/126537 - k06a


Il semble /dev/disk et /dev/rdisk fonctionne différemment pour les disques durs et les disques SSD. Je voulais vérifier pour la carte MicroSD. Vient d'écrire une image disque de 2 Go sur Sandisk Ultra MicroSD 64 Go (https://www.amazon.com/gp/product/B073JYVKNX).

Tests répétés à plusieurs reprises, mais les résultats étaient stables: 17 Mo / s pour /dev/disk contre 20 Mo / s pour /dev/rdisk. En changeant bs=1m à bs=16m ne donne absolument aucune différence de vitesse d'écriture.

  1. Ecrire à /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. Ecrire à /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)
    

Puis j'ai décidé de tester la vitesse de lecture: 26 Mo / s pour /dev/disk contre 87 Mo / s pour /dev/rdisk. En changeant bs=1m à bs=16m ne donne absolument aucune différence de vitesse d'écriture.

  1. Lecture de /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. Lecture de /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)
    

1
2017-08-04 06:56