You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nuttx.apache.org by "Otpvondoiats (via GitHub)" <gi...@apache.org> on 2026/01/21 09:01:12 UTC
[PR] drivers/sensors optimizes the sensor rpmsg driver proxy waiting mechanism to improve reliability. part 2 [nuttx]
Otpvondoiats opened a new pull request, #18073:
URL: https://github.com/apache/nuttx/pull/18073
*Note: Please adhere to [Contributing Guidelines](https://github.com/apache/nuttx/blob/master/CONTRIBUTING.md).*
## Summary
This patch series optimizes the sensor rpmsg driver proxy waiting mechanism to improve reliability and performance in multi-core sensor communication scenarios.
Changes include:
Added proxy creation synchronization mechanism: Introduced a semaphore (proxysem) to synchronize and wait for remote proxy creation, solving the race condition where ioctl commands were sent before the remote core proxy was ready.
Optimized wait logic: Modified the wait logic to only block on ioctl commands that require synchronous responses (when wait parameter is true). Asynchronous ioctl calls no longer wait for proxy creation, improving performance.
Adjusted timeout value: Changed the proxy wait timeout from potentially infinite to 1 second (SENSOR_RPMSG_IOCTL_TIMEOUT), preventing indefinite blocking while still providing sufficient time for remote resource initialization.
## Impact
Users:
Improved reliability: Eliminates race conditions in sensor ioctl operations across cores
Better error handling: Provides clear timeout errors instead of silent ailures
Performance optimization: Asynchronous operations are no longer blocked by proxy creation
Build Process:
No impact on build process
No new dependencies introduced
Compatibility:
Backward compatible with existing sensor drivers
Changes are internal to sensor_rpmsg driver implementation
API remains unchanged
Performance:
Reduced unnecessary blocking for asynchronous operations
1-second timeout prevents indefinite waits
Minimal overhead from semaphore operations
## Testing
25,50, 100 Switching will trigger ioctl.
~~~
uorb_listener -n 10 -r 25 sensor_accel
Mointor objects num:1
object_name:sensor_accel, object_instance:0
sensor_accel(now:765227619700):timestamp:1280331305527,x:-0.246707,y:-0.061278,z:9.906841,temperature:30.085938
sensor_accel(now:765227620100):timestamp:1280331345807,x:-0.239524,y:-0.056489,z:9.890082,temperature:30.085938
sensor_accel(now:765227621500):timestamp:1280331386087,x:-0.225159,y:-0.068460,z:9.825438,temperature:30.085938
sensor_accel(now:765227622900):timestamp:1280331426367,x:-0.277832,y:-0.020576,z:9.856564,temperature:30.085938
sensor_accel(now:765227624300):timestamp:1280331466647,x:-0.220371,y:-0.111556,z:9.851775,temperature:30.085938
sensor_accel(now:765227658100):timestamp:1280331505447,x:-0.208400,y:-0.030153,z:9.789525,temperature:30.085938
[01/21 08:58:34] [ 0] [audio] CPU USAGE: busy=1 cpu_sleep=0 bus_sleep=0 subsys_sleep=99(pd)
sensor_accel(now:765227698200):timestamp:1280331545747,x:-0.280226,y:-0.157046,z:9.842198,temperature:30.085938
sensor_accel(now:765227739000):timestamp:1280331586047,x:-0.244313,y:-0.056489,z:9.885294,temperature:30.085938
sensor_accel(now:765227778900):timestamp:1280331626247,x:-0.215582,y:-0.080431,z:9.830227,temperature:30.085938
sensor_accel(now:765227819200):timestamp:1280331666547,x:-0.215582,y:-0.034942,z:9.863746,temperature:30.085938
Object name:sensor_accel0, recieved:10
Total number of received Message:10/10
ap>
Total number of received Message:10/10
ap> uorb_listener -n 10 -r 50 sensor_accel
Mointor objects num:1
object_name:sensor_accel, object_instance:0
sensor_accel(now:765246572300):timestamp:1280350267887,x:-0.239524,y:-0.049307,z:9.868534,temperature:30.085938
sensor_accel(now:765246572600):timestamp:1280350308127,x:-0.213188,y:-0.070855,z:9.849380,temperature:30.085938
sensor_accel(now:765246574000):timestamp:1280350348367,x:-0.292197,y:-0.097191,z:9.875717,temperature:30.085938
sensor_accel(now:765246575400):timestamp:1280350388607,x:-0.184458,y:-0.109162,z:9.854169,temperature:30.085938
sensor_accel(now:765246576800):timestamp:1280350428847,x:-0.285014,y:-0.111556,z:9.717699,temperature:30.085938
[01/21 08:58:53] [ 0] [audio] CPU USAGE: busy=1 cpu_sleep=0 bus_sleep=0 subsys_sleep=99(pd)
sensor_accel(now:765246612400):timestamp:1280350469147,x:-0.256284,y:-0.109162,z:9.885294,temperature:30.085938
sensor_accel(now:765246628800):timestamp:1280350487747,x:-0.275437,y:-0.094797,z:9.921206,temperature:30.085938
sensor_accel(now:765246652400):timestamp:1280350509347,x:-0.165304,y:-0.058884,z:9.914024,temperature:30.085938
sensor_accel(now:765246669000):timestamp:1280350527847,x:-0.308956,y:-0.101980,z:9.835015,temperature:30.060547
sensor_accel(now:765246692700):timestamp:1280350549547,x:-0.296985,y:-0.125922,z:9.837410,temperature:30.060547
Object name:sensor_accel0, recieved:10
Total number of received Message:10/10
ap>
ap>
uorb_listener -n 10 -r 100 sensor_accel
Mointor objects num:1
object_name:sensor_accel, object_instance:0
sensor_accel(now:765274683900):timestamp:1280378364287,x:-0.318533,y:-0.058884,z:9.894871,temperature:30.095703
sensor_accel(now:765274684300):timestamp:1280378404527,x:-0.320927,y:-0.085220,z:9.789525,temperature:30.095703
sensor_accel(now:765274685700):timestamp:1280378444767,x:-0.292197,y:-0.090008,z:9.878111,temperature:30.095703
sensor_accel(now:765274687100):timestamp:1280378485007,x:-0.189246,y:-0.080431,z:9.523769,temperature:30.095703
sensor_accel(now:765274688500):timestamp:1280378525247,x:-0.241919,y:-0.063672,z:9.993032,temperature:30.095703
sensor_accel(now:765274689900):timestamp:1280378538097,x:-0.261072,y:-0.075643,z:9.772766,temperature:30.095703
sensor_accel(now:765274691300):timestamp:1280378545347,x:-0.325716,y:-0.111556,z:9.858957,temperature:30.095703
sensor_accel(now:765274700200):timestamp:1280378554647,x:-0.311350,y:-0.128316,z:9.981062,temperature:30.095703
sensor_accel(now:765274700400):timestamp:1280378563947,x:-0.249101,y:-0.097191,z:9.799102,temperature:30.095703
[01/21 08:59:22] [ 0] [audio] CPU USAGE: busy=1 cpu_sleep=0 bus_sleep=0 subsys_sleep=99(pd)
sensor_accel(now:765274723900):timestamp:1280378574747,x:-0.227553,y:-0.101980,z:9.765583,temperature:30.095703
Object name:sensor_accel0, recieved:10
Total number of received Message:10/10
ap>
~~~
--
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-unsubscribe@nuttx.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] drivers/sensors optimizes the sensor rpmsg driver proxy waiting mechanism to improve reliability. part 2 [nuttx]
Posted by "xiaoxiang781216 (via GitHub)" <gi...@apache.org>.
xiaoxiang781216 merged PR #18073:
URL: https://github.com/apache/nuttx/pull/18073
--
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-unsubscribe@nuttx.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org