On Fri, 2024-12-13 at 10:54 +0100, Gabriele Monaco wrote:
> OVERHEAD COMPARISON
>
> [..]
>
> I will post another email with the scripts used to retrieve the data
> and
> more details about the runtime distribution.

This message contains the performance results produced by my scripts, which are 
attached.
The tracing is done via bpftrace while a simple bash script is spawning and 
killing the loads.

>From the histograms it's easier to see the distribution of the durations and 
>if there are clear outliers.

TEST RESULTS ON HEAD

Running without loads on virtme-ng

@duration_max: 426
@duration_total: count 13, average 75, total 987

@durations:
[25, 30)               1 |@@@@@@@@@@@@@@@@@                                   |
[30, 35)               2 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@                  |
[35, 40)               2 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@                  |
[40, 45)               0 |                                                    |
[45, 50)               3 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@|
[50, 55)               2 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@                  |
[55, 60)               0 |                                                    |
[60, 65)               1 |@@@@@@@@@@@@@@@@@                                   |
[65, 70)               0 |                                                    |
[70, 75)               0 |                                                    |
[75, 80)               0 |                                                    |
[80, 85)               0 |                                                    |
[85, 90)               0 |                                                    |
[90, 95)               1 |@@@@@@@@@@@@@@@@@                                   |
[95, 100)              0 |                                                    |
[100, ...)             1 |@@@@@@@@@@@@@@@@@                                   |

@processes: 12
@threads: 12

Running with cpu loads on virtme-ng

@duration_max: 2508
@duration_total: count 35948, average 20, total 742603

@durations:
[10, 15)            1889 |@@@@@                                               |
[15, 20)           17278 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@|
[20, 25)           10742 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@                    |
[25, 30)            3327 |@@@@@@@@@@                                          |
[30, 35)            2350 |@@@@@@@                                             |
[35, 40)             326 |                                                    |
[40, 45)               5 |                                                    |
[45, 50)               1 |                                                    |
[50, 55)               2 |                                                    |
[55, 60)               1 |                                                    |
[60, 65)               2 |                                                    |
[65, 70)               2 |                                                    |
[70, 75)               0 |                                                    |
[75, 80)               0 |                                                    |
[80, 85)               1 |                                                    |
[85, 90)               0 |                                                    |
[90, 95)               1 |                                                    |
[95, 100)              1 |                                                    |
[100, ...)            20 |                                                    |

@processes: 129
@threads: 129

Running with fork loads on virtme-ng

@duration_max: 41
@duration_total: count 21, average 34, total 720

@durations:
[30, 35)              12 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@|
[35, 40)               8 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@                  |
[40, 45)               1 |@@@@                                                |

@processes: 3592
@threads: 3592

Running with thread loads on virtme-ng

@duration_max: 195
@duration_total: count 1286, average 31, total 41082

@durations:
(..., 10)            326 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@        |
[10, 15)              10 |@                                                   |
[15, 20)               0 |                                                    |
[20, 25)               1 |                                                    |
[25, 30)              61 |@@@@@@@@                                            |
[30, 35)             377 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@|
[35, 40)             264 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@                |
[40, 45)              65 |@@@@@@@@                                            |
[45, 50)              32 |@@@@                                                |
[50, 55)              12 |@                                                   |
[55, 60)              13 |@                                                   |
[60, 65)               7 |                                                    |
[65, 70)              10 |@                                                   |
[70, 75)              10 |@                                                   |
[75, 80)              33 |@@@@                                                |
[80, 85)              26 |@@@                                                 |
[85, 90)              13 |@                                                   |
[90, 95)               6 |                                                    |
[95, 100)              2 |                                                    |
[100, ...)            18 |@@                                                  |

@processes: 129
@threads: 4096

TEST RESULTS ON PATCH

Running without loads on virtme-ng

@duration_max: 42
@duration_total: count 20601, average 2, total 45496

@durations:
(..., 10)          20304 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@|
[10, 15)               1 |                                                    |
[15, 20)               4 |                                                    |
[20, 25)              29 |                                                    |
[25, 30)              33 |                                                    |
[30, 35)              11 |                                                    |
[35, 40)             156 |                                                    |
[40, 45)              63 |                                                    |

@processes: 12
@threads: 12

Running with cpu loads on virtme-ng

@duration_max: 774
@duration_total: count 38612, average 7, total 281558

@durations:
(..., 10)          34607 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@|
[10, 15)            2558 |@@@                                                 |
[15, 20)             735 |@                                                   |
[20, 25)             454 |                                                    |
[25, 30)             225 |                                                    |
[30, 35)              17 |                                                    |
[35, 40)               8 |                                                    |
[40, 45)               2 |                                                    |
[45, 50)               4 |                                                    |
[50, 55)               0 |                                                    |
[55, 60)               0 |                                                    |
[60, 65)               0 |                                                    |
[65, 70)               0 |                                                    |
[70, 75)               0 |                                                    |
[75, 80)               0 |                                                    |
[80, 85)               0 |                                                    |
[85, 90)               0 |                                                    |
[90, 95)               0 |                                                    |
[95, 100)              0 |                                                    |
[100, ...)             2 |                                                    |

@processes: 129
@threads: 129

Running with fork loads on virtme-ng

@duration_max: 457
@duration_total: count 45683, average 19, total 878511

@durations:
(..., 10)           8452 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@                  |
[10, 15)            7287 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@                       |
[15, 20)           12727 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@|
[20, 25)            2942 |@@@@@@@@@@@@                                        |
[25, 30)            2975 |@@@@@@@@@@@@                                        |
[30, 35)            7305 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@                       |
[35, 40)            2994 |@@@@@@@@@@@@                                        |
[40, 45)             676 |@@                                                  |
[45, 50)             180 |                                                    |
[50, 55)              57 |                                                    |
[55, 60)              19 |                                                    |
[60, 65)               6 |                                                    |
[65, 70)               4 |                                                    |
[70, 75)               2 |                                                    |
[75, 80)               5 |                                                    |
[80, 85)               6 |                                                    |
[85, 90)               4 |                                                    |
[90, 95)               5 |                                                    |
[95, 100)              2 |                                                    |
[100, ...)            34 |                                                    |

@processes: 3982
@threads: 3982

Running with thread loads on virtme-ng

@duration_max: 1046
@duration_total: count 38643, average 21, total 833034

@durations:
(..., 10)           1631 |@@@@@                                               |
[10, 15)           11027 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@              |
[15, 20)           14832 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@|
[20, 25)            1338 |@@@@                                                |
[25, 30)            1112 |@@@                                                 |
[30, 35)            3781 |@@@@@@@@@@@@@                                       |
[35, 40)            1994 |@@@@@@                                              |
[40, 45)             464 |@                                                   |
[45, 50)             262 |                                                    |
[50, 55)             200 |                                                    |
[55, 60)             294 |@                                                   |
[60, 65)             620 |@@                                                  |
[65, 70)             256 |                                                    |
[70, 75)             119 |                                                    |
[75, 80)             232 |                                                    |
[80, 85)             220 |                                                    |
[85, 90)              55 |                                                    |
[90, 95)              30 |                                                    |
[95, 100)             19 |                                                    |
[100, ...)           157 |                                                    |

@processes: 129
@threads: 4096


-- 
  Gabriele Monaco 
 Senior Software Engineer - Kernel Real Time 
 
Red Hat 
  gmon...@redhat.com    

#!/usr/bin/env bpftrace
/**
 * Print durations and invocations
 * Call this script with the duration in seconds as argument
 * e.g. bpftrace func_benchmark.bt 30
 */

//tracepoint:sched:sched_wakeup
fentry:try_to_wake_up
{
  if(args->p->mm != 0) {
    @_mms[args->p->mm] = true;
    @_processes[args->p->tgid] = true;
    @_threads[args->p->pid] = true;
  }
}

fentry:task_mm_cid_work
{
  @start[tid] = nsecs;
  @preemptions[tid] = (uint64)0;
}

fexit:task_mm_cid_work
/@start[tid]/
{
  $curr_preemption = @preempted[tid] ? @preemptions[tid] : 0;
  $duration = (nsecs - @start[tid] - $curr_preemption)/1000;
  @durations = lhist($duration, 10, 100, 5);
  @duration_total = stats($duration);
  @duration_max = max($duration);
  delete(@start[tid]);
  delete(@preemptions[tid]);
  delete(@preempted[tid]);
}

/* Support only one preemption, should be fine for non-sleeping functions */
tracepoint:sched:sched_switch
// /@start[args.prev_pid] || @start[args.next_pid]/
{
  if (@start[args.prev_pid]) {
    @preempted[args.prev_pid] = true;
    @preemptions[args.prev_pid] = nsecs;
  }
  if (@start[args.next_pid] && @preempted[args.next_pid]) {
    @preemptions[args.next_pid] = nsecs - @preemptions[args.next_pid];
  }
}

//interval:s:30
interval:s:$1
{
  exit();
}

END
{
  @mms = len(@_mms);
  @processes = len(@_processes);
  @threads = len(@_threads);
  clear(@_mms);
  clear(@_processes);
  clear(@_threads);
  clear(@start);
  clear(@preemptions);
  clear(@preempted);
}

Attachment: runtest_mm_cid.sh
Description: application/shellscript

Reply via email to