parallel_next_page_perf.txt

text/plain

Filename: parallel_next_page_perf.txt
Type: text/plain
Part: 0
Message: Atomics for heap_parallelscan_nextpage()
-- Unpatched select count(*) from lineitem; 71 workers
  Children      Self  Command   Shared Object         Symbol
+   99.83%     0.00%  postgres  libpthread-2.17.so    [.] __restore_rt
+   99.83%     0.00%  postgres  postgres              [.] sigusr1_handler
+   99.83%     0.00%  postgres  postgres              [.] maybe_start_bgworkers
+   99.83%     0.00%  postgres  postgres              [.] do_start_bgworker
+   99.83%     0.93%  postgres  postgres              [.] ExecProcNode
+   99.83%     0.00%  postgres  postgres              [.] StartBackgroundWorker
+   99.83%     0.00%  postgres  postgres              [.] ParallelWorkerMain
+   99.83%     0.00%  postgres  postgres              [.] ParallelQueryMain
+   99.83%     0.00%  postgres  postgres              [.] ExecutorRun
+   99.83%     0.00%  postgres  postgres              [.] standard_ExecutorRun
+   99.83%     0.00%  postgres  postgres              [.] ExecutePlan
+   99.83%     0.00%  postgres  postgres              [.] ExecAgg
+   99.69%     0.62%  postgres  postgres              [.] agg_retrieve_direct
+   91.28%     0.63%  postgres  postgres              [.] fetch_input_tuple
+   89.75%     0.17%  postgres  postgres              [.] ExecSeqScan
+   89.41%     1.07%  postgres  postgres              [.] ExecScan
+   84.46%     0.24%  postgres  postgres              [.] ExecScanFetch
+   84.26%     0.54%  postgres  postgres              [.] SeqNext
+   83.05%     0.44%  postgres  postgres              [.] heap_getnext
+   82.61%     2.00%  postgres  postgres              [.] heapgettup_pagemode
+   57.81%     0.84%  postgres  postgres              [.] heap_parallelscan_nextpage
+   53.46%    43.38%  postgres  postgres              [.] s_lock
+   21.82%     1.24%  postgres  postgres              [.] heapgetpage
+   20.69%     1.16%  postgres  postgres              [.] ReadBufferExtended
+   19.52%     0.04%  postgres  postgres              [.] ReadBuffer_common
+   13.75%     0.00%  postgres  [kernel.kallsyms]     [k] system_call_fastpath
+   11.54%     0.08%  postgres  postgres              [.] BufferAlloc
+    8.21%     8.16%  postgres  postgres              [.] tas
+    7.71%     0.03%  postgres  postgres              [.] smgrread
+    7.68%     0.02%  postgres  postgres              [.] mdread
+    7.22%     1.84%  postgres  postgres              [.] advance_aggregates
+    7.21%     0.03%  postgres  libpthread-2.17.so    [.] __read_nocancel
+    7.05%     0.02%  postgres  [kernel.kallsyms]     [k] sys_read
+    7.01%     0.02%  postgres  [kernel.kallsyms]     [k] vfs_read
+    6.88%     0.04%  postgres  [kernel.kallsyms]     [k] do_sync_read
+    6.85%     0.08%  postgres  [xfs]                 [k] xfs_file_aio_read
+    6.39%     0.01%  postgres  [kernel.kallsyms]     [k] sys_futex
+    6.39%     0.01%  postgres  [kernel.kallsyms]     [k] do_futex
+    6.27%     0.07%  postgres  [kernel.kallsyms]     [k] generic_file_aio_read
+    5.82%     0.11%  postgres  [kernel.kallsyms]     [k] get_futex_key
+    5.15%     0.07%  postgres  postgres              [.] LWLockAcquire
+    4.82%     4.82%  postgres  [kernel.kallsyms]     [k] copy_user_enhanced_fast_string
+    4.52%     4.52%  postgres  [kernel.kallsyms]     [k] _raw_spin_lock_irqsave
+    3.92%     0.09%  postgres  libpthread-2.17.so    [.] sem_wait
+    3.80%     0.02%  postgres  [kernel.kallsyms]     [k] futex_wait
+    3.61%     0.02%  postgres  [kernel.kallsyms]     [k] futex_wait_setup
+    3.34%     1.49%  postgres  postgres              [.] ExecProject
+    3.31%     3.29%  postgres  postgres              [.] tas
+    3.27%     0.10%  postgres  postgres              [.] LWLockRelease
+    3.04%     0.01%  postgres  [kernel.kallsyms]     [k] __lock_page
+    3.02%     0.09%  postgres  [kernel.kallsyms]     [k] __wait_on_bit_lock
+    3.01%     1.09%  postgres  postgres              [.] ExecProject
+    2.79%     0.06%  postgres  postgres              [.] LWLockWakeup
+    2.67%     0.06%  postgres  libpthread-2.17.so    [.] sem_post
+    2.58%     0.04%  postgres  [kernel.kallsyms]     [k] futex_wake
+    2.35%     0.02%  postgres  [kernel.kallsyms]     [k] unlock_page
+    2.31%     0.05%  postgres  [kernel.kallsyms]     [k] __wake_up_bit
+    2.26%     0.01%  postgres  [kernel.kallsyms]     [k] __wake_up
+    2.25%     0.09%  postgres  [kernel.kallsyms]     [k] prepare_to_wait_exclusive
+    2.23%     1.48%  postgres  postgres              [.] hash_search_with_hash_value
+    2.01%     1.01%  postgres  postgres              [.] advance_transition_function
+    1.85%     1.83%  postgres  postgres              [.] ExecClearTuple
+    1.28%     0.98%  postgres  postgres              [.] perform_spin_delay
+    1.14%     0.10%  postgres  postgres              [.] LWLockAttemptLock

