On Sat, 22 Jul 2023 03:36:52 +0200
"Roberto A. Foglietta" <[email protected]> wrote:

> On Fri, 21 Jul 2023 at 22:37, tito <[email protected]> wrote:
> >
> > On Fri, 21 Jul 2023 21:39:57 +0200
> > "Roberto A. Foglietta" <[email protected]> wrote:
> >
> > > To the maintainers and everyone else whom can be interested,
> > >
> [...]
> >
> > Hi,
> > seems to me that the current strings busybox implementation is faster.
> >
> [...]
> 
> @Tito, first of all thanks for the test.
> 
> The 'strings' applet into busybox is good enough for me and moreover,
> it is not about performance. The busybox installed into the system can
> theoretically be replaced but adding the only thing I am missing is
> easier. For my personal needs, this thread could be ended here.
> 
> Just for sake of completeness, I took some tests too. There are
> several ways to use 'strings' and they belong to a matrix of 2x3 cases
> in:{file, stdin} X out:{file, stdout, /dev/null}.
> 
> We can agree about the stdin case that the time of completion greatly
> depends on the way in which stdin feeds the command and among many
> ways the 'cat' is probably the most typical. Another aspect that can
> change the performances is about pre-compiled VS locally-compiled
> binaries. Therefore, the standard pre-compiled busybox has been
> introduced into the tests which finally create a 4 dimensions matrix
> like this {gnu strings, system busybox, compiled busybox, compiled
> strings} x :{file, stdin} X out:{file, stdout, /dev/null}.
> 
> Finally, we need a test function with parameters and a basic but
> reasonably accurate average calculation. Using this function over the
> above 4D matrix, I am feeling confident in saying that:
> 
> 1. there is no difference between pre-compiled and locally-compiled busybox
> 2. the busybox strings is as fast as GNU strings
> 3. the code I sent is on average 2x faster
> 4. the code I sent worst case is just 23% slower of the best of the
> others 3 cases
> 5. the code I sent best case is above 4x faster than the best of the
> others 3 cases
> 
> Here below all the information to replicate the test on different
> systems and architectures.
> 
> cat /proc/cpuinfo  | grep "model name" | tail -n1
> model name : Intel(R) Core(TM) i5-8350U CPU @ 1.70GHz
> 
> GNOME Terminal
> Version 3.44.0 for GNOME 42
> Using VTE version 0.68.0 +BIDI +GNUTLS +ICU +SYSTEMD
> 
> stats() {
> rm -f t.time
> local cmd=${1:-/usr/bin/busybox strings /usr/bin/busybox} n=${2:-100}
> for i in $(seq 1 $n); do eval time $cmd; done 2>t.time
> {
> echo
> echo "$cmd"
> sed -ne "s,real\t,min: ,p" t.time | sort -n | head -n1
> let avg=$(sed -ne "s,real\t0m0.[0]*\([0-9]*\)s,\\1,p" t.time | tr '\n' '+')0
> printf "avg: 0m0.%03ds\n" $(( (50+$avg)/100 ))
> sed -ne "s,real\t,max: ,p" t.time | sort -n | tail -n1
> } >&2
> }
> 
> =============
> 
> /usr/bin/busybox | head -n1
> BusyBox v1.30.1 (Ubuntu 1:1.30.1-7ubuntu3) multi-call binary.
> 
> rm -f 1.txt; cmd="/usr/bin/busybox strings /usr/bin/busybox";
> stats "$cmd "; stats "$cmd" >/dev/null; stats "$cmd" >1.txt
> 
> /usr/bin/busybox strings /usr/bin/busybox
> min: 0m0.067s
> avg: 0m0.090s
> max: 0m0.134s
> 
> /usr/bin/busybox strings /usr/bin/busybox
> min: 0m0.013s
> avg: 0m0.013s
> max: 0m0.016s
> 
> /usr/bin/busybox strings /usr/bin/busybox
> min: 0m0.013s
> avg: 0m0.014s
> max: 0m0.018s
> 
> rm -f 1.txt; cmd="cat /usr/bin/busybox | /usr/bin/busybox strings";
> stats "$cmd "; stats "$cmd" >/dev/null; stats "$cmd" >1.txt
> 
> cat /usr/bin/busybox | /usr/bin/busybox strings
> min: 0m0.072s
> avg: 0m0.095s
> max: 0m0.141s
> 
> cat /usr/bin/busybox | /usr/bin/busybox strings
> min: 0m0.021s
> avg: 0m0.022s
> max: 0m0.026s
> 
> cat /usr/bin/busybox | /usr/bin/busybox strings
> min: 0m0.021s
> avg: 0m0.022s
> max: 0m0.025s
> 
> =============
> 
> ./busybox | head -n1
> BusyBox v1.37.0.git (2023-07-21 15:06:26 CEST) multi-call binary.
> gcc --version | head -n1
> gcc (Ubuntu 11.3.0-1ubuntu1~22.04.1) 11.3.0
> 
> rm -f 1.txt; cmd="./busybox strings /usr/bin/busybox";
> stats "$cmd "; stats "$cmd" >/dev/null; stats "$cmd" >1.tx
> 
> ./busybox strings /usr/bin/busybox
> min: 0m0.064s
> avg: 0m0.089s
> max: 0m0.123s
> 
> ./busybox strings /usr/bin/busybox
> min: 0m0.014s
> avg: 0m0.014s
> max: 0m0.016s
> 
> ./busybox strings /usr/bin/busybox
> min: 0m0.014s
> avg: 0m0.014s
> max: 0m0.016s
> 
> rm -f 1.txt; cmd="cat /usr/bin/busybox | ./busybox strings";
> stats "$cmd "; stats "$cmd" >/dev/null; stats "$cmd" >1.txt
> 
> cat /usr/bin/busybox | ./busybox strings
> min: 0m0.075s
> avg: 0m0.098s
> max: 0m0.148s
> 
> cat /usr/bin/busybox | ./busybox strings
> min: 0m0.022s
> avg: 0m0.023s
> max: 0m0.033s
> 
> cat /usr/bin/busybox | ./busybox strings
> min: 0m0.023s
> avg: 0m0.023s
> max: 0m0.027s
> 
> =============
> 
> gcc -Wall -O3 strings.c -o strings && strip strings
> gcc --version | head -n1
> gcc (Ubuntu 11.3.0-1ubuntu1~22.04.1) 11.3.0
> 
> rm -f 1.txt; cmd="../redfishos/recovery/strings /usr/bin/busybox";
> stats "$cmd "; stats "$cmd" >/dev/null; stats "$cmd" >1.txt
> 
> ../redfishos/recovery/strings /usr/bin/busybox
> min: 0m0.015s
> avg: 0m0.040s
> max: 0m0.079s
> 
> ../redfishos/recovery/strings /usr/bin/busybox
> min: 0m0.009s
> avg: 0m0.009s
> max: 0m0.010s
> 
> ../redfishos/recovery/strings /usr/bin/busybox
> min: 0m0.009s
> avg: 0m0.010s
> max: 0m0.021s
> 
> rm -f 1.txt; cmd="cat /usr/bin/busybox | ../redfishos/recovery/strings 
> strings";
> stats "$cmd "; stats "$cmd" >/dev/null; stats "$cmd" >1.txt
> 
> cat /usr/bin/busybox | ../redfishos/recovery/strings
> min: 0m0.041s
> avg: 0m0.050s
> max: 0m0.082s
> 
> cat /usr/bin/busybox | ../redfishos/recovery/strings
> min: 0m0.017s
> avg: 0m0.017s
> max: 0m0.019s
> 
> cat /usr/bin/busybox | ../redfishos/recovery/strings
> min: 0m0.017s
> avg: 0m0.017s
> max: 0m0.024s
> 
> =============
> 
> strings --version | head -n1
> GNU strings (GNU Binutils for Ubuntu) 2.38
> 
> rm -f 1.txt; cmd="strings /usr/bin/busybox";
> stats "$cmd "; stats "$cmd" >/dev/null; stats "$cmd" >1.txt
> 
> strings /usr/bin/busybox
> min: 0m0.073s
> avg: 0m0.097s
> max: 0m0.136s
> 
> strings /usr/bin/busybox
> min: 0m0.020s
> avg: 0m0.021s
> max: 0m0.024s
> 
> strings /usr/bin/busybox
> min: 0m0.021s
> avg: 0m0.021s
> max: 0m0.026s
> 
> rm -f 1.txt; cmd="cat /usr/bin/busybox | strings";
> stats "$cmd "; stats "$cmd" >/dev/null; stats "$cmd" >1.txt
> 
> cat /usr/bin/busybox | strings
> min: 0m0.077s
> avg: 0m0.103s
> max: 0m0.140s
> 
> cat /usr/bin/busybox | strings
> min: 0m0.029s
> avg: 0m0.029s
> max: 0m0.039s
> 
> cat /usr/bin/busybox | strings
> min: 0m0.029s
> avg: 0m0.029s
> max: 0m0.037s

Hi,
I just adopted the test in the PERFORMANCE section of your source

** PERFORMANCES ***************************************************************
 *
 * gcc -Wall -O3 strings.orig.c -o strings && strip strings
 * rm -f [12].txt
 * time   strings /usr/bin/busybox >1.txt
 * real 0m0.035s
 * time ./strings /usr/bin/busybox >2.txt
 * real 0m1.843s
 * 
 * gcc -Wall -O3 strings.c -o strings && strip strings
 * rm -f [12].txt
 * time   strings /usr/bin/busybox >1.txt
 * real 0m0.033s
 * time ./strings /usr/bin/busybox >2.txt
 * real 0m0.011s
 *
 ** FOOTPRINT 
****************************************************************** 

Ciao,
Tito
_______________________________________________
busybox mailing list
[email protected]
http://lists.busybox.net/mailman/listinfo/busybox

Reply via email to