Porque é que “/ dev / rdisk” é 20 vezes mais rápido que “/ dev / disk” no Mac OS X

115

De acordo com a documentação do rasbery pi , você pode carregar seu sistema operacional em um cartão flash com / dev / disk ou / dev / rdisk .

rdisk significa disco bruto.

/ dev / disk é um dispositivo de nível de bloco, por que o rdisk seria 20 vezes mais rápido?

Using Mac OSX

Note: In OS X each disk may have two path references in /dev: /dev/disk# is a buffered device, which means any data being sent undergoes extra processing. /dev/rdisk# is a raw path, which is much faster, and perfectly OK when using the dd program. On a Class 4 SD card the difference was around 20 times faster using the rdisk path.

    
por spuder 14.08.2013 / 00:26

4 respostas

84

De man hdiutil :

/dev/rdisk nodes are character-special devices, but are "raw" in the BSD sense and force block-aligned I/O. They are closer to the physical disk than the buffer cache. /dev/disk nodes, on the other hand, are buffered block-special devices and are used primarily by the kernel's filesystem code.

Em termos leigos, /dev/rdisk vai quase diretamente para o disco e /dev/disk passa por uma rota mais cara

    
por 14.08.2013 / 01:23
90

A resposta aceita está certa, mas não entra em muitos detalhes.

Uma das principais diferenças entre /dev/disk e /dev/rdisk , quando você as acessa do espaço do usuário, é que /dev/disk está em buffer. O caminho de leitura / gravação para /dev/disk divide os blocos de E / S em 4KB, que ele lê no cache de buffer, e copia no buffer de espaço do usuário (e emite a próxima leitura de 4KB…). Isso é legal porque você pode fazer leituras e gravações desalinhadas, e isso simplesmente funciona. Em contraste, /dev/rdisk basicamente passa a leitura ou escreve diretamente no dispositivo, o que significa que o início e o fim da E / S precisam estar alinhados nos limites do setor.

Se você ler ou escrever mais de um setor para /dev/rdisk , essa solicitação será transmitida diretamente. As camadas inferiores podem dividi-lo (por exemplo, o USB divide em 128 KB devido ao tamanho máximo de carga útil no protocolo USB), mas geralmente você pode obter I / Os maiores e mais eficientes. Quando o streaming, como via dd , 128 KB a 1 MB são tamanhos muito bons para obter um desempenho quase ideal em hardware não-RAID atual.

O cache que está sendo feito pelos caminhos de leitura e gravação de /dev/disk é muito simples e quase com morte cerebral. Ele armazena em cache, mesmo que não seja estritamente necessário; como se o dispositivo pudesse mapear a memória e transferir diretamente para o buffer do seu aplicativo. Ele faz pequenas E / Ss (4KB), o que leva a muita sobrecarga por E / S. Não faz nenhuma leitura adiante ou escreve atrás.

    
por 23.03.2015 / 05:54
2

Parece que /dev/disk e /dev/rdisk funcionam de forma diferente para HDDs e SSDs. Quero verificá-lo para o cartão MicroSD. Acabei de escrever uma imagem de disco de 2 GB no Sandisk Ultra MicroSD 64 GB ( link ).

Testes repetidos várias vezes, mas os resultados foram estáveis: 17MB / s para /dev/disk vs 20MB / s para /dev/rdisk . Alterar bs=1m para bs=16m não dá nenhuma diferença na velocidade de gravação.

  1. Escrevendo para /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. Escrevendo para /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)
    

Então decidi testar a velocidade de leitura: 26MB / s para /dev/disk vs 87MB / s para /dev/rdisk . Alterar bs=1m para bs=16m não dá absolutamente nenhuma diferença na velocidade de leitura.

  1. Leitura 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. Leitura 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)
    
por 04.08.2018 / 08:56
1

Para o registro, no macOS High Sierra, pelo menos, / dev / disk parece ser muito mais rápido que / dev / rdisk. Executando o dd ou o ddrescue, minha comparação de throughput copiando de um HD magnético para um SSD foi de 3.7MBps usando / dev / rdisk e 45MBps usando / dev / disk. Portanto, em versões posteriores do macOS, pode ser melhor usar / dev / disk em vez de / dev / rdisk para melhor desempenho.

    
por 14.01.2018 / 19:07