AEM - The Linux Asynchronous Event Mechanism



Project Page


Source Code










AEM (Asynchronous Event Mechanism) provides a generic and native support for asynchronous events into the Linux kernel.  Its goal is to provide a scalable and soft real-time mechanism to applications running on Linux.

AEM targets the telecom industry where an efficient  handling of a massive number of system events is crucial. But in addition, the field of applications and the way it can be used is manifold: user space interface for network protocols, embeded in event-driven applications, exception notifications.... AEM enables the design and implemention of either fully event-driven applications or  applications mixing event-driven code and sequential code.

AEM works by executing user space procedures or by creating new processes asychronously in response to system events. It can support several millions of active events per CPU-board depending on the available memory (a P3 with 750Mb supports up to 2 millions events).

AEM's API regarding event handlers is not fixed but is defined by implementators in their respective event modules. This provides a flexible mechanism allowing to comform to any kind of existing standard.

AEM is a kernel patch for the basic support and kernel modules for specific event implementations.  This is an ongoing research project and the source code is available [ here ].  More descriptions and explanations on how to use AEM modules can be found [ here ].

AEM has also been introduced as a requirement for the OSDL Carrier-Grade Linux 2.0 specifications.

The AEM source code is being released under the GNU Public License (GPL), version 2.
[R1] OSDL Carrier-Grade Linux Working Group, Requirements for Low-Level Asynchronous Events [ pdf ], Draft 0.6.
[R2] AEM - FAQ [ pdf ], Draft 0.3.
[R3] Frederic Rossi, The Benefits of An Event Mechanism in Carrier-Grade Linux [ pdf ], February 2003.
[1] Frederic Rossi, Asynchronous Events on Linux [ pdf ], Open Cluster Group Conference, June 25 2002.
[2] Frederic Rossi, An Event Mechanism For Linux, in Linux Journal, July 2003, #111.
[3] Frederic Rossi, AEM - A Scalable and Native Event Mechanism for Linux, November 2004, #127.

These are the latest patches for AEM. They are also included into the corresponding packages just below.

Kernel 2.6
2.6.6 [aem-15r9]
Kernel 2.4
[aem-12r14 ]

The source code can also be downloaded from the SF page. Pre-downloaded packages can be found here.
These are the complete packages for AEM. The most up to date release of AEM is for the Linux kernel 2.6.0. The release for the kernel 2.4.x is quite old now and most likely won't be updated.



Kernel 2.6
AEM (kernel 2.6.6) [v0.9.1]
Kernel 2.4
AEM (kernel 2.4.20)
Architecture Independant

Test suite


Stabilization suite
Performance and Scalability 
In [1] some comparisons have been made between a program using a standard socket interface and another one using the AEM asynchronous TCP/IP interface. The goal was to show that the time to context-switch a process for executing event handlers was not a handicap.

Some measurements have been done recently in order to get scalability figures of AEM. The goal was to ensure that the current implementation offered the expected capabilities. We have chosen to adapt a simple existing HTTP server and used httperf to generate the traffic.

This test aims at looking at the scalability of AEM regarding the number of opened connections versus the number of active connections. This test does not look at the performance of the mechanism (AEMhttpd [ v0.2 ] is single-threaded in this case) but the scalability with respect to the job implementation.

The hardware used for these tests (up/bottom). AEMhttpd is the server and httperf the client:
  • P3-SMP: the server on a P3/SMP(2) 750 Mhz 768 Mb RAM and the client on a P4 2.2 Ghz 512 Mb RAM through a hub 100 Mb/s
  • P4: the server on a P4 2.4 Ghz 512 Mb RAM and the client on a P3 750 Mhz 250 Mb RAM through a hub 100 Mb/s
  • Celeron: the server on a Celeron 500 Mhz 512 Mb RAM and the client on a P4 2.2 Ghz 512 Mb RAM though a hub 100 Mb/s

AEM modules 
AEM core functionalities [ more ]
aem-sched Adds event affinity to the scheduler decision (only for kernel 2.4)
Asynchronous socket interface (currently TCP/IP is supported) [ more ]
POSIX timers based on AEM [ more ]
Support for the native TIPC asynchronous interface [ more ]
Process termination notification (explicit return or fault)  [ more ]
aem-fd Notification for operations on files and directories (open, chown, chmod, lock...)  [ more ]

Frederic Rossi (Ericsson Research)