写缓存目标¶
写缓存目标将写入缓存到持久内存或 SSD 上。它不缓存读取,因为读取通常被缓存在普通 RAM 的页缓存中。
构造设备时,第一个扇区应清零,或者第一个扇区应包含上次调用的有效超级块。
构造函数参数
- 缓存设备类型 - “p” 或 “s”
p - 持久内存
s - 固态硬盘 (SSD)
将被缓存的底层设备
缓存设备
块大小 (推荐 4096;最大块大小为页大小)
可选参数的数量 (带参数的参数计为两个)
- start_sector n (默认值: 0)
从缓存设备开始处的偏移量,以 512 字节扇区为单位
- high_watermark n (默认值: 50)
当已用块数量达到此水印时,开始回写
- low_watermark x (默认值: 45)
当已用块数量低于此水印时,停止回写
- writeback_jobs n (默认值: 无限制)
限制回写过程中正在传输的块的数量。设置此值会降低回写吞吐量,但可能会改善读取请求的延迟。
- autocommit_blocks n (默认值: 持久内存为 64,固态硬盘为 65536)
当应用程序写入此数量的块而未发出 FLUSH 请求时,这些块将自动提交
- autocommit_time ms (默认值: 1000)
自动提交时间,以毫秒为单位。如果此时间过去且未收到 FLUSH 请求,数据将自动提交
- fua (默认启用)
仅适用于持久内存 - 将数据从持久内存回写到底层设备时使用 FUA 标志
- nofua
仅适用于持久内存 - 回写数据时不使用 FUA 标志,并在之后发送 FLUSH 请求
有些底层设备使用 fua 性能更好,有些则使用 nofua。用户应进行测试
- 清理器
当此选项被激活(无论是通过构造函数参数还是通过消息)时,缓存将不会提升新的写入(但是,对已缓存块的写入会得到提升,以避免因写入顺序错误导致的数据损坏),并且它将逐渐回写所有缓存的数据。用户空间随后可以通过“dmsetup status”监控清理过程。当缓存块的数量降至零时,用户空间可以卸载 dm-writecache 目标并将其替换为 dm-linear 或其他目标。
- max_age n
指定块的最大年龄,以毫秒为单位。如果一个块在缓存中存储时间过长,它将被写入底层设备并被清理。
- 仅元数据
只有元数据被提升到缓存。此选项可提高处理更重度的 REQ_META 工作负载的性能。
- pause_writeback n (默认值: 3000)
如果在过去的 n 毫秒内有写入 I/O 重定向到原始卷,则暂停回写
状态
错误指示器 - 如果没有错误则为 0,否则为错误号
块的数量
空闲块的数量
正在回写的块的数量
读取块的数量
命中缓存的读取块的数量
写入块的数量
命中未提交块的写入块的数量
命中已提交块的写入块的数量
绕过缓存的写入块的数量
在缓存中分配的写入块的数量
在空闲列表中被阻塞的写入请求数量
刷新请求的数量
丢弃块的数量
- 消息
- flush
刷新缓存设备。如果缓存设备成功刷新且无错误,则消息返回成功
- flush_on_suspend
在下次暂停时刷新缓存设备。当您要移除缓存设备时使用此消息。移除缓存设备的正确步骤是
发送“flush_on_suspend”消息
加载一个非活动表,其线性目标映射到底层设备
暂停设备
请求状态并验证没有错误
恢复设备,以便它将使用线性目标
缓存设备现在处于非活动状态,可以删除
- 清理器
请参阅上面“清理器”构造函数文档。
- clear_stats
清除状态行上报告的统计信息