
Actualmente estoy desarrollando un software que necesita una rápida comunicación de E/S temporal y entre procesos (imágenes y grandes matrices hdf5). La "vida útil" de los datos es diferente y depende de varias cosas, pero en la mayoría de los casos oscila entre segundos y minutos. Sólo unos pocos archivos deben almacenarse por más tiempo. Ninguno de los datos necesita guardarse de forma persistente.
Por lo tanto, pensé /dev/shm
que debería ser el camino a seguir. Sin embargo, estoy luchando por comparar /dev/shm
.
Mi primer intento fue:
sudo dd if=/proc/kcore of=/dev/shm/mem count=1000000
...que muestra el siguiente resultado:
1000000+0 records in
1000000+0 records out
512000000 bytes (512 MB, 488 MiB) copied, 0,661147 s, 774 MB/s
Sin embargo, cuando ejecuto dd
el bs
indicador para especificar cuántos bytes se deben leer/escribir a la vez, el resultado cambia mucho:
sudo dd if=/proc/kcore of=/dev/shm/mem bs=$((1024*1024)) count=512
...da como resultado:
512+0 records in
512+0 records out
536870912 bytes (537 MB, 512 MiB) copied, 0,166003 s, 3,2 GB/s
¿Por qué es mucho más rápido leer/escribir fragmentos de datos muy grandes (muchos bytes 512 veces) en comparación con fragmentos de datos pequeños muchas veces (1.000.000 de veces, como en el primer intento)?
¿Es "legítimo" comparar /dev/shm
el dd
uso /proc/kcore
como fuente? ¿O de alguna manera está /proc/kcore
limitando el punto de referencia?
No puedo decir exactamente cuánto rendimiento tengoen realidadNecesito, pero me gustaría tener una velocidad de lectura y escritura de más de 1 GB/s (porque la mayor cantidad de datos que estoy leyendo o escribiendo es 1 GB y me gustaría hacerlo en menos de un segundo).
Principalmente almaceno matrices grandes (50 MB hasta 1 GB) a través deHDF5.