smptests/smpload01: Improve test

Add a task producing memory traffic.  Add tasks to obtain a priority
inheritance semaphore in a synchronized way.
This commit is contained in:
Sebastian Huber
2014-03-21 09:53:15 +01:00
parent 4c36cd5b71
commit 9486566ca8
2 changed files with 512 additions and 122 deletions

View File

@@ -18,30 +18,173 @@
#include "tmacros.h"
#include <stdlib.h>
#include <stdio.h>
#include <inttypes.h>
#include <rtems.h>
#include <rtems/counter.h>
#include <rtems/profiling.h>
#include <rtems/score/smpbarrier.h>
#include <rtems/score/smplock.h>
const char rtems_test_name[] = "SMPLOAD 1";
#define CPU_COUNT 32
#define WORKER_COUNT (3 * CPU_COUNT)
#define MAX_INHERIT_OBTAIN_COUNT CPU_COUNT
struct {
rtems_id sema_prio_inherit;
rtems_id sema_prio_ceiling;
#define SEM_WORKER_COUNT (3 * CPU_COUNT)
#define INIT_PRIO 1
#define INHERIT_RELEASE_PRIO_HIGH (INIT_PRIO + 1)
#define INHERIT_OBTAIN_PRIO_BASE (INHERIT_RELEASE_PRIO_HIGH + 1)
#define INHERIT_RELEASE_PRIO_LOW (INHERIT_OBTAIN_PRIO_BASE + MAX_INHERIT_OBTAIN_COUNT)
#define LOAD_PRIO (INHERIT_RELEASE_PRIO_LOW + 1)
#define SEM_WORKER_CEILING_PRIO (LOAD_PRIO + 1)
#define SEM_WORKER_PRIO_BASE (SEM_WORKER_CEILING_PRIO + 1)
typedef struct {
rtems_id main_task_id;
rtems_id inherit_release_task_id;
rtems_id inherit_main_obtain_task_id;
rtems_id sem_worker_sem_prio_inherit;
rtems_id sem_worker_sem_prio_ceiling;
rtems_id inherit_sem;
rtems_counter_ticks inherit_obtain_delay;
SMP_barrier_Control inherit_barrier;
uint64_t inherit_obtain_counter[MAX_INHERIT_OBTAIN_COUNT];
uint64_t inherit_release_counter;
uint64_t sem_worker_counter[SEM_WORKER_COUNT];
} test_context;
static test_context test_instance = {
.inherit_barrier = SMP_BARRIER_CONTROL_INITIALIZER
};
static uint32_t simple_random(uint32_t v)
{
v *= 1664525;
v += 1013904223;
v *= 1664525;
v += 1013904223;
return v;
return v;
}
static void worker_task(rtems_task_argument arg)
static void inherit_obtain_task(rtems_task_argument arg)
{
test_context *ctx = &test_instance;
rtems_status_code sc;
SMP_barrier_State barrier_state = SMP_BARRIER_STATE_INITIALIZER;
uint32_t cpu_count = rtems_smp_get_processor_count();
rtems_counter_ticks delay = (cpu_count - 1 - arg) * ctx->inherit_obtain_delay;
while (true) {
_SMP_barrier_Wait(&ctx->inherit_barrier, &barrier_state, cpu_count);
rtems_counter_delay_ticks(delay);
/*
* FIXME: Using a smaller value for the timeout triggers bug leading to
* system corruption.
*/
sc = rtems_semaphore_obtain(ctx->inherit_sem, RTEMS_WAIT, 100);
rtems_test_assert(sc == RTEMS_TIMEOUT);
_SMP_barrier_Wait(&ctx->inherit_barrier, &barrier_state, cpu_count);
++ctx->inherit_obtain_counter[arg];
if (arg == 0) {
rtems_task_priority prio = INHERIT_RELEASE_PRIO_HIGH;
sc = rtems_task_set_priority(ctx->inherit_release_task_id, prio, &prio);
rtems_test_assert(sc == RTEMS_SUCCESSFUL);
sc = rtems_task_resume(ctx->inherit_release_task_id);
rtems_test_assert(sc == RTEMS_SUCCESSFUL);
sc = rtems_event_transient_receive(RTEMS_WAIT, RTEMS_NO_TIMEOUT);
rtems_test_assert(sc == RTEMS_SUCCESSFUL);
}
}
}
static void inherit_release_task(rtems_task_argument arg)
{
test_context *ctx = &test_instance;
rtems_status_code sc;
sc = rtems_semaphore_obtain(
ctx->inherit_sem,
RTEMS_WAIT,
RTEMS_NO_TIMEOUT
);
rtems_test_assert(sc == RTEMS_SUCCESSFUL);
sc = rtems_event_transient_send(ctx->main_task_id);
rtems_test_assert(sc == RTEMS_SUCCESSFUL);
while (true) {
rtems_task_priority prio = INHERIT_RELEASE_PRIO_LOW;
sc = rtems_task_suspend(RTEMS_SELF);
rtems_test_assert(sc == RTEMS_SUCCESSFUL);
sc = rtems_semaphore_release(ctx->inherit_sem);
rtems_test_assert(sc == RTEMS_SUCCESSFUL);
++ctx->inherit_release_counter;
sc = rtems_semaphore_obtain(
ctx->inherit_sem,
RTEMS_WAIT,
RTEMS_NO_TIMEOUT
);
rtems_test_assert(sc == RTEMS_SUCCESSFUL);
sc = rtems_task_set_priority(RTEMS_SELF, prio, &prio);
rtems_test_assert(sc == RTEMS_SUCCESSFUL);
sc = rtems_event_transient_send(ctx->inherit_main_obtain_task_id);
rtems_test_assert(sc == RTEMS_SUCCESSFUL);
}
}
static void load_task(rtems_task_argument arg)
{
size_t data_size;
volatile int *data;
volatile int dummy;
size_t n;
data_size = rtems_cache_get_data_cache_size(0);
if (data_size > 0) {
data = malloc(data_size);
rtems_test_assert(data != NULL);
} else {
data_size = sizeof(dummy);
data = &dummy;
}
n = data_size / sizeof(*data);
while (true) {
size_t i;
for (i = 0; i < n; ++i) {
data[i] = i;
}
}
}
static void sem_worker_task(rtems_task_argument arg)
{
test_context *ctx = &test_instance;
uint32_t v = arg;
while (true) {
@@ -51,9 +194,9 @@ static void worker_task(rtems_task_argument arg)
v = simple_random(v);
if ((v & 0x80000000) != 0) {
id = test_context.sema_prio_inherit;
id = ctx->sem_worker_sem_prio_inherit;
} else {
id = test_context.sema_prio_ceiling;
id = ctx->sem_worker_sem_prio_ceiling;
}
sc = rtems_semaphore_obtain(id, RTEMS_WAIT, RTEMS_NO_TIMEOUT);
@@ -64,37 +207,95 @@ static void worker_task(rtems_task_argument arg)
sc = rtems_semaphore_release(id);
rtems_test_assert(sc == RTEMS_SUCCESSFUL);
++ctx->sem_worker_counter[arg];
}
}
static int cmp(const void *ap, const void *bp)
{
const rtems_counter_ticks *a = ap;
const rtems_counter_ticks *b = bp;
return *a - *b;
}
static void get_obtain_delay_estimate(test_context *ctx)
{
rtems_counter_ticks t[32];
SMP_lock_Control lock;
ISR_Level level;
size_t n = RTEMS_ARRAY_SIZE(t);
size_t i;
_SMP_lock_Initialize(&lock, "test");
_ISR_Disable_without_giant(level);
for (i = 0; i < n; ++i) {
SMP_lock_Context lock_context;
rtems_counter_ticks a;
rtems_counter_ticks b;
a = rtems_counter_read();
_SMP_lock_ISR_disable_and_acquire(&lock, &lock_context);
b = rtems_counter_read();
_SMP_lock_Release_and_ISR_enable(&lock, &lock_context);
t[i] = rtems_counter_difference(b, a);
}
_ISR_Enable_without_giant(level);
_SMP_lock_Destroy(&lock);
qsort(&t[0], n, sizeof(t[0]), cmp);
ctx->inherit_obtain_delay = t[n / 2];
}
static void test(void)
{
test_context *ctx = &test_instance;
uint32_t i;
rtems_status_code sc;
rtems_id id;
ctx->main_task_id = rtems_task_self();
get_obtain_delay_estimate(ctx);
sc = rtems_semaphore_create(
rtems_build_name('I', 'N', 'H', 'R'),
rtems_build_name('S', 'E', 'M', 'I'),
1,
RTEMS_BINARY_SEMAPHORE | RTEMS_PRIORITY | RTEMS_INHERIT_PRIORITY,
0,
&test_context.sema_prio_inherit
&ctx->sem_worker_sem_prio_inherit
);
rtems_test_assert(sc == RTEMS_SUCCESSFUL);
sc = rtems_semaphore_create(
rtems_build_name('C', 'E', 'I', 'L'),
rtems_build_name('S', 'E', 'M', 'C'),
1,
RTEMS_BINARY_SEMAPHORE | RTEMS_PRIORITY | RTEMS_PRIORITY_CEILING,
2,
&test_context.sema_prio_ceiling
SEM_WORKER_CEILING_PRIO,
&ctx->sem_worker_sem_prio_ceiling
);
rtems_test_assert(sc == RTEMS_SUCCESSFUL);
for (i = 0; i < WORKER_COUNT; ++i) {
sc = rtems_semaphore_create(
rtems_build_name('I', 'N', 'H', 'E'),
1,
RTEMS_BINARY_SEMAPHORE | RTEMS_PRIORITY | RTEMS_INHERIT_PRIORITY,
0,
&ctx->inherit_sem
);
rtems_test_assert(sc == RTEMS_SUCCESSFUL);
for (i = 0; i < SEM_WORKER_COUNT; ++i) {
sc = rtems_task_create(
rtems_build_name('W', 'O', 'R', 'K'),
3 + i,
rtems_build_name('S', 'E', 'M', 'W'),
SEM_WORKER_PRIO_BASE + i,
RTEMS_MINIMUM_STACK_SIZE,
RTEMS_DEFAULT_MODES,
RTEMS_DEFAULT_ATTRIBUTES,
@@ -102,13 +303,84 @@ static void test(void)
);
rtems_test_assert(sc == RTEMS_SUCCESSFUL);
sc = rtems_task_start(id, worker_task, i);
sc = rtems_task_start(id, sem_worker_task, i);
rtems_test_assert(sc == RTEMS_SUCCESSFUL);
}
sc = rtems_task_wake_after(10 * rtems_clock_get_ticks_per_second());
sc = rtems_task_create(
rtems_build_name('L', 'O', 'A', 'D'),
LOAD_PRIO,
RTEMS_MINIMUM_STACK_SIZE,
RTEMS_DEFAULT_MODES,
RTEMS_DEFAULT_ATTRIBUTES,
&id
);
rtems_test_assert(sc == RTEMS_SUCCESSFUL);
sc = rtems_task_start(id, load_task, 0);
rtems_test_assert(sc == RTEMS_SUCCESSFUL);
sc = rtems_task_create(
rtems_build_name('I', 'N', 'H', 'R'),
INHERIT_RELEASE_PRIO_LOW,
RTEMS_MINIMUM_STACK_SIZE,
RTEMS_DEFAULT_MODES,
RTEMS_DEFAULT_ATTRIBUTES,
&id
);
rtems_test_assert(sc == RTEMS_SUCCESSFUL);
ctx->inherit_release_task_id = id;
sc = rtems_task_start(id, inherit_release_task, 0);
rtems_test_assert(sc == RTEMS_SUCCESSFUL);
sc = rtems_event_transient_receive(RTEMS_WAIT, RTEMS_NO_TIMEOUT);
rtems_test_assert(sc == RTEMS_SUCCESSFUL);
for (i = 0; i < rtems_smp_get_processor_count(); ++i) {
sc = rtems_task_create(
rtems_build_name('I', 'N', 'H', 'O'),
INHERIT_OBTAIN_PRIO_BASE + i,
RTEMS_MINIMUM_STACK_SIZE,
RTEMS_DEFAULT_MODES,
RTEMS_DEFAULT_ATTRIBUTES,
&id
);
rtems_test_assert(sc == RTEMS_SUCCESSFUL);
if (i == 0) {
ctx->inherit_main_obtain_task_id = id;
}
sc = rtems_task_start(id, inherit_obtain_task, i);
rtems_test_assert(sc == RTEMS_SUCCESSFUL);
}
sc = rtems_task_wake_after(30 * rtems_clock_get_ticks_per_second());
rtems_test_assert(sc == RTEMS_SUCCESSFUL);
for (i = 0; i < SEM_WORKER_COUNT; ++i) {
printf(
"semaphore worker count %2" PRIu32 ": %" PRIu64 "\n",
i,
ctx->sem_worker_counter[i]
);
}
printf(
"priority inheritance release count: %" PRIu64 "\n",
ctx->inherit_release_counter
);
for (i = 0; i < rtems_smp_get_processor_count(); ++i) {
printf(
"priority inheritance obtain count %2" PRIu32 ": %" PRIu64 "\n",
i,
ctx->inherit_obtain_counter[i]
);
}
rtems_profiling_report_xml("SMPLOAD 1", rtems_printf_plugin, NULL, 1, " ");
}
@@ -125,12 +397,18 @@ static void Init(rtems_task_argument arg)
#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
#define CONFIGURE_MICROSECONDS_PER_TICK 1000
#define CONFIGURE_SMP_APPLICATION
#define CONFIGURE_SMP_MAXIMUM_PROCESSORS CPU_COUNT
#define CONFIGURE_MAXIMUM_TASKS (1 + WORKER_COUNT)
#define CONFIGURE_MAXIMUM_SEMAPHORES 2
#define CONFIGURE_MAXIMUM_TASKS \
(1 + MAX_INHERIT_OBTAIN_COUNT + 1 + 1 + SEM_WORKER_COUNT)
#define CONFIGURE_MAXIMUM_SEMAPHORES 3
#define CONFIGURE_INIT_TASK_PRIORITY INIT_PRIO
#define CONFIGURE_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION

View File

@@ -1,168 +1,280 @@
*** TEST SMPLOAD 1 ***
*** BEGIN OF TEST SMPLOAD 1 ***
semaphore worker count 0: 14986
semaphore worker count 1: 14876
semaphore worker count 2: 9943
semaphore worker count 3: 6954
semaphore worker count 4: 3780
semaphore worker count 5: 2084
semaphore worker count 6: 1293
semaphore worker count 7: 886
semaphore worker count 8: 706
semaphore worker count 9: 487
semaphore worker count 10: 391
semaphore worker count 11: 305
semaphore worker count 12: 254
semaphore worker count 13: 218
semaphore worker count 14: 181
semaphore worker count 15: 140
semaphore worker count 16: 124
semaphore worker count 17: 107
semaphore worker count 18: 114
semaphore worker count 19: 80
semaphore worker count 20: 104
semaphore worker count 21: 66
semaphore worker count 22: 69
semaphore worker count 23: 64
semaphore worker count 24: 50
semaphore worker count 25: 47
semaphore worker count 26: 44
semaphore worker count 27: 34
semaphore worker count 28: 36
semaphore worker count 29: 33
semaphore worker count 30: 33
semaphore worker count 31: 30
semaphore worker count 32: 33
semaphore worker count 33: 29
semaphore worker count 34: 23
semaphore worker count 35: 25
semaphore worker count 36: 26
semaphore worker count 37: 15
semaphore worker count 38: 11
semaphore worker count 39: 14
semaphore worker count 40: 16
semaphore worker count 41: 11
semaphore worker count 42: 17
semaphore worker count 43: 19
semaphore worker count 44: 10
semaphore worker count 45: 16
semaphore worker count 46: 12
semaphore worker count 47: 16
semaphore worker count 48: 10
semaphore worker count 49: 23
semaphore worker count 50: 6
semaphore worker count 51: 9
semaphore worker count 52: 5
semaphore worker count 53: 16
semaphore worker count 54: 8
semaphore worker count 55: 9
semaphore worker count 56: 7
semaphore worker count 57: 6
semaphore worker count 58: 5
semaphore worker count 59: 3
semaphore worker count 60: 7
semaphore worker count 61: 6
semaphore worker count 62: 3
semaphore worker count 63: 5
semaphore worker count 64: 6
semaphore worker count 65: 8
semaphore worker count 66: 10
semaphore worker count 67: 5
semaphore worker count 68: 6
semaphore worker count 69: 7
semaphore worker count 70: 5
semaphore worker count 71: 4
semaphore worker count 72: 7
semaphore worker count 73: 6
semaphore worker count 74: 4
semaphore worker count 75: 8
semaphore worker count 76: 7
semaphore worker count 77: 6
semaphore worker count 78: 5
semaphore worker count 79: 5
semaphore worker count 80: 5
semaphore worker count 81: 2
semaphore worker count 82: 4
semaphore worker count 83: 6
semaphore worker count 84: 0
semaphore worker count 85: 0
semaphore worker count 86: 0
semaphore worker count 87: 0
semaphore worker count 88: 0
semaphore worker count 89: 0
semaphore worker count 90: 0
semaphore worker count 91: 0
semaphore worker count 92: 0
semaphore worker count 93: 0
semaphore worker count 94: 0
semaphore worker count 95: 0
priority inheritance release count: 298
priority inheritance obtain count 0: 298
priority inheritance obtain count 1: 298
priority inheritance obtain count 2: 298
priority inheritance obtain count 3: 298
<ProfilingReport name="SMPLOAD 1">
<PerCPUProfilingReport processorIndex="0">
<MaxThreadDispatchDisabledTime unit="ns">110405</MaxThreadDispatchDisabledTime>
<ThreadDispatchDisabledCount>5165</ThreadDispatchDisabledCount>
<TotalThreadDispatchDisabledTime unit="ns">170810415</TotalThreadDispatchDisabledTime>
<MaxInterruptTime unit="ns">215600</MaxInterruptTime>
<MaxInterruptDelay unit="ns">78390</MaxInterruptDelay>
<InterruptCount>1061</InterruptCount>
<TotalInterruptTime unit="ns">89412555</TotalInterruptTime>
<MaxThreadDispatchDisabledTime unit="ns">439505</MaxThreadDispatchDisabledTime>
<ThreadDispatchDisabledCount>107380</ThreadDispatchDisabledCount>
<TotalThreadDispatchDisabledTime unit="ns">2828036354</TotalThreadDispatchDisabledTime>
<MaxInterruptTime unit="ns">449825</MaxInterruptTime>
<MaxInterruptDelay unit="ns">209910</MaxInterruptDelay>
<InterruptCount>45379</InterruptCount>
<TotalInterruptTime unit="ns">468103979</TotalInterruptTime>
</PerCPUProfilingReport>
<PerCPUProfilingReport processorIndex="1">
<MaxThreadDispatchDisabledTime unit="ns">132930</MaxThreadDispatchDisabledTime>
<ThreadDispatchDisabledCount>4105</ThreadDispatchDisabledCount>
<TotalThreadDispatchDisabledTime unit="ns">142276895</TotalThreadDispatchDisabledTime>
<MaxInterruptTime unit="ns">8030</MaxInterruptTime>
<MaxThreadDispatchDisabledTime unit="ns">192520</MaxThreadDispatchDisabledTime>
<ThreadDispatchDisabledCount>107354</ThreadDispatchDisabledCount>
<TotalThreadDispatchDisabledTime unit="ns">2951472564</TotalThreadDispatchDisabledTime>
<MaxInterruptTime unit="ns">12310</MaxInterruptTime>
<MaxInterruptDelay unit="ns">0</MaxInterruptDelay>
<InterruptCount>1029</InterruptCount>
<TotalInterruptTime unit="ns">3350735</TotalInterruptTime>
<InterruptCount>24014</InterruptCount>
<TotalInterruptTime unit="ns">55580995</TotalInterruptTime>
</PerCPUProfilingReport>
<PerCPUProfilingReport processorIndex="2">
<MaxThreadDispatchDisabledTime unit="ns">96015</MaxThreadDispatchDisabledTime>
<ThreadDispatchDisabledCount>4086</ThreadDispatchDisabledCount>
<TotalThreadDispatchDisabledTime unit="ns">138497785</TotalThreadDispatchDisabledTime>
<MaxInterruptTime unit="ns">8645</MaxInterruptTime>
<MaxThreadDispatchDisabledTime unit="ns">180210</MaxThreadDispatchDisabledTime>
<ThreadDispatchDisabledCount>111122</ThreadDispatchDisabledCount>
<TotalThreadDispatchDisabledTime unit="ns">3083151549</TotalThreadDispatchDisabledTime>
<MaxInterruptTime unit="ns">10800</MaxInterruptTime>
<MaxInterruptDelay unit="ns">0</MaxInterruptDelay>
<InterruptCount>1025</InterruptCount>
<TotalInterruptTime unit="ns">3154355</TotalInterruptTime>
<InterruptCount>24595</InterruptCount>
<TotalInterruptTime unit="ns">56849370</TotalInterruptTime>
</PerCPUProfilingReport>
<PerCPUProfilingReport processorIndex="3">
<MaxThreadDispatchDisabledTime unit="ns">207895</MaxThreadDispatchDisabledTime>
<ThreadDispatchDisabledCount>4143</ThreadDispatchDisabledCount>
<TotalThreadDispatchDisabledTime unit="ns">151584650</TotalThreadDispatchDisabledTime>
<MaxInterruptTime unit="ns">11145</MaxInterruptTime>
<MaxThreadDispatchDisabledTime unit="ns">192305</MaxThreadDispatchDisabledTime>
<ThreadDispatchDisabledCount>129066</ThreadDispatchDisabledCount>
<TotalThreadDispatchDisabledTime unit="ns">160126153</TotalThreadDispatchDisabledTime>
<MaxInterruptTime unit="ns">12715</MaxInterruptTime>
<MaxInterruptDelay unit="ns">0</MaxInterruptDelay>
<InterruptCount>1122</InterruptCount>
<TotalInterruptTime unit="ns">2717540</TotalInterruptTime>
<InterruptCount>28961</InterruptCount>
<TotalInterruptTime unit="ns">66604305</TotalInterruptTime>
</PerCPUProfilingReport>
<SMPLockProfilingReport name="SMP lock stats">
<MaxAcquireTime unit="ns">7415</MaxAcquireTime>
<MaxSectionTime unit="ns">19980</MaxSectionTime>
<UsageCount>13</UsageCount>
<TotalAcquireTime unit="ns">29500</TotalAcquireTime>
<TotalSectionTime unit="ns">63445</TotalSectionTime>
<ContentionCount initialQueueLength="0">13</ContentionCount>
<MaxAcquireTime unit="ns">8305</MaxAcquireTime>
<MaxSectionTime unit="ns">21735</MaxSectionTime>
<UsageCount>16</UsageCount>
<TotalAcquireTime unit="ns">37930</TotalAcquireTime>
<TotalSectionTime unit="ns">76770</TotalSectionTime>
<ContentionCount initialQueueLength="0">16</ContentionCount>
<ContentionCount initialQueueLength="1">0</ContentionCount>
<ContentionCount initialQueueLength="2">0</ContentionCount>
<ContentionCount initialQueueLength="3">0</ContentionCount>
</SMPLockProfilingReport>
<SMPLockProfilingReport name="Giant">
<MaxAcquireTime unit="ns">430280</MaxAcquireTime>
<MaxSectionTime unit="ns">445580</MaxSectionTime>
<UsageCount>215584</UsageCount>
<TotalAcquireTime unit="ns">2553573107</TotalAcquireTime>
<TotalSectionTime unit="ns">742278475</TotalSectionTime>
<ContentionCount initialQueueLength="0">56087</ContentionCount>
<ContentionCount initialQueueLength="1">107063</ContentionCount>
<ContentionCount initialQueueLength="2">51715</ContentionCount>
<ContentionCount initialQueueLength="3">719</ContentionCount>
</SMPLockProfilingReport>
<SMPLockProfilingReport name="LEON3 IrqCtrl">
<MaxAcquireTime unit="ns">2080</MaxAcquireTime>
<MaxSectionTime unit="ns">5300</MaxSectionTime>
<MaxAcquireTime unit="ns">2340</MaxAcquireTime>
<MaxSectionTime unit="ns">5045</MaxSectionTime>
<UsageCount>3</UsageCount>
<TotalAcquireTime unit="ns">5810</TotalAcquireTime>
<TotalSectionTime unit="ns">14905</TotalSectionTime>
<TotalAcquireTime unit="ns">6355</TotalAcquireTime>
<TotalSectionTime unit="ns">13795</TotalSectionTime>
<ContentionCount initialQueueLength="0">3</ContentionCount>
<ContentionCount initialQueueLength="1">0</ContentionCount>
<ContentionCount initialQueueLength="2">0</ContentionCount>
<ContentionCount initialQueueLength="3">0</ContentionCount>
</SMPLockProfilingReport>
<SMPLockProfilingReport name="per-CPU state">
<MaxAcquireTime unit="ns">66395</MaxAcquireTime>
<MaxSectionTime unit="ns">16045</MaxSectionTime>
<MaxAcquireTime unit="ns">69505</MaxAcquireTime>
<MaxSectionTime unit="ns">17495</MaxSectionTime>
<UsageCount>12</UsageCount>
<TotalAcquireTime unit="ns">169185</TotalAcquireTime>
<TotalSectionTime unit="ns">84470</TotalSectionTime>
<TotalAcquireTime unit="ns">170575</TotalAcquireTime>
<TotalSectionTime unit="ns">92800</TotalSectionTime>
<ContentionCount initialQueueLength="0">7</ContentionCount>
<ContentionCount initialQueueLength="1">4</ContentionCount>
<ContentionCount initialQueueLength="2">1</ContentionCount>
<ContentionCount initialQueueLength="3">0</ContentionCount>
</SMPLockProfilingReport>
<SMPLockProfilingReport name="per-CPU">
<MaxAcquireTime unit="ns">27355</MaxAcquireTime>
<MaxSectionTime unit="ns">81595</MaxSectionTime>
<UsageCount>6526</UsageCount>
<TotalAcquireTime unit="ns">16099290</TotalAcquireTime>
<TotalSectionTime unit="ns">89849335</TotalSectionTime>
<ContentionCount initialQueueLength="0">5922</ContentionCount>
<ContentionCount initialQueueLength="1">604</ContentionCount>
<MaxAcquireTime unit="ns">45820</MaxAcquireTime>
<MaxSectionTime unit="ns">80520</MaxSectionTime>
<UsageCount>191623</UsageCount>
<TotalAcquireTime unit="ns">725817290</TotalAcquireTime>
<TotalSectionTime unit="ns">3761923355</TotalSectionTime>
<ContentionCount initialQueueLength="0">183684</ContentionCount>
<ContentionCount initialQueueLength="1">7939</ContentionCount>
<ContentionCount initialQueueLength="2">0</ContentionCount>
<ContentionCount initialQueueLength="3">0</ContentionCount>
</SMPLockProfilingReport>
<SMPLockProfilingReport name="per-CPU">
<MaxAcquireTime unit="ns">36025</MaxAcquireTime>
<MaxSectionTime unit="ns">146465</MaxSectionTime>
<UsageCount>5552</UsageCount>
<TotalAcquireTime unit="ns">22070045</TotalAcquireTime>
<TotalSectionTime unit="ns">74385305</TotalSectionTime>
<ContentionCount initialQueueLength="0">4629</ContentionCount>
<ContentionCount initialQueueLength="1">923</ContentionCount>
<MaxAcquireTime unit="ns">57105</MaxAcquireTime>
<MaxSectionTime unit="ns">143510</MaxSectionTime>
<UsageCount>178463</UsageCount>
<TotalAcquireTime unit="ns">839695710</TotalAcquireTime>
<TotalSectionTime unit="ns">3300422075</TotalSectionTime>
<ContentionCount initialQueueLength="0">164040</ContentionCount>
<ContentionCount initialQueueLength="1">14423</ContentionCount>
<ContentionCount initialQueueLength="2">0</ContentionCount>
<ContentionCount initialQueueLength="3">0</ContentionCount>
</SMPLockProfilingReport>
<SMPLockProfilingReport name="per-CPU">
<MaxAcquireTime unit="ns">16895</MaxAcquireTime>
<MaxSectionTime unit="ns">83280</MaxSectionTime>
<UsageCount>4728</UsageCount>
<TotalAcquireTime unit="ns">18585920</TotalAcquireTime>
<TotalSectionTime unit="ns">59083815</TotalSectionTime>
<ContentionCount initialQueueLength="0">3868</ContentionCount>
<ContentionCount initialQueueLength="1">860</ContentionCount>
<MaxAcquireTime unit="ns">53715</MaxAcquireTime>
<MaxSectionTime unit="ns">86980</MaxSectionTime>
<UsageCount>183928</UsageCount>
<TotalAcquireTime unit="ns">911318930</TotalAcquireTime>
<TotalSectionTime unit="ns">3376328605</TotalSectionTime>
<ContentionCount initialQueueLength="0">168809</ContentionCount>
<ContentionCount initialQueueLength="1">15119</ContentionCount>
<ContentionCount initialQueueLength="2">0</ContentionCount>
<ContentionCount initialQueueLength="3">0</ContentionCount>
</SMPLockProfilingReport>
<SMPLockProfilingReport name="per-CPU">
<MaxAcquireTime unit="ns">26365</MaxAcquireTime>
<MaxSectionTime unit="ns">94130</MaxSectionTime>
<UsageCount>6506</UsageCount>
<TotalAcquireTime unit="ns">17592735</TotalAcquireTime>
<TotalSectionTime unit="ns">92991200</TotalSectionTime>
<ContentionCount initialQueueLength="0">6170</ContentionCount>
<ContentionCount initialQueueLength="1">336</ContentionCount>
<MaxAcquireTime unit="ns">54975</MaxAcquireTime>
<MaxSectionTime unit="ns">115400</MaxSectionTime>
<UsageCount>214576</UsageCount>
<TotalAcquireTime unit="ns">1114797360</TotalAcquireTime>
<TotalSectionTime unit="ns">3997196165</TotalSectionTime>
<ContentionCount initialQueueLength="0">196216</ContentionCount>
<ContentionCount initialQueueLength="1">18360</ContentionCount>
<ContentionCount initialQueueLength="2">0</ContentionCount>
<ContentionCount initialQueueLength="3">0</ContentionCount>
</SMPLockProfilingReport>
<SMPLockProfilingReport name="Giant">
<MaxAcquireTime unit="ns">245180</MaxAcquireTime>
<MaxSectionTime unit="ns">232130</MaxSectionTime>
<UsageCount>10102</UsageCount>
<TotalAcquireTime unit="ns">416556635</TotalAcquireTime>
<TotalSectionTime unit="ns">529718895</TotalSectionTime>
<ContentionCount initialQueueLength="0">1950</ContentionCount>
<ContentionCount initialQueueLength="1">4735</ContentionCount>
<ContentionCount initialQueueLength="2">2441</ContentionCount>
<ContentionCount initialQueueLength="3">976</ContentionCount>
</SMPLockProfilingReport>
<SMPLockProfilingReport name="chains">
<MaxAcquireTime unit="ns">7555</MaxAcquireTime>
<MaxSectionTime unit="ns">8805</MaxSectionTime>
<UsageCount>12</UsageCount>
<TotalAcquireTime unit="ns">24785</TotalAcquireTime>
<TotalSectionTime unit="ns">28550</TotalSectionTime>
<ContentionCount initialQueueLength="0">12</ContentionCount>
<MaxAcquireTime unit="ns">5175</MaxAcquireTime>
<MaxSectionTime unit="ns">12355</MaxSectionTime>
<UsageCount>13</UsageCount>
<TotalAcquireTime unit="ns">25275</TotalAcquireTime>
<TotalSectionTime unit="ns">37815</TotalSectionTime>
<ContentionCount initialQueueLength="0">13</ContentionCount>
<ContentionCount initialQueueLength="1">0</ContentionCount>
<ContentionCount initialQueueLength="2">0</ContentionCount>
<ContentionCount initialQueueLength="3">0</ContentionCount>
</SMPLockProfilingReport>
<SMPLockProfilingReport name="TOD">
<MaxAcquireTime unit="ns">8400</MaxAcquireTime>
<MaxSectionTime unit="ns">18135</MaxSectionTime>
<UsageCount>12736</UsageCount>
<TotalAcquireTime unit="ns">36411665</TotalAcquireTime>
<TotalSectionTime unit="ns">51414560</TotalSectionTime>
<ContentionCount initialQueueLength="0">12728</ContentionCount>
<ContentionCount initialQueueLength="1">8</ContentionCount>
<MaxAcquireTime unit="ns">17910</MaxAcquireTime>
<MaxSectionTime unit="ns">24835</MaxSectionTime>
<UsageCount>255282</UsageCount>
<TotalAcquireTime unit="ns">1081011595</TotalAcquireTime>
<TotalSectionTime unit="ns">1868447965</TotalSectionTime>
<ContentionCount initialQueueLength="0">254784</ContentionCount>
<ContentionCount initialQueueLength="1">498</ContentionCount>
<ContentionCount initialQueueLength="2">0</ContentionCount>
<ContentionCount initialQueueLength="3">0</ContentionCount>
</SMPLockProfilingReport>
<SMPLockProfilingReport name="mount table entry">
<MaxAcquireTime unit="ns">2940</MaxAcquireTime>
<MaxSectionTime unit="ns">4835</MaxSectionTime>
<MaxAcquireTime unit="ns">2740</MaxAcquireTime>
<MaxSectionTime unit="ns">4520</MaxSectionTime>
<UsageCount>43</UsageCount>
<TotalAcquireTime unit="ns">74160</TotalAcquireTime>
<TotalSectionTime unit="ns">86065</TotalSectionTime>
<TotalAcquireTime unit="ns">67340</TotalAcquireTime>
<TotalSectionTime unit="ns">103785</TotalSectionTime>
<ContentionCount initialQueueLength="0">43</ContentionCount>
<ContentionCount initialQueueLength="1">0</ContentionCount>
<ContentionCount initialQueueLength="2">0</ContentionCount>
<ContentionCount initialQueueLength="3">0</ContentionCount>
</SMPLockProfilingReport>
<SMPLockProfilingReport name="thread zombies">
<MaxAcquireTime unit="ns">8490</MaxAcquireTime>
<MaxSectionTime unit="ns">12865</MaxSectionTime>
<UsageCount>103</UsageCount>
<TotalAcquireTime unit="ns">289735</TotalAcquireTime>
<TotalSectionTime unit="ns">537645</TotalSectionTime>
<ContentionCount initialQueueLength="0">103</ContentionCount>
<ContentionCount initialQueueLength="1">0</ContentionCount>
<ContentionCount initialQueueLength="2">0</ContentionCount>
<ContentionCount initialQueueLength="3">0</ContentionCount>
</SMPLockProfilingReport>
<SMPLockProfilingReport name="constructor">
<MaxAcquireTime unit="ns">9740</MaxAcquireTime>
<MaxSectionTime unit="ns">15735</MaxSectionTime>
<MaxAcquireTime unit="ns">6525</MaxAcquireTime>
<MaxSectionTime unit="ns">15660</MaxSectionTime>
<UsageCount>1</UsageCount>
<TotalAcquireTime unit="ns">9740</TotalAcquireTime>
<TotalSectionTime unit="ns">15735</TotalSectionTime>
<TotalAcquireTime unit="ns">6525</TotalAcquireTime>
<TotalSectionTime unit="ns">15660</TotalSectionTime>
<ContentionCount initialQueueLength="0">1</ContentionCount>
<ContentionCount initialQueueLength="1">0</ContentionCount>
<ContentionCount initialQueueLength="2">0</ContentionCount>