100% CPU load issue - Olympe becomes unstable after ~ 4min

I have noticed an issue with Olympe SDK v7.4.2 where the CPU load of one thread in the Python process creeps from < 10% load (of one core) to 100% load (still of one core). This results in events of Olympe being delayed, e.g. a button press of the SkyController is registered only after ~10 seconds, which makes it unusable after 100% is reached and the drone has to be emergency landed.

I have raised an issue on github: Olympe SDK Issue #40

Hi,

This is a known issue in the 7.X release series that we’ve been aware of lately. This issue should be fixed in the upcoming 7.5 release that should land in late December / early January.

Hi ndessart,

thank you for your quick reply. I am glad to hear that this issue is known and it is being worked on.

In the meantime, is there a known fix or workaround? Would you be able to provide a pre-release with only the fix, or only a commit or even some instructions how i could fix Olympe myself?

Thank you.

In the meantime, is there a known fix or workaround? Would you be able to provide a pre-release with only the fix, or only a commit or even some instructions how i could fix Olympe myself?

There is no workaround and the fix is composed of multiple commits so it wouldn’t be that simple to share it independently. Anyway, a 7.5.0-rc1 is planned for next week so you shouldn’t have to wait for the 7.5.0 final.

Thank you for working on a fix.

How would i get the 7.5.0-rc1 release? The github is still on 7.4.2. Is there another mirror for releases?

The 7.5.0-rc1 of Anafi Ai and GroundSDK has been delayed and we’re usually trying to keep all SDK components in sync. I’ll try to release Olympe 7.5.0-rc1 ASAP and keep you informed here.

Hello

Sorry for the delay, I’ve just published on firmware.parrot.com the Python Wheel of Olympe 7.5.0-rc1.
It’s available here : https://firmware.parrot.com/Versions/olympe/linux/879876c7e6002d69808dad2bc68ca88f/images/parrot_olympe-7.5.0rc1-py3-none-manylinux_2_27_x86_64.whl

Bug fixes:

Core: Debundle the Python protobuf dependency
Core: Fix concurrency issues
Media: fix media downloading issues
SDK: Allow command ACK and expectation reception order inversion
SDK: Improved dicovery timeout handling
Video: fix raw video frames decoding

Changelog

olympe:

    [DEBUG] bitfields: ignore bits outiside bitfield mask
    [DEBUG] arsdk: avoid unnecessary copies while decoding
    [DEBUG] http: fix missing ConnectionClosed event handling
    [DEBUG] fix internal pomp context fds unregistering
    [DEBUG] media: improve wait_for_pending_download behavior
    [DEBUG] video: remove strides from raw video frames
    [DEBUG] protobuf: don't accumulate repeated fields
    [DEBUG] protobuf: fix command ACK and expectation order inversion
    [DEVMINOR] remove dead code and add some __repr__
    [DEVMINOR] update controller name
    [DEVMINOR] fix typo in example comment
    [DEBUG] fix missing protobuf modules
    [DEVMINOR] update README
    [DEV] add time_function to PilotingCommand class
    [DEV] debundle google.protobuf
    [DEBUG] update to protobuf 3.19
    [DEVMINOR] arsdk: validate message parameters names
    [DEBUG] fix MultipleExpectation notifications
    [DEBUG] fix sequence of commands expectations
    [DEBUG] arsdk: allow command ACK and expectation order inversion
    [BUGFIX] fix thread leaks
    [DEBUG] controller: add missing Future cancelation
    [DEBUG] fix Futures registration
    [DEBUG] discovery: rework timeout handling
    [DEBUG] fix missing expectation cancellation
    [DEBUG] concurrent: fix timers callback scheduling
    [DEBUG] fix expectation cancellation

arsdk-xml:

    [DEV] ardrone3/StartPilotedPOIV2/mode: add locked_once_gimbal
    [DEV] Add esc too hot autolanding trigger reason
    [DEV] add amsl reference command
    [DEV] ardrone3: deprecate PositionChanged
    [DEV] rename WaypointTooFar to FirstWayPointTooFar
    [DEV] common.xml: add FlightPlanState WaypointTooFar
    [DEVMINOR] DRI: add ASTM F341122 US DRI regulation support
    [DEV] camera2: replace start_timestamp by duration_ms in photo/video states
    [DEVMINOR] deprecate ardrone3 NavigateHomeStateChanged

libvideo-metadata:

    [DEVMINOR] move all LTIC/LFIC functions to liblic
    [DEVMINOR] Remove unnecessary whitespace
    [DEBUG] vmeta_session: do not return an error when REC_UDTA_KEY_TITLE is not a date
    [DEV] LTIC: add flag to enable verbose mode

pdraw:

    [DEBUG] Gles2Renderer: secure access to the listener and timers
    [WARNINGFIX] fix clang-format 11
    [DEV] libpdraw: add video presentation statistics
    [DEVMINOR] libpdraw: events pomp_msg* should be const
    [DEVMINOR] libpdraw: code format fix
    [DEBUG] CodedVideoMedia: fix memory leak on error
    [DEV] libpdraw: update frame timestamps

Thanks for the update. Testing it now.
During installation there is a small issue with protobuf dependency. Olympe states to require protobuf v3.19.4, but this gives an error in ‘import olympe’: ModuleNotFoundError: No module named ‘google.protobuf.message_factory’

The fix is simple: pip insall --upgrade protobuf
It will complain about a version mismatch with Olympe, but i ignored it. Now import of olympe works.

The CPU load seems to be stable now, highest thread in my application is now ~19%, which i believe is the on of the video decoders. The main event thread of Olympe is below that, which is very nice. Thanks for the fix. Together with the CPU load issue, also the issue where the SkyController becomes unresponsive is gone now.

1 Like

I cannot reproduce this issue after:

  • uninstalling protobuf
  • downgrading to 7.4.2
  • upgrading to 7.5.0-rc1

Can you please share the pip version you are using ?
I’m currently using pip 22.3.1.
Thanks

This topic was automatically closed after 30 days. New replies are no longer allowed.