SSD como destino de gravação durante leituras

SSD como destino de gravação durante leituras

Eu tenho um aplicativo em tempo real que sempre grava dados em uma configuração de HDD RAID 10 de maneira sequencial em torno de ~50 MB/s. Ele usa mmap e a escrita nunca deve ser bloqueada devido à espera de E/S.

Às vezes, ocorre uma grande explosão de leitura, por exemplo, quero ler 500 GB de dados sequenciais da unidade o mais rápido possível. No entanto, isso pode não causar o bloqueio de E/S do aplicativo de gravação.

Resolvemos isso atualmente definindo o aplicativo de gravação como SCHED_FIFO e depois usando CFQ I/O Scheduler + I/O nice nos aplicativos de leitura. Isso funciona bem, mas é um pouco ineficiente, pois as unidades precisam procurar muito para frente e para trás para escrever e ler.

Gostaria de saber se existem estratégias para melhorar isso? A unidade do sistema é uma unidade SSD rápida de 256 GB. De alguma forma, eu poderia fazer com que o Linux escrevesse no SSD enquanto há espaço e as leituras estão ocorrendo? Isso é possível com, por exemplo, bcache, dmcache ou algum outro módulo? ou seja, ele só gravaria no SSD enquanto as leituras no HDD estivessem ocorrendo e depois o descarregaria no HDD. Se o cache SSD estiver "cheio", as gravações no HDD deverão ter prioridade total sobre as leituras.

informação relacionada