比较 ext4 和 NTFS 的性能

标签 c linux windows benchmarking

作为类(class)项目的一部分,我正在使用 ext4 的 C 和 NTFS(分别在 RHEL 和 Windows 7 上)进行基准测试。

我正在尝试针对基准进行实验,但对应该做什么以及我的想法是否有意义感到非常困惑(我的教授缺席了 2 周,类(class)没有助教)。以下是粗体问题的详细信息:

  • 比较顺序读取速度:我计划拥有一些不同大小的文件,并对这些文件执行顺序读取,每次读取的大小为一个 block (在两个文件系统上均为 4K)。 我应该对不同大小的文件还是对同一个文件执行此操作?此外,以 block 大小的倍数进行读取是否有意义?当然,对于超过第一个缓存的读取会发挥作用。

  • 比较随机读取速度:在不同的文件偏移处运行读取(再次读取 block 大小)。 同样,同样的问题。

  • 比较写入速度:禁用两者的写入缓存并按 block 大小写入。

我主要关心的是我运行测试的文件大小以及用于每个操作(读/写)的大小。

对于我可以在我的实验中包含的内容以及我的方法所需的任何其他更改的任何其他指示,我们将不胜感激。

我还计划比较元数据操作,但我正在处理这些操作,如果需要,稍后可能会发布问题。

最佳答案

作为文件系统的基准,它们将是无效的。变数太多了。假设您将使用相同的硬件,您的变量是...

  • 文件系统(ext4 与 NTFS)
  • 操作系统(Redhat 与 Windows)
  • C 编译器(gcc/clang 与 Visual C++(我猜))

您正在对 Redhat + 他们的 C 编译器 + ext4Windows + 他们的编译器 + NTFS 进行基准测试。 无法从中得出有关文件系统的一般性陈述,只能得出有关组合的信息。你可能想指出作业中的这个缺陷以获得加分,或者它可能只会惹恼助教。你来电。

Redhat 确实有一个 NTFS 实现,因此您可以通过对 Redhat 上的所有内容进行基准测试来消除变量,但随后您将对 Redhat 的 NTFS 实现与 Redhat 的 ext4 实现进行基准测试。这不会影响 Windows 的 NTFS 实现。

您可以进行额外的测试以消除编译器和操作系统变量,但我不知道它们是什么。


先不说,因为这是作业,你问的是跑什么场景。答案是全部。基准应该反射(reflect)现实世界的使用情况,在现实世界中,您读取和写入不同大小和不同缓存状态的文件。将它们放在一个大矩阵中并运行所有组合。

通常,文件大小范围应从 block 大小一直到 4 gig(模拟视频文件)。增量越多越好。 1024 的幂将是一个好的开始,三个是一条曲线。所以 4K、4M、4G。

您应该在启用和不启用缓存的情况下进行基准测试,以测试文件系统在读取未缓存文件和读取缓存文件时的工作情况。两者都代表了现实世界的场景。

关于比较 ext4 和 NTFS 的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33226603/

相关文章:

c - SOAP 请求和响应使用 libcurl - C 读取文件或写入文件

c - 二进制到字符在c中的转换

linux - 如何从证书文件(.crt 扩展名)生成证书请求和私钥文件(.pem 扩展名)

linux - SWT Canvas 在 Windows 上无法重绘,但在 Linux 上可以正常工作

c - 如何计算C中相同字符的个数?

c - 线程 1 : EXC_BAD_ACCESS (code=1, 地址=0x800000012)

c++ - 什么东西便宜 : cast to int or Trim the strings in C++?

linux - 查找修改过的文件并将它们回显到服务器根目录上的 txt 文件中

c - 使用 golang 的 Windows Hook

mysql - 无法启动 Rails 服务器 (MySQL Windows)