[Ilugc] Bandwidth monitor app on linux

  • From: rsubr@xxxxxxxxxxxxxxxxxxxxxxxx (Raja Subramanian)
  • Date: Sat, 15 May 2004 01:35:00 +1000

Hi,

Arvind Narayanan wrote:

A few weeks back there was a discussion about bandwidth usage
on home "broadband" connections. It occured to me that for people
who face such constraints it would be useful to have a breakdown
of their bandwidth utilization app-wise so that they can modify
their 'net usage habits accordingly. 

...

Sounds interesting.

The design of this hypothetical app for linux would be like this:
* The backend would be a daemon coupled with a kernel module that
would intercept TCP send/recv calls and log them. The data logged
would be name of the executable, user, and size of packet. The
daemon would listen on some port and pass this data on to clients
(there should be some security rules to specify which clients are
allowed to connect.) The backend should also offer a way to throttle
bandwidth in an app-wise manner. If the limit is exceeded the packet
should be dropped. The challenge is to do all this without greatly
impacting performance.

The kernel module + user space daemon sounds good.  Your ideas could be
added on to existing projects such as LIDS (www.lids.org) and se-linux
(from the NSA).  These guys have extensively patched the kernel to allow
various kinds of process monitoring, control and logging.

If all you need to do is to trap/intercept syscalls, a 100% userland
based approach is also feasible. strace(1) does precisely this.

The userland only approach offers the following advantages -

  1. cross platform, should work on any sane unix.
  2. stability, no messing with the kernel.
  3. only monitored application suffers a performance penalty.
     everything else runs at native speed.
  4. you avoid certain types of errors which could send your monitoring
     application into an infinite loop (eg. when the monitoring app
     monitors itself).
  5. to improve performance, it's easy to build log cacheing.
     Accumulate counters in RAM and dump to disk periodically.

* The frontend collects this data and presents it in various pretty
ways to the user. Some examples:
  -- Show real time bandwidth usage graphs, app wise, user wise and
machine wise, both incoming and outgoing.
  -- Show aggregate graphs ala webalizer, again app wise, user wise
and machine wise.
  -- Allow throttling and bandwidth quotas.
etc.  Of course, multiple frontends can exist.

RRDTool is a nice application for storing and visualizing your data.

- Raja


Other related posts: