我有一个实时应用程序,它总是以大约 50 MB/s 的速度按顺序将数据写入 RAID 10 HDD 配置。它使用 mmap,并且写入永远不会因为等待 I/O 而被阻塞。
然后有时会发生大量读取,例如我想从驱动器中尽快读取 500GB 的顺序数据。但是,它可能不会导致写入应用程序被 I/O 阻塞。
目前,我们通过将写入应用程序设置为 SCHED_FIFO 来解决此问题,然后在读取应用程序上使用 CFQ I/O Scheduler + I/O Nice。这工作正常,但效率有点低,因为驱动器需要进行大量来回查找才能进行写入和读取。
我想知道是否有任何策略可以改善这一点?系统驱动器是快速 256GB SSD 驱动器。当有空间并且正在读取时,我能否以某种方式让 Linux 写入 SSD?这可以通过 bcache、dmcache 或其他模块来实现吗?即,它只会在读取 HDD 时写入 SSD,然后将其刷新到 HDD。如果 SSD 缓存已“满”,则对 HDD 的写入应优先于读取。