为什么性能相对差的机器network IO高

crazy_samba 2016-01-05 11:12:04
我有两台机器,一台windows 7(简称为w7),一台windows server 2012(简称为w2012), w2012的各方面配置都远远优于w7.

我写了一个很简单的socket服务器只接收字节不做任何处理, 并写了一个socket客户端不停地发字节到socket服务器. socket客户端和服务器在同一台机器上允许.

下面是它们的主要代码,非常简单:
=======socket 服务器=======
IPAddress ip = IPAddress.Parse("127.0.0.1");
TcpListener listener = new TcpListener(ip, 8888);
listener.Start();
byte[] receivedData = new byte[1024];
while (client.Receive(receivedData) > 0)
{
}

=======socket客户端========
TcpClient client = new TcpClient();
client.Connect("127.0.0.1", 8888);
NetworkStream stream = client.GetStream();
while (true)
{
stream.Write(1024个字节, 0, 1024);
}

然后我观察Resource Monitor显示的Network I/O, 发现性能相对差的w7的network I/O反倒高于w2012, w7的network I/O是3G bps/sec, 而w2012的是13G bps/sec.

请问为什么会出现这种情况呢?大家有什么想法?先谢谢了.
...全文
583 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
crazy_samba 2016-01-19
  • 打赏
  • 举报
回复
很奇怪的时,最近即使将虚拟内存禁掉,也不管用.
crazy_samba 2016-01-07
  • 打赏
  • 举报
回复
谢谢各位,我把虚拟内存禁掉,w2012的网络I/O就上去了. 关于你的问题,我的客户端和服务器在一台机器上,所以应该和网卡是千兆还是光纤没有关系. 我的数据是通过'Resource Monitor'里面看到的.
引用 22 楼 puler 的回复:
你这个数据怎么测试出来的,你说的是系统总线的速度?这个查CPU参数应该就查得到,属于硬件问题 XEON的CPU,如果你使用山寨主板,它跑起来的时候,少了指令集,会不会是这个原因 你这个13G bps/sec是在千兆网卡上跑?我换算成M/s,13000÷8=1625M/s,不做端口汇聚,光是一个千兆网卡,能有那么大吞吐量?
  • 打赏
  • 举报
回复
你应该并发几十个线程来测试。如果可能,用几十台机器来测试。另外也不要“不停地发字节”。正常情况下,客户端平均每秒才发几个消息,也就足矣了。 你的这个模拟,肯定会得到错误的结论。
  • 打赏
  • 举报
回复
通常给出的测试数据,都是几千个并发,并且是考虑能完成多少“事务”。 是测试系统并行处理多用户事务的性能,而不是简单地看看网卡速度。
xuzuning 2016-01-06
  • 打赏
  • 举报
回复
另外中低档服务器(高档的没用过)网卡的下行(流出)速度要高出上行(流入)速度一个数量级。PC 机无此现象 你在测试时就会发现
xuzuning 2016-01-06
  • 打赏
  • 举报
回复
服务器的优势在于多道运行和网络吞吐 在服务器上运行单机版程序,一定是性能极差的 windows server 2012 是服务器操作系统,要是安装在 PC 上,性能就大大折扣了 再说你做单机测试,也是不对的 你应在 w7、w2012 间做对传测试
crazy_samba 2016-01-06
  • 打赏
  • 举报
回复
汗,我写反了,w7的network I/O是13G bps/sec, 而w2012的是3G bps/sec.
引用 8 楼 angel6709 的回复:
我再擦。 发现性能相对差的w7的network I/O反倒高于w2012, w7的network I/O是3G bps/sec, 而w2012的是13G bps/sec. 哪里体现出w7比2012高了
angel6709 2016-01-06
  • 打赏
  • 举报
回复
我再擦。 发现性能相对差的w7的network I/O反倒高于w2012, w7的network I/O是3G bps/sec, 而w2012的是13G bps/sec. 哪里体现出w7比2012高了
angel6709 2016-01-06
  • 打赏
  • 举报
回复
我擦,是2012
angel6709 2016-01-06
  • 打赏
  • 举报
回复
这充分说明2008 稳定哈,同样的数据传输,2008的那个错误率低很多。。
  • 打赏
  • 举报
回复
除了localhost,127.0.0.1这种ip都是要经过网卡的,哪怕你是本机 当然也不能说一定是网卡的问题
crazy_samba 2016-01-06
  • 打赏
  • 举报
回复
有人知道吗?
puler 2016-01-06
  • 打赏
  • 举报
回复
你这个数据怎么测试出来的,你说的是系统总线的速度?这个查CPU参数应该就查得到,属于硬件问题 XEON的CPU,如果你使用山寨主板,它跑起来的时候,少了指令集,会不会是这个原因 你这个13G bps/sec是在千兆网卡上跑?我换算成M/s,13000÷8=1625M/s,不做端口汇聚,光是一个千兆网卡,能有那么大吞吐量?
crazy_samba 2016-01-06
  • 打赏
  • 举报
回复
换了一台windows server 2012, network I/O最高还是3Gbps/sec, 奇怪,为什么会有这个限制? [quote=引用 20 楼 crazy_samba 的回复:] 但是我的两台机器在测试时CPU内存等资源使用的并没不高,我感觉还是network I/O有限制,不管跑什么测试程序,最高就是3Gbps/sec.
crazy_samba 2016-01-06
  • 打赏
  • 举报
回复
但是我的两台机器在测试时CPU内存等资源使用的并没不高,我感觉还是network I/O有限制,不管跑什么测试程序,最高就是3Gbps/sec.
引用 18 楼 dongxinxi 的回复:
对于系统资源(CPU内存等),服务器版的操作系统默认是服务优先,win7则是应用程序优先 换句话讲,你拿其他程序去测,结果很可能也一样 这个你可以通过“我的电脑”>属性>高级>性能 - 设置 >高级 就可以看到了,最起码你要将这里设置成一样
  • 打赏
  • 举报
回复
对于服务器而言,用while (true)这种同步模式,有点浪费服务器高性能的CPU了,CPU大多数CPU周期可能都在等待IO返回 当然,还是要结合业务需求为主
  • 打赏
  • 举报
回复
对于系统资源(CPU内存等),服务器版的操作系统默认是服务优先,win7则是应用程序优先 换句话讲,你拿其他程序去测,结果很可能也一样 这个你可以通过“我的电脑”>属性>高级>性能 - 设置 >高级 就可以看到了,最起码你要将这里设置成一样 另外,对于socket,肯定是要走网卡的,所以跟硬件也有关系,不过现在的网卡算好了,影响比较小 对于server操作系统还有很多后台服务在跑,也会有影响
xuzuning 2016-01-06
  • 打赏
  • 举报
回复
是的,我曾经盘过八年服务器,我得出的结论就时这样
crazy_samba 2016-01-06
  • 打赏
  • 举报
回复
您的意思是说服务器上运行单机版程序,会比配置相对低的PC性能还会低? 我能理解服务器上运行单机版比服务器上运行多线程程序性能更差,但是不理解为什么服务器上运行单机版比PC上运行单机版性能更差.
引用 10 楼 xuzuning 的回复:
服务器的优势在于多道运行和网络吞吐 在服务器上运行单机版程序,一定是性能极差的
crazy_samba 2016-01-06
  • 打赏
  • 举报
回复
在写这个测试程序前,我们的确是测试并发处理事务的能力,发现w7比w2012好,然后发现w2012的network I/O最多3Gbps/sec, 即使测试程序发送更多的请求,network I/O顶多3Gbps/sec, 没法提高,所以在考虑是不是w2012是不是对单用户的使用资源是不是有限制. 然后就写了这个测试程序,发现果然network I/O顶多3Gbps/sec. 大家知道是不是w2012对单用户的使用资源有限制吗?
引用 13 楼 sp1234 的回复:
通常给出的测试数据,都是几千个并发,并且是考虑能完成多少“事务”。 是测试系统并行处理多用户事务的性能,而不是简单地看看网卡速度。
加载更多回复(4)

110,524

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