apache / apache/nuttx

[HELP] Preemptive scheduling with suspend and resume task [s32k148evb]

Open
#17,123 1 comment 0 reactions 0 assignees View on GitHub
Arch: arm OS: Linux Type: Bug
Dominant language
C
Stars
4k
Forks
1.7k
Avg merge
1d 17h
Merged PRs (30d)
237

Description

### Description / Steps to reproduce the issue

Hello all
I am trying to implement a test for checking preemptive scheduling using tasks or pthread in nuttx for S32K148_EVB board.
my approach is to take [tm_preemptive_scheduling_test.c](https://github.com/zephyrproject-rtos/zephyr/blob/main/tests/benchmarks/thread_metric/src/tm_preemptive_scheduling_test.c) file and write a wrapper for the called functions.
Another approach to achieve the resume and suspend is using semaphore as below.
```
int tm_thread_create(int thread_id, const char *thread_name, int priority,
int (*entry_function)(int argc, FAR char *argv[]), void *args)
{
threads[thread_id] = task_create(
thread_name, // Task Name
priority, // Task Priority
CONFIG_DEFAULT_TASK_STACKSIZE, // Task Stack Size
entry_function, // Task Function
NULL // Task Arguments
);
}

int tm_thread_suspend(int thread_id)
{
return sem_wait(&g_bench_semaphores[thread_id]);
}

void tm_thread_resume(int thread_id)
{
sem_post(&g_bench_semaphores[thread_id]);
}

void tm_thread_sleep(int sec)
{
sleep(sec);
}
```

for Nuttx priority i am creating the thread with priority starting for lower with lower value and higher with higher value. Main priority is 100. therefore the change in code [tm_preemptive_scheduling_test.c](https://github.com/zephyrproject-rtos/zephyr/blob/main/tests/benchmarks/thread_metric/src/tm_preemptive_scheduling_test.c) is
```
/* Create thread 0 at priority 10. */
tm_thread_create(0, 6, tm_preemptive_thread_0_entry);

/* Create thread 1 at priority 9. */
tm_thread_create(1, 7, tm_preemptive_thread_1_entry);

/* Create thread 2 at priority 8. */
tm_thread_create(2, 8, tm_preemptive_thread_2_entry);

/* Create thread 3 at priority 7. */
tm_thread_create(3, 9, tm_preemptive_thread_3_entry);

/* Create thread 4 at priority 6. */
tm_thread_create(4, 10, tm_preemptive_thread_4_entry);

```
Expected behavior is
all 5 thread 0 to thread 4 is in suspend state. (waiting for semaphore)
thread_report (prio:highest) goes to sleep
thread 0 (prio:6) resume (semaphore release)
> release the semaphore of thread 1
thread 1 (prio:7) resume (semaphore release)
> release the semaphore of thread 2
thread 2 (prio:8) resume (semaphore release)
> release the semaphore of thread 3
thread 3 (prio:9) resume (semaphore release)
> release the semaphore of thread 4
thread 4 (prio:10) counter4++;
>suspend (waiting for semaphore)
>>thread 3 (prio:9) counter3++;
>>suspend (waiting for semaphore)
>>>>thread 2 (prio:8) counter2++;
>>>>suspend (waiting for semaphore)
>>>>>>thread 1 (prio:7) counter1++;
>>>>>>suspend (waiting for semaphore)
>>>>>>>>thread 0 (prio:6) counter0++;
>release the semaphore of thread 1 ----> start from top again until sleep for thread_report (prio:highest) expires

Observed behaviour
all 5 thread 0 to thread 4 is in suspend state. (waiting for semaphore)
thread_report (prio:highest) goes to sleep
thread 0 (prio:6) resume (semaphore release)
> release the semaphore of thread 1
thread 1 (prio:7) resume (semaphore release)
> release the semaphore of thread 2
thread 2 (prio:8) resume (semaphore release)
> release the semaphore of thread 3
thread 3 (prio:9) resume (semaphore release)
> release the semaphore of thread 4
thread 4 (prio:10) counter4++;
>suspend (waiting for semaphore)
>release the semaphore of thread 4
>>thread 4 (prio:10) counter4++;
>>>thread 4 (prio:10) counter4++;
>>>>thread 4 (prio:10) counter4++;
>>>>>....until sleep for thread_report (prio:highest) expires

### On which OS does this issue occur?

[OS: Linux]

### What is the version of your OS?

Ubuntu 22.04.5 LTS

### NuttX Version

12.10.0-RC0

### Issue Architecture

[Arch: arm]

### Issue Area

[Area: Other]

### Host information

file sysinfo.h not exists
NuttX CFLAGS:
-Wstrict-prototypes
-Wno-attributes
-Wno-unknown-pragmas
-Wno-psabi \-O2\
-fno-strict-aliasing
-fomit-frame-pointer
-fno-common
-Wall
-Wshadow
-Wundef
-ffunction-sections
-fdata-sections \-g3\
-mlittle-endian
-march=armv7e-m
-mtune=cortex-m4
-mfloat-abi=soft
-mthumb
-Wa-mthumb
-Wa-mimplicit-it=always
-isystem /home/buildpc/username/07_nuutx_debug/nuttx/include
-D__NuttX__
-DNDEBUG

NuttX CXXFLAGS:
-Wno-attributes
-Wno-unknown-pragmas
-nostdinc++
-Wno-psabi
-std=\gnu++17\
-fno-exceptions
-fcheck-new
-fno-rtti \-O2\
-fno-strict-aliasing
-fomit-frame-pointer
-fno-common
-Wall
-Wshadow
-Wundef
-ffunction-sections
-fdata-sections \-g3\
-mlittle-endian
-march=armv7e-m
-mtune=cortex-m4
-mfloat-abi=soft
-mthumb
-Wa-mthumb
-Wa-mimplicit-it=always
-isystem /home/buildpc/username/07_nuutx_debug/nuttx/include/cxx
-isystem /home/buildpc/username/07_nuutx_debug/nuttx/include
-D__NuttX__
-DNDEBUG

NuttX LDFLAGS:
--entry=__start
-nostdlib
--gc-sections
--cref
-Map=/home/buildpc/username/07_nuutx_debug/nuttx/nuttx.map

NuttX configuration options:
CONFIG_ALLOW_BSD_COMPONENTS=y
CONFIG_HOST_LINUX=y
CONFIG_APPS_DIR=\../nuttx-apps\
CONFIG_BASE_DEFCONFIG=\s32k148evb:nsh-dirty\
CONFIG_BUILD_FLAT=y
CONFIG_MOTOROLA_SREC=y
CONFIG_RAW_BINARY=y
CONFIG_OUTPUT_STRIP_PATHS=y
CONFIG_ARCH_HAVE_STDARG_H=y
CONFIG_ARCH_HAVE_SETJMP=y
CONFIG_ARCH_NONE_DEBUG_H=y
CONFIG_FORTIFY_SOURCE=0
CONFIG_NDEBUG=y
CONFIG_DEBUG_ALERT=y
CONFIG_ARCH_HAVE_STACKCHECK=y
CONFIG_STACK_USAGE_WARNING=0
CONFIG_DEBUG_SYMBOLS=y
CONFIG_DEBUG_SYMBOLS_LEVEL=\-g3\
CONFIG_ARCH_HAVE_CUSTOMOPT=y
CONFIG_DEBUG_CUSTOMOPT=y
CONFIG_DEBUG_OPTLEVEL=\-O2\
CONFIG_LTO_NONE=y
CONFIG_DEBUG_OPT_UNUSED_SECTIONS=y
CONFIG_DEBUG_LINK_MAP=y
CONFIG_ARCH_ARM=y
CONFIG_ARCH=\arm\
CONFIG_ARM_TOOLCHAIN_GNU_EABI=y
CONFIG_ARCH_CHIP_S32K1XX=y
CONFIG_ARCH_ARMV7M=y
CONFIG_ARCH_CORTEXM4=y
CONFIG_ARCH_FAMILY=\armv7-m\
CONFIG_ARCH_CHIP=\s32k1xx\
CONFIG_ARM_THUMB=y
CONFIG_ARM_HAVE_MPU_UNIFIED=y
CONFIG_ARCH_HAVE_HARDFAULT_DEBUG=y
CONFIG_ARCH_HAVE_MEMFAULT_DEBUG=y
CONFIG_ARCH_HAVE_BUSFAULT_DEBUG=y
CONFIG_ARCH_HAVE_USAGEFAULT_DEBUG=y
CONFIG_ARCH_CHIP_S32K148=y
CONFIG_ARCH_CHIP_S32K14X=y
CONFIG_S32K1XX_HAVE_ENET=y
CONFIG_S32K1XX_HAVE_EWM=y
CONFIG_S32K1XX_HAVE_FTM2=y
CONFIG_S32K1XX_HAVE_FTM3=y
CONFIG_S32K1XX_HAVE_FTM4=y
CONFIG_S32K1XX_HAVE_FTM5=y
CONFIG_S32K1XX_HAVE_FTM6=y
CONFIG_S32K1XX_HAVE_FTM7=y
CONFIG_S32K1XX_HAVE_HSRUN=y
CONFIG_S32K1XX_HAVE_LMEM=y
CONFIG_S32K1XX_HAVE_LPI2C1=y
CONFIG_S32K1XX_HAVE_LPSPI1=y
CONFIG_S32K1XX_HAVE_LPSPI2=y
CONFIG_S32K1XX_HAVE_FLEXCAN1=y
CONFIG_S32K1XX_HAVE_FLEXCAN2=y
CONFIG_S32K1XX_HAVE_SAI=y
CONFIG_S32K1XX_HAVE_SPLL=y
CONFIG_S32K1XX_LPUART=y
CONFIG_S32K1XX_LPUART1=y
CONFIG_S32K1XX_WDT_DISABLE=y
CONFIG_S32K1XX_FLASHCFG_BACKDOOR1=0xffffffff
CONFIG_S32K1XX_FLASHCFG_BACKDOOR2=0xffffffff
CONFIG_S32K1XX_FLASHCFG_FPROT=0xffffffff
CONFIG_S32K1XX_FLASHCFG_FSEC=0xfe
CONFIG_S32K1XX_FLASHCFG_FOPT=0x7f
CONFIG_S32K1XX_FLASHCFG_FEPROT=0xff
CONFIG_S32K1XX_FLASHCFG_FDPROT=0xff
CONFIG_ARCH_TOOLCHAIN_GNU=y
CONFIG_ARCH_TOOLCHAIN_GCC=y
CONFIG_ARCH_HAVE_IRQTRIGGER=y
CONFIG_ARCH_HAVE_IRQPRIO=y
CONFIG_ARCH_HAVE_FORK=y
CONFIG_ARCH_HAVE_FPU=y
CONFIG_ARCH_HAVE_MPU=y
CONFIG_ARCH_HAVE_RESET=y
CONFIG_ARCH_HAVE_TESTSET=y
CONFIG_ARCH_HAVE_THREAD_LOCAL=y
CONFIG_ARCH_HAVE_FETCHADD=y
CONFIG_ARCH_HAVE_SYSCALL_HOOKS=y
CONFIG_ARCH_HAVE_BACKTRACE=y
CONFIG_ARCH_HAVE_DEBUG=y
CONFIG_ARCH_HAVE_PERF_EVENTS=y
CONFIG_ARCH_HAVE_CPUINFO=y
CONFIG_ARCH_CPUINFO_FREQ_KHZ=0
CONFIG_ARCH_HAVE_TCBINFO=y
CONFIG_ARCH_STACKDUMP=y
CONFIG_ARCH_STACKDUMP_MAX_LENGTH=0
CONFIG_ARCH_HAVE_RAMFUNCS=y
CONFIG_ARCH_RAMFUNCS=y
CONFIG_ARCH_HAVE_RAMVECTORS=y
CONFIG_BOARD_LOOPSPERMSEC=6667
CONFIG_ARCH_HAVE_INTERRUPTSTACK=y
CONFIG_ARCH_INTERRUPTSTACK=0
CONFIG_ARCH_HAVE_HIPRI_INTERRUPT=y
CONFIG_BOOT_RUNFROMFLASH=y
CONFIG_RAM_START=0x1ffe0000
CONFIG_RAM_SIZE=258048
CONFIG_FLASH_START=0x0
CONFIG_FLASH_SIZE=0
CONFIG_ARCH_BOARD_S32K148EVB=y
CONFIG_ARCH_BOARD=\s32k148evb\
CONFIG_ARCH_HAVE_LEDS=y
CONFIG_ARCH_LEDS=y
CONFIG_ARCH_HAVE_BUTTONS=y
CONFIG_ARCH_HAVE_IRQBUTTONS=y
CONFIG_BOARD_CRASHDUMP_NONE=y
CONFIG_BOARDCTL=y
CONFIG_BOARDCTL_MKRD=y
CONFIG_BOARD_MEMORY_RANGE=\\
CONFIG_DISABLE_OS_API=y
CONFIG_USEC_PER_TICK=1000
CONFIG_TIMER_ADJUST_USEC=0
CONFIG_START_YEAR=2021
CONFIG_START_MONTH=9
CONFIG_START_DAY=6
CONFIG_PREALLOC_TIMERS=4
CONFIG_IRQ_NWORKS=8
CONFIG_IRQ_WORK_SECTION=\\
CONFIG_IRQ_WORK_STACKSIZE=2048
CONFIG_INIT_ENTRY=y
CONFIG_INIT_ARGS=\\
CONFIG_INIT_STACKSIZE=2048
CONFIG_INIT_PRIORITY=100
CONFIG_INIT_ENTRYPOINT=\nsh_main\
CONFIG_INIT_ENTRYNAME=\nsh_main\
CONFIG_RR_INTERVAL=200
CONFIG_TASK_NAME_SIZE=31
CONFIG_SCHED_HAVE_PARENT=y
CONFIG_SCHED_WAITPID=y
CONFIG_PTHREAD_MUTEX_ROBUST=y
CONFIG_PTHREAD_MUTEX_DEFAULT_PRIO_NONE=y
CONFIG_SCHED_CPULOAD_NONE=y
CONFIG_SCHED_CPULOAD_TICKSPERSEC=100
CONFIG_SCHED_PROFILE_TICKSPERSEC=1000
CONFIG_SCHED_STACK_RECORD=0
CONFIG_DEV_CONSOLE=y
CONFIG_NFILE_DESCRIPTORS_PER_BLOCK=8
CONFIG_FILE_STREAM=y
CONFIG_SIG_PREALLOC_ACTIONS=4
CONFIG_SIG_ALLOC_ACTIONS=1
CONFIG_SIG_PREALLOC_IRQ_ACTIONS=8
CONFIG_SIG_DEFAULT=y
CONFIG_SIG_SIGKILL_ACTION=y
CONFIG_SIG_SIGSTOP_ACTION=y
CONFIG_PREALLOC_MQ_MSGS=8
CONFIG_PREALLOC_MQ_IRQ_MSGS=8
CONFIG_MQ_MAXMSGSIZE=32
CONFIG_DISABLE_MQUEUE_NOTIFICATION=y
CONFIG_DEFAULT_TASK_STACKSIZE=2048
CONFIG_IDLETHREAD_STACKSIZE=1024
CONFIG_PTHREAD_STACK_MIN=256
CONFIG_PTHREAD_STACK_DEFAULT=2048
CONFIG_PTHREAD_GUARDSIZE_DEFAULT=0
CONFIG_GROUP_KILL_CHILDREN_TIMEOUT_MS=-1
CONFIG_PID_INITIAL_COUNT=16
CONFIG_ARCH_HAVE_I2CRESET=y
CONFIG_DEV_NULL=y
CONFIG_DEV_ZERO=y
CONFIG_DEV_OPTEE_NONE=y
CONFIG_DRVR_MKRD=y
CONFIG_ARCH_HAVE_RDWR_MEM_CPU_RUN=y
CONFIG_ARCH_HAVE_SERIAL_TERMIOS=y
CONFIG_SERIAL=y
CONFIG_SERIAL_CONSOLE=y
CONFIG_MCU_SERIAL=y
CONFIG_STANDARD_SERIAL=y
CONFIG_SERIAL_NPOLLWAITERS=4
CONFIG_LPUART1_SERIAL_CONSOLE=y
CONFIG_LPUART1_SERIALDRIVER=y
CONFIG_LPUART1_RXBUFSIZE=256
CONFIG_LPUART1_TXBUFSIZE=256
CONFIG_LPUART1_BAUD=115200
CONFIG_LPUART1_BITS=8
CONFIG_LPUART1_PARITY=0
CONFIG_LPUART1_2STOP=0
CONFIG_LPUART1_NOIFLOWCONTROL=y
CONFIG_SYSLOG=y
CONFIG_SYSLOG_DEFAULT_MASK=0xff
CONFIG_SYSLOG_CRLF=y
CONFIG_SYSLOG_MAX_CHANNELS=1
CONFIG_SYSLOG_DEVPATH=\/dev/ttyS1\
CONFIG_SYSLOG_DEFAULT=y
CONFIG_ARCH_HAVE_PHY=y
CONFIG_ARCH_PHY_INTERRUPT=y
CONFIG_ARCH_HAVE_NETDEV_STATISTICS=y
CONFIG_FS_NEPOLL_DESCRIPTORS=8
CONFIG_FS_LOCK_BUCKET_SIZE=0
CONFIG_SENDFILE_BUFSIZE=512
CONFIG_FS_BACKTRACE=0
CONFIG_FS_MQUEUE_VFS_PATH=\/var/mqueue\
CONFIG_FS_MQUEUE_NPOLLWAITERS=4
CONFIG_FS_ANONMAP=y
CONFIG_FS_PROCFS=y
CONFIG_NXFONTS_PACKEDMSFIRST=y
CONFIG_MM_DEFAULT_MANAGER=y
CONFIG_MM_DEFAULT_ALIGNMENT=8
CONFIG_MM_NODE_GUARDSIZE=0
CONFIG_MM_REGIONS=1
CONFIG_MM_MAP_COUNT_MAX=1024
CONFIG_MM_BACKTRACE=-1
CONFIG_MM_FREE_DELAYCOUNT_MAX=0
CONFIG_MM_HEAP_BIGGEST_COUNT=30
CONFIG_MM_HEAP_MEMPOOL_THRESHOLD=-1
CONFIG_BINFMT_ELF_RELOCATABLE=y
CONFIG_STDIO_BUFFER_SIZE=64
CONFIG_STDIO_LINEBUFFER=y
CONFIG_NUNGET_CHARS=2
CONFIG_LIBC_LONG_LONG=y
CONFIG_ARCH_LOWPUTC=y
CONFIG_LIBC_RAND_ORDER=1
CONFIG_LIBC_HOMEDIR=\/\
CONFIG_LIBC_TMPDIR=\/tmp\
CONFIG_LIBC_MAX_TMPFILE=32
CONFIG_LIBC_MAX_EXITFUNS=0
CONFIG_POSIX_SPAWN_DEFAULT_STACKSIZE=2048
CONFIG_LIBC_HOSTNAME=\\
CONFIG_LIBC_OPEN_MAX=256
CONFIG_NAME_MAX=32
CONFIG_PATH_MAX=256
CONFIG_LINE_MAX=80
CONFIG_LIBC_STRERROR_ERRNUM=y
CONFIG_LIBC_NEWLIB_OPTSPEED=y
CONFIG_LIBC_STRSIGNAL=y
CONFIG_TLS_NELEM=0
CONFIG_TLS_TASK_NELEM=0
CONFIG_TLS_NCLEANUP=0
CONFIG_LIBC_GAISTRERROR_ERRNUM=y
CONFIG_LIBC_FTOK_VFS_PATH=\/var/ftok\
CONFIG_LIBC_MEMFD_ERROR=y
CONFIG_LIBC_TEMPBUFFER=y
CONFIG_LIBC_MAX_TEMPBUFFER=2
CONFIG_LIBC_TEMPBUFFER_MALLOC=y
CONFIG_LIBC_MUTEX_BACKTRACE=0
CONFIG_BUILTIN=y
CONFIG_SYMTAB_ORDEREDBYNAME=y
CONFIG_STREAM_OUT_BUFFER_SIZE=64
CONFIG_STREAM_HEXDUMP_BUFFER_SIZE=128
CONFIG_STREAM_BASE64_BUFFER_SIZE=128
CONFIG_LIBC_INLINE_QUEUE=y
CONFIG_LIBM_TOOLCHAIN=y
CONFIG_HAVE_CXX=y
CONFIG_HAVE_CXXINITIALIZE=y
CONFIG_LIBCXXMINI=y
CONFIG_CXX_STANDARD=\gnu++17\
CONFIG_BUILTIN_TOOLCHAIN=y
CONFIG_COVERAGE_NONE=y
CONFIG_COVERAGE_DEFAULT_PREFIX_STRIP=\0\
CONFIG_COVERAGE_DEFAULT_PREFIX=\/data\
CONFIG_PROFILE_NONE=y
CONFIG_BENCHMARK_THREAD_METRIC=y
CONFIG_BENCHMARK_THREAD_METRIC_PREEMPTIVE_SCHEDULE=y
CONFIG_BENCHMARK_THREAD_METRIC_PREEMPTIVE_SCHEDULE_PRIORITY=100
CONFIG_BENCHMARK_THREAD_METRIC_PREEMPTIVE_SCHEDULE_STACKSIZE=2048
CONFIG_BENCHMARK_THREAD_METRIC_PREEMPTIVE_SCHEDULE_PRINTS=y
CONFIG_NSH_LIBRARY=y
CONFIG_NSH_PROMPT_STRING=\nsh> \
CONFIG_NSH_PROMPT_MAX=32
CONFIG_NSH_PROMPT_ENV=\PS1\
CONFIG_NSH_PROMPT_SUFFIX=\> \
CONFIG_NSH_READLINE=y
CONFIG_NSH_MAXARGUMENTS=7
CONFIG_NSH_NESTDEPTH=3
CONFIG_NSH_ALIAS=y
CONFIG_NSH_ALIAS_MAX_AMOUNT=1
CONFIG_NSH_BUILTIN_APPS=y
CONFIG_NSH_DISABLE_DATE=y
CONFIG_NSH_DISABLE_LOSMART=y
CONFIG_NSH_DISABLE_LOMTD=y
CONFIG_NSH_DISABLE_MB=y
CONFIG_NSH_DISABLE_MH=y
CONFIG_NSH_DISABLE_MW=y
CONFIG_NSH_DISABLE_TIMEDATECTL=y
CONFIG_NSH_CODECS_BUFSIZE=128
CONFIG_NSH_PROC_MOUNTPOINT=\/proc\
CONFIG_NSH_FILEIOSIZE=512
CONFIG_NSH_SYSINITSCRIPT=\init.d/rc.sysinit\
CONFIG_NSH_INITSCRIPT=\init.d/rcS\
CONFIG_NSH_SCRIPT_REDIRECT_PATH=\\
CONFIG_NSH_CONSOLE=y
CONFIG_NSH_ARCHINIT=y
CONFIG_SYSTEM_DD=y
CONFIG_SYSTEM_DD_PROGNAME=\dd\
CONFIG_SYSTEM_DD_PRIORITY=100
CONFIG_SYSTEM_DD_STACKSIZE=2048
CONFIG_SYSTEM_DD_STATS=y
CONFIG_SYSTEM_NSH=y
CONFIG_SYSTEM_NSH_PRIORITY=100
CONFIG_SYSTEM_NSH_STACKSIZE=2048
CONFIG_SYSTEM_NSH_PROGNAME=\nsh\
CONFIG_SYSTEM_READLINE=y
CONFIG_READLINE_HAVE_EXTMATCH=y
CONFIG_READLINE_ECHO=y

Host system OS:
Ubuntu 22.04.5 LTS Linux D-11128L 6.8.0-79-generic #79~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Fri Aug 15 16:54:53 UTC 2 x86_64 x86_64

Host system PATH:
/home/buildpc/.local/bin
/home/buildpc/.local/bin
/home/buildpc/.local/bin
/home/buildpc/.local/bin
/home/buildpc/.local/bin
/home/buildpc/.local/bin
/home/buildpc/.local/bin
/home/buildpc/.local/bin
/home/buildpc/zephyrproject/zephyr/scripts
/home/buildpc/.local/bin
/home/buildpc/.local/bin
/home/buildpc/.local/bin
/home/buildpc/.local/bin
/usr/local/sbin
/usr/local/bin
/usr/sbin
/usr/bin
/sbin
/bin
/usr/games
/usr/local/games
/snap/bin
/home/buildpc/.dotnet/tools
/home/buildpc/Harish/gcc-arm-none-eabi-10.3-2021.10/bin
/home/buildpc/Harish/gcc-arm-none-eabi-10.3-2021.10/bin

### Verification

- [x] I have verified before submitting the report.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.