C10K


The C10k problem is the problem of optimising network sockets to handle a large number of clients at the same time.
Note that concurrent connections are not the same as requests per second, though they are similar: handling many requests per second requires high throughput (processing them quickly), while high number of concurrent connections requires efficient scheduling of connections.

C10K是Dan Kegel在1999年提出的问题.网络世界发展到今天,C10K已经非常容易就能被实现了。更多的人开始考虑C10M问题了。

By the early 2010s millions of connections on a single commodity 1U server became possible: over 2 million connections (WhatsApp, 24 cores, using Erlang on FreeBSD), 10–12 million connections (MigratoryData, 12 cores, using Java on Linux)

但是这类问题的本质并没有随着时间的推移而改变多少。简单来讲,难点就是如何做到efficient scheduling。

具体来讲可以包括以下几个方面:

  • 网卡中断的高效处理

    网卡已经从1GB、10GB,发展到了40GB,网卡在处理小包时如何减少中断开销占整个处理开销的比例?让CPU做更多有效的操作,而不是频繁的中断和context switch。相关的技术也非常多,从网卡硬件支持的TSO/GSO/GRO,到系统支持的RSS,到系统库级别的DPDK都是围绕这一主题而展开的。

  • 如何高效利用多核

    在CPU设计的摩尔定律越发的疲软,多核已经在变得愈发的主流。但是许多的系统设计、应用软件设计并没有充分的利用起多核。当然要想充分利用多核,这是一个非常复杂的问题,短时间内也很难被有效解决。
    在网络领域相关技术中,网卡多队列 + CPU affinity + RSS技术组合是一个比较常见的手段。

  • 如何减少/避免锁竞争

    锁问题一直是多核时代的头疼的问题,已经有许多的工作证明过内核网络层面的锁开销在高并发情境下的巨大开销。锁问题也是许多应用态协议栈设计时攻击内核网络实现的一个关键点。

  • 网卡IO模型 + 系统IO模型 + 应用IO模型的协同工作

    IO模型是一个非常庞大的论题,有机会的话再详细的聊一聊。

results matching ""

    No results matching ""