У меня есть приложение реального времени, которое всегда записывает данные в конфигурацию RAID 10 HDD последовательно со скоростью около ~50 МБ/с. Оно использует mmap, и запись никогда не должна блокироваться из-за ожидания ввода-вывода.
Затем иногда происходит большой всплеск чтения, например, я хочу прочитать 500 ГБ последовательных данных как можно быстрее с диска. Однако это может не привести к блокировке ввода-вывода приложения записи.
В настоящее время мы решаем эту проблему, устанавливая приложение записи на SCHED_FIFO, а затем используя CFQ I/O Scheduler + I/O nice в приложениях чтения. Это работает хорошо, но немного неэффективно, поскольку приводам нужно много искать вперед и назад, чтобы выполнять как запись, так и чтение.
Мне интересно, есть ли какие-либо стратегии для улучшения этого? Системный диск — это быстрый SSD-диск на 256 ГБ. Могу ли я как-то заставить Linux писать на SSD, пока есть место и происходит чтение? Можно ли это сделать с помощью, например, bcache, dmcache или какого-либо другого модуля? т. е. он будет писать на SSD только во время чтения на HDD, а затем позже сбрасывать данные на HDD. Если кэш SSD «полный», то записи на HDD должны иметь полный приоритет над чтениями.