Estoy ejecutando algunos comandos de tiempo muy básicos en una lectura/escritura S3. El problema es que no quiero que se vea afectado por la E/S del sistema y quiero almacenarlo en la memoria. Un amigo sugirió usar /dev/null como canalización, pero tengo una carpeta de 1000 archivos que tiene aproximadamente 1 GB de tamaño.
Mi comando bash se ve así ahora mismo:
time aws s3 cp folder s3://mybucket/folder
¿Qué sugieres para cronometrar solo la escritura de memoria?
Muchas gracias
Respuesta1
Copie el directorio a un disco ram, cárguelo (y pruebe) desde allí.
¿Qué disco RAM? Hay pocas opciones:
Quizás ya haya uno en su sistema operativo y su tamaño sea lo suficientemente grande. Verifique la salida de
df
(más convenientemente:df -h
, si es compatible) para sistemas de archivos del tipotmpfs
. Puede ser/dev/shm
. Espero/dev/shm
que se pueda escribir en todo el mundo, así que si es un disco ram y no es demasiado pequeño, entonces puedes usarlo.Puede haber un disco ram separado estrictamente para su usuario. Ver¿Qué es esta carpeta
/run/user/1000
?En mi Debian o Kubuntudf -h "$XDG_RUNTIME_DIR"
me permite confirmar su tmpfs, conocer su tamaño y punto de montaje.esta respuestaDa un ejemplo de cómo crear tmpfs bajo demanda (del tamaño 16 GiB, ajústalo a tus necesidades y recursos):
mount -o size=16G -t tmpfs none /mnt/tmpfs
Necesita acceso de root para hacer esto.
Hay esta pregunta:¿Qué establece el tamaño de tmpfs? ¿Qué pasa cuando está lleno?Puede que le resulte interesante.
Como alternativa puedes utilizarvmtouch
para leer todos los archivos en su directorio y asignarlos a la memoria virtual. Si yo fuera usted, preferiría un disco ram. Aún así, si por alguna razón no puedes usar un disco ram, entonces es bueno saber qué vmtouch
puedes hacer.
Como usuario habitual puedes utilizar vmtouch -t
:
-t
Toque las páginas de la memoria virtual. Lee un byte de cada página del archivo. Si la página no reside en la memoria, se generará un error de página y la página se leerá desde el disco a la memoria caché del sistema de archivos.
-t
Puede que no sea suficiente:
Nota: Aunque se garantiza que cada página se haya guardado en la memoria, es posible que la página haya sido expulsada de la memoria cuando
vmtouch
se complete el comando.
Como root puedes usar vmtouch -l
:
-l
Bloquea páginas en la memoria física. Esta opción funciona igual-t
excepto que llamamlock(2)
a todas las asignaciones de memoria y no cierra los descriptores cuando termina. Al final del rastreo, si tiene éxito, vmtouch se bloqueará indefinidamente. Los archivos se bloquearán en la memoria física hasta quevmtouch
se finalice el proceso.