|
From: | Vadim V. Zhytnikov |
Subject: | Re: [Gcl-devel] GCL memory allocation and GC problems |
Date: | Wed, 10 Dec 2003 20:09:52 +0300 |
User-agent: | Mozilla/5.0 (Windows; U; Windows NT 5.1; ru-RU; rv:1.5) Gecko/20031006 |
Camm Maguire ?????:
Greetings! Vadim, I'm looking at the rest of your post, but there is one part I cannot reproduce: "Vadim V. Zhytnikov" <address@hidden> writes:Test #2. Same as 1 but before allocating CONS pages I set hole size 60000 (~ half of maxpages). The result is drastically different. I allocated 60K pages for CONS with 68 GC for CONS, 0 GC for relocatable and time 40 seconds only. Hole size gradually decreases from 60K to some small value as number of CONS pages increases (CONS pages are drawn from hole). When 60K pages of hole are exhausted GCL automatically resets it value to 60K pages and after this attempt to allocate next 8K pages for CONS fails. GCL thinks for 10 minutes and crashes with message: Unrecoverable error. GBC is not enabled.What I get is an infinite loop of GC calls on cons pages, as GCL tries to allocate space to print the error message "space for cons is exhausted". Obviously this needs fixing, but could you please forward me the exact code you used to get this message? Thanks! Take care,
Test atest.lisp is attached. Load it, set hole size to 60000 and make (pass) several times - 8th (pass) should eventually result in crash. You may want to set si::*notify-gbc* to t at the very beginning or right before 8th (pass). You will see that at some point (something around 65000 CONS pages) GCL stop allocate new pages for CONS I really want to understand why. -- Vadim V. Zhytnikov <address@hidden> <address@hidden>
(si::allocate-growth 'cons 1 1000 66 33) (setq cnt 0) (si::gbc-time 0) (setq w nil) (defun pass () (progn (setq cnt (1+ cnt)) (format t "***** Starting pass #~d" cnt) (time(setq w (cons (make-list 3000000) w))) (room) (format t "***** End of pass #~d" cnt) (terpri) (format t "***** Run time: ~,2F GC time: ~,2F (~,1F%)" (/ (get-internal-run-time) 100.0) (/ (si::gbc-time) 100.0) (* (/ (si::gbc-time) (get-internal-run-time)) 100.0)) ))
[Prev in Thread] | Current Thread | [Next in Thread] |