有没有办法查看 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。