在“更好”的机器上运行时,简单网络应用程序的性能会下降

在“更好”的机器上运行时,简单网络应用程序的性能会下降

我花了半天时间试图弄清楚为什么一个简单的网络通信应用程序在一台看起来配置更好的机器上运行得更慢。

有两个程序:一个简单的客户端,通过 TCP/IP 连接到服务器,写入(相同的)消息并等待回复,然后再次写入相同的消息。简单的服务器等待客户端写入消息,然后将(相同的)消息写入客户端。此交换在循环中完成 1M 次。此测试是在本地主机上进行的。

在旧计算机上,这种交互每秒可实现约 90000 条消息,而在新计算机上,这种交互每秒可实现约 44000 条消息,尽管新计算机具有更好的规格,并且没有运行任何其他用户进程。

较旧的计算机:

  • 是一个共享的开发箱——各种其他进程与我的测试一起运行
  • 拥有 16 个 Intel(R) Xeon(R) CPU X5570 @ 2.93GHz 处理器
  • 有 49Gb 内存,其中只有大约 5Gb 是可用的

较新的计算机:

  • 不共享 - 唯一运行的进程是我自己的
  • 拥有 24 个 Intel(R) Xeon(R) CPU X5690 @ 3.47GHz 处理器
  • 拥有 24.5Gb 内存,其中 21Gb 可用

我已检查以下内容:

  • 操作系统内核相同。Uname -a 显示:Linux ficsydapd20 2.6.18-238.9.1.el5 #1 SMP Fri Mar 18 12:42:39 EDT 2011 x86_64 x86_64 x86_64 GNU/Linux
  • 较新的机器上的内存架构更好 - 使用以下基准进行测试缓存基准
  • 较新的机器在 CPU 基准测试中表现出色 -弗尔斯顿
  • strace 显示的系统调用数量大致相同
  • 程序运行时,vmstat 没有显示分页
  • 通过 /sbin/ifconfig,环回设备的 MTU 是相同的
  • 使用 /proc/sys/net/ipv4/tcp_wmem 和 /proc/sys/net/ipv4/tcp_rmem 检查两个系统使用的默认套接字缓冲区
  • 两台机器的 /etc/hosts 上的 localhost 定义为 127.0.0.1

有谁知道可能是什么问题,或者什么可以提供更多信息?

答案1

你需要在这里检查更多内容

1) 检查 qdisc 是否未配置.. 确保此处没有 lo 设备的条目

[qdisc 用于限制接口的速率]

root@x:~# tc qdisc
qdisc pfifo_fast 0: dev eth0 root refcnt 2 bands 3 priomap  1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1
qdisc mq 0: dev wlan0 root 

2)检查 iptables:确保两台机器的 iptables 相同(iptables 中的连接记录或伪装可能会降低有效速度)

root@x:~# iptables -L
root@x:~# iptables -L -t nat

if not you can try using iptables -F  and iptables -t nat -F  to flush them

3)检查两者的 selinux 状态是否相同(启用或禁用)

4)在 /proc/sys/net/ipv4 中,tcp 连接速率取决于许多参数,例如(因为您以非常快的速率发送连接)

net.ipv4.tcp_tw_reuse

net.ipv4.tcp_max_syn_backlog

所以你必须确保两台机器的这些值相同

发现差异的简单方法是

机器 1

root@x:~# sysctl -a | grep net.ipv4.tcp_ > s1

机器 2

root@x:~# sysctl -a | grep net.ipv4.tcp_ > s2

复制文件并检查差异

root@x:~# diff s1 s2

您可以更改不同的值。

答案2

我们同步了内核版本和驱动程序,但没有帮助。事实证明,某些 BIOS 设置导致性能下降。特别是:

C 状态和 C1E 选项可以在机器未使用时降低时钟速度和电压消耗以节省电力 - 因为较新的机器没有被充分利用,所以它被置于这种状态,这会降低性能(与直觉相反)。

现在的性能已经达到甚至有时超过了旧机器的性能。

相关内容