抱歉,我对网络了解不多。我正在构建一个客户端/服务器,其中服务器向客户端传输大量数据,我正在尝试最大化吞吐量(通过 TCP)。
如果我同时运行客户端和服务器,我会获得相当高的吞吐量。但是,当通过网卡时(两台机器位于 LAN 上),性能会下降很多。但问题是,带宽没有得到充分利用,CPU 核心也没有得到充分利用。
我想知道您是否认为可能是大量的硬件中断(每秒数千次)导致资源利用不足。客户端对传入流执行一些处理,因此我希望充分利用 CPU 和/或带宽。
您将如何诊断和改善这种情况?服务器发送的消息大小是否会影响中断次数?
答案1
不幸的是,这有点模糊。定义“性能大幅下降”。这是需要检查大约 20 个不同事物的情况之一,包括硬件和软件。
硬件: - 两端都有质量不错的网卡吗?(英特尔/博通),不是 Realtek - 您有托管交换机吗? - 如果数据包很小,托管交换机是否可能无法进行所有进程切换? - 您是否尝试过交换网线 - 确认它是千兆位? - 也许您的硬盘无法跟上数据流?通用基本硬盘的最大速度可达千兆位。 - 有支持 TOE 的网卡吗?
软件: - 您是否在卡中使用 mtu 9000 又名巨型缓冲区? - 您是否查看过调整接收窗口或缓冲区? - 什么操作系统? - 如果是 Windows,您是否正在运行 av/防火墙软件?
应用程序级别/数据: - 是否已加密?(通过 ssh 隧道传输?) - 什么协议?ftp/cifs/rsync/http/nfs - 文件大小是多少?数千个小文件还是一个非常大的文件?
有很多地方可以开始,但这些都是你需要自己回答的问题。
一旦进入软件层面,我建议在两台机器之间使用 iperf,看看您获得的原始数据的最大数量是多少。这将告诉您最高可能的速度。然后您可以将其与您的应用程序提供的速度进行比较。