
In message 1279395948-25864-1-git-send-email-wd@denx.de I wrote:
The following patch series adds some utilities (qsort and hash table based database functions) and uses these to reimplement the code used for the internal handling of environment variables.
Motivation:
- Old environment code used a pessimizing implementation:
- variable lookup used linear search => slow
- changed/added variables were added at the end, i. e. most frequently used variables had the slowest access times => slow
- each setenv() would calculate the CRC32 checksum over the whole environment block => slow
Just to give a datapoint for speed:
measured on TQM5200 (MPC5200 at 400 MHz, environment size 16 kB):
OLD implementation:
=> sete ttt 'date;for i in 0 1 2 3 4 5 6 7 8 9 ; do for j in 0 1 2 3 4 5 6 7 8 9 ; do for k in 0 1 2 3 4 5 6 7 8 9 ; do run tt ; done ; done ; done;date' => sete tt 'sete var1 xxx;sete var2 ${var1};sete var1 ${var2};sete var1;sete var2' => run tt => run ttt Date: 1910-07-17 (unknown day) Time: 22:02:31 Date: 1910-07-17 (unknown day) Time: 22:03:27
New implementation:
=> run ttt Date: 1910-07-17 (unknown day) Time: 20:45:51 Date: 1910-07-17 (unknown day) Time: 20:45:53
I. e. we have 56 versus 2 seconds.
I haven't run intensive tests, but in general I think we can see that scripts referncing environment variables will typically run faster by a factor of 10, or more.
Best regards,
Wolfgang Denk