Saltar al contenido

¿Por qué es "/dev/rdisk" unas 20 veces más rápido que "/dev/disk" en Mac OS X?

El tutorial o código que hallarás en este artículo es la resolución más rápida y válida que encontramos a esta duda o problema.

Solución:

La respuesta aceptada es correcta, pero no entra en muchos detalles.

Uno de los key diferencias entre /dev/disk y /dev/rdisk, cuando accede a ellos desde el espacio de usuario, es que /dev/disk está amortiguado. La ruta de lectura/escritura para /dev/disk divide la E/S en fragmentos de 4 KB, que lee en la memoria caché del búfer y luego copia en el búfer del espacio del usuario (y luego emite la siguiente lectura de 4 KB...). Esto es bueno porque puedes hacer lecturas y escrituras no alineadas, y simplemente funciona. A diferencia de, /dev/rdisk básicamente solo pasa la lectura o escritura directamente al dispositivo, lo que significa que el inicio y el final de la E/S deben estar alineados en los límites del sector.

Si realiza una lectura o escritura de más de un sector para /dev/rdisk, esa solicitud se procesará directamente. Las capas inferiores pueden dividirlo (p. ej., USB lo divide en partes de 128 KB debido al tamaño máximo de carga útil en el protocolo USB), pero generalmente puede obtener E/S más grandes y eficientes. Al transmitir, como a través de dd, 128 KB a 1 MB son tamaños bastante buenos para obtener un rendimiento casi óptimo en el hardware actual que no es RAID.

El almacenamiento en caché realizado por /dev/diskLas rutas de lectura y escritura de son muy simples y casi sin cerebro. Se almacena en caché incluso si no es estrictamente necesario; como si el dispositivo pudiera mapear la memoria y transferirse directamente al búfer de su aplicación. Realiza E/S pequeñas (4 KB), lo que genera una gran sobrecarga por E/S. No hace ninguna lectura anticipada ni escritura posterior.

Desde man hdiutil:

Los nodos /dev/rdisk son dispositivos de caracteres especiales, pero son "sin procesar" en el sentido BSD y fuerzan E/S alineadas con bloques. Están más cerca del disco físico que la memoria caché del búfer. Los nodos /dev/disk, por otro lado, son dispositivos especiales de bloque almacenados en búfer y son utilizados principalmente por el código del sistema de archivos del kernel.

En términos sencillos /dev/rdisk va casi directamente al disco y /dev/disk va por una ruta más larga y más cara

Parece /dev/disk y /dev/rdisk funciona diferente para HDD y SSD. Quiero comprobarlo para la tarjeta MicroSD. Acabo de escribir una imagen de disco de 2 GB en Sandisk Ultra MicroSD de 64 GB (https://www.amazon.com/gp/product/B073JYVKNX).

Pruebas repetidas varias veces, pero los resultados fueron estables: 17 MB/s por /dev/disk contra 20 MB/s por /dev/rdisk. Cambiando bs=1m a bs=16m no da absolutamente ninguna diferencia en la velocidad de escritura.

  1. Escribiendo a /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. Escribiendo a /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)
    

Entonces decidí probar la velocidad de lectura: 26 MB/s por /dev/disk contra 87 MB/s por /dev/rdisk. Cambiando bs=1m a bs=16m no da absolutamente ninguna diferencia en la velocidad de lectura.

  1. leyendo 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. leyendo 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)
    

Reseñas y calificaciones

Si te ha sido provechoso este artículo, nos gustaría que lo compartas con otros entusiastas de la programación así contrubuyes a difundir este contenido.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *