From 92cd7628e06f8037fc8acd1b0f4320c9ef2825b9 Mon Sep 17 00:00:00 2001 From: ligd Date: Wed, 31 Mar 2021 22:11:59 +0800 Subject: [PATCH] sim: remove CONFIG_SIM_WALLTIME fast timing maybe harmful for IOs Change-Id: Ic4ff5ec0aa99d2d229a07c4d1a9a4dae738d3cd9 Signed-off-by: ligd --- arch/sim/Kconfig | 18 +++--------------- arch/sim/src/Makefile | 3 --- arch/sim/src/sim/up_simsmp.c | 8 -------- boards/sim/sim/sim/README.txt | 14 +------------- 4 files changed, 4 insertions(+), 39 deletions(-) diff --git a/arch/sim/Kconfig b/arch/sim/Kconfig index e0213cc580..5222289122 100644 --- a/arch/sim/Kconfig +++ b/arch/sim/Kconfig @@ -105,11 +105,6 @@ config SIM_X8664_MICROSOFT endchoice -config SIM_WALLTIME - bool "Run the simulation at a fixed cadence in near real-time" - default y - -if SIM_WALLTIME choice prompt "Simulation at a fixed cadence in near real-time" default SIM_WALLTIME_SLEEP @@ -117,12 +112,7 @@ choice config SIM_WALLTIME_SLEEP bool "Execution the simulation in near real-time using host sleep" ---help--- - NOTE: In order to facility fast testing, the sim target's IDLE loop, by default, - calls the system timer "interrupt handler" as fast as possible. As a result, there - really are no noticeable delays when a task sleeps. However, the task really does - sleep -- but the time scale is wrong. If you want behavior that is closer to - normal timing, then you can define SIM_WALLTIME=y in your configuration - file. This configuration setting will cause the sim target's IDLE loop to delay + NOTE: This configuration setting will cause the sim target's IDLE loop to delay on each call so that the system "timer interrupt" is called at a rate approximately correct for the system timer tick rate. With this definition in the configuration, sleep() behavior is more or less normal. @@ -137,14 +127,12 @@ config SIM_WALLTIME_SIGNAL endchoice -endif - config SIM_NETDEV bool "Simulated Network Device" default y select ARCH_HAVE_NETDEV_STATISTICS select SCHED_LPWORK - depends on (NET_ETHERNET && SIM_WALLTIME) + depends on NET_ETHERNET ---help--- Build in support for a simulated network device. @@ -537,7 +525,7 @@ config SIM_QSPIFLASH_PAGESIZE config SIM_HCISOCKET bool "Attach Host Bluetooth" default false - depends on (WIRELESS_BLUETOOTH && HOST_LINUX && SIM_WALLTIME) + depends on (WIRELESS_BLUETOOTH && HOST_LINUX) ---help--- Attached the local bluetooth device to the simulation target via HCI_CHANNEL_USER. This gives NuttX full diff --git a/arch/sim/src/Makefile b/arch/sim/src/Makefile index 56e574164b..bd669e8678 100644 --- a/arch/sim/src/Makefile +++ b/arch/sim/src/Makefile @@ -98,9 +98,6 @@ ifeq ($(CONFIG_SMP),y) CSRCS += up_smpsignal.c up_cpuidlestack.c REQUIREDOBJS += up_smpsignal$(OBJEXT) HOSTCFLAGS += -DCONFIG_SMP=1 -DCONFIG_SMP_NCPUS=$(CONFIG_SMP_NCPUS) -ifeq ($(CONFIG_SIM_WALLTIME),y) - HOSTCFLAGS += -DCONFIG_SIM_WALLTIME=1 -endif ifeq ($(CONFIG_SCHED_INSTRUMENTATION),y) HOSTCFLAGS += -DCONFIG_SCHED_INSTRUMENTATION=1 endif diff --git a/arch/sim/src/sim/up_simsmp.c b/arch/sim/src/sim/up_simsmp.c index dcf8501b62..fd7305c8fb 100644 --- a/arch/sim/src/sim/up_simsmp.c +++ b/arch/sim/src/sim/up_simsmp.c @@ -94,9 +94,7 @@ extern uint8_t g_nx_initstate; static void *sim_idle_trampoline(void *arg) { struct sim_cpuinfo_s *cpuinfo = (struct sim_cpuinfo_s *)arg; -#ifdef CONFIG_SIM_WALLTIME uint64_t now = 0; -#endif int ret; /* Set the CPU number for the CPU thread */ @@ -131,16 +129,10 @@ static void *sim_idle_trampoline(void *arg) for (; ; ) { -#ifdef CONFIG_SIM_WALLTIME /* Wait a bit so that the timing is close to the correct rate. */ now += 1000 * CONFIG_USEC_PER_TICK; host_sleepuntil(now); -#else - /* Give other pthreads/CPUs a shot */ - - sched_yield(); -#endif } return NULL; diff --git a/boards/sim/sim/sim/README.txt b/boards/sim/sim/sim/README.txt index 51520cb55c..8cfca8ed85 100644 --- a/boards/sim/sim/sim/README.txt +++ b/boards/sim/sim/sim/README.txt @@ -49,13 +49,7 @@ application that I know of. Timing Fidelity --------------- -NOTE: In order to facility fast testing, the sim target's IDLE loop, by -default, calls the system "interrupt handler" as fast as possible. As a -result, there really are no noticeable delays when a task sleeps. However, -the task really does sleep -- but the time scale is wrong. If you want -behavior that is closer to normal timing, then you can define -CONFIG_SIM_WALLTIME=y in your configuration file. This configuration setting -will cause the sim target's IDLE loop to delay on each call so that the system +NOTE: The sim target's IDLE loop to delay on each call so that the system "timer interrupt" is called at a rate approximately correct for the system timer tick rate. This option can be enabled with CONFIG_SIM_WALLTIME_SIGNAL which will drive the entire simulation by using a host timer that ticks at @@ -316,12 +310,6 @@ SMP +CONFIG_SMP=y +CONFIG_SMP_NCPUS=2 - You also must enable near-realtime-performance otherwise even long timeouts - will expire before a CPU thread even has a chance to execute. - - -# CONFIG_SIM_WALLTIME is not set - +CONFIG_SIM_WALLTIME=y - And you can enable some additional debug output with: -# CONFIG_DEBUG_SCHED is not set