在32个核心/ 10Gbit主机上调整Netty

时间:2012-03-28 22:49:34

标签: performance networking netty

Netty Server流式传输到Netty客户端(点对点,1对1):

  • 案例:服务器和客户端均为12 cores1Gbit NIC =>以每秒300K 200字节消息的稳定速率运行

不太好

  • 案例:服务器和客户端均为32 cores10Gbit NIC => (相同的代码)从130K / s开始,在几分钟内降低到每秒数百

观察

  • Netperf表示"坏"环境实际上相当出色(可以稳定地传输600MB / s半小时)。

  • 它似乎不是一个客户端问题,因为如果我将客户端交换到一个已知的好客户端(在C中写入)设置一个最大操作系统{{ {1}}除了读取byte [] s并忽略它们之外什么都不做=>行为仍然是一样的。

  • 在达到高写水印(200MB,但尝试其他水印)之前,性能下降开始

  • Heap感觉很快,当然一旦达到最大值,GC就会锁定世界,但这种情况发生在" bad"症状表面。在"好"环境堆在1Gb的某处保持稳定,在逻辑上,给定配置,应该是。

  • 我注意到的一件事是: 32个核心中的大多数都是在中使用的,而Netty Server流是我试图通过将所有Boss / NioWorker线程设置为SO_RCVBUF来限制的(尽管无论如何都有一个频道,但以防万一):

1

但这并不限制使用的核心数量=>仍然使用大多数核心。据我所知,Netty尝试循环工作人员的任务,但怀疑是32个内核"同时"可能对于NIC来说太多了。

问题(S)

  1. 关于降低性能的建议?
  2. 如何限制Netty使用的核心数量(当然不使用OIO路由)?
  3. 旁注:他们很乐意在Netty的邮件列表上讨论它,但它已经关闭了。尝试过Netty的IRC,但它已经死了

1 个答案:

答案 0 :(得分:2)

你尝试过cpu / interrupt亲和力吗? 我们的想法是将io / irq中断仅发送到1或2个内核,并防止其他内核中的上下文切换。 给它一个好的。尝试vmstat并监视ctx和逆向上下文切换之前和之后。 您可以从中断处理程序核心取消固定应用程序。