红帽公司的 Mikulas Patocka 对 Linux 内核的设备映射器(DM)进行了最新的性能优化。
在 7 月中旬 Linux 6.11 合并窗口到来之前,设备映射器的 Git 树中有一个补丁排队等待优化刷新。Mikulas Patocka 发现目前对刷新的处理效率不高,可能导致向底层存储设备进行多次不必要的冗余刷新。Patocka 在补丁中解释说
“设备映射器会向所有目标发送刷新生物信息,然后目标再将其发送到底层设备。例如,如果一个表包含 10 个指向同一物理设备的线性目标,那么设备映射器将向该设备发送 10 个刷新生物,尽管事实上只需一个生物就足够了。
本次提交优化了刷新行为。它为每个目标引入了一个 flush_bypasses_map 变量,当目标支持刷新优化时就会设置该变量,目前只有 dm-linear 和 dm-stripe 目标支持该变量。当表中的所有目标都有 flush_bypasses_map 时,表上的 flush_bypasses_map 将被设置。__send_empty_flush 会测试表是否有 flush_bypasses_map,如果有,则不会通过 “map “方法向目标发送 flush 生物识别码,而是遍历 dm_table->devices 列表,并向列表中的每个成员发送 flush 生物识别码。
在 Linux 6.11 周期之前,这一效率优化已在 DM 代码中排队等候。
转自 Linux 6.11 Device Mapper Will Optimize Flushing – Phoronix