我使用“dd”创建测试文件并在HDD之间执行备份。没问题。
目前,我正在尝试使用它来测试NFS传输速率。起初,我改变了块大小(“bs”参数)......但这让我思考,为什么我需要改变这个论点?
我想要模拟的典型用例是:
在这种情况下,2D阵列的典型C / C ++代码是:
FILE *ptr = fopen("path_to_nfs_area", "w");
for (int i = 0; i < data.size(); ++i)
fwrite(data[i], sizeof(float), width, ptr);
...
所以在这种情况下,我们写入一个32位增量的缓冲区(sizeof(float)) - 由于这是一个FILE对象,它可能也被缓冲了(也许这不是一件好事,但可能是与此讨论无关。)
我很难从“bs”块中的if-&gt;中写入“dd”,而不是从内存中写出变量的应用程序(并使用dd模拟它)。
说“bs”的值比系统PAGE_SIZE更小是没有意义的吗?
这是我目前的理解,所以我不明白为什么更改“dd”块大小会很重要:
答案 0 :(得分:1)
你可能会在superuser.com上得到更好的答案,因为这个问题在这里有点偏离主题。
但是考虑一下nfs共享没有挂载异步标志的可能性 - 在这种情况下,每次写入都需要由nfs服务器确认,然后才能开始下一次写入。因此,与bs=1
相比,bs=2
需要大约两倍的时间,并且每个都比合理的块大小慢得多。
如果在nfs mount上设置了async标志,那么你的内核可能会将几个小写写合并为一个大写,因此设置bs
的效果应该是可以忽略的。
无论如何,如果您正在测试为特定应用程序设置环境,请使用该应用程序进行测试,而不是其他任何内容。性能可能取决于任何通用工具无法重现的特定于应用程序的行为。