- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在用 C 编写几个基准程序来完成以下任务:
这里的目标是测量读取或写入文件所花费的时间(使用 read
和 write
来避免 fread< 的任何缓冲时间
)
1和2我一般的做法是先创建一个8192字节的文件写入磁盘(无论是本地目录还是网盘),然后调用sleep(10)
等待页面缓存刷新,以便我测量实际 I/O 的时间,而不是缓存 I/O。然后我测量执行空 for 循环几千次所需的时间,然后是读取 8192 字节所需的时间,然后减去两者,除以所有迭代的平均值。我的代码如下:
struct timespec emptyLoop1, emptyLoop2;
clock_gettime(CLOCK_REALTIME, &emptyLoop1);
for(i = 0, j = 0; i < ITERATIONS; i++) {
j+=i*i;
}
clock_gettime(CLOCK_REALTIME, &emptyLoop2);
char readbuf[NUM_BYTES];
struct timespec beforeRead, afterRead;
clock_gettime(CLOCK_REALTIME, &beforeRead);
for(i = 0, j = 0; i < ITERATIONS; i++){
j+=i*i;
read(fd, readbuf, NUM_BYTES);
}
这是否足以准确测量从这些位置读取的时间?
接下来,我对如何从页面缓存中读取感到困惑。它存在于磁盘的什么位置,我如何访问它?最后,还有一些针对 4 和 5 的技巧,它们显然比看起来要难得多,但我不确定我遗漏了什么。
最佳答案
以下是我的文件读取功能,可以选择使用或不使用基于内存的缓存。如果先写文件,也需要类似的open语句。请注意,不能在 LAN 上使用直接 I/O,并且缓存可能无法预测。可以在 http://www.roylongbottom.org.uk/linux_disk_usb_lan_benchmarks.htm 中找到更多详细信息以及对源代码和执行文件的访问。 .
int readFile(int use, int dsize)
{
int p;
if (useCache)
{
handle = open(testFile, O_RDONLY);
}
else
{
handle = open(testFile, O_RDONLY | O_DIRECT);
}
if (handle == -1)
{
printf (" Cannot open data file for reading\n\n");
fprintf (outfile, " Cannot open data file for reading\n\n");
fclose(outfile);
printf(" Press Enter\n");
g = getchar();
return 0;
}
for (p=0; p<use; p++)
{
if (read(handle, dataIn, dsize) == -1)
{
printf (" Error reading file\n\n");
fprintf (outfile, " Error reading file\n\n");
fclose(outfile);
close(handle);
printf(" Press Enter\n");
g = getchar();
return 0;
}
}
close(handle);
return 1;
}
关于c - 如何测量文件 I/O 的挂钟时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27491314/
我有一个 C++ 二进制文件,我正在尝试测量它在最坏情况下的性能。我执行它/usr/bin/time -v 结果是 User time (seconds): 161.07 System time (
我正在开发一个高性能库,我需要在线程完成计算时停止它的时间点,然后将该时间点保存在全局变量中,以便该全局变量始终保存最近完成的一个线程的时间。 现在,我正在使用带有时间戳的 C++ std:chron
有时,在测试机器 (Windows) 上,Java 完整 GC 需要超过 20 秒。 GC 日志显示 real 时间非常高,user 也很高,但没有那么高(大约 3 秒)。在一种情况下,它是: 21.
我是一名优秀的程序员,十分优秀!