c - 探测文件系统 block 大小

标签 c io disk

我首先承认这是一个类项目,因为它非常明显。我们应该进行读取来探测文件系统的 block 大小。我的问题是,执行此操作所需的时间似乎呈线性增加,没有像我预期的那样的步骤。

我按如下方式计时:

double startTime = getticks();
read = fread(x, 1, toRead, fp);
double endTime = getticks();

其中 getticks 使用 rdtsc 指令。我担心缓存/预取会导致读取在读取过程中不花费时间。我尝试在每次执行程序之间创建一个随机文件,但这并不能缓解我的问题。

准确测量从磁盘读取所需时间的最佳方法是什么?我很确定我的 block 大小是 4096,但是我如何获取数据来支持这一点?

最佳答案

确定文件系统 block 大小的常用方法是询问文件系统其 block 大小是多少。

#include <sys/statvfs.h>
#include <stdio.h>
int main() {
    struct statvfs fs_stat;
    statvfs(".", &fs_stat);
    printf("%lu\n", fs_stat.f_bsize);
}

但如果你真的想要,open(…,…|O_DIRECT)posix_fadvise(…,…,…,POSIX_FADV_DONTNEED)将尝试让您绕过内核的缓冲区缓存(不保证)。

关于c - 探测文件系统 block 大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1493908/

相关文章:

python - 写入 csv 时分隔列表中元组中的项目

linux - 写入磁盘时谁决定 block 大小?

c - 用户定义的信号方法

c - C中的灵活结构

c - 当 main() 函数不返回零时会发生什么

php - 为什么此代码会导致服务器上的高平均负载?

BASH 脚本将 stdin 输入传递给程序并将控制权交还给用户输入

C - printf() 调用后结构的元素更改值

c++ - Linux下如何获取磁盘信息?

linux - 在 Linux 中使用仅限 CLI 的工具生成磁盘使用情况图/图表