Hello folks,

Okay, Sage's Bug Day is over. Many tickets were fixed, but I am not
writing a genral summary, but will concentrate on the memleak
situation: We made much progress, we in this case being burcin, malb,
robertwb, wstein and mabshoff. I am hoping that I did not leave
anybody working on the memleak issue out, please let me know because I
didn't reread the log, it is much too long.

So the great news first:

Sage 2.8.3.6 post Bug Day 2 + malb's fix for #566: Sage startup + quit

==983==    definitely lost: 2,516 bytes in 3 blocks.
==983==      possibly lost: 277,846 bytes in 777 blocks.
==983==    still reachable: 136,165,614 bytes in 16,977 blocks.
==983==         suppressed: 0 bytes in 0 blocks.

The Log is now about 1.6MB instead of 2.3 MB before BG2. Prior to any
of the memleak fixes the log was 5.6MB. The 3 issues left over are
already in trac, one leak of 2500 bytes is obvious to fix.

The next one was the main target and caused many of the open tickets:

 "for n in range(10,100): a=ModularSymbols(n,sign=1).decomposition();
print n, get_memory_usage()"

2.8.3rc3 or so:
==5107== LEAK SUMMARY:
==5107==    definitely lost: 14,051,359 bytes in 1,679,059 blocks.
==5107==    indirectly lost: 470,430 bytes in 12,425 blocks.
==5107==      possibly lost: 396,558 bytes in 1,064 blocks.
==5107==    still reachable: 168,316,769 bytes in 635,979 blocks.
==5107==         suppressed: 0 bytes in 0 blocks.


Sage 2.8.3.6 post Bug Day 2 + malb's fix for #566:
==865== LEAK SUMMARY:
==865==    definitely lost: 1,496,373 bytes in 113,793 blocks.
==865==    indirectly lost: 433,873 bytes in 8,106 blocks.
==865==      possibly lost: 402,206 bytes in 1,052 blocks.
==865==    still reachable: 168,114,457 bytes in 629,817 blocks.
==865==         suppressed: 0 bytes in 0 blocks.

So there is a 10 fold reduction in "definitely lost" and improvement
"still reachable". The slight increase is noise from python and also
valgrind's accounting can be a little fuzzy.

I also revisited #454:

for i in range(3):
    get_memory_usage()
    m = ModularSymbols(501,2).decomposition(3)
    del m
    ModularSymbols_clear_cache()
    get_memory_usage()

==8920== LEAK SUMMARY:
==8920==    definitely lost: 1,518,830 bytes in 183,739 blocks.
==8920==    indirectly lost: 288,408 bytes in 610 blocks.
==8920==      possibly lost: 489,439 bytes in 1,002 blocks.
==8920==    still reachable: 160,311,066 bytes in 872,845 blocks.
==8920==         suppressed: 0 bytes in 0 blocks.

#562 & #563 are still big problems, but those two account for the vast
majority of "definitely lost"

New tickets: Those are of the "still reachable" nature, i.e. reference
counts might play a role here. robertwb has written some code to help
trac those issues (see #611) and we need to do a little bit more
research before we will tackle those problems. But as you can see by
the size they are definitely worth fixing:

#620:

==8920== 1,612,736 bytes in 446 blocks are still reachable in loss
record 2,367 of 2,372
==8920==    at 0x4A05A66: malloc (vg_replace_malloc.c:207)
==8920==    by 0x210A2D65:
__pyx_f_21vector_rational_dense_21Vector_rational_dense__init
(vector_rational_dense.c:770)
==8920==    by 0x210A0DE7:
__pyx_tp_new_21vector_rational_dense_Vector_rational_dense
(vector_rational_dense.c:865)
==8920==    by 0x45A272: type_call (typeobject.c:422)
==8920==    by 0x4156A2: PyObject_Call (abstract.c:1860)
==8920==    by 0x480783: PyEval_EvalFrameEx (ceval.c:3775)
==8920==    by 0x4865EF: PyEval_EvalCodeEx (ceval.c:2831)
==8920==    by 0x4CFED0: function_call (funcobject.c:517)
==8920==    by 0x4156A2: PyObject_Call (abstract.c:1860)
==8920==    by 0x41BE0C: instancemethod_call (classobject.c:2497)
==8920==    by 0x4156A2: PyObject_Call (abstract.c:1860)
==8920==    by 0x480783: PyEval_EvalFrameEx (ceval.c:3775)

#621:
==8920== 2,603,712 bytes in 5 blocks are still reachable in loss
record 2,370 of 2,372
==8920==    at 0x4A05A66: malloc (vg_replace_malloc.c:207)
==8920==    by 0x205E1766:
__pyx_f_20matrix_integer_dense_20Matrix_integer_dense___new__
(matrix_integer_dense.c:2966)
==8920==    by 0x205E1BE0:
__pyx_tp_new_20matrix_integer_dense_Matrix_integer_dense
(matrix_integer_dense.c:17692)
==8920==    by 0x45A272: type_call (typeobject.c:422)
==8920==    by 0x4156A2: PyObject_Call (abstract.c:1860)
==8920==    by 0x480783: PyEval_EvalFrameEx (ceval.c:3775)
==8920==    by 0x4865EF: PyEval_EvalCodeEx (ceval.c:2831)
==8920==    by 0x4845B3: PyEval_EvalFrameEx (ceval.c:3660)
==8920==    by 0x4865EF: PyEval_EvalCodeEx (ceval.c:2831)
==8920==    by 0x4CFF37: function_call (funcobject.c:517)
==8920==    by 0x4156A2: PyObject_Call (abstract.c:1860)
==8920==    by 0x41BE0C: instancemethod_call (classobject.c:2497)

Cheers,

Michael


--~--~---------~--~----~------------~-------~--~----~
To post to this group, send email to sage-devel@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at http://groups.google.com/group/sage-devel
URLs: http://sage.scipy.org/sage/ and http://modular.math.washington.edu/sage/
-~----------~----~----~----~------~----~------~--~---

Reply via email to