为什么发送数据对CPU的要求比接收数据高?

为什么发送数据对CPU的要求比接收数据高?

我的电脑上配置了一个 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 的时间和资源。

相关内容