为什么数据发送比CPU接收数据更重?

我的电脑里configuration了一个Samba服务器。

当局域网中的其他PC从服务器上下载数据时, top命令显示smbd占用CPU的75%。 当他们将数据传输到服务器时, top命令显示smbd占用CPU的30%。

我想这是因为对于数据接收,服务器不需要计算头或校验和。

有没有更准确的解释呢?


另一个问题是为什么smbd不占用更多的CPU?

因为我局域网中的连接是1Gbit,双向速率只能达到90Mbit / s。 那么为什么不smbd需要更多的CPU来达到更高的速度。 在接收过程中,性能分析结果显示CPU甚至有大约30%的时间完全没有任何事情要做(default_idle())。


@Mircea Vutcovicitesting文件是一个690MB .avi。 Samba版本是3.0.24。 文件系统为FAT,文件存储在USB2.0外置硬盘(> 200Mbit / s)中。 没有卸载引擎。 CPU在内核空间上花费的时间最多,例如smbd消耗75%,其中大约40%被Linuxnetworking消耗。 Sendfile被激活,但没有SG支持,所以实际上是使用tcp_sendmsg而不是tcp_sendpage。

服务器不需要计算标题或校验和。

其实它不得不。 如何检查校验和是否正确?

因为我局域网中的连接是1Gbit,双向速率只能达到90Mbit / s

MBit或兆字节。 如果你看到一个兆字节的速度 – 就像你在wnidows浏览器中做的那样 – 这个速度非常快。

这是samba的一个已知问题,CPU使用率可能相当高,特别是当samba必须查找不在其高速caching中的大文件夹的文件时。 这也是由几个networking共享和进程运行引起的,这将消耗CPU的时间和资源。