我正在从 Windows 8.1 计算机访问 Samba 共享,但遇到的问题是延迟非常高。打开一个文件可能需要几秒钟。在网络路径或网络驱动器上打开 Windows 文件对话框经常会导致程序崩溃。当我使用 Explorer 浏览共享并使用光标键浏览文件时,每个文件都会挂起大约一秒钟。
我已经从 Windows Defender 中排除了映射的网络驱动器,这加快了一点速度(它似乎读取了每个文件进行检查)。但是,延迟仍然很糟糕。另一方面,吞吐量还可以。
互联网上大多数性能技巧都与提高吞吐量有关。我甚至不知道从哪里开始减少延迟。有什么想法吗?
日志的一些摘录:
在资源管理器中突出显示文件时:
jason opened file path/to/file.txt read=No write=No (numopen=2)
jason closed file path/to/file.txt (numopen=0) NT_STATUS_OK
连接时我得到:
setup_new_vc_session: New VC == 0, if NT4.x compatible we would close all old resources.
但我不知道这是否真的是一个问题。
答案1
好的,我修复了它,但是解决方案有点奇怪,因此我希望在评论中得到一些解释:-)。
我在问题中隐瞒了一些信息,因为我认为这并不重要,也不想让人们只关注这一点。我实际上在做的是,我在端口 1445 上以非特权用户身份运行 samba。然后我在 Windows 中创建了一个环回设备,并创建了一个 ssh 隧道,将我的远程端口 1445(在公司网络之外无法访问)绑定到环回端口 445。哦,我是通过 Wifi 进行的 :-)。因此,存在许多潜在的性能瓶颈,但我不想让每个人都指出 ssh 隧道等问题,因为我知道这没问题(而且性能也很好)。
事实证明,问题出在环回设备上。我在网上找到了一个不太明显的提示,并尝试了一下,果然有效。在注册表编辑器中,我转到
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\<GUID of the loopback device>
您可以通过查看所有接口并比较 IPAddress 值来找到环回设备 GUID。
然后我创建了两个密钥,并重新启动:
TcpAckFrequency = 1 (DWORD)
TcpDelAckTicks = 0 (DWORD)
之后,它就变得非常快,浏览共享就像浏览本地驱动器一样。我必须指出,我认为这只是由于我的设置不明确而造成的。我从中获得提示的原始网站(忘记了链接)建议您将此注册表破解应用于您的实际网络设备。由于我不确定它实际上会做什么,所以我不建议这样做,但由于我仅将此网络接口用于 Samba,因此它可能对系统的其余部分没有不利影响。