summaryrefslogtreecommitdiffstats
path: root/testsuites/smptests/smpload01
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2014-03-21 09:53:15 +0100
committerSebastian Huber <sebastian.huber@embedded-brains.de>2014-03-21 10:52:21 +0100
commit9486566ca89de2be63a73f990b49b705990c3a9b (patch)
tree67cdfa7a4ca3855f244c8f6fc351518d94e642fc /testsuites/smptests/smpload01
parentrelnotes/intro.texi: Change rtems.com to rtems.org and update (diff)
downloadrtems-9486566ca89de2be63a73f990b49b705990c3a9b.tar.bz2
smptests/smpload01: Improve test
Add a task producing memory traffic. Add tasks to obtain a priority inheritance semaphore in a synchronized way.
Diffstat (limited to 'testsuites/smptests/smpload01')
-rw-r--r--testsuites/smptests/smpload01/init.c322
-rw-r--r--testsuites/smptests/smpload01/smpload01.scn312
2 files changed, 512 insertions, 122 deletions
diff --git a/testsuites/smptests/smpload01/init.c b/testsuites/smptests/smpload01/init.c
index 2864257a23..b26437c95d 100644
--- a/testsuites/smptests/smpload01/init.c
+++ b/testsuites/smptests/smpload01/init.c
@@ -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
+
+#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)
-struct {
- rtems_id sema_prio_inherit;
- rtems_id sema_prio_ceiling;
+#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;
+}
+
+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);
- return v;
+ sc = rtems_event_transient_receive(RTEMS_WAIT, RTEMS_NO_TIMEOUT);
+ rtems_test_assert(sc == RTEMS_SUCCESSFUL);
+ }
+ }
}
-static void worker_task(rtems_task_argument arg)
+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,141 @@ 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);
+
+ 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('S', 'E', 'M', 'W'),
+ SEM_WORKER_PRIO_BASE + i,
+ RTEMS_MINIMUM_STACK_SIZE,
+ RTEMS_DEFAULT_MODES,
+ RTEMS_DEFAULT_ATTRIBUTES,
+ &id
+ );
+ rtems_test_assert(sc == RTEMS_SUCCESSFUL);
+
+ sc = rtems_task_start(id, sem_worker_task, i);
+ rtems_test_assert(sc == RTEMS_SUCCESSFUL);
+ }
+
+ 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);
- for (i = 0; i < WORKER_COUNT; ++i) {
+ 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('W', 'O', 'R', 'K'),
- 3 + i,
+ rtems_build_name('I', 'N', 'H', 'O'),
+ INHERIT_OBTAIN_PRIO_BASE + i,
RTEMS_MINIMUM_STACK_SIZE,
RTEMS_DEFAULT_MODES,
RTEMS_DEFAULT_ATTRIBUTES,
@@ -102,13 +349,38 @@ static void test(void)
);
rtems_test_assert(sc == RTEMS_SUCCESSFUL);
- sc = rtems_task_start(id, worker_task, i);
+ 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(10 * rtems_clock_get_ticks_per_second());
+ 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
diff --git a/testsuites/smptests/smpload01/smpload01.scn b/testsuites/smptests/smpload01/smpload01.scn
index b97c719330..2110e7e130 100644
--- a/testsuites/smptests/smpload01/smpload01.scn
+++ b/testsuites/smptests/smpload01/smpload01.scn
@@ -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>