gpt4 book ai didi

linux - 我怎么知道数据何时写入磁盘?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:27:23 25 4
gpt4 key购买 nike

我们想通过检测 Linux 系统上的 read() 和 write() 例程来测量应用程序的 I/O 时间。但是,对 write() 的调用返回得非常快。根据我的 OS man page for write (man 2 write):

NOTES A successful return from write() does not make any guarantee that data has been committed to disk. In fact, on some buggy implementations, it does not even guarantee that space has successfully been reserved for the data. The only way to be sure is to call fsync(2) after you are done writing all your data.

Linux manual as of 2013-01-27

因此我们了解到 write() 调用启动了一个异步调用,该调用在某个时候会将数据刷新到磁盘。

所以问题是,有没有办法知道数据(即使它已被分组用于缓存目的)何时实际写入磁盘? -- 最好是,该过程何时开始和结束?

EDIT1 我们对测量应用程序行为特别感兴趣,我们希望通过将参数更改为 open()——添加 O_SYNC——或注入(inject)来避免更改应用程序的语义调用 sync()。通过更改应用程序语义,您无法真正了解原始应用程序的行为。

最佳答案

您可以以 O_SYNC 方式打开文件,这在理论上意味着在数据写入磁盘之前写入不会返回。尽管写入什么数据(真实数据或元数据)取决于文件系统及其安装方式。不过,这正在改变您的应用程序的实际工作方式。

如果您真的对自己处理存储的实际 I/O 感兴趣(您是数据库吗?)那么 O_DIRECT 让您控制。同样,这是行为的改变,并对您的应用程序施加了额外的限制。它可能是您需要的,也可能不是。

您似乎真的在询问关于基准测试的真实性能,所以真正的问题是您想知道什么。由于真实的系统进行了如此多的缓存,从应用程序实际延迟的意义上说,写入的“即时”返回是“真实的”。如果您正在寻找 I/O 吞吐量,您最好查看更高级别的系统统计数据。

关于linux - 我怎么知道数据何时写入磁盘?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35768280/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com