Tengo una aplicación en tiempo real que siempre escribe datos en una configuración de disco duro RAID 10 de forma secuencial a aproximadamente ~50 MB/s. Utiliza mmap y la escritura nunca debe bloquearse debido a E/S en espera.
Luego, a veces se produce una gran ráfaga de lectura, por ejemplo, quiero leer 500 GB de datos secuenciales lo más rápido posible desde la unidad. Sin embargo, es posible que no cause que la aplicación de escritura sea bloqueada de E/S.
Actualmente, solucionamos esto configurando la aplicación de escritura en SCHED_FIFO y luego usamos CFQ I/O Scheduler + I/O nice en las aplicaciones de lectura. Esto funciona bien, pero es un poco ineficiente ya que las unidades deben buscar mucho hacia adelante y hacia atrás para escribir y leer.
Me pregunto si existen estrategias para mejorar esto. La unidad del sistema es una unidad SSD rápida de 256 GB. ¿Podría de alguna manera hacer que Linux escriba en el SSD mientras hay espacio y se realizan lecturas? ¿Esto se puede lograr, por ejemplo, con bcache, dmcache o algún otro módulo? es decir, solo escribiría en el SSD mientras se realizan lecturas en el HDD y luego lo descargaría en el HDD. Si la caché del SSD está "llena", las escrituras en el HDD deberían tener prioridad total sobre las lecturas.