Uploaded image for project: 'Flink'
  1. Flink
  2. FLINK-20612

Add benchmarks for scheduler

    XMLWordPrintableJSON

Details

    Description

      With Flink 1.12, we failed to run large-scale jobs on our cluster. When we were trying to run the jobs, we met the exceptions like out of heap memory, taskmanager heartbeat timeout, and etc. We increased the size of heap memory and extended the heartbeat timeout, the job still failed. After the troubleshooting, we found that there are some performance bottlenecks in the jobmaster. These bottlenecks are highly related to the complexity of the topology.

      We implemented several benchmarks on these bottlenecks based on flink-benchmark. The topology of the benchmarks is a simple graph, which consists of only two vertices: one source vertex and one sink vertex. They are both connected with all-to-all blocking edges. The parallelisms of the vertices are both 8000. The execution mode is batch. The results of the benchmarks are illustrated below:

      Table 1: The result of benchmarks on bottlenecks in the jobmaster

        Time spent
      Build topology 45725.466 ms
      Init scheduling strategy 38960.602 ms
      Deploy tasks 17472.884 ms
      Calculate failover region to restart 12960.912 ms

      We'd like to propose these benchmarks for procedures related to the scheduler. There are three main benefits:

      1. They help us to understand the current status of task deployment performance and locate where the bottleneck is.
      2. We can use the benchmarks to evaluate the optimization in the future.
      3. As we run the benchmarks daily, they will help us to trace how the performance changes and locate the commit that introduces the performance regression if there is any.

      In the first version of the benchmarks, we mainly focus on the procedures we mentioned above. The methods corresponding to the procedures are:

      1. Building topology: ExecutionGraph#attachJobGraph
      2. Initializing scheduling strategies: PipelinedRegionSchedulingStrategy#init
      3. Deploying tasks: Execution#deploy
      4. Calculating failover regions: RestartPipelinedRegionFailoverStrategy#getTasksNeedingRestart

      In the benchmarks, the topology consists of two vertices: source -> sink. They are connected with all-to-all edges. The result partition type (PIPELINED and BLOCKING) should be considered separately.

      Attachments

        Issue Links

          Activity

            People

              Thesharing Zhilong Hong
              Thesharing Zhilong Hong
              Votes:
              1 Vote for this issue
              Watchers:
              12 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: