Noting for the benefit of the thread archive in case someone goes digging
and wonders if this affects other SDKs: the Java SDK
memoizes DoFnSignatures and generated DoFnInvoker classes.

Kenn

On Mon, Oct 28, 2019 at 6:59 PM Udi Meiri <eh...@google.com> wrote:

> Re: #9283 slowing down tests, ideas for slowness:
> 1. I added a lot of test cases, some with locally run pipelines.
> 2. The PR somehow changed how coders are selected, and now we're using
> less efficient ones.
> 3. New dependency funcsigs is slowing things down? (py2 only)
>
> I ran "pytest -k PipelineAnalyzerTest --profile-svg" on 2.7 and 3.7 and
> got these cool graphs (attached).
> 2.7: core:294:get_function_arguments takes 56.66% of CPU time (IIUC), gets
> called ~230k times
> 3.7: core:294:get_function_arguments 30.88%, gets called ~200k times
>
> After memoization of get_function_args_defaults:
> 2.7: core:294:get_function_arguments 20.02%
> 3.7: core:294:get_function_arguments 8.11%
>
>
> On Mon, Oct 28, 2019 at 5:38 PM Pablo Estrada <pabl...@google.com> wrote:
>
>> *not deciles, but 9-percentiles : )
>>
>> On Mon, Oct 28, 2019 at 5:31 PM Pablo Estrada <pabl...@google.com> wrote:
>>
>>> I've ran the tests in Python 2 (without cython), and used a utility to
>>> track runtime for each test method. I found some of the following things:
>>> - Total test methods run: 2665
>>> - Total test runtime: 990 seconds
>>> - Deciles of time spent:
>>>   - 1949 tests run in the first 9% of time
>>>   - 173 in the 9-18% rang3e
>>>   - 130 in the 18-27% range
>>>   - 95 in the 27-36% range
>>>   - 77
>>>   - 66
>>>   - 55
>>>   - 46
>>>   - 37
>>>   - 24
>>>   - 13 tests run in the last 9% of time. This represents about 1 minute
>>> and a half.
>>>
>>> We may be able to look at the slowest X tests, and get gradual
>>> improvements from there. Although it seems .. not dramatic ones : )
>>>
>>> FWIW I uploaded the results here:
>>> https://storage.googleapis.com/apache-beam-website-pull-requests/python-tests/nosetimes.json
>>>
>>> The slowest 13 tests were:
>>>
>>>
>>> [('apache_beam.runners.interactive.pipeline_analyzer_test.PipelineAnalyzerTest.test_basic',
>>>   5.253582000732422),
>>>
>>>  
>>> ('apache_beam.runners.interactive.interactive_runner_test.InteractiveRunnerTest.test_wordcount',
>>>   7.907713890075684),
>>>
>>>  
>>> ('apache_beam.io.gcp.bigquery_test.PipelineBasedStreamingInsertTest.test_failure_has_same_insert_ids',
>>>   5.237942934036255),
>>>  ('apache_beam.transforms.combiners_test.CombineTest.test_global_sample',
>>>   5.563946008682251),
>>>
>>>  
>>> ('apache_beam.runners.worker.sideinputs_test.EmulatedCollectionsTest.test_large_iterable_values',
>>>   5.680700063705444),
>>>
>>>  
>>> ('apache_beam.io.parquetio_test.TestParquet.test_sink_transform_multiple_row_group',
>>>   6.111238956451416),
>>>
>>>  
>>> ('apache_beam.runners.worker.statesampler_test.StateSamplerTest.test_basic_sampler',
>>>   6.007534980773926),
>>>
>>>  
>>> ('apache_beam.runners.interactive.interactive_runner_test.InteractiveRunnerTest.test_basic',
>>>   13.993916988372803),
>>>
>>>  
>>> ('apache_beam.runners.interactive.pipeline_analyzer_test.PipelineAnalyzerTest.test_read_cache_expansion',
>>>   6.3383049964904785),
>>>
>>>  
>>> ('apache_beam.runners.interactive.pipeline_analyzer_test.PipelineAnalyzerTest.test_word_count',
>>>   9.157485008239746),
>>>
>>>  
>>> ('apache_beam.runners.portability.portable_runner_test.PortableRunnerTestWithSubprocesses.test_pardo_side_and_main_outputs',
>>>   5.191173076629639),
>>>
>>>  
>>> ('apache_beam.io.vcfio_test.VcfSourceTest.test_pipeline_read_file_pattern_large',
>>>   6.2221620082855225),
>>>
>>>  ('apache_beam.io.fileio_test.WriteFilesTest.test_streaming_complex_timing',
>>>   7.7187910079956055)]
>>>
>>> On Mon, Oct 28, 2019 at 3:10 PM Pablo Estrada <pabl...@google.com>
>>> wrote:
>>>
>>>> I have written https://github.com/apache/beam/pull/9910 to reduce
>>>> FnApiRunnerTest variations.
>>>> I'm not in a rush to merge, but rather happy to start a discussion.
>>>> I'll also try to figure out if there are other tests slowing down the
>>>> suite significantly.
>>>> Best
>>>> -P.
>>>>
>>>> On Fri, Oct 25, 2019 at 7:41 PM Valentyn Tymofieiev <
>>>> valen...@google.com> wrote:
>>>>
>>>>> Thanks, Brian.
>>>>> +Udi Meiri <eh...@google.com>
>>>>> As next step, it would be good to know whether slowdown is caused by
>>>>> tests in this PR, or its effect on other tests, and to confirm that only
>>>>> Python 2 codepaths were affected.
>>>>>
>>>>> On Fri, Oct 25, 2019 at 6:35 PM Brian Hulette <bhule...@google.com>
>>>>> wrote:
>>>>>
>>>>>> I did a bisect based on the runtime of `./gradlew
>>>>>> :sdks:python:test-suites:tox:py2:testPy2Gcp` around the commits between 
>>>>>> 9/1
>>>>>> and 9/15 to see if I could find the source of the spike that happened
>>>>>> around 9/6. It looks like it was due to PR#9283 [1]. I thought maybe this
>>>>>> search would reveal some mis-guided configuration change, but as far as I
>>>>>> can tell 9283 just added a well-tested feature. I don't think there's
>>>>>> anything to learn from that... I just wanted to circle back about it in
>>>>>> case others are curious about that spike.
>>>>>>
>>>>>> I'm +1 on bumping some FnApiRunner configurations.
>>>>>>
>>>>>> Brian
>>>>>>
>>>>>> [1] https://github.com/apache/beam/pull/9283
>>>>>>
>>>>>> On Fri, Oct 25, 2019 at 4:49 PM Pablo Estrada <pabl...@google.com>
>>>>>> wrote:
>>>>>>
>>>>>>> I think it makes sense to remove some of the extra FnApiRunner
>>>>>>> configurations. Perhaps some of the multiworkers and some of the grpc
>>>>>>> versions?
>>>>>>> Best
>>>>>>> -P.
>>>>>>>
>>>>>>> On Fri, Oct 25, 2019 at 12:27 PM Robert Bradshaw <
>>>>>>> rober...@google.com> wrote:
>>>>>>>
>>>>>>>> It looks like fn_api_runner_test.py is quite expensive, taking
>>>>>>>> 10-15+
>>>>>>>> minutes on each version of Python. This test consists of a base
>>>>>>>> class
>>>>>>>> that is basically a validates runner suite, and is then run in
>>>>>>>> several
>>>>>>>> configurations, many more of which (including some expensive ones)
>>>>>>>> have been added lately.
>>>>>>>>
>>>>>>>> class FnApiRunnerTest(unittest.TestCase):
>>>>>>>> class FnApiRunnerTestWithGrpc(FnApiRunnerTest):
>>>>>>>> class FnApiRunnerTestWithGrpcMultiThreaded(FnApiRunnerTest):
>>>>>>>> class FnApiRunnerTestWithDisabledCaching(FnApiRunnerTest):
>>>>>>>> class FnApiRunnerTestWithMultiWorkers(FnApiRunnerTest):
>>>>>>>> class FnApiRunnerTestWithGrpcAndMultiWorkers(FnApiRunnerTest):
>>>>>>>> class FnApiRunnerTestWithBundleRepeat(FnApiRunnerTest):
>>>>>>>> class
>>>>>>>> FnApiRunnerTestWithBundleRepeatAndMultiWorkers(FnApiRunnerTest):
>>>>>>>>
>>>>>>>> I'm not convinced we need to run all of these permutations, or at
>>>>>>>> least not all tests in all permutations.
>>>>>>>>
>>>>>>>> On Fri, Oct 25, 2019 at 10:57 AM Valentyn Tymofieiev
>>>>>>>> <valen...@google.com> wrote:
>>>>>>>> >
>>>>>>>> > I took another look at this and precommit ITs are already running
>>>>>>>> in parallel, albeit in the same suite. However it appears Python 
>>>>>>>> precommits
>>>>>>>> became slower, especially Python 2 precommits [35 min per suite x 3
>>>>>>>> suites], see [1]. Not sure yet what caused the increase, but precommits
>>>>>>>> used to be faster. Perhaps we have added a slow test or a lot of new 
>>>>>>>> tests.
>>>>>>>> >
>>>>>>>> > [1]
>>>>>>>> https://scans.gradle.com/s/jvcw5fpqfc64k/timeline?task=ancsbov425524
>>>>>>>> >
>>>>>>>> > On Thu, Oct 24, 2019 at 4:53 PM Ahmet Altay <al...@google.com>
>>>>>>>> wrote:
>>>>>>>> >>
>>>>>>>> >> Ack. Separating precommit ITs to a different suite sounds good.
>>>>>>>> Anyone is interested in doing that?
>>>>>>>> >>
>>>>>>>> >> On Thu, Oct 24, 2019 at 2:41 PM Valentyn Tymofieiev <
>>>>>>>> valen...@google.com> wrote:
>>>>>>>> >>>
>>>>>>>> >>> This should not increase the queue time substantially, since
>>>>>>>> precommit ITs are running sequentially with precommit tests, unlike
>>>>>>>> multiple precommit tests which run in parallel to each other.
>>>>>>>> >>>
>>>>>>>> >>> The precommit ITs we run are batch and streaming wordcount
>>>>>>>> tests on Py2 and one Py3 version, so it's not a lot of tests.
>>>>>>>> >>>
>>>>>>>> >>> On Thu, Oct 24, 2019 at 1:07 PM Ahmet Altay <al...@google.com>
>>>>>>>> wrote:
>>>>>>>> >>>>
>>>>>>>> >>>> +1 to separating ITs from precommit. Downside would be, when
>>>>>>>> Chad tried to do something similar [1] it was noted that the total 
>>>>>>>> time to
>>>>>>>> run all precommit tests would increase and also potentially increase 
>>>>>>>> the
>>>>>>>> queue time.
>>>>>>>> >>>>
>>>>>>>> >>>> Another alternative, we could run a smaller set of IT tests in
>>>>>>>> precommits and run the whole suite as part of post commit tests.
>>>>>>>> >>>>
>>>>>>>> >>>> [1] https://github.com/apache/beam/pull/9642
>>>>>>>> >>>>
>>>>>>>> >>>> On Thu, Oct 24, 2019 at 12:15 PM Valentyn Tymofieiev <
>>>>>>>> valen...@google.com> wrote:
>>>>>>>> >>>>>
>>>>>>>> >>>>> One improvement could be move to Precommit IT tests into a
>>>>>>>> separate suite from precommit tests, and run it in parallel.
>>>>>>>> >>>>>
>>>>>>>> >>>>> On Thu, Oct 24, 2019 at 11:41 AM Brian Hulette <
>>>>>>>> bhule...@google.com> wrote:
>>>>>>>> >>>>>>
>>>>>>>> >>>>>> Python Precommits are taking quite a while now [1]. Just
>>>>>>>> visually it looks like the average length is 1.5h or so, but it spikes 
>>>>>>>> up
>>>>>>>> to 2h. I've had several precommit runs get aborted due to the 2 hour 
>>>>>>>> limit.
>>>>>>>> >>>>>>
>>>>>>>> >>>>>> It looks like there was a spike up above 1h back on 9/6 and
>>>>>>>> the duration has been steadily rising since then. Is there anything we 
>>>>>>>> can
>>>>>>>> do about this?
>>>>>>>> >>>>>>
>>>>>>>> >>>>>> Brian
>>>>>>>> >>>>>>
>>>>>>>> >>>>>> [1]
>>>>>>>> http://104.154.241.245/d/_TNndF2iz/pre-commit-test-latency?orgId=1&from=now-90d&to=now&fullscreen&panelId=4
>>>>>>>>
>>>>>>>

Reply via email to