Tag Archives: Latency

LQL 0.6.0 released

I just finished a new release of LQL. This release contains the statistics support I have been working on. The basic statistics are available for each queueing discipline and class but I have not added the extended statistics that are specific to each qdisc/class type yet. Adding support for these statistics will just require modifying a single function in each type. I’m not sure when I will get this done as I don’t need this feature at the moment.


  • Add statistics support to all qdiscs and classes. See the get_stats.c example.
  • Add print() method to LQLQDisc and LQLClass so that it’s easy to see their settings.
  • Add printStats() method to LQLQDisc and LQLClass to output all statistics information.
  • Lots of small bug fixes.
  • Clean up and add new documentation.

LQL Update

The first release of the Linux QoS Library (LQL) which was on August 31st has been well received. LQL 0.5.0 has been downloaded about 150 times. I have received a few very nice emails from people ecstatic about it, including one even before I had completed sending the release announcements. The first LQL patch arrived in my inbox yesterday; though I haven’t had time to look at it yet.

The resumption of classes has meant I have not had as much time to work on LQL as I would like. However, I have been making slow progress on some new features.

Currently, I am adding statistics support to the QDiscs. This new API will return all of the information in struct tc_stats. The current implementation of this requires a few new classes.

-+ LQLStats
----+ LQLStatsQDisc
------+ LQLStatsQDiscHTB
------+ LQLStatsQDiscSFQ
------+ etc

The LQLQDisc class is getting a new method called lql_qdisc_get_stats() which each subclass will override to return their own LQLStatsQDisc object that contains methods specialized for the specific QDisc. So the expected usage is something like the following.

LQLStatsQDiscHTB *statsHTB = NULL;
statsHTB = lql_qdisc_htb_get_stats(LQL_QDISC(htb));
g_print("Bytes: %i\n", lql_stats_get_enqueued_bytes(LQL_STATS(statsHTB)));
g_print("Packets: %i\n", lql_stats_get_enqueued_packets(LQL_STATS(statsHTB)));

Once the QDisc statistics features are done I will begin on the classes.

Linux QoS Library (LQL) Released

It has finally happened. I have gotten a release of the Linux QoS Library (LQL) out the door.

Releasing software is actually a bit of nerve racking process. The worst part is not creating the announcement emails or filling out Freshmeat‘s forms, the worst part is worrying about what has been forgotten.

  • Missing files in the distribution? Hopefully, make distcheck covers that.
  • Bad or broken API documentation, ie spelling errors.
  • Not enough testing – What if it doesn’t work on other systems?
  • Design flaws – It is Free Software after all. Everyone can see your mistakes.

A big part of me would have liked to spend an indefinite amount of time to get a ‘perfect’ release, something I was really 100% happy with. However, that is against the release early, release often strategy that Free Software uses to such great effect. Besides, I would probably never be 100% happy with the code base anyway. Perhaps the single most important reason for this release is to let others know that the project exists.

The Linux QoS Library (LQL) provides a GPL licensed, GObject based C API to manipulate the network queueing disciplines, classes and classifiers in the Linux kernel. LQL does not use the TC command as a back-end. Instead, LQL communicates with the Linux kernel via Netlink sockets the same way TC does.

0.5.0 — 2004-08-30

  • Initial public release.
  • I wanted to get 100% API doc coverage and a lot more testing done before I made a public release but I decided to go with the release early, release often strategy.
  • 86% API documentation coverage. A lot of the undocumented API is for the U32 classifier implementation which I am not that fond of. I think this API will change quite a bit.
  • What LQL really needs is much more testing in larger applications.
  • I make absolutely no promises that any of the API will be stable. I expect the API to change as larger programs are built with it and new limitations (and bugs) are found.

Please see http://www.coverfire.com/lql/ for more information.