As does the Go SDK. Invokers are memoized and when possible code is
generated to avoid reflection.

On Tue, Oct 29, 2019, 6:46 AM Kenneth Knowles <k...@google.com> wrote:

> 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