-- Atomics patch  select count(*) from lineitem; 71 workers
+   99.58%     0.00%  postgres  postgres            [.] StartBackgroundWorker
+   99.58%     0.00%  postgres  postgres            [.] ParallelWorkerMain
+   99.58%     2.22%  postgres  postgres            [.] ExecProcNode
+   99.58%     0.00%  postgres  postgres            [.] ParallelQueryMain
+   99.58%     0.00%  postgres  postgres            [.] ExecutorRun
+   99.58%     0.00%  postgres  postgres            [.] standard_ExecutorRun
+   99.58%     0.00%  postgres  postgres            [.] ExecutePlan
+   99.58%     0.00%  postgres  postgres            [.] ExecAgg
+   99.33%     1.26%  postgres  postgres            [.] agg_retrieve_direct
+   82.33%     1.41%  postgres  postgres            [.] fetch_input_tuple
+   78.65%     0.37%  postgres  postgres            [.] ExecSeqScan
+   77.94%     1.99%  postgres  postgres            [.] ExecScan
+   69.07%     0.47%  postgres  postgres            [.] ExecScanFetch
+   68.65%     1.10%  postgres  postgres            [.] SeqNext
+   66.15%     0.89%  postgres  postgres            [.] heap_getnext
+   65.28%     4.12%  postgres  postgres            [.] heapgettup_pagemode
+   60.01%     1.99%  postgres  postgres            [.] heapgetpage
+   56.58%     0.07%  postgres  postgres            [.] ReadBufferExtended
+   56.49%     0.11%  postgres  postgres            [.] ReadBuffer_common
+   44.37%     0.00%  postgres  [kernel.kallsyms]   [k] system_call_fastpath
+   41.13%     0.18%  postgres  postgres            [.] BufferAlloc
+   30.34%     0.02%  postgres  [kernel.kallsyms]   [k] sys_futex
+   30.31%     0.02%  postgres  [kernel.kallsyms]   [k] do_futex
+   28.19%     0.50%  postgres  [kernel.kallsyms]   [k] get_futex_key
+   21.93%    21.93%  postgres  [kernel.kallsyms]   [k] _raw_spin_lock_irqsave
+   21.42%     0.15%  postgres  postgres            [.] LWLockAcquire
+   18.82%     0.33%  postgres  libpthread-2.17.so  [.] sem_wait
+   18.36%     0.08%  postgres  [kernel.kallsyms]   [k] futex_wait
+   17.67%     0.05%  postgres  [kernel.kallsyms]   [k] futex_wait_setup
+   15.32%     0.05%  postgres  [kernel.kallsyms]   [k] __lock_page
+   15.24%     0.44%  postgres  [kernel.kallsyms]   [k] __wait_on_bit_lock
+   14.76%     0.06%  postgres  postgres            [.] smgrread
+   14.70%     0.07%  postgres  postgres            [.] mdread
+   14.63%     3.64%  postgres  postgres            [.] advance_aggregates
+   13.69%     0.05%  postgres  libpthread-2.17.so  [.] __read_nocancel
+   13.60%     0.22%  postgres  postgres            [.] LWLockRelease
+   13.38%     0.05%  postgres  [kernel.kallsyms]   [k] sys_read
+   13.27%     0.06%  postgres  [kernel.kallsyms]   [k] vfs_read
+   13.01%     0.08%  postgres  [kernel.kallsyms]   [k] do_sync_read
+   12.94%     0.13%  postgres  [xfs]               [k] xfs_file_aio_read
+   12.68%     0.21%  postgres  postgres            [.] LWLockWakeup
+   12.27%     0.21%  postgres  libpthread-2.17.so  [.] sem_post
+   11.93%     0.14%  postgres  [kernel.kallsyms]   [k] futex_wake
+   11.87%     0.13%  postgres  [kernel.kallsyms]   [k] generic_file_aio_read
+   11.53%     0.48%  postgres  [kernel.kallsyms]   [k] prepare_to_wait_exclusive
+   11.17%     0.07%  postgres  [kernel.kallsyms]   [k] unlock_page
+   11.06%     0.38%  postgres  [kernel.kallsyms]   [k] __wake_up_bit
+   10.66%     0.02%  postgres  [kernel.kallsyms]   [k] __wake_up
+    9.02%     9.02%  postgres  [kernel.kallsyms]   [k] copy_user_enhanced_fast_string
+    6.13%     2.10%  postgres  postgres            [.] ExecProject
+    5.87%     2.14%  postgres  postgres            [.] ExecProject
+    4.41%     2.95%  postgres  postgres            [.] hash_search_with_hash_value
+    4.16%     2.17%  postgres  postgres            [.] advance_transition_function
+    3.59%     3.56%  postgres  postgres            [.] ExecClearTuple
+    2.38%     0.01%  postgres  [kernel.kallsyms]   [k] finish_wait
+    2.33%     0.78%  postgres  postgres            [.] ExecEvalExprSwitchContext
+    2.16%     0.21%  postgres  postgres            [.] LWLockAttemptLock
+    2.03%     2.01%  postgres  postgres            [.] ExecInterpExpr
+    1.95%     0.64%  postgres  postgres            [.] ExecEvalExprSwitchContext
+    1.83%     1.82%  postgres  postgres            [.] MemoryContextReset
+    1.76%     0.02%  postgres  postgres            [.] BufTableLookup
+    1.75%     0.91%  postgres  [kernel.kallsyms]   [k] __wake_up_common
+    1.73%     1.72%  postgres  postgres            [.] int8inc
+    1.64%     1.01%  postgres  [kernel.kallsyms]   [k] __find_get_page

-- More details on that spin lock.
-   21.93%    21.93%  postgres  [kernel.kallsyms]   [k] _raw_spin_lock_irqsave                                                                                                                                                               ▒
   - _raw_spin_lock_irqsave                                                                                                                                                                                                                  ▒
      - 48.37% prepare_to_wait_exclusive                                                                                                                                                                                                     ▒
           __wait_on_bit_lock                                                                                                                                                                                                                ▒
           __lock_page                                                                                                                                                                                                                       ▒
         + get_futex_key                                                                                                                                                                                                                     ▒
      + 39.15% __wake_up                                                                                                                                                                                                                     ▒
      + 10.37% finish_wait                                                                                                                                                                                                                   ▒
      + 1.18% pagevec_lru_move_fn                                                                                                                                                                                                            ▒
      + 0.77% try_to_wake_up           

-- Batch patch, 10 pages at a time, 71 workers.
+   99.45%     1.91%  postgres  postgres            [.] ExecProcNode
+   99.45%     0.00%  postgres  postgres            [.] ParallelWorkerMain
+   99.45%     0.00%  postgres  postgres            [.] ParallelQueryMain
+   99.45%     0.00%  postgres  postgres            [.] ExecutorRun
+   99.45%     0.00%  postgres  postgres            [.] standard_ExecutorRun
+   99.45%     0.00%  postgres  postgres            [.] ExecutePlan
+   99.45%     0.00%  postgres  postgres            [.] ExecAgg
+   99.10%     1.18%  postgres  postgres            [.] agg_retrieve_direct
+   81.94%     1.42%  postgres  postgres            [.] fetch_input_tuple
+   78.62%     0.35%  postgres  postgres            [.] ExecSeqScan
+   77.88%     2.02%  postgres  postgres            [.] ExecScan
+   69.05%     0.53%  postgres  postgres            [.] ExecScanFetch
+   68.55%     1.17%  postgres  postgres            [.] SeqNext
+   66.03%     0.93%  postgres  postgres            [.] heap_getnext
+   65.10%     4.06%  postgres  postgres            [.] heapgettup_pagemode
+   60.60%     2.02%  postgres  postgres            [.] heapgetpage
+   57.07%     0.09%  postgres  postgres            [.] ReadBufferExtended
+   56.96%     0.10%  postgres  postgres            [.] ReadBuffer_common
+   45.67%     0.01%  postgres  [kernel.kallsyms]   [k] system_call_fastpath
+   42.58%     0.19%  postgres  postgres            [.] BufferAlloc
+   32.18%     0.02%  postgres  [kernel.kallsyms]   [k] sys_futex
+   32.16%     0.02%  postgres  [kernel.kallsyms]   [k] do_futex
+   30.04%     0.28%  postgres  [kernel.kallsyms]   [k] get_futex_key
+   23.99%    23.99%  postgres  [kernel.kallsyms]   [k] _raw_spin_lock_irqsave
+   22.88%     0.15%  postgres  postgres            [.] LWLockAcquire
+   20.13%     0.30%  postgres  libpthread-2.17.so  [.] sem_wait
+   19.71%     0.08%  postgres  [kernel.kallsyms]   [k] futex_wait
+   19.05%     0.05%  postgres  [kernel.kallsyms]   [k] futex_wait_setup
+   15.98%     0.06%  postgres  [kernel.kallsyms]   [k] __lock_page
+   15.90%     0.44%  postgres  [kernel.kallsyms]   [k] __wait_on_bit_lock
+   14.70%     3.71%  postgres  postgres            [.] advance_aggregates
+   13.94%     0.21%  postgres  postgres            [.] LWLockRelease
+   13.84%     0.09%  postgres  postgres            [.] smgrread
+   13.74%     0.05%  postgres  postgres            [.] mdread
+   13.42%     0.06%  postgres  libpthread-2.17.so  [.] __read_nocancel
+   13.09%     0.19%  postgres  postgres            [.] LWLockWakeup
+   12.96%     0.05%  postgres  [kernel.kallsyms]   [k] sys_read
+   12.77%     0.08%  postgres  [kernel.kallsyms]   [k] vfs_read
+   12.71%     0.17%  postgres  libpthread-2.17.so  [.] sem_post
+   12.50%     0.08%  postgres  [kernel.kallsyms]   [k] do_sync_read
+   12.44%     0.15%  postgres  [xfs]               [k] xfs_file_aio_read
+   12.42%     0.15%  postgres  [kernel.kallsyms]   [k] futex_wake
+   12.42%     0.10%  postgres  [kernel.kallsyms]   [k] unlock_page
+   12.29%     0.42%  postgres  [kernel.kallsyms]   [k] __wake_up_bit
+   12.28%     0.48%  postgres  [kernel.kallsyms]   [k] prepare_to_wait_exclusive
+   11.85%     0.02%  postgres  [kernel.kallsyms]   [k] __wake_up
+   11.31%     0.14%  postgres  [kernel.kallsyms]   [k] generic_file_aio_read
+    8.83%     8.83%  postgres  [kernel.kallsyms]   [k] copy_user_enhanced_fast_string
+    6.25%     1.77%  postgres  postgres            [.] ExecProject
+    5.87%     2.12%  postgres  postgres            [.] ExecProject
+    3.96%     2.63%  postgres  postgres            [.] hash_search_with_hash_value
+    3.88%     2.61%  postgres  postgres            [.] advance_transition_function
+    3.53%     3.51%  postgres  postgres            [.] ExecClearTuple
+    2.81%     2.79%  postgres  postgres            [.] ExecInterpExpr
+    2.79%     0.69%  postgres  postgres            [.] ExecEvalExprSwitchContext
+    2.24%     0.02%  postgres  [kernel.kallsyms]   [k] finish_wait
+    2.16%     0.22%  postgres  postgres            [.] LWLockAttemptLock
+    2.07%     2.06%  postgres  postgres            [.] MemoryContextReset
+    2.02%     0.63%  postgres  postgres            [.] ExecEvalExprSwitchContext
+    1.59%     0.80%  postgres  [kernel.kallsyms]   [k] __wake_up_common
+    1.55%     1.54%  postgres  postgres            [.] pg_atomic_read_u32_impl
+    1.52%     0.04%  postgres  postgres            [.] pg_atomic_read_u32
+    1.51%     0.02%  postgres  postgres            [.] BufTableLookup
+    1.45%     0.07%  postgres  postgres            [.] LockBufHdr