[rtems commit] smptests/smpload01: Improve test

Sebastian Huber sebh at rtems.org
Fri Mar 21 09:45:58 UTC 2014


Module:    rtems
Branch:    master
Commit:    9486566ca89de2be63a73f990b49b705990c3a9b
Changeset: http://git.rtems.org/rtems/commit/?id=9486566ca89de2be63a73f990b49b705990c3a9b

Author:    Sebastian Huber <sebastian.huber at embedded-brains.de>
Date:      Fri Mar 21 09:53:15 2014 +0100

smptests/smpload01: Improve test

Add a task producing memory traffic.  Add tasks to obtain a priority
inheritance semaphore in a synchronized way.

---

 testsuites/smptests/smpload01/init.c        |  322 +++++++++++++++++++++++++--
 testsuites/smptests/smpload01/smpload01.scn |  312 ++++++++++++++++++---------
 2 files changed, 512 insertions(+), 122 deletions(-)

diff --git a/testsuites/smptests/smpload01/init.c b/testsuites/smptests/smpload01/init.c
index 2864257..b26437c 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 b97c719..2110e7e 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>




More information about the vc mailing list