On Thu, 28 Jun 2012 11:12:21 +0200 Roland Mainz wrote:
> On Thu, Jun 28, 2012 at 9:28 AM, Glenn Fowler <g...@research.att.com> wrote:
> >
> > On Wed, 27 Jun 2012 12:55:56 +0200 Cedric Blancher wrote:
> >> On 21 June 2012 08:18, Roland Mainz <roland.ma...@nrubsig.org> wrote:
> >> > Hi!
> >> >
> >> > ----
> >> >
> >> > Attached (as "bigfilecommandsubstitution001.sh.txt") is a short demo
> >> > which shows a problem in ast-ksh.2012-06-12 with memory usage for
> >> > str="$( < bigfile )" (and similar usage). The problem seems to be that
> >> > a larger input file size (for example 32MB) triggers excessive memory
> >> > usage, usually well beyond 512MB on Solaris 11/AMD64.
> >> >
> >> > Running the demo triggers the following error (this comes from the
> >> > limits defined via "ulimit" in the test (e.g. we assume that a file
> >> > size of 32MB will not cause more than 64MB of extra memory usage in
> >> > ksh93 (ksh93 itself is granted 16MB for itself&&running the script,
> >> > e.g. the ulimit limits are 80MB total in this case. However even that
> >> > is very very generous)):
> >> > -- snip --
> >> > $ env - LC_ALL=C ~/bin/ksh /tmp/bigmem.sh
> >> > -rw-r--r--   1 test001  users    33226753 Jun 21 08:10 mytestfile
> >> > bigfilecommandsubstitution001.sh: line 36: storage allocator out of
> >> > space on 8486912 byte request ( region 545751040 segments 133 busy
> >> > 151:8769120:8421280 free 139:536966640:8355744 ) [Not enough space]
> >> > -- snip --
> >> >
> >> >
> >> > ----
> >> >
> >> > Bye,
> >> > Roland
> >> >
> >> > --
> >> >   __ .  . __
> >> >  (o.\ \/ /.o) roland.ma...@nrubsig.org
> >> >   \__\/\/__/  MPEG specialist, C&&JAVA&&Sun&&Unix programmer
> >> >   /O /==\ O\  TEL +49 641 3992797
> >> >  (;O/ \/ \O;)
> >> >
> >> > _______________________________________________
> >> > ast-developers mailing list
> >> > ast-developers@research.att.com
> >> > https://mailman.research.att.com/mailman/listinfo/ast-developers
> >> >
> >
> >> Glenn, David: This is still broken in ksh 2012-06-26 and is IMO
> >> showstopper because it prevents the use of larger texts in command
> >> substitutions:
> >
> >> ksh bigfile.sh
> >> -rw-r--r-- 1 ced cedhome 33226753 Jun 27 12:53 mytestfile
> >> bigfile.sh: line 35: storage allocator out of space on 2981888 byte
> >> request ( region 66813952 segments 49 busy 169:3271264:2916256 free
> >> 55:63535184:2850720 ) [Cannot allocate memory]
> >
> > this is a vmalloc fragmentation issue when mmap() is used to allocate 
> > region blocks
> > coalescing adjacent mmap() blocks is not a portable op across mmap() 
> > implementations
> > a side effect of this is fragmentation, sometimes very bad
> >
> > using mmap() instead of sbrk() by default started with the first 
> > thread-safe vmalloc
> > implementation earlier this year; the ast beta 2012-06-28, to be posted 
> > later today,
> > works around this by detecting if the current application requires 
> > thread-safety
> > (via the ast aso(3) api); if it does require thread-safe then mmap() is 
> > used,
> > otherwise it uses sbrk() (this is the case for all current ast commands), 
> > falling
> > back to mmap() only if sbrk() fails
> >
> > the next iteration of thread-safe vmalloc is currently in test phase
> > it will use sbrk() by default in a thread-safe way (only restriction - no 
> > api
> > but vmalloc(3) may call sbrk()), and the workaround above will not be needed
> >
> > 2012-06-26 beta vmalloc (and thus malloc()) can be forced to use sbrk() 
> > first by
> >        export VMALLOC_OPTIONS=break
> > use this workaround until the next beta is posted

> Erm... this does not help with the following issue:
> -- snip --
> $ dash -c 'x=$( bzcat </tmp/freedesktop.org.xml.bz2 ) ; printf "%s\n"
> "$x" | wc -c -w -l'
>   31361  102734 1713511
> $ bash -c 'x=$( bzcat </tmp/freedesktop.org.xml.bz2 ) ; printf "%s\n"
> "$x" | wc -c -w -l'
>   31361  102734 1713511
> $ ~/bin/ksh -c 'x=$( bzcat </tmp/freedesktop.org.xml.bz2 ) ; printf
> "%s\n" "$x" | wc -c -w -l'
>     9434   31534  524289

correct, I didn't say it did
if you do an strace/truss something strange is going on with read()
it gets to a point of doing 1 byte read
and then gets to succesive reads with 0 bytes returned

_______________________________________________
ast-developers mailing list
ast-developers@research.att.com
https://mailman.research.att.com/mailman/listinfo/ast-developers

Reply via email to