added high-resolution timer to handle absolute timeouts.
added flags to waiting and initialization syscalls.
kevent_commit() has new_uidx parameter.
kevent_wait() has old_uidx parameter, which, if not equal to u->uidx,
results in immediate wakeup (usefull for the case when entries
are added asynchronously from kernel (not supported for now)).
added interface to mark any event as ready.
kevent POSIX timers support.
return -ENOSYS if there is no registered event type.
provided file descriptor must be checked for fifo type (spotted by Eric Dumazet).
signal notifications.
documentation update.
lighttpd patch updated.
Appropriate applications (ring_buffer.c, signal.c, posix_timer.c) and lighttpd patch
can be found in archive.
I've completed a bunch of kevent updates including major kevent interface changes
and will release new version soon. I've also created some locking changes, which
I call speculative locking (i.e. some fields (ret_flags mostly)
can be updated without locks, but it should not harm the system),
which can be wrong, but results are impressive.
Hardware setup.
Client: Intel Core Duo 3.4 Ghz (run with 3.7 Ghz each core), 2 GB of RAM, sky2 driven gigabit NIC
(Marvell 88E8053).
Server: AMD Athlon 64 3500+ 2.2 Ghz, 1 GB of RAM, r8169 gigabit NIC.
Software.
Both client and server systems have this network timewait socket setup:
Client runs Apache benchmark utility, which was started with following command line:
ab -n80000 -c8000 http://192.168.0.48/
i.e. 80k requests total with 8k requests started concurrently.
Results.
kevent about 7200-7400 requests per second
epoll about 4300-5300 requests per second
With 10k concurrence performance drops to
kevent about 4000 requests per second
epoll about 3800 requests per second
it is possible that I made some errors in that benchmarks though, so I will not publish
results to linux-kernel@ or make awailable from kevent
homepage.
Update: even without speculative lock changes I got the same outperforming results. Kernel is compiled for SMP setup,
all debugging is turned off (in my previous run on that platform I had some debugging options turned on,
and performance was about the same and even worse for kevent), preemption model is 'Low-Latency Desktop'.
Update 2: forgot to say, that web server is lighttpd-1.4.13.
Here is mp3 version (6.1 Mb, renamed to moscow.mp for those who
has corporate filters for mp3 files) of the song from Mongol Shuudan band.
This song and some others are available from band's homepage - mostly punk style.
I have not tried to extract sounds from it yet - I'm in office and I want to get home without
major damages, which are unavoidable if I would try to 'play' right now - there are several people
here, and they even try to work, so my first lesson is postponed to the evening.
I will start to rape and crack neighbours ears later today at home - likely no one will suffer too much,
building is quite new, so there are only about 20 'alive' flats in the
whole building (about 350 apartments).
I think my sounds will be in a harmony with sounds extracted from concrete breaking perforators and corner-grinding machines.