On 23 Jun 2003, Paul D. Smith wrote:
> %% Ted Stern <[EMAIL PROTECTED]> writes:
>
>   ts> My version of the "make: *** virtual memory exhausted.  Stop." bug
>   ts> occurs from trying to include 1000's of files.  It doesn't matter
>   ts> how large the files are --- what is important is the length of the
>   ts> files' pathnames.  If I allow 128 mega words (1GB) for the qsub
>   ts> job, the error occurs with about 5000 80 character filenames.  If
>   ts> I allow 16MW or 128MB for the job, the error occurs with about
>   ts> 1500 included files of about 80-character pathnames each.
>
>   ts> In earlier correspondence with Paul Smith, he indicated that he
>   ts> thought there may be a memory leak in read.c.
>
>   ts> I have verified that the bug has not been fixed in current CVS.
>
>   ts> Sure would be nice if somebody with access to purify could run it
>   ts> on GNU make ...
>
> I have run the GNU make test suite with Purify on Solaris, and valgrind
> on Linux, and neither have reported any memory leaks with the latest CVS
> code.
>
> If you have a test case that can show this problem pls. let me know.
> Thanks.

I am attaching three files that should give an idea of how to re-create the
problem.

"touchempty.ksh" creates a hierarchy of 1000 directories, each containing 10
*.mk files.

The Makefile tries to include all the 10K makefiles.

The qsub script runs the make job in a batch environment with total memory for
all processes limited by the QSUB "-lM" option.  To duplicate this outside of
a batch environment you may have to play with your shell's "limit" command.

The test directory in which I set this up was named "/ptmp/stern/testmake/",
21 leading characters, so to really duplicate this you should give your top
directory an absolute pathname of 21 characters or more.

Ted
-- 
 Ted Stern                                 Applications Group
 Cray Inc.                               office: 206-701-2182
 411 First Avenue South, Suite 600         cell: 206-383-1049
 Seattle, WA 98104-2860                     FAX: 206-701-2500

 Frango ut patefaciam -- I break that I may reveal
 (The Paleontological Society motto, equally apropos for debugging)

#!/bin/ksh
i=0
while [[ $i -lt 10 ]] ; do
   j=0
   while [[ $j -lt 10 ]] ; do
      k=0
      while [[ $k -lt 10 ]] ; do
         mkdir -p AAAA_$i/BBBB_$j/CCCC_$k
         m=0
         while [[ $m -lt 10 ]] ; do
            touch AAAA_$i/BBBB_$j/CCCC_$k/DDDD_$m.mk
            m=$((m+1))
         done
         k=$((k+1))
      done
      j=$((j+1))
   done
   i=$((i+1))
done
SHELL := /bin/ksh
ALL_INCLUDES := $(shell find `/bin/pwd`/AAAA* -name '*.mk' -print)

include $(ALL_INCLUDES)

.PHONY: all

all:
        echo "completed successfully"
#!/bin/ksh
# QSUB -lM 16Mw -lT 86400 -s /bin/ksh
# QSUB -eo -J m -me
#
cd $QSUB_WORKDIR
num_backup testmake.stdout
exec 1> testmake.stdout 2>&1
. $MODULESHOME/init/ksh
module load modules PrgEnv open open34
export PATH=$HOME/local/bin:$PATH

/ptmp/stern/make/make -R -k -d all
_______________________________________________
Bug-make mailing list
[EMAIL PROTECTED]
http://mail.gnu.org/mailman/listinfo/bug-make

Reply via email to