<html>
  <head>
    
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    <font size="-1">Friends,<br>
      In a program that traverse<font size="-1">s</font> a file system </font><font size="-1"><font size="-1"><font size="-1"><font size="-1"><font size="-1"><font size="-1"><font size="-1"><font size="-1">of
                    ~125000 entri<font size="-1">es </font></font></font></font></font></font></font></font>and
      adds the pathnames as keys to an </font><font size="-1">#'equal</font><font size="-1"> hash table<font size="-1">,</font></font><font size="-1"><font size="-1"><font size="-1"><font size="-1"> ccl
            hangs in CCL::LOCK-FREE-PUTHASH with no progress after <font size="-1">~14000 entries </font>- seems like it's just
            thrashing. </font></font></font>No error is thrown and I
      can interrupt it with control-C. <br>
      <font size="-1">If I add the pathnames to <font size="-1">a<font size="-1">n #'eql hash tab<font size="-1">le <font size="-1">ccl has no problem with the same dir<font size="-1">ectory<font size="-1"><font size="-1">. <br>
                      <font size="-1">Is this expected behavior<font size="-1"><font size="-1">? </font> <br>
                          <br>
                          <font size="-1">I<font size="-1"> tried the
                              same thing</font> in SBCL which works with
                            ei<font size="-1">ther an eql or <font size="-1">an equal hash table.  <font size="-1">BTW, the eql version runs in
                                  <font size="-1">~6 seconds in SBCL,
                                    compared to <font size="-1">~70
                                      seconds in CCL<font size="-1">, th<font size="-1">ough I realize this
                                          speed difference could be a
                                          memory issue and not one of
                                          algorithms. I<font size="-1">
                                            know nothing about SB<font size="-1">CL<font size="-1">.</font></font></font></font></font></font></font></font></font></font></font></font></font><br>
                    </font></font></font></font></font></font></font></font><br>
    </font><font size="-1"><font size="-1"><font size="-1"><font size="-1"><font size="-1"><font size="-1"><font size="-1"><font size="-1">I'm running ccl 1.8 on linux <font size="-1">3.2.0-33-generic Ubuntu 12.04 on a core
                      i5 thinkpad, 4GB. <br>
                    </font></font></font></font></font></font></font></font></font><br>
    <font size="-1"><font size="-1"><font size="-1"><font size="-1"><font size="-1"><font size="-1"><font size="-1"><font size="-1"><font size="-1"><font size="-1"><font size="-1">It
                          doesn't "appear" that I'm  running low on
                          memory, but the program behaves that way with
                          the equal hash table, and t<font size="-1">hough


                            I've tried <font size="-1">the various ccl
                              command-line options to increas<font size="-1">e sta<font size="-1">ck and
                                  heap allocations<font size="-1">, as
                                    well as ulimit stack size,</font>
                                  I've had no change in results.  </font></font></font></font></font></font><font size="-1"><font size="-1"><font size="-1"><font size="-1"><font size="-1"><font size="-1">I<font size="-1">'ve tried various val<font size="-1">u<font size="-1">es for
                                        init<font size="-1">ial hash
                                          table size, <font size="-1">reha<font size="-1">sh size and
                                              threshold but noth<font size="-1">ing seems to
                                                have any <font size="-1">ben<font size="-1">eficial
                                                    effect.  The system
                                                    monitor doesn't show
                                                    any <font size="-1">disk
                                                      swapping going on.</font><br>
                                                  </font></font></font></font></font></font></font></font></font></font></font></font></font></font></font><font size="-1"><font size="-1"><font size="-1"><font size="-1"><font size="-1"><font size="-1">Is
                                  there some memory parameter I'm
                                  missing that I need to change? Is
                                  there  a problem related to having 4
                                  cpu cores? </font></font></font></font></font></font><br>
                    </font></font> </font></font></font></font></font></font><br>
      Here's the typ<font size="-1">ical </font>output <font size="-1">when
        I interrupt <font size="-1">the seemingly hung program - the
          hash<font size="-1"> table won't grow beyond this point</font></font>:</font><br>
      <br>
      Welcome to Clozure Common Lisp Version 1.8-r15286M  (LinuxX8664)!<br>
      ? (traverse-filesystem "<font size="-1"><font size="-1">/home/gkhouri</font>/"</font>)<br>
      ................^C<br>
      > Break: interrupt signal<br>
      > While executing: CCL::LOCK-FREE-PUTHASH, in process
      listener(1).<br>
      ...<br>
      1 > (:f 0)<br>
       (7FB9FE90FF80) : 0 (LOCK-FREE-PUTHASH
      #P"/tmp/gkhouri-test/Documents/Music/M Stal Tunes.csv"
      #<HASH-TABLE :TEST EQUAL size 13672/13673 #x302000753F9D> T)
      613<br>
        (CCL::KEY CCL::HASH CCL::VALUE)<br>
         CCL::KEY: #P"/tmp/gkhouri-test/Documents/Music/M Stal
      Tunes.csv"<br>
         CCL::HASH: #<HASH-TABLE :TEST EQUAL size 13672/13673
      #x302000753F9D><br>
         CCL::VALUE: T<br>
      <br>
      1 > (room)<br>
      Approximately 17,432,576 bytes of memory can be allocated <br>
      before the next full GC is triggered. <br>
      <br>
                         Total Size             Free                
      Used<br>
      Lisp Heap:       41025536 (40064K)   17432576 (17024K)   23592960
      (23040K)<br>
      Stacks:          11072816 (10813K)   11055872 (10797K)      16944
      (17K)<br>
      Static:          20304144 (19828K)          0 (0K)       20304144
      (19828K)<br>
      376792.870 MB reserved for heap expansion.<br>
      <br>
      <br>
      If I create the equal hash table with :lock-free set to nil, <font size="-1"> </font>(make-hash-table :test #'equal :lock-free
      nil),  ccl presumabl<font size="-1">y uses an older hashing
        algorithm and </font>I don't think I have the problem storing
      the path<font size="-1">names</font>, BUT after about 15,000
      entries, things slow down drastically, and unacceptably,
      presumably from rehashing<font size="-1"> </font>(?), and I
      killed the prog<font size="-1">ram after about 60,000 entries
        because it was taking so long</font>. <font size="-1">With <font size="-1">:lock-free</font></font> enable<font size="-1">d, I
        never get past ~14<font size="-1">K entries. </font></font><br>
    </font><font size="-1"><font size="-1"><font size="-1"><font size="-1"><font size="-1"><font size="-1"><br>
                T<font size="-1">hanks for any info.<br>
                  <font size="-1">George Khouri</font><br>
                </font> </font></font></font></font></font><br>
      <br>
      <br>
      <br>
    </font>
  </body>
</html>