吞吐量; 容量规划帮助C10K像devise

我正在devise一个客户端连接和保持连接的networking服务 – 模型离IRC不远,而不是s2s连接。

我可以使用一些帮助来理解如何进行容量规划,尤其是与处理来自/到客户端的消息相关的系统资源成本。

有一篇文章试图让100万个客户端连接到同一台服务器上[1]。 当然,这些客户大部分在testing中都是完全闲置的。 如果客户每隔5秒钟发出一个消息,系统肯定会被甩掉。

但是…你怎么less挥手,你知道, 衡量这样一个突破点?

我们正在讨论客户端通过TCP套接字发送的消息到内核中,并由应用程序读取。 数据在内存中从一个缓冲区移到另一个缓冲区。 我需要考虑内存吞吐量(“5 GT / s”[2]等)?

我非常肯定,我有能力测量由于TCP / IP缓冲区,预期带宽和处理消息所需的CPU资源而导致的基本内存需求。 对于我所说的“吞吞吐吐”,我有点朦胧。

帮帮我!

另外,有没有人真的这样做? 或者,大多数人都会用手摇来看看现实世界提供什么,然后做出适当的反应?

[1] http://www.metabrew.com/article/a-million-user-comet-application-with-mochiweb-part-3/

[2] http://en.wikipedia.org/wiki/GT/s

我们正在讨论客户端通过TCP套接字发送的消息到内核中,并由应用程序读取。 数据在内存中从一个缓冲区移到另一个缓冲区。

不,不是的。 不,如果你做得正确无论如何。 对于Linux,您应该查找sendfile(2)和splice(2)系统调用。 其他内核可能具有类似的零拷贝设施,但是AFAIK还没有被标准化。

在实践中,更好地编写程序要尽可能简单,衡量瓶颈在哪里,改进,测量,改进,…预测瓶颈是困难的,过早优化是所有弊端的根源(如Knuth所述)。