Exocomm Agent software
Just about anyone can find a use for our Exocomm Agent network monitoring software. Want to track the people, places and devices on your network in real-time, without a lot of hassle? Try it, it's free. We put a lot of work into the basics of network management, to free your time for better things.
runs in the kernel
The Exocomm Agent can now be run as a kernel module! We were asked to demonstrate the portability of our Agent code by distributing it as a loadable Linux kernel module. This means you can take our module, and run it inside the kernel of any Linux device -- say Android on a Cortex A8, or Scientific Linux on a Cray.
(Of course, our Agent runs on any known Operating System, not just Linux. But let's face it, Linux is our favorite!)
Of course many would correctly point out that such code does not belong in the kernel. Running inside the kernel is very dangerous, since one mistake can crash an entire system. Besides, who wants proprietary code in their kernel? In the early days of Linux, since few hardware vendors bothered to support the Linux platform, hacking the kernel was about the only way to get good performance out of new hardware devices. These days, one would hope that's all changed. Linux is the platform of choice for just about everything from phones to supercomputers. Manufacturers should publish open specifications, and provide open-source drivers for the hardware they sell. But in the real world, that's not always possible. When you have an exciting new technology, you can't always give it away as early as you'd like. You need to support Linux, but you can't give out your source code.
So, shipping kernel modules is the way a large number of hardware vendors support Linux. Since we're supporting some custom hardware platforms for our customers (tiny IoT network devices on System-on-Chip platforms), we needed to be able to deliver an in-kernel driver for our devices -- on either a USB or PCI bus.
Okay, let's take a look at the new module. It should install to the "misc" section of your kernel module tree.
[Exocomm Thu Aug 13 14:36:57 core@savior:/lib/modules/4.0.4-exocomm.atom/misc] : modinfo exocomm-agent-module.ko filename: /lib/modules/4.0.4-exocomm.atom/misc/exocomm-agent-module.ko depends: vermagic: 4.0.4-exocomm.atom SMP mod_unload ATOM
Once installed, the module will load automatically when you plug in one of our devices (or if you're not using the custom hardware, just modprobe the module like any other). Here is the module running in the kernel, right next to the Atheros wireless drivers. Now we're capturing data straight out of the kernel -- it's almost like we are the network device driver. No need for any libraries, or even an IP stack.
exocomm_agent_module 92544 0 ath9k_htc 45669 0 ath9k_common 16406 1 ath9k_htc ath9k_hw 395101 2 ath9k_common,ath9k_htc ath 15683 3 ath9k_common,ath9k_htc,ath9k_hw
What a nice, compact bit of code -- it's using only 92 kilobytes (yes, kilobytes) of memory. That's pretty amazing, considering what the software can do.
You'll get a warning like so :
[1342106.243450] exocomm_agent_module: module license 'unspecified' taints kernel. [1342106.243457] Disabling lock debugging due to kernel taint
That's simply because we haven't specified a license. We aren't going to release our code as open-source yet, but it's free to download.
When the Agent is loaded this way, it communicates directly with the Exocomm Server (which is running as the same host as the connected hardware) via direct memory access, rather than via the IP stack. This gives us an excellent option for high-bandwidth applications, and can improve performance significantly.
You can give the Agent commands by writing to /dev/exocomm-agent, or read status information from /proc/exocomm-agent. Pretty cool huh?
This means can now ship our custom USB-based devices, and support them host-side with a loadable kernel module that should work on any Linux system (hey, maybe even your Android phone). Data transfer occurs directly within the kernel, with no need for the IP stack. So you can just plug our box into your host, instead of having to provide ethernet or wireless connectivity (no passwords to forget, no IP addresses to remember). Also, we can get direct access to the hardware devices we want the Agent to monitor, to gather performance metrics at a very low level. We can monitor disc I/O or memory access, from within the kernel. And we can handle high rates of data transfer & analysis, efficiently.
Don't want the Exocomm Agent in your kernel? Maybe you're not even running Linux. No problem. Run it in user-space as always -- as an unprivileged process, if you prefer. Now that's portability!
Who knows, some day we might even want to release some open-source monitoring & analytics code for the Linux kernel. Until then, being able to ship loadable kernel modules is the next best thing. Our Agent kernel module is now shipping as part of the standard build.
Are you still mucking around with monitoring and automation tools built with sticks and bubblegum -- that require hundreds of megabytes of libraries for them to function? Need advanced network analytics on any platform? Maybe it's time to check out the Exocomm Agent. Go ahead and download it -- it's free!