我的电脑上配置了一个 Samba 服务器。
当局域网内其他电脑从服务器下载数据时,top
命令显示smbd
占用75%的CPU。当它们将数据传输到服务器时,top
命令显示smbd
占用30%CPU。
我猜这是因为对于数据接收,服务器不需要计算标头或校验和。
对此还有更准确的解释吗?
还有一个问题就是为什么smbd不占用更多的CPU?
因为,我的局域网连接是 1Gbit,双向速率只能达到 90Mbit/s。那么为什么不smbd
使用更多的 CPU 来达到更高的速率呢。在接收过程中,分析结果显示 CPU 甚至有大约 30% 的时间无所事事(default_idle())。
@Mircea Vutcovici 测试文件为 690MB .avi。Samba 版本为 3.0.24。文件系统为 FAT,文件存储在 USB2.0 外部硬盘(>200Mbit/s)中。没有卸载引擎。CPU 大部分时间都花在内核空间中,例如,smbd 占用了 75%,而 Linux 网络堆栈占用了大约 40%。Sendfile 已激活,但没有 SG 支持,因此实际上使用的是 tcp_sendmsg,而不是 tcp_sendpage。
答案1
服务器不需要计算标头或校验和。
事实上必须如此。否则它如何检查校验和是否正确?
因为我的局域网连接是1Gbit,双向速率只能达到90Mbit/s
MBit 或兆字节。如果您看到兆字节速度 - 例如在 Windows Explorer 中看到的那样 - 那几乎就是满的。
答案2
这是 samba 的一个已知问题,CPU 使用率可能相当高,特别是当 samba 必须查找缓存中没有的大文件夹的文件时。这也是由多个网络共享和正在运行的进程引起的,它们会消耗 CPU 的时间和资源。