Jake Moilanen released [1] an updated version of his genetic library patches [2] [story [3]] for the 2.6.10 Linux kernel [story [4]]. He notes, "the major change in this version is the introduction of phenotypes. A phenotype is a set of genes the affect an observable property. In genetic-library terms, it is a set of genes that will affect a particular fitness measurement." He adds, "now multiple fitness routines can be ran for each genetic library user. Then depending on the results of a particular fitness measure, the specific genes that directly affect that fitness measure can be modified. This introduces a finer granularity that was missing in the first release of the genetic-library."
Additional improvements include a dynamic mutation rate, "if the current generation outperformed the previous generation, then the rate of mutation will go down. Conversely if the current generation performed worst then the previous generation, the mutation rate will go up." Jake points out that this should improve the situation where performance is increasing by minimizing the overhead of mutation, and conversely it should improve the handling of drastic workload changes by quickly adapting to it. Regarding performance, "SpecJBB and UnixBench are still yielding a 1-3% performance improvement, however (though it's subjective) the interactiveness has had noticeable improvements." Looking forward, some possible future improvements include utilizing pre-defined tunables, and saving tunings that performed well for a given workload allowing the algorithm to restore the tunings when the workload returns.
From: Jake Moilanen [email blocked]
To: linux-kernel
Subject: [ANNOUNCE 0/4] Genetic-lib version 0.2
Date: Tue, 15 Feb 2005 13:29:06 -0600
Here is the next release of the genetic library based against 2.6.10
kernel.
There were numerous changes from the first release, but the major change
in this version is the introduction of phenotypes. A phenotype is a set
of genes the affect an observable property. In genetic-library terms,
it is a set of genes that will affect a particular fitness measurement.
Each phenotype will have a set of children that contain genes that
affect a fitness measure.
Now multiple fitness routines can be ran for each genetic library user.
Then depending on the results of a particular fitness measure, the
specific genes that directly affect that fitness measure can be
modified. This introduces a finer granularity that was missing in the
first release of the genetic-library.
I would like to thank Peter Williams for reworking the Zaphod Scheduler
and help designing the phenotypes.
Some of the other features introduced is shifting the number of
mutations depending on how well a phenotype is performing. If the
current generation outperformed the previous generation, then the rate
of mutation will go down. Conversely if the current generation performed
worst then the previous generation, the mutation rate will go up. This
mutation rate shift will do two things. When generations are improving,
it will reduce the number unnecessary mutations and hone in on the
optimal tunables. When a workload drastically changes, the fitness
should go way down, and the mutation rate will increase in order to test
a greater space of better values quicker. This should decrease the time
it takes to adjust to a new workload. There is a limit at 45% of the
genes being mutated every generation in order to prevent the mutation
rate spiralling out of control.
SpecJBB and UnixBench are still yielding a 1-3% performance improvement,
however (though it's subjective) the interactiveness has had noticeable
improvements.
I have not broke the Anticipatory IO Scheduler down to a fine
granularity in phenotypes yet. Any assistance would be greatly
appreciated.
Currently I am hosting this project off of:
http://kernel.jakem.net [5]
[1/4 genetic-lib]: This is the base patch for the genetic algorithm.
[2/4 genetic-io-sched]: The base patch for the IO schedulers to use the
genetic library.
[3/4 genetic-as-sched]: A genetic-lib hooked anticipatory IO scheduler.
[4/4 genetic-zaphod-cpu-sched]: A hooked zaphod CPU scheduler. Depends
on the zaphod-v6.2 patch.
Thanks,
Jake
Related Links:
- Archive of above thread [6]