Writecache 目标

writecache 目标在持久内存或 SSD 上缓存写入。它不缓存读取,因为读取应该在普通 RAM 中的页面缓存中缓存。

构造设备时,第一个扇区应归零,或者第一个扇区应包含先前调用的有效超级块。

构造函数参数

  1. 缓存设备的类型 - “p” 或 “s”
    • p - 持久内存

    • s - SSD

  2. 将被缓存的基础设备

  3. 缓存设备

  4. 块大小(建议 4096;最大块大小是页面大小)

  5. 可选参数的数量(带参数的参数算作两个)

    start_sector n(默认值:0)

    从缓存设备的起始位置偏移,以 512 字节扇区为单位

    high_watermark n(默认值:50)

    当使用的块数达到此水位线时开始写回

    low_watermark x(默认值:45)

    当使用的块数降至此水位线以下时停止写回

    writeback_jobs n(默认值:无限制)

    限制在写回期间正在传输的块数。设置此值会降低写回吞吐量,但可能会提高读取请求的延迟

    autocommit_blocks n(对于 pmem 默认为 64,对于 ssd 默认为 65536)

    当应用程序写入此数量的块而不发出 FLUSH 请求时,这些块会自动提交

    autocommit_time ms(默认值:1000)

    自动提交时间,以毫秒为单位。如果此时间过去并且未收到 FLUSH 请求,则会自动提交数据

    fua(默认启用)

    仅适用于持久内存 - 当将数据从持久内存写回底层设备时,请使用 FUA 标志

    nofua

    仅适用于持久内存 - 在写回数据时不使用 FUA 标志,并在之后发送 FLUSH 请求

    • 某些底层设备在 fua 下性能更好,而某些在 nofua 下性能更好。用户应进行测试

    cleaner

    当此选项被激活(在构造函数参数中或通过消息)时,缓存将不会提升新的写入(但是,为了避免由于写入顺序错误导致的数据损坏,会提升对已缓存块的写入),并且它将逐渐写回任何缓存的数据。然后,用户空间可以使用 “dmsetup status” 监视清理过程。当缓存块的数量降至零时,用户空间可以卸载 dm-writecache 目标并将其替换为 dm-linear 或其他目标。

    max_age n

    指定块的最大存在时间,以毫秒为单位。如果块在缓存中存储时间过长,则会将其写入底层设备并清除。

    metadata_only

    仅元数据被提升到缓存中。此选项可提高较重的 REQ_META 工作负载的性能。

    pause_writeback n(默认值:3000)

    如果在最近 n 毫秒内有某些写入 I/O 重定向到原始卷,则暂停写回

状态

  1. 错误指示器 - 如果没有错误则为 0,否则为错误编号

  2. 块数

  3. 可用块数

  4. 正在写回的块数

  5. 读取块数

  6. 命中缓存的读取块数

  7. 写入块数

  8. 命中未提交块的写入块数

  9. 命中已提交块的写入块数

  10. 绕过缓存的写入块数

  11. 在缓存中分配的写入块数

  12. 在空闲列表上被阻止的写入请求数

  13. 刷新请求数

  14. 已丢弃的块数

消息
flush

刷新缓存设备。如果缓存设备在没有错误的情况下刷新,则消息会成功返回

flush_on_suspend

在下次挂起时刷新缓存设备。当您要删除缓存设备时,请使用此消息。删除缓存设备的正确顺序是

  1. 发送 “flush_on_suspend” 消息

  2. 加载具有映射到基础设备的线性目标的非活动表

  3. 挂起设备

  4. 请求状态并验证是否没有错误

  5. 恢复设备,以便它将使用线性目标

  6. 缓存设备现在处于非活动状态,可以删除

cleaner

请参阅上面的 “cleaner” 构造函数文档。

clear_stats

清除在状态行上报告的统计信息