Ubuntu 使用的写入模式策略是什么?

Ubuntu 使用的写入模式策略是什么?

有没有办法查看 Ubuntu 是否使用写通或写回策略?

我知道写回要好得多,但是当我用 C 编写程序来测试缓存时,Ubuntu 似乎使用了写通。

更新:我的意思是它是 CPU 缓存,而不是文件系统缓存。我关心的是写入缓存 L1、L2、L3 和 RAM 的策略。谢谢!

答案1

在写回式缓存中,当对缓存数据进行更改时,不会同时对原始数据进行更改。相反,会标记已更改的数据,并在释放缓存数据时更新原始数据。

相比之下,在写通缓存中,对缓存数据的更改会同时在原始副本中进行。写回缓存的执行速度比写通缓存更快。但在某些情况下,缓存数据和原始数据之间的差异可能会导致问题,必须使用写通缓存

来源

现在,您使用什么操作系统并不重要,真正影响的是您正在使用的文件系统。

Ubuntu 默认使用 ext4 作为文件系统,了解 ext4使用两种模式回写和直写。

启用写回模式

跑步

 tune2fs -o journal_data_writeback /dev/sd*

编辑 fstab

vi -w /mnt/sdXY/etc/fstab

找到引用 sd* 的行它看起来像:

# /dev/sda2
UUID=be2f0ac2-4683-4550-bcd1-704a1a840b3e / ext4 relatime,errors=remount-ro 0 1

第一个条目是 UUID 。

第二个条目是路径。

第三个是 fstype 。

第四是选择。

第五个是转储

六是通行。

将选项(第四个)更改为:

noatime,data=writeback,barrier=0,nobh,errors=remount-ro

重新启动系统以完成更改。

来源

另请检查了解更多信息。

答案2

您还可以通过查看 /proc/mounts 来了解当前的“data=”模式。以下是我的笔记本电脑的一个示例:

$ grep ext /proc/mounts 
/dev/mapper/crypt-root / ext4 rw,noatime,errors=remount-ro,user_xattr,barrier=1,data=ordered 0 0
/dev/mapper/vg0-boot /boot ext4 rw,nosuid,nodev,noexec,noatime,user_xattr,barrier=1,data=ordered 0 0
/dev/mapper/crypt-homes /home ext4 rw,nosuid,noatime,user_xattr,acl,commit=60,barrier=1,data=ordered 0 0

另请注意,“nobh”是一个已弃用的挂载选项。

答案3

您还可以查看是否O_SYNC | O_DIRECT需要在 open() 中使用标志。手册指出:

“O_DIRECT 标志本身会尝试同步传输数据,但不能像 O_SYNC 标志那样保证传输数据和必要的元数据。为了保证同步 I/O,除了 O_DIRECT 之外,还必须使用 O_SYNC。”

有关更多详细信息,请参阅 man 2 open open。

相关内容