【发布时间】:2016-02-20 19:07:14
【问题描述】:
我有大量的音频文件,我正在通过处理算法尝试从中提取某些数据位(即:整个剪辑的平均音量)。我有许多构建脚本,这些脚本以前从 Samba 网络共享中提取输入数据,我已经创建了一个网络驱动器映射到通过 net use(即:M: ==> \\server\share0)。
现在我有了一个新的 1TB 大容量 SSD,我可以将文件存储在本地并非常快速地处理它们。为了避免大量重写我的处理脚本,我删除了我的网络驱动器映射,并使用localhost 主机名重新创建它。即:M: ==> \\localhost\mydata.
当我使用这种映射时,我是否会冒着产生重大开销的风险,例如数据必须通过 Windows 的网络堆栈的一部分,或者操作系统是否使用任何快捷方式,因此它或多或少等同于直接访问磁盘(即:机器是否知道它只是从自己的硬盘驱动器中提取文件)。 延迟增加并不是我关心的问题,但最大持续平均吞吐量至关重要。
我问这个是因为我正在决定是否应该修改我的所有处理脚本以使用不同的网络路径样式。
额外问题:Linux 主机是否同样如此:它们是否足够聪明,可以知道它们是从本地磁盘提取的?
【问题讨论】:
-
吞吐量会受到一定影响。在旋转驱动器上,增加的每个文件开销占性能损失的大部分,因此如果您正在处理少量大文件,它可能不会被注意到。在SSD上我不知道。试试看!
-
... 但在这种情况下,最佳 解决方案可能是使用
subst为文件夹分配驱动器号。其开销可以忽略不计,并且不涉及网络堆栈。 -
问题似乎假设了两个可能的答案:是操作系统优化了对映射到本地共享的驱动器的访问,而否它没有。但这并不是那么简单。在您的应用程序和它的数据之间的堆栈中有很多层。在 Linux 和 Windows 上,将在网络层针对本地网络连接进行一些优化(至少避免 MAC 层及以下层)。但是,本地驱动器与映射网络驱动器的代码路径肯定是不同的。在 Harry 的观点中,应用程序的行为会产生显着的差异。底线:确定要知道的基准
-
这不取决于您使用的读取方法吗?您可以发布获取数据的方法吗?
-
@ChristopherBales 我将使用 XCOPY 命令通过 shell 脚本复制文件,并传递通过
subst或net use创建的网络映射驱动器,如果其中一个比另一个更快的话。跨度>
标签: windows localhost network-share network-shares