Dealing with 50K users at a time

Have you ever asked yourself how IRCG behaves when 50K users start connecting to it?

Well, here is a part of the answer.

[Graph I]

The picture includes two graphs. The large blue area shows how many users were logged in at the time. The green graph relays the information on how many logins were performed during the last 30s in a 3s interval on average. I.e. 300 means 100 logins per second.

IRCG connects users at a rate of up to 6000 users per minute on this specific configuration. You can double the performance by using two CPUs. Due to its architecture, the system will scale easily.

At 50K users, the IRCG/IRCD processes used 263MB/59MB of memory, or 6.5KB per user.

The test was performed with Enterprise IRCG. The overall performance has been increased two-fold in comparison to IRCG release 2. This applies to message throughput, new connection handling as well as RAM usage.

The PHP scripts in question are the standard scripts from this site, minus channel-user handling in Javascript. You would not want a user client to maintain a list of 50K users anyway. It would kill itself much earlier.

The operating system was Linux 2.4.18 which easily dealt with the load. All necessary options are tunable at runtime which is a clear advantage in comparison to other systems such as Solaris and FreeBSD.

The IRC server in this test-run was ircd-2.10.10pl18 with multi-accept. The multi-accept change significantly contributed to the improvement of accepting new connections. You can see the old behaviour in this graph:

[Graph II]

1500 seconds for 25K connects without multi-accept. 1000 seconds for 50K connects with multi-accept. See the difference? A patch for multi-accept has been submitted to the maintainers of the Undernet IRCD.

Both graphs show that the overall performance is dictated by an exponential function. This is related to the poll system call which cost increases exponentially. If one ever needed to overcome this limitation, one could use available systems such as Real-Time Signals (Linux) or kqueue (FreeBSD) or /dev/poll (Solaris).

Availability Please check out Get IRCG 3! for full license information.

Copyright © 1999-2010 Sascha Schumann
All rights reserved.
Valid XHTML 1.1! validate | top
Cobol PHP