Dan Kegel wrote: > > Before I did any work, I'd measure CPU > usage under a simulated load of 2000 clients, just to verify that > poll() was indeed a bottleneck (ok, can't imagine it not being a > bottleneck, but it's nice to have a baseline to compare the improved > version against).
I half-did this earlier in the week. It seems that Vincent's machine is calling poll() maybe 100 times/second. Each call is taking maybe 10 milliseconds, and is returning approximately one measly little packet. select and poll suck for thousands of fds. Always did, always will. Applications need to work around this. And the workaround is rather simple: .... + usleep(100000); poll(...); This will add up to 0.1 seconds latency, but it means that the poll will gather activity on ten times as many fds, and that it will be called ten times less often, and that CPU load will fall by a factor of ten. This seems an appropriate hack for an IRC server. I guess it could be souped up a bit: usleep(nr_fds * 50); -