Writecache 目标¶
writecache 目标在持久内存或 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(对于 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 重定向到原始卷,则暂停写回
状态
错误指示器 - 如果没有错误则为 0,否则为错误编号
块数
可用块数
正在写回的块数
读取块数
命中缓存的读取块数
写入块数
命中未提交块的写入块数
命中已提交块的写入块数
绕过缓存的写入块数
在缓存中分配的写入块数
在空闲列表上被阻止的写入请求数
刷新请求数
已丢弃的块数
- 消息
- flush
刷新缓存设备。如果缓存设备在没有错误的情况下刷新,则消息会成功返回
- flush_on_suspend
在下次挂起时刷新缓存设备。当您要删除缓存设备时,请使用此消息。删除缓存设备的正确顺序是
发送 “flush_on_suspend” 消息
加载具有映射到基础设备的线性目标的非活动表
挂起设备
请求状态并验证是否没有错误
恢复设备,以便它将使用线性目标
缓存设备现在处于非活动状态,可以删除
- cleaner
请参阅上面的 “cleaner” 构造函数文档。
- clear_stats
清除在状态行上报告的统计信息