jlaitine opened a new pull request, #16194:
URL: https://github.com/apache/nuttx/pull/16194

   
   ## Summary
   
   This enables mutex functionality in the nxsem code, enabling wait/post 
atomic fast paths, without needs for syscall, also when priority inheritance is 
enabled for mutexes.
   
   The basics of the implementations are as follows:
   
   - For mutexes, replace semaphore count with mutex holder, which consits of 1 
bit for mutex internal locking and 31 bits for task PID
   - Instead of manipulating the count with atomic instructions, manipulate the 
mutex holder
   - Instead of allocating and storing the holder structure for the task's list 
for priority inheritance, do it at the time when task blocks on the mutex. 
Since there can be only one running holder for a mutex, this can be done.
   
   Doing this allows cleaning up the nxmutex interface to be a very thin 
wrapper on top of nxsem (e.g. removing the extra holder variable inside of 
nxmutex. Plain nxmutex could be just a typedeffed nxsem). This is left for 
future PRs.
   
   This also improves performance significantly in SMP and in 
CONFIG_BUILD_KERNEL / CONFIG_BUILD_PROTECTED targets, since most of the time 
there is no need for syscall to the kernel when a mutex is taken/posted.
   
   I am putting this as a draft for now and will do some more testing still on 
qemu targets
   
   ## Impact
   
   This has no functional impact. For the performance, on my real application 
the speed improvements on RISC-V are as follows in terms of CPU utilization:
   
   - RISCV 64bit (MFPS SMP, 4 harts, CONFIG_BUILD_KERNEL): CPU usage: 36 % -> 
25 %
   - RISCV 64bit (MFPS SMP, 4 harts, CONFIG_BUILD_FLAT): CPU usage: 12% -> 9%
   
   ## Testing
   
   Real hardware:
   - Custom HW, mpfs (risc-v 64-bit): non-SMP and SMP 4 harts, both with 
CONFIG_BUILD_FLAT and CONFIG_BUILD_KERNEL.
   - Custom HW, i.MX93: Single core CONFIG_BUILD_FLAT and CONFIG_BUILD_KERNEL
   
   
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscr...@nuttx.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org

Reply via email to