[Cython] Hudson pyregr testing takes too long

Vitja Makarov vitja.makarov at gmail.com
Mon Apr 25 11:04:48 CEST 2011


2011/4/25 Stefan Behnel <stefan_ml at behnel.de>:
> Vitja Makarov, 25.04.2011 08:19:
>>
>> 2011/4/25 Stefan Behnel:
>>>
>>> Stefan Behnel, 07.04.2011 13:52:
>>>>
>>>> Stefan Behnel, 07.04.2011 13:46:
>>>>>
>>>>> I just noticed that the CPython pyregr tests have jumped up from ~14
>>>>> minutes for a run to ~4 hours when we added generator support.
>>>>>
>>>>>
>>>>>
>>>>> https://sage.math.washington.edu:8091/hudson/job/cython-devel-tests-pyregr-py26-c/buildTimeTrend
>>>>>
>>>>> I currently have no idea why that is (well, it's likely because we
>>>>> compile
>>>>> more tests now, but Vitja's branch ran the tests in ~30 minutes). It
>>>>> would
>>>>> be great if someone could find the time to analyse this problem. The
>>>>> current run time makes it basically impossible to keep these tests
>>>>> enabled.
>>>>
>>>> Ok, it looks like this is mostly an issue with the Py2.6 tests. The
>>>> Py2.7
>>>> tests take 30-45 minutes, which is very long, but not completely out of
>>>> bounds. I've disabled the Py2.6 pyregr tests for now.
>>>
>>> There seems to be a huge memory leak which almost certainly accounts for
>>> this. The Python process that runs the pyregr suite ends up with about
>>> 50GB
>>> of memory at the end, also in the latest Py3k builds.
>>>
>>> I have no idea where it may be, but it started to show when we merged the
>>> generator support. That's where I noticed the instant jump in the
>>> runtime.
>>
>> That's very strange for my branch it takes about 30 minutes that is ok.
>
> There's also a second path that's worth investigating. As part of the merge,
> there was another change that came in: the CythonPyregrTestCase
> implementation. This means that the regression tests are now being run
> differently than before. The massive memory consumption may simply be due to
> the mass of unit tests being loaded into memory.
>


   def run_test():
..................................
        try:
            module = __import__(self.module)
            if hasattr(module, 'test_main'):
                module.test_main()
        except (unittest.SkipTest, support.ResourceDenied):
            result.addSkip(self, 'ok')


It seems that all the modules stay loaded so may be they should be
unloaded with del sys.modules[module_name]?

-- 
vitja.


More information about the cython-devel mailing list