On Oct 28, 9:48 am, Robert Bradshaw <[EMAIL PROTECTED]>
wrote:
> On Oct 28, 2007, at 1:29 AM, mabshoff wrote:
>

Hi Robert,

>
>
> > For 2.8.10.alpha1+Craig's fix and python compiled using "--without-
> > pymalloc" I get with the default cleanup level 1:
>
> > ==6569== LEAK SUMMARY:
> > ==6569==    definitely lost: 181,030 bytes in 2,926 blocks.
> > ==6569==      possibly lost: 266,925 bytes in 747 blocks.
> > ==6569==    still reachable: 29,184,388 bytes in 179,707 blocks.
> > ==6569==         suppressed: 0 bytes in 0 blocks.
>
> > With cleanup level 3 in general and cleanup level 1 just for
> > integer.pyx I get
>
> > ==23818== LEAK SUMMARY:
> > ==23818==    definitely lost: 181,117 bytes in 2,927 blocks.
> > ==23818==      possibly lost: 266,838 bytes in 746 blocks.
> > ==23818==    still reachable: 29,157,453 bytes in 179,383 blocks.
> > ==23818==         suppressed: 0 bytes in 0 blocks.
>

With the patch valgrind says:

==3482== LEAK SUMMARY:
==3482==    definitely lost: 181,235 bytes in 2,929 blocks.
==3482==      possibly lost: 266,720 bytes in 744 blocks.
==3482==    still reachable: 29,157,648 bytes in 179,395 blocks.
==3482==         suppressed: 0 bytes in 0 blocks.

So the number are slightly worst.

> > So my conclusion is that you are on the right way with the cleanup
> > code.
>
> What is our goal (i.e. what is a clean python run?) It's a bit better
> but it seems like we've barely made a dent in it--are the
> dictionaries we were looking at decrefing earlier still around? (They
> could be holding onto a lot of stuff.)
>
> > Hopefully once we can compile integer.pyx with cleanup level 3
> > and not crash
>
> Try the below patch--this will prevent the double-free from the
> global dummy integer. There might be a better fix, as this will make
> it so that this integer object is never freed.

with the patch everything compiles and runs fine with cleanup level 3.

>
> > the amount of still reachable memory should decrease
> > tremendously because integer.pyx should just about be referenced in
> > every extension we have.
>
> It doesn't matter how many things reference integer.pyx, only how
> many things are referenced by integer.pyx (which isn't too much, but
> may include such things as element.pyx).
>

Ok, but I plan to actually play with this using only a couple small
modules independent of Sage in order to understand the problem better.

The only valgrind complaint I get is the following:

==3482== Invalid free() / delete / delete[]
==3482==    at 0x4A1B74A: free (vg_replace_malloc.c:320)
==3482==    by 0x43FE9A: dict_dealloc (dictobject.c:847)
==3482==    by 0x43FE9A: dict_dealloc (dictobject.c:847)
==3482==    by 0x499E5B: _PyImport_Fini (import.c:229)
==3482==    by 0x4A5D66: Py_Finalize (pythonrun.c:419)
==3482==    by 0x4A58AA: handle_system_exit (pythonrun.c:1616)
==3482==    by 0x4A5AA8: PyErr_PrintEx (pythonrun.c:1062)
==3482==    by 0x4A62B6: PyRun_SimpleFileExFlags (pythonrun.c:976)
==3482==    by 0x412319: Py_Main (main.c:134)
==3482==    by 0x4FD94C9: (below main) (in /lib/libc-2.3.6.so)
==3482==  Address 0xb2de9f8 is 32 bytes inside a block of size 80
alloc'd
==3482==    at 0x4A1BB35: malloc (vg_replace_malloc.c:207)
==3482==    by 0x4B0079: _PyObject_GC_Malloc (gcmodule.c:1321)
==3482==    by 0x454C29: PyType_GenericAlloc (typeobject.c:454)
==3482==    by 0x975D160:
__pyx_tp_new_4sage_9structure_7element_Element (element.c:14429)
==3482==    by 0xAC89AAA: __pyx_tp_new_4sage_5rings_7integer_Integer
(integer.c:14228)
==3482==    by 0x458D92: type_call (typeobject.c:422)
==3482==    by 0x415542: PyObject_Call (abstract.c:1860)
==3482==    by 0x47C480: PyEval_CallObjectWithKeywords (ceval.c:3433)
==3482==    by 0xAC85823: initinteger (integer.c:15100)
==3482==    by 0x49E17D: _PyImport_LoadDynamicModule (importdl.c:53)
==3482==    by 0x49C08D: import_submodule (import.c:2394)
==3482==    by 0x49C550: load_next (import.c:2214)

It might be related. I also get a lot of the following:

==3482== 45 bytes in 1 blocks are definitely lost in loss record 525
of 10,255
==3482==    at 0x4A1BB35: malloc (vg_replace_malloc.c:207)
==3482==    by 0x44D68B: PyString_FromString (stringobject.c:130)
==3482==    by 0x13B4DF15: __Pyx_ImportType (real_double_vector.c:
3786)
==3482==    by 0x13B52202: initreal_double_vector
(real_double_vector.c:3255)
==3482==    by 0x49E17D: _PyImport_LoadDynamicModule (importdl.c:53)
==3482==    by 0x49C08D: import_submodule (import.c:2394)
==3482==    by 0x49C550: load_next (import.c:2214)
==3482==    by 0x49C7AD: import_module_level (import.c:2002)
==3482==    by 0x49CBF4: PyImport_ImportModuleLevel (import.c:2066)
==3482==    by 0x47BEE8: builtin___import__ (bltinmodule.c:47)
==3482==    by 0x415542: PyObject_Call (abstract.c:1860)
==3482==    by 0x47C480: PyEval_CallObjectWithKeywords (ceval.c:3433)

> - Robert
>

Cheers,

Michael

>  no-collect-integer.patch
> 1KDownload


--~--~---------~--~----~------------~-------~--~----~
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