当 compiling/linking gcc/ld on windows 时通过 CIFS 提高写入速度
increasing write speed through CIFS when compiling/linking gcc/ld on windows
当对象和目标 DLL 位于网络驱动器上时,我们的应用程序需要很长时间才能构建:我专注于 DLL 创建,因为它需要 400 秒才能完成。
在本地驱动器上,DLL 创建大约需要 60 秒。两个驱动器具有相同的特性,我们的网络非常快。
我已经尝试 copy/create 使用网络驱动器作为目标的大文件,并且在写入大小足够大时获得了良好的结果。因此,我使用 ProcessMonitor 进行了调查,发现 ld
使用了很多具有 2 个字节的 WriteFile
调用,并且一次写入的最大大小约为 200。
所以我猜测 CIFS 对一系列无缓冲的小写入反应很差,而本地驱动器不关心。
我可以要求我的基于 gcc 编译器的供应商通过一些缓冲的 fwrite
转换他的 write
调用,但是我们在 CIFS 写入缓存参数上是否缺少某些东西?
我的意思是:如果在 CIFS 端有这样的缓存,将写入更大的块,性能将接近一个文件 copy/create。有没有办法打印缓存size/change呢? (对于菜鸟 CIFS 问题很抱歉,但是
我用谷歌搜索了 "SMB CIFS windows write cache size" 之类的东西,但只找到了 Linux.
的东西
如果可能,使用 iSCSI,您将获得最佳质量性能
之后你一定知道CIFS不是用来编译或者其他小文件的。
本地磁盘或SAN上的解决方案效率更高
好
当对象和目标 DLL 位于网络驱动器上时,我们的应用程序需要很长时间才能构建:我专注于 DLL 创建,因为它需要 400 秒才能完成。
在本地驱动器上,DLL 创建大约需要 60 秒。两个驱动器具有相同的特性,我们的网络非常快。
我已经尝试 copy/create 使用网络驱动器作为目标的大文件,并且在写入大小足够大时获得了良好的结果。因此,我使用 ProcessMonitor 进行了调查,发现 ld
使用了很多具有 2 个字节的 WriteFile
调用,并且一次写入的最大大小约为 200。
所以我猜测 CIFS 对一系列无缓冲的小写入反应很差,而本地驱动器不关心。
我可以要求我的基于 gcc 编译器的供应商通过一些缓冲的 fwrite
转换他的 write
调用,但是我们在 CIFS 写入缓存参数上是否缺少某些东西?
我的意思是:如果在 CIFS 端有这样的缓存,将写入更大的块,性能将接近一个文件 copy/create。有没有办法打印缓存size/change呢? (对于菜鸟 CIFS 问题很抱歉,但是 我用谷歌搜索了 "SMB CIFS windows write cache size" 之类的东西,但只找到了 Linux.
的东西如果可能,使用 iSCSI,您将获得最佳质量性能 之后你一定知道CIFS不是用来编译或者其他小文件的。
本地磁盘或SAN上的解决方案效率更高
好