The story so far.
During the early development of the 2.3 Linux kernel, I wrote a patch
which removed a feature called "Tune PCI bridges" from kernel space,
and wrote a userspace program that provided the same functionality.
I extended this a little, by adding support for extra chipsets,
and started work making a user interface to make options selectable.
Just before I was about to make the first release of this code
(It was originally intended for inclusion in pciutils as 'tunepci')
I was made aware of a Microsoft Windows program called Powertweak.
It had features to tune CPU model specific registers, and more
importantly (to me at the time) PCI configuration space registers.
What caught my attention, was the fact that the author wanted someone
to write a Linux port of this tool.
I agreed to name my program 'Powertweak Linux' in exchange for free
hosting on powertweak.com, and also we exchanged some ideas.
Unlike the Microsoft Windows version, it was agreed, that this port
should be Opensourced, GPL'ed, and 100% free. (The Windows version
was/is commercial shareware)
As time progressed, Powertweak started to grow. More features were
requested by its users, and accomodating them became a more difficult
task. After a dozen or so revisions, Arjan van de Ven proposed using
XML for one of the features (the /proc/sys tuning).
This was included, and after realising how much it had cleaned things
up, it was decided that cleaning up the rest of the code was not
worth the effort, and a rewrite from scratch was a better option.
Modern times.
So, after sitting down for a month or so designing what we wanted from
the new code, we started hacking. 3-4 months later, the first release
of the rewrite happened. 0.99.0 came out in December 2000, and stood
way above the earlier code. Unlike its monolithic predecessor, we
now had a plugin architecture, which allowed us to include new features
without disrupting any of the other code. User interfaces would automatically
notice the addition of extra plugins, load and use them without
modification. Where we had code before that revolved around large
obscure C structures, we now had XML description files which makes
life a lot easier for adding support for new devices.
Several releases later, and we've now ironed out a lot of bugs,
and added a bunch of new plugins. So far we have backends for..
- PCI configuration space tuning.
- Adjusting block device elevator algorithms.
- Changing /proc/sys entries.
- hdparm type features (Informational only right now)
- IDE SMART status.
- CPU Model specific register tuning
- CPU MTRR registers (Informational only right now)
The future.
No-one knows what the future holds, but we've tried to predict it
a little, and started a roadmap for various features over the
next few revisions.
- 0.99.5 - Plugin dependancies. DMI backend.
Interrupt->NIC binding backend. Logging support.
- 0.99.6 - Periodic comms between UI & daemon.
Hotplug support. CPU Voltage/speed adjustment. MTRR backend.
- 0.99.7 - Clustering support (Tweak remote systems).
Other features are also planned, but these are the highlights.
These are also just a guideline, extra features may appear,
possibly even earlier than predicted. Or, they may be put
back.