mirror of
https://gitlab.rtems.org/rtems/rtos/rtems.git
synced 2026-09-20 20:54:18 +08:00
tmtests/tmcontext01: New test
This commit is contained in:
@@ -3,6 +3,7 @@ ACLOCAL_AMFLAGS = -I ../aclocal
|
||||
SUBDIRS = tmck tmoverhd tm01 tm02 tm03 tm04 tm05 tm06 tm07 tm08 tm09 tm10 \
|
||||
tm11 tm12 tm13 tm14 tm15 tm16 tm17 tm18 tm19 tm20 tm21 tm22 tm23 tm24 \
|
||||
tm25 tm26 tm27 tm28 tm29 tm30
|
||||
SUBDIRS += tmcontext01
|
||||
|
||||
include $(top_srcdir)/../automake/subdirs.am
|
||||
include $(top_srcdir)/../automake/local.am
|
||||
|
||||
@@ -28,6 +28,7 @@ AC_SUBST(OPERATION_COUNT)
|
||||
|
||||
# Explicitly list all Makefiles here
|
||||
AC_CONFIG_FILES([Makefile
|
||||
tmcontext01/Makefile
|
||||
tmck/Makefile
|
||||
tmoverhd/Makefile
|
||||
tm01/Makefile
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
rtems_tests_PROGRAMS = tmcontext01
|
||||
tmcontext01_SOURCES = init.c
|
||||
|
||||
dist_rtems_tests_DATA = tmcontext01.scn tmcontext01.doc
|
||||
|
||||
include $(RTEMS_ROOT)/make/custom/@RTEMS_BSP@.cfg
|
||||
include $(top_srcdir)/../automake/compile.am
|
||||
include $(top_srcdir)/../automake/leaf.am
|
||||
|
||||
AM_CPPFLAGS += -I$(top_srcdir)/../support/include
|
||||
|
||||
LINK_OBJS = $(tmcontext01_OBJECTS)
|
||||
LINK_LIBS = $(tmcontext01_LDLIBS)
|
||||
|
||||
tmcontext01$(EXEEXT): $(tmcontext01_OBJECTS) $(tmcontext01_DEPENDENCIES)
|
||||
@rm -f tmcontext01$(EXEEXT)
|
||||
$(make-exe)
|
||||
|
||||
include $(top_srcdir)/../automake/local.am
|
||||
@@ -0,0 +1,273 @@
|
||||
/*
|
||||
* Copyright (c) 2014 embedded brains GmbH. All rights reserved.
|
||||
*
|
||||
* embedded brains GmbH
|
||||
* Dornierstr. 4
|
||||
* 82178 Puchheim
|
||||
* Germany
|
||||
* <rtems@embedded-brains.de>
|
||||
*
|
||||
* The license and distribution terms for this file may be
|
||||
* found in the file LICENSE in this distribution or at
|
||||
* http://www.rtems.com/license/LICENSE.
|
||||
*/
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#include <rtems/counter.h>
|
||||
#include <rtems.h>
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <inttypes.h>
|
||||
#include <alloca.h>
|
||||
|
||||
#include "tmacros.h"
|
||||
|
||||
#define FUNCTION_LEVELS 16
|
||||
|
||||
#define SAMPLES 123
|
||||
|
||||
#define CPU_COUNT 32
|
||||
|
||||
static rtems_counter_ticks t[SAMPLES];
|
||||
|
||||
static volatile bool always_true = true;
|
||||
|
||||
static size_t data_size;
|
||||
|
||||
static volatile int *main_data;
|
||||
|
||||
static Context_Control ctx;
|
||||
|
||||
static void dirty_data_cache(volatile int *d)
|
||||
{
|
||||
size_t n = data_size / sizeof(*d);
|
||||
size_t i;
|
||||
|
||||
for (i = 0; i < n; ++i) {
|
||||
d[i] = i;
|
||||
}
|
||||
}
|
||||
|
||||
static int prevent_opt_func(int m, int n)
|
||||
{
|
||||
if (m == 0) {
|
||||
return n + 1;
|
||||
} else if (m > 0 && n == 0) {
|
||||
return prevent_opt_func(m - 1, 1);
|
||||
} else {
|
||||
return prevent_opt_func(m - 1, prevent_opt_func(m, n - 1));
|
||||
}
|
||||
}
|
||||
|
||||
static int call_at_level(int start, int fl, int s, bool dirty)
|
||||
{
|
||||
if (fl == start) {
|
||||
/*
|
||||
* Some architectures like the SPARC have register windows. A side-effect
|
||||
* of this context switch is that we start with a fresh window set. On
|
||||
* architectures like ARM or PowerPC this context switch has no effect.
|
||||
*/
|
||||
_Context_Switch(&ctx, &ctx);
|
||||
}
|
||||
|
||||
if (fl > 0) {
|
||||
if (always_true) {
|
||||
return call_at_level(start, fl - 1, s, dirty);
|
||||
} else {
|
||||
return prevent_opt_func(fl - 1, fl - 2);
|
||||
}
|
||||
} else {
|
||||
char *volatile space;
|
||||
rtems_counter_ticks a;
|
||||
rtems_counter_ticks b;
|
||||
|
||||
if (dirty) {
|
||||
dirty_data_cache(main_data);
|
||||
rtems_cache_invalidate_entire_instruction();
|
||||
}
|
||||
|
||||
a = rtems_counter_read();
|
||||
|
||||
/* Ensure that we use an untouched stack area */
|
||||
space = alloca(1024);
|
||||
(void) space;
|
||||
|
||||
_Context_Switch(&ctx, &ctx);
|
||||
|
||||
b = rtems_counter_read();
|
||||
t[s] = rtems_counter_difference(b, a);
|
||||
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
static void load_task(rtems_task_argument arg)
|
||||
{
|
||||
volatile int *load_data = (volatile int *) arg;
|
||||
|
||||
while (true) {
|
||||
dirty_data_cache(load_data);
|
||||
}
|
||||
}
|
||||
|
||||
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 sort_t(void)
|
||||
{
|
||||
qsort(&t[0], SAMPLES, sizeof(t[0]), cmp);
|
||||
}
|
||||
|
||||
static void test_by_function_level(int fl, bool dirty)
|
||||
{
|
||||
rtems_interrupt_level level;
|
||||
rtems_interrupt_lock lock = RTEMS_INTERRUPT_LOCK_INITIALIZER;
|
||||
int s;
|
||||
uint64_t min;
|
||||
uint64_t q1;
|
||||
uint64_t q2;
|
||||
uint64_t q3;
|
||||
uint64_t max;
|
||||
|
||||
rtems_interrupt_lock_acquire(&lock, level);
|
||||
|
||||
for (s = 0; s < SAMPLES; ++s) {
|
||||
call_at_level(fl, fl, s, dirty);
|
||||
}
|
||||
|
||||
rtems_interrupt_lock_release(&lock, level);
|
||||
|
||||
sort_t();
|
||||
|
||||
min = t[0];
|
||||
q1 = t[(1 * SAMPLES) / 4];
|
||||
q2 = t[SAMPLES / 2];
|
||||
q3 = t[(3 * SAMPLES) / 4];
|
||||
max = t[SAMPLES - 1];
|
||||
|
||||
printf(
|
||||
" <Sample functionNestLevel=\"%i\">\n"
|
||||
" <Min unit=\"ns\">%" PRIu64 "</Min>"
|
||||
"<Q1 unit=\"ns\">%" PRIu64 "</Q1>"
|
||||
"<Q2 unit=\"ns\">%" PRIu64 "</Q2>"
|
||||
"<Q3 unit=\"ns\">%" PRIu64 "</Q3>"
|
||||
"<Max unit=\"ns\">%" PRIu64 "</Max>\n"
|
||||
" </Sample>\n",
|
||||
fl,
|
||||
rtems_counter_ticks_to_nanoseconds(min),
|
||||
rtems_counter_ticks_to_nanoseconds(q1),
|
||||
rtems_counter_ticks_to_nanoseconds(q2),
|
||||
rtems_counter_ticks_to_nanoseconds(q3),
|
||||
rtems_counter_ticks_to_nanoseconds(max)
|
||||
);
|
||||
}
|
||||
|
||||
static void test(bool dirty, uint32_t load)
|
||||
{
|
||||
int fl;
|
||||
|
||||
printf(
|
||||
" <ContextSwitchTest environment=\"%s\"",
|
||||
dirty ? "dirty" : "normal"
|
||||
);
|
||||
|
||||
if (load > 0) {
|
||||
printf(" load=\"%" PRIu32 "\"", load);
|
||||
}
|
||||
|
||||
printf(">\n");
|
||||
|
||||
for (fl = 0; fl < FUNCTION_LEVELS; ++fl) {
|
||||
test_by_function_level(fl, dirty);
|
||||
}
|
||||
|
||||
printf(" </ContextSwitchTest>\n");
|
||||
}
|
||||
|
||||
static void Init(rtems_task_argument arg)
|
||||
{
|
||||
uint32_t load = 0;
|
||||
|
||||
printf(
|
||||
"\n"
|
||||
"\n"
|
||||
"<?xml version=\"1.0\"?>\n"
|
||||
"<!-- *** TEST TMCONTEXT 1 *** -->\n"
|
||||
"<Test>\n"
|
||||
);
|
||||
|
||||
data_size = rtems_cache_get_data_cache_size(0);
|
||||
if (data_size > 0) {
|
||||
main_data = malloc(data_size);
|
||||
rtems_test_assert(main_data != NULL);
|
||||
}
|
||||
|
||||
test(false, load);
|
||||
test(true, load);
|
||||
|
||||
for (load = 1; load < rtems_smp_get_processor_count(); ++load) {
|
||||
rtems_status_code sc;
|
||||
rtems_id id;
|
||||
volatile int *load_data = NULL;
|
||||
|
||||
if (data_size > 0) {
|
||||
load_data = malloc(data_size);
|
||||
if (load_data == NULL) {
|
||||
load_data = main_data;
|
||||
}
|
||||
}
|
||||
|
||||
sc = rtems_task_create(
|
||||
rtems_build_name('L', 'O', 'A', 'D'),
|
||||
1,
|
||||
RTEMS_MINIMUM_STACK_SIZE,
|
||||
RTEMS_DEFAULT_MODES,
|
||||
RTEMS_DEFAULT_ATTRIBUTES,
|
||||
&id
|
||||
);
|
||||
rtems_test_assert(sc == RTEMS_SUCCESSFUL);
|
||||
|
||||
sc = rtems_task_start(id, load_task, (rtems_task_argument) load_data);
|
||||
rtems_test_assert(sc == RTEMS_SUCCESSFUL);
|
||||
|
||||
test(true, load);
|
||||
}
|
||||
|
||||
printf(
|
||||
"</Test>\n"
|
||||
"<!-- *** END OF TEST TMCONTEXT 1 *** -->\n"
|
||||
);
|
||||
|
||||
rtems_test_exit(0);
|
||||
}
|
||||
|
||||
/*
|
||||
* Do not use a clock driver, since this will disturb the test in the "normal"
|
||||
* environment.
|
||||
*/
|
||||
#define CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER
|
||||
|
||||
#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
|
||||
|
||||
#define CONFIGURE_MAXIMUM_TASKS (1 + CPU_COUNT)
|
||||
|
||||
#define CONFIGURE_INIT_TASK_STACK_SIZE (32 * 1024)
|
||||
|
||||
#define CONFIGURE_SMP_APPLICATION
|
||||
|
||||
#define CONFIGURE_SMP_MAXIMUM_PROCESSORS CPU_COUNT
|
||||
|
||||
#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
|
||||
|
||||
#define CONFIGURE_INIT
|
||||
|
||||
#include <rtems/confdefs.h>
|
||||
@@ -0,0 +1,37 @@
|
||||
#
|
||||
# Copyright (c) 2014 embedded brains GmbH. All rights reserved.
|
||||
#
|
||||
# The license and distribution terms for this file may be
|
||||
# found in the file LICENSE in this distribution or at
|
||||
# http://www.rtems.com/license/LICENSE.
|
||||
#
|
||||
|
||||
import libxml2
|
||||
from libxml2 import xmlNode
|
||||
import matplotlib.pyplot as plt
|
||||
doc = libxml2.parseFile("tmcontext01.scn")
|
||||
ctx = doc.xpathNewContext()
|
||||
|
||||
def plot(y):
|
||||
n=len(y)
|
||||
x=range(0, n)
|
||||
plt.plot(x, y)
|
||||
|
||||
plt.title("context switch timing test")
|
||||
plt.xlabel('function nest level')
|
||||
plt.ylabel('context switch time [ns]')
|
||||
|
||||
for e in ["normal", "dirty"]:
|
||||
for i in ["Min", "Q1", "Q2", "Q3", "Max"]:
|
||||
y=map(xmlNode.getContent, ctx.xpathEval("/Test/ContextSwitchTest[@environment='" + e + "' and not(@load)]/Sample/" + i))
|
||||
plot(y)
|
||||
load=1
|
||||
while load > 0:
|
||||
for i in ["Min", "Q1", "Q2", "Q3", "Max"]:
|
||||
y=map(xmlNode.getContent, ctx.xpathEval("/Test/ContextSwitchTest[@environment='dirty' and @load='" + str(load) + "']/Sample/" + i))
|
||||
if len(y) > 0:
|
||||
plot(y)
|
||||
load = load + 1
|
||||
else:
|
||||
load = 0
|
||||
plt.show()
|
||||
@@ -0,0 +1,12 @@
|
||||
This file describes the directives and concepts tested by this test set.
|
||||
|
||||
test set name: tmcontext01
|
||||
|
||||
directives:
|
||||
|
||||
- _CPU_Context_switch()
|
||||
|
||||
concepts:
|
||||
|
||||
- Measure the context switch times depending on function nest level and cache
|
||||
state.
|
||||
@@ -0,0 +1,255 @@
|
||||
<?xml version="1.0"?>
|
||||
<!-- *** TEST TMCONTEXT 1 *** -->
|
||||
<Test>
|
||||
<ContextSwitchTest environment="normal">
|
||||
<Sample functionNestLevel="0">
|
||||
<Min unit="ns">2440</Min><Q1 unit="ns">2440</Q1><Q2 unit="ns">2480</Q2><Q3 unit="ns">2480</Q3><Max unit="ns">2800</Max>
|
||||
</Sample>
|
||||
<Sample functionNestLevel="1">
|
||||
<Min unit="ns">3520</Min><Q1 unit="ns">3760</Q1><Q2 unit="ns">3800</Q2><Q3 unit="ns">3800</Q3><Max unit="ns">4120</Max>
|
||||
</Sample>
|
||||
<Sample functionNestLevel="2">
|
||||
<Min unit="ns">4280</Min><Q1 unit="ns">4720</Q1><Q2 unit="ns">4720</Q2><Q3 unit="ns">5040</Q3><Max unit="ns">5080</Max>
|
||||
</Sample>
|
||||
<Sample functionNestLevel="3">
|
||||
<Min unit="ns">5320</Min><Q1 unit="ns">5640</Q1><Q2 unit="ns">5680</Q2><Q3 unit="ns">5960</Q3><Max unit="ns">6000</Max>
|
||||
</Sample>
|
||||
<Sample functionNestLevel="4">
|
||||
<Min unit="ns">6360</Min><Q1 unit="ns">6600</Q1><Q2 unit="ns">6600</Q2><Q3 unit="ns">6920</Q3><Max unit="ns">6920</Max>
|
||||
</Sample>
|
||||
<Sample functionNestLevel="5">
|
||||
<Min unit="ns">7480</Min><Q1 unit="ns">7520</Q1><Q2 unit="ns">7840</Q2><Q3 unit="ns">7840</Q3><Max unit="ns">7880</Max>
|
||||
</Sample>
|
||||
<Sample functionNestLevel="6">
|
||||
<Min unit="ns">8480</Min><Q1 unit="ns">8480</Q1><Q2 unit="ns">8800</Q2><Q3 unit="ns">8800</Q3><Max unit="ns">8840</Max>
|
||||
</Sample>
|
||||
<Sample functionNestLevel="7">
|
||||
<Min unit="ns">8840</Min><Q1 unit="ns">8960</Q1><Q2 unit="ns">9280</Q2><Q3 unit="ns">9280</Q3><Max unit="ns">9320</Max>
|
||||
</Sample>
|
||||
<Sample functionNestLevel="8">
|
||||
<Min unit="ns">8920</Min><Q1 unit="ns">8960</Q1><Q2 unit="ns">9280</Q2><Q3 unit="ns">9280</Q3><Max unit="ns">9320</Max>
|
||||
</Sample>
|
||||
<Sample functionNestLevel="9">
|
||||
<Min unit="ns">8920</Min><Q1 unit="ns">8960</Q1><Q2 unit="ns">8960</Q2><Q3 unit="ns">9280</Q3><Max unit="ns">9280</Max>
|
||||
</Sample>
|
||||
<Sample functionNestLevel="10">
|
||||
<Min unit="ns">8800</Min><Q1 unit="ns">8960</Q1><Q2 unit="ns">9240</Q2><Q3 unit="ns">9280</Q3><Max unit="ns">9280</Max>
|
||||
</Sample>
|
||||
<Sample functionNestLevel="11">
|
||||
<Min unit="ns">8920</Min><Q1 unit="ns">8960</Q1><Q2 unit="ns">9280</Q2><Q3 unit="ns">9280</Q3><Max unit="ns">9280</Max>
|
||||
</Sample>
|
||||
<Sample functionNestLevel="12">
|
||||
<Min unit="ns">8920</Min><Q1 unit="ns">8960</Q1><Q2 unit="ns">9240</Q2><Q3 unit="ns">9280</Q3><Max unit="ns">9320</Max>
|
||||
</Sample>
|
||||
<Sample functionNestLevel="13">
|
||||
<Min unit="ns">8920</Min><Q1 unit="ns">8960</Q1><Q2 unit="ns">9240</Q2><Q3 unit="ns">9280</Q3><Max unit="ns">9280</Max>
|
||||
</Sample>
|
||||
<Sample functionNestLevel="14">
|
||||
<Min unit="ns">8920</Min><Q1 unit="ns">8960</Q1><Q2 unit="ns">9240</Q2><Q3 unit="ns">9280</Q3><Max unit="ns">9280</Max>
|
||||
</Sample>
|
||||
<Sample functionNestLevel="15">
|
||||
<Min unit="ns">8920</Min><Q1 unit="ns">8960</Q1><Q2 unit="ns">8960</Q2><Q3 unit="ns">9280</Q3><Max unit="ns">9280</Max>
|
||||
</Sample>
|
||||
</ContextSwitchTest>
|
||||
<ContextSwitchTest environment="dirty">
|
||||
<Sample functionNestLevel="0">
|
||||
<Min unit="ns">9720</Min><Q1 unit="ns">10560</Q1><Q2 unit="ns">10600</Q2><Q3 unit="ns">10680</Q3><Max unit="ns">11160</Max>
|
||||
</Sample>
|
||||
<Sample functionNestLevel="1">
|
||||
<Min unit="ns">11840</Min><Q1 unit="ns">12280</Q1><Q2 unit="ns">12560</Q2><Q3 unit="ns">12600</Q3><Max unit="ns">12640</Max>
|
||||
</Sample>
|
||||
<Sample functionNestLevel="2">
|
||||
<Min unit="ns">12880</Min><Q1 unit="ns">13560</Q1><Q2 unit="ns">13600</Q2><Q3 unit="ns">13640</Q3><Max unit="ns">13680</Max>
|
||||
</Sample>
|
||||
<Sample functionNestLevel="3">
|
||||
<Min unit="ns">13960</Min><Q1 unit="ns">14640</Q1><Q2 unit="ns">14680</Q2><Q3 unit="ns">14720</Q3><Max unit="ns">14720</Max>
|
||||
</Sample>
|
||||
<Sample functionNestLevel="4">
|
||||
<Min unit="ns">15000</Min><Q1 unit="ns">15680</Q1><Q2 unit="ns">15760</Q2><Q3 unit="ns">15760</Q3><Max unit="ns">15800</Max>
|
||||
</Sample>
|
||||
<Sample functionNestLevel="5">
|
||||
<Min unit="ns">16320</Min><Q1 unit="ns">16720</Q1><Q2 unit="ns">16800</Q2><Q3 unit="ns">16800</Q3><Max unit="ns">17040</Max>
|
||||
</Sample>
|
||||
<Sample functionNestLevel="6">
|
||||
<Min unit="ns">17320</Min><Q1 unit="ns">17560</Q1><Q2 unit="ns">17800</Q2><Q3 unit="ns">17880</Q3><Max unit="ns">18160</Max>
|
||||
</Sample>
|
||||
<Sample functionNestLevel="7">
|
||||
<Min unit="ns">17440</Min><Q1 unit="ns">17800</Q1><Q2 unit="ns">17840</Q2><Q3 unit="ns">17880</Q3><Max unit="ns">18160</Max>
|
||||
</Sample>
|
||||
<Sample functionNestLevel="8">
|
||||
<Min unit="ns">17360</Min><Q1 unit="ns">17800</Q1><Q2 unit="ns">17840</Q2><Q3 unit="ns">17880</Q3><Max unit="ns">18200</Max>
|
||||
</Sample>
|
||||
<Sample functionNestLevel="9">
|
||||
<Min unit="ns">17400</Min><Q1 unit="ns">17800</Q1><Q2 unit="ns">17840</Q2><Q3 unit="ns">17880</Q3><Max unit="ns">18120</Max>
|
||||
</Sample>
|
||||
<Sample functionNestLevel="10">
|
||||
<Min unit="ns">17320</Min><Q1 unit="ns">17800</Q1><Q2 unit="ns">17840</Q2><Q3 unit="ns">17880</Q3><Max unit="ns">18200</Max>
|
||||
</Sample>
|
||||
<Sample functionNestLevel="11">
|
||||
<Min unit="ns">17360</Min><Q1 unit="ns">17840</Q1><Q2 unit="ns">17840</Q2><Q3 unit="ns">17880</Q3><Max unit="ns">18160</Max>
|
||||
</Sample>
|
||||
<Sample functionNestLevel="12">
|
||||
<Min unit="ns">17360</Min><Q1 unit="ns">17800</Q1><Q2 unit="ns">17840</Q2><Q3 unit="ns">17880</Q3><Max unit="ns">18160</Max>
|
||||
</Sample>
|
||||
<Sample functionNestLevel="13">
|
||||
<Min unit="ns">17360</Min><Q1 unit="ns">17800</Q1><Q2 unit="ns">17840</Q2><Q3 unit="ns">17880</Q3><Max unit="ns">18200</Max>
|
||||
</Sample>
|
||||
<Sample functionNestLevel="14">
|
||||
<Min unit="ns">17760</Min><Q1 unit="ns">17840</Q1><Q2 unit="ns">17840</Q2><Q3 unit="ns">17880</Q3><Max unit="ns">18200</Max>
|
||||
</Sample>
|
||||
<Sample functionNestLevel="15">
|
||||
<Min unit="ns">17360</Min><Q1 unit="ns">17800</Q1><Q2 unit="ns">17840</Q2><Q3 unit="ns">17880</Q3><Max unit="ns">18200</Max>
|
||||
</Sample>
|
||||
</ContextSwitchTest>
|
||||
<ContextSwitchTest environment="dirty" load="1">
|
||||
<Sample functionNestLevel="0">
|
||||
<Min unit="ns">23800</Min><Q1 unit="ns">24440</Q1><Q2 unit="ns">24640</Q2><Q3 unit="ns">24720</Q3><Max unit="ns">25080</Max>
|
||||
</Sample>
|
||||
<Sample functionNestLevel="1">
|
||||
<Min unit="ns">28040</Min><Q1 unit="ns">28560</Q1><Q2 unit="ns">28640</Q2><Q3 unit="ns">28680</Q3><Max unit="ns">28720</Max>
|
||||
</Sample>
|
||||
<Sample functionNestLevel="2">
|
||||
<Min unit="ns">31600</Min><Q1 unit="ns">32160</Q1><Q2 unit="ns">32160</Q2><Q3 unit="ns">32200</Q3><Max unit="ns">32280</Max>
|
||||
</Sample>
|
||||
<Sample functionNestLevel="3">
|
||||
<Min unit="ns">35400</Min><Q1 unit="ns">35720</Q1><Q2 unit="ns">35760</Q2><Q3 unit="ns">35920</Q3><Max unit="ns">36080</Max>
|
||||
</Sample>
|
||||
<Sample functionNestLevel="4">
|
||||
<Min unit="ns">38960</Min><Q1 unit="ns">39280</Q1><Q2 unit="ns">39320</Q2><Q3 unit="ns">39560</Q3><Max unit="ns">39640</Max>
|
||||
</Sample>
|
||||
<Sample functionNestLevel="5">
|
||||
<Min unit="ns">42480</Min><Q1 unit="ns">42840</Q1><Q2 unit="ns">43080</Q2><Q3 unit="ns">43120</Q3><Max unit="ns">43200</Max>
|
||||
</Sample>
|
||||
<Sample functionNestLevel="6">
|
||||
<Min unit="ns">46120</Min><Q1 unit="ns">46600</Q1><Q2 unit="ns">46640</Q2><Q3 unit="ns">46680</Q3><Max unit="ns">46880</Max>
|
||||
</Sample>
|
||||
<Sample functionNestLevel="7">
|
||||
<Min unit="ns">46080</Min><Q1 unit="ns">46600</Q1><Q2 unit="ns">46640</Q2><Q3 unit="ns">46680</Q3><Max unit="ns">46760</Max>
|
||||
</Sample>
|
||||
<Sample functionNestLevel="8">
|
||||
<Min unit="ns">46320</Min><Q1 unit="ns">46600</Q1><Q2 unit="ns">46640</Q2><Q3 unit="ns">46680</Q3><Max unit="ns">47040</Max>
|
||||
</Sample>
|
||||
<Sample functionNestLevel="9">
|
||||
<Min unit="ns">46040</Min><Q1 unit="ns">46600</Q1><Q2 unit="ns">46640</Q2><Q3 unit="ns">46680</Q3><Max unit="ns">46960</Max>
|
||||
</Sample>
|
||||
<Sample functionNestLevel="10">
|
||||
<Min unit="ns">45960</Min><Q1 unit="ns">46600</Q1><Q2 unit="ns">46640</Q2><Q3 unit="ns">46680</Q3><Max unit="ns">46960</Max>
|
||||
</Sample>
|
||||
<Sample functionNestLevel="11">
|
||||
<Min unit="ns">46040</Min><Q1 unit="ns">46600</Q1><Q2 unit="ns">46640</Q2><Q3 unit="ns">46680</Q3><Max unit="ns">46720</Max>
|
||||
</Sample>
|
||||
<Sample functionNestLevel="12">
|
||||
<Min unit="ns">46080</Min><Q1 unit="ns">46600</Q1><Q2 unit="ns">46640</Q2><Q3 unit="ns">46680</Q3><Max unit="ns">46920</Max>
|
||||
</Sample>
|
||||
<Sample functionNestLevel="13">
|
||||
<Min unit="ns">46080</Min><Q1 unit="ns">46600</Q1><Q2 unit="ns">46640</Q2><Q3 unit="ns">46680</Q3><Max unit="ns">46720</Max>
|
||||
</Sample>
|
||||
<Sample functionNestLevel="14">
|
||||
<Min unit="ns">46280</Min><Q1 unit="ns">46600</Q1><Q2 unit="ns">46640</Q2><Q3 unit="ns">46680</Q3><Max unit="ns">46760</Max>
|
||||
</Sample>
|
||||
<Sample functionNestLevel="15">
|
||||
<Min unit="ns">46360</Min><Q1 unit="ns">46600</Q1><Q2 unit="ns">46640</Q2><Q3 unit="ns">46680</Q3><Max unit="ns">47040</Max>
|
||||
</Sample>
|
||||
</ContextSwitchTest>
|
||||
<ContextSwitchTest environment="dirty" load="2">
|
||||
<Sample functionNestLevel="0">
|
||||
<Min unit="ns">37560</Min><Q1 unit="ns">38200</Q1><Q2 unit="ns">38240</Q2><Q3 unit="ns">38480</Q3><Max unit="ns">38600</Max>
|
||||
</Sample>
|
||||
<Sample functionNestLevel="1">
|
||||
<Min unit="ns">44880</Min><Q1 unit="ns">45480</Q1><Q2 unit="ns">45560</Q2><Q3 unit="ns">45600</Q3><Max unit="ns">45640</Max>
|
||||
</Sample>
|
||||
<Sample functionNestLevel="2">
|
||||
<Min unit="ns">50920</Min><Q1 unit="ns">51560</Q1><Q2 unit="ns">51600</Q2><Q3 unit="ns">51800</Q3><Max unit="ns">51960</Max>
|
||||
</Sample>
|
||||
<Sample functionNestLevel="3">
|
||||
<Min unit="ns">57320</Min><Q1 unit="ns">57640</Q1><Q2 unit="ns">57880</Q2><Q3 unit="ns">57920</Q3><Max unit="ns">58240</Max>
|
||||
</Sample>
|
||||
<Sample functionNestLevel="4">
|
||||
<Min unit="ns">63320</Min><Q1 unit="ns">63920</Q1><Q2 unit="ns">63960</Q2><Q3 unit="ns">64000</Q3><Max unit="ns">64600</Max>
|
||||
</Sample>
|
||||
<Sample functionNestLevel="5">
|
||||
<Min unit="ns">69840</Min><Q1 unit="ns">69960</Q1><Q2 unit="ns">70040</Q2><Q3 unit="ns">70240</Q3><Max unit="ns">70400</Max>
|
||||
</Sample>
|
||||
<Sample functionNestLevel="6">
|
||||
<Min unit="ns">75600</Min><Q1 unit="ns">76200</Q1><Q2 unit="ns">76280</Q2><Q3 unit="ns">76320</Q3><Max unit="ns">76880</Max>
|
||||
</Sample>
|
||||
<Sample functionNestLevel="7">
|
||||
<Min unit="ns">75440</Min><Q1 unit="ns">76240</Q1><Q2 unit="ns">76280</Q2><Q3 unit="ns">76320</Q3><Max unit="ns">76840</Max>
|
||||
</Sample>
|
||||
<Sample functionNestLevel="8">
|
||||
<Min unit="ns">75640</Min><Q1 unit="ns">76200</Q1><Q2 unit="ns">76280</Q2><Q3 unit="ns">76320</Q3><Max unit="ns">76960</Max>
|
||||
</Sample>
|
||||
<Sample functionNestLevel="9">
|
||||
<Min unit="ns">75640</Min><Q1 unit="ns">76240</Q1><Q2 unit="ns">76280</Q2><Q3 unit="ns">76320</Q3><Max unit="ns">76440</Max>
|
||||
</Sample>
|
||||
<Sample functionNestLevel="10">
|
||||
<Min unit="ns">75920</Min><Q1 unit="ns">76240</Q1><Q2 unit="ns">76280</Q2><Q3 unit="ns">76320</Q3><Max unit="ns">76400</Max>
|
||||
</Sample>
|
||||
<Sample functionNestLevel="11">
|
||||
<Min unit="ns">75600</Min><Q1 unit="ns">76200</Q1><Q2 unit="ns">76280</Q2><Q3 unit="ns">76320</Q3><Max unit="ns">76920</Max>
|
||||
</Sample>
|
||||
<Sample functionNestLevel="12">
|
||||
<Min unit="ns">75360</Min><Q1 unit="ns">76200</Q1><Q2 unit="ns">76280</Q2><Q3 unit="ns">76320</Q3><Max unit="ns">76440</Max>
|
||||
</Sample>
|
||||
<Sample functionNestLevel="13">
|
||||
<Min unit="ns">75360</Min><Q1 unit="ns">76200</Q1><Q2 unit="ns">76280</Q2><Q3 unit="ns">76320</Q3><Max unit="ns">76960</Max>
|
||||
</Sample>
|
||||
<Sample functionNestLevel="14">
|
||||
<Min unit="ns">75640</Min><Q1 unit="ns">76160</Q1><Q2 unit="ns">76280</Q2><Q3 unit="ns">76320</Q3><Max unit="ns">76960</Max>
|
||||
</Sample>
|
||||
<Sample functionNestLevel="15">
|
||||
<Min unit="ns">75960</Min><Q1 unit="ns">76240</Q1><Q2 unit="ns">76280</Q2><Q3 unit="ns">76320</Q3><Max unit="ns">76400</Max>
|
||||
</Sample>
|
||||
</ContextSwitchTest>
|
||||
<ContextSwitchTest environment="dirty" load="3">
|
||||
<Sample functionNestLevel="0">
|
||||
<Min unit="ns">52400</Min><Q1 unit="ns">52480</Q1><Q2 unit="ns">52520</Q2><Q3 unit="ns">52800</Q3><Max unit="ns">53720</Max>
|
||||
</Sample>
|
||||
<Sample functionNestLevel="1">
|
||||
<Min unit="ns">61680</Min><Q1 unit="ns">62600</Q1><Q2 unit="ns">62640</Q2><Q3 unit="ns">62680</Q3><Max unit="ns">62800</Max>
|
||||
</Sample>
|
||||
<Sample functionNestLevel="2">
|
||||
<Min unit="ns">70160</Min><Q1 unit="ns">71160</Q1><Q2 unit="ns">71360</Q2><Q3 unit="ns">71480</Q3><Max unit="ns">72160</Max>
|
||||
</Sample>
|
||||
<Sample functionNestLevel="3">
|
||||
<Min unit="ns">79000</Min><Q1 unit="ns">79960</Q1><Q2 unit="ns">80000</Q2><Q3 unit="ns">80000</Q3><Max unit="ns">80920</Max>
|
||||
</Sample>
|
||||
<Sample functionNestLevel="4">
|
||||
<Min unit="ns">87600</Min><Q1 unit="ns">88480</Q1><Q2 unit="ns">88760</Q2><Q3 unit="ns">88800</Q3><Max unit="ns">88880</Max>
|
||||
</Sample>
|
||||
<Sample functionNestLevel="5">
|
||||
<Min unit="ns">96320</Min><Q1 unit="ns">97280</Q1><Q2 unit="ns">97320</Q2><Q3 unit="ns">97360</Q3><Max unit="ns">98600</Max>
|
||||
</Sample>
|
||||
<Sample functionNestLevel="6">
|
||||
<Min unit="ns">105160</Min><Q1 unit="ns">105840</Q1><Q2 unit="ns">106080</Q2><Q3 unit="ns">106160</Q3><Max unit="ns">107120</Max>
|
||||
</Sample>
|
||||
<Sample functionNestLevel="7">
|
||||
<Min unit="ns">105200</Min><Q1 unit="ns">106040</Q1><Q2 unit="ns">106120</Q2><Q3 unit="ns">106160</Q3><Max unit="ns">107080</Max>
|
||||
</Sample>
|
||||
<Sample functionNestLevel="8">
|
||||
<Min unit="ns">104880</Min><Q1 unit="ns">105920</Q1><Q2 unit="ns">106080</Q2><Q3 unit="ns">106160</Q3><Max unit="ns">106280</Max>
|
||||
</Sample>
|
||||
<Sample functionNestLevel="9">
|
||||
<Min unit="ns">105760</Min><Q1 unit="ns">106000</Q1><Q2 unit="ns">106120</Q2><Q3 unit="ns">106160</Q3><Max unit="ns">106280</Max>
|
||||
</Sample>
|
||||
<Sample functionNestLevel="10">
|
||||
<Min unit="ns">104880</Min><Q1 unit="ns">105880</Q1><Q2 unit="ns">106080</Q2><Q3 unit="ns">106160</Q3><Max unit="ns">107080</Max>
|
||||
</Sample>
|
||||
<Sample functionNestLevel="11">
|
||||
<Min unit="ns">105720</Min><Q1 unit="ns">105960</Q1><Q2 unit="ns">106120</Q2><Q3 unit="ns">106160</Q3><Max unit="ns">106240</Max>
|
||||
</Sample>
|
||||
<Sample functionNestLevel="12">
|
||||
<Min unit="ns">104960</Min><Q1 unit="ns">105880</Q1><Q2 unit="ns">106080</Q2><Q3 unit="ns">106160</Q3><Max unit="ns">106280</Max>
|
||||
</Sample>
|
||||
<Sample functionNestLevel="13">
|
||||
<Min unit="ns">104880</Min><Q1 unit="ns">105880</Q1><Q2 unit="ns">106120</Q2><Q3 unit="ns">106160</Q3><Max unit="ns">106280</Max>
|
||||
</Sample>
|
||||
<Sample functionNestLevel="14">
|
||||
<Min unit="ns">105720</Min><Q1 unit="ns">105880</Q1><Q2 unit="ns">106080</Q2><Q3 unit="ns">106160</Q3><Max unit="ns">106240</Max>
|
||||
</Sample>
|
||||
<Sample functionNestLevel="15">
|
||||
<Min unit="ns">104920</Min><Q1 unit="ns">105840</Q1><Q2 unit="ns">106120</Q2><Q3 unit="ns">106160</Q3><Max unit="ns">106280</Max>
|
||||
</Sample>
|
||||
</ContextSwitchTest>
|
||||
</Test>
|
||||
<!-- *** END OF TEST TMCONTEXT 1 *** -->
|
||||
Reference in New Issue
Block a user