nuttx icon indicating copy to clipboard operation
nuttx copied to clipboard

change nxsched_islocked_global to nxsched_islocked_tcb

Open hujun260 opened this issue 1 year ago • 1 comments

Summary

1 To improve efficiency, we mimic Linux's behavior where preemption disabling is only applicable to the current CPU and does not affect other CPUs. 2 In the future, we will implement "spinlock+sched_lock", and use it extensively. Under such circumstances, if preemption is still globally disabled, it will seriously impact the scheduling efficiency. 3 We have removed g_cpu_lockset and used irqcount in order to eliminate the dependency of schedlock on critical sections in the future, simplify the logic, and further enhance the performance of sched_lock. 4 We set lockcount to 1 in order to lock scheduling on all CPUs during startup, without the need to provide additional functions to disable scheduling on other CPUs. 5 Cpu (1-n) must wait for cpu0 to enter the idle state before enabling scheduling because it prevents CPUs1~n from competing with cpu0 for the memory manager mutex, which could cause the cpu0 idle task to enter a wait state and trigger an assert.

size nuttx
before:
   text    data     bss     dec     hex filename
 265396   51057   63646  380099   5ccc3 nuttx
after:
   text    data     bss     dec     hex filename
 265184   51057   63642  379883   5cbeb nuttx

size -216

Impact

sched_lock/sched_unlock

Testing

Configuring NuttX and compile:
$ ./tools/configure.sh -l qemu-armv8a:nsh_smp
$ make
Running with qemu
$ qemu-system-aarch64 -cpu cortex-a53 -smp 4 -nographic \
   -machine virt,virtualization=on,gic-version=3 \
   -net none -chardev stdio,id=con,mux=on -serial chardev:con \
   -mon chardev=con,mode=readline -kernel ./nuttx

ostest

hujun260 avatar Sep 29 '24 05:09 hujun260

[Experimental Bot, please feedback here]

NuttX PR Requirements Review

While this PR summary provides context and reasoning for the changes, it partially meets NuttX's PR requirements.

Here's what's missing or needs improvement:

  • Summary:
    • Functional part: Be more specific about which functional part of the code is changed (e.g., scheduler, interrupt handling, specific driver).
    • How it works: The explanation is high-level. Provide concrete details on the mechanism used to achieve per-CPU preemption disabling and how irqcount replaces g_cpu_lockset.
    • Issue references: Include links to relevant NuttX and/or NuttX Apps issues.
  • Impact:
    • User impact: While it mentions scheduling changes, clarify if any user-facing behavior is modified.
    • Build impact: Does this PR change any build configurations, dependencies, or options?
    • Hardware impact: Specify the affected architectures (ARMv8-A is implied but state it explicitly).
    • Documentation: Clearly state if documentation updates are required and whether the PR includes them.
    • Security, Compatibility: Address these even if there's no impact (e.g., "NO impact on security").
  • Testing:
    • Build Hosts: List all build environments used for testing (OS, CPU architecture, compiler).
    • Targets: Specify the exact board configurations within qemu-armv8a (e.g., qemu-armv8a:nsh_smp).
    • Testing logs: The logs are placeholder comments. Include actual logs demonstrating the issue before the change and the correct behavior after.

Recommendations:

  • Expand the summary to provide a more technically detailed explanation.
  • Address all impact categories explicitly, even if it's "NO impact."
  • Provide comprehensive testing information with specific build/target details and actual logs.

By addressing these points, your PR will be more informative and easier for reviewers to assess.

nuttxpr avatar Sep 29 '24 05:09 nuttxpr