Mail Archives: cygwin/2002/06/06/00:10:58
Russ,
Something is amiss with your system or your installation.
Here's what I get running your scripts:
% time doit 1
real 0m0.972s
user 0m0.622s
sys 0m0.388s
% time doit 2
real 0m1.925s
user 0m1.513s
sys 0m0.828s
% set |egrep VER
BASH_VERSINFO=([0]="2" [1]="05a" [2]="0" [3]="3" [4]="release"
[5]="i686-pc-cygwin")
BASH_VERSION='2.05a.0(3)-release'
% uname -a
CYGWIN_NT-5.0 CLEMENS 1.3.10(0.51/3/2) 2002-02-25 11:14 i686 unknown
It might be relevant that I have a dual-processor system.
Randall Schulz
Mountain View, CA USA
At 20:31 2002-06-05, Russ Jorgensen wrote:
>Was anyone able to resolve this issue? A few weeks
>ago I posted about poor bash performance with "while
>read" loops. Maybe this is the same issue...
>
>Anyway, I hadn't upgraded my cygwin1.dll for quite a
>long time, but when I did, some of my shell scripts
>started to have horrible performance. I tracked it
>down to the "while read" loops. I wrote the following
>benchmark shell script to see how bad the problem
>really is. On my PII-333 running Win-ME, I get the
>following results:
>
># time ./doit 1
>
>real 0m3.555s
>user 0m0.000s
>sys 0m0.000s
>
># time ./doit 2
>
>real 0m22.870s
>user 0m0.000s
>sys 0m0.000s
>
>When I run the same benchmark on a linux machine, I
>don't get nearly as big a difference between the two
>runs.
>
>It would be really great if one of the crack
>programmers who work on cygwin could look into this.
>I imagine that everyone who uses cygwin would
>appreciate a performance boost!
>
>Anyway, here's the benchmark shell script. Thanks.
>
> -Russ
>
>#!/bin/bash
>
>#
># benchmark piping into "while read"
>#
># "doit 1" is the "first pass" which benchmarks
># generating output with the nested for-loops
>#
># "doit 2" is the "second pass" which adds on the
># "while read" loop
>#
>
># check usage
>if test $# -ne 1; then
> echo "usage: doit {1|2}"
> exit 1
>fi
>
># first pass: generate a bunch of output
>for i in 1 2 3 4 5 6 7 8 9 0; do
> for j in 1 2 3 4 5 6 7 8 9 0; do
> for k in 1 2 3 4 5 6 7 8 9 0; do
> for l in 1 2 3 4 5 6 7 8 9 0; do
> echo hi
> done
> done
> done
>done |
>
># second pass: the "while read" loop
>if test $1 != 2; then
> cat - > /dev/null
>else
> while read JUNK; do
> A=1
> done
>fi
--
Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple
Bug reporting: http://cygwin.com/bugs.html
Documentation: http://cygwin.com/docs.html
FAQ: http://cygwin.com/faq/
- Raw text -