Windows - 通过 "localhost" 访问数据是否会产生网络堆栈开销

Windows - Does accessing data through "localhost" incur network stack overhead

我有大量音频文件,我正在 运行 通过处理算法尝试从中提取某些数据位(即:整个剪辑的平均音量)。我有一些之前从 Samba 网络共享中提取输入数据的构建脚本,我已经创建了一个网络驱动器映射到 net use(即:M: ==> \server\share0)。

现在我有了一个新的 1TB 大容量 SSD,我可以将文件存储在本地并非常快速地处理它们。为了避免大量重写我的处理脚本,我删除了我的网络驱动器映射,并使用 localhost 主机名重新创建它。即:M: ==> \localhost\mydata.

当我使用这样的映射时,我是否冒着产生大量开销的风险,例如来自必须通过 Windows 网络堆栈的一部分的数据,或者 OS 使用任何快捷方式,因此它或多或少等同于直接磁盘访问(即:机器是否知道它只是从自己的硬盘驱动器中提取文件)。 延迟增加不是我的大问题,但最大持续平均吞吐量至关重要。

我问这个是因为我正在决定是否应该修改我的所有处理脚本以使用不同的网络路径样式。

额外问题:这是否同样适用于 Linux 主机:它们是否足够聪明,知道它们是从本地磁盘中提取的?

即使 "loopback" 使用 TCP 直接文件访问也会产生路由、内存分配等开销。在 linux 和 windows 上,是的,环回设备是非-物理内核设备,比其他网络设备快,但不比直接文件访问快。据我所知,在 windows 上还有其他环回优化,例如 NetDNA 和 "Fast TCP Loopback"。

我假设环回设备的瓶颈是内存(复制)进程。因此,在 linux 和 windows.

上,直接访问文件而不是通过环回设备总是更快(并且资源消耗低)

此外,两个操作系统都通过 windows 上的 "named pipes" 和 linux 上的 "unix domain sockets" 解决了 IPC 的协议开销,使用它们也比使用环回更快适用时的设备。

When I make use of such a mapping, do I risk incurring significant overhead,

是的。通过使用 UNC 路径 (\hostname\sharename\filename) 而不是本地路径 ([\?\]driveletter:\directoryname\filename),您可以让所有流量通过服务器消息块协议 (SMB / Samba) 发生。这通常会在磁盘访问和访问时间方面增加大量开销。

网络上的流量是这样的:

Application -> SMB Client -> Network -> SMB Server -> Target file system

现在将文件移动到本地计算机,但仍使用 UNC 访问它们,流程如下:

Application -> SMB Client -> localhost -> SMB Server -> Target file system

您唯一最小化的(没有消除,到本地主机的 SMB 流量仍然涉及网络层和所有相关的计算和流量)是网络流量。

此外,鉴于 SMB 是专门为网络流量量身定制的,它的读取可能不会以最佳方式使用您的磁盘和 OS 的缓存。例如,它可能以特定大小的块执行读取,而您的磁盘在读取其他大小的块时性能更好。

如果您想要最佳的吞吐量和最少的访问时间,请在两者之间使用尽可能少的层,在这种情况下通过直接访问文件系统:

Application -> Target file system