[Leia] Too high Idle CPU @ARM devices. What changed since Jarvis? How to reduce it?

  • Hello,

    I noticed, that (most propably because Kodi changes in time) idle CPU usage of vanilla LE is around 14-20% (Odroid C2). When I tested release with Jarvis 16.1, idle CPU usage is around 2-6% (and was that also on weaker Raspberry Pi2). This is a bit important for me, as I am using 24/7 installations.

    I am suspecting that this is because some changes in rendering system inside Kodi (?), because I remember, for 18y old PC, I limited GUI fps by limitframes variable@Application.cpp CApplication::Render()

    Jarvis:

    Code
    if (limitFrames) {
      singleFrameTime = 30;  //no need to render menu more than 25 fps on old computer
    
      // Screensaver is on, 1 fps - idle for Raspberry, slow PC etc.
      if (m_bScreenSave==true) {
      singleFrameTime = 1000;  // 1 fps, high wakeup latency but v.low CPU usage
      }

    and thats greatly (20% --> 4% on Odroid C2/Rpi2) reduced Idle CPU usage, when ARM box/Old PC was running, but TV shutdowned and not used (=actived [Black] screensaver).

    I used this (part for screensaver) also for Rpi2 LE some time (years back, maybe it was OE, maybe LE, old version, maybe 4/5/6), but then propably some LE patch/hack (?) did similiar work, and I remember Ive got 2-5% idle CPU even without my modification on LE 7. And I dont use any overclocking, dirty region hacks, etc., I am using standard values and standard installation.

    Leia (LibreELEC 9):

    Now, I am trying to get similiar results with Leia releases, but I am not sucessfull yet. I think, the previous patch/hack is gone, and Kodi again renders all the time all the FPS, and therefore put unecessary CPU Idle load to the 24/7 ARMs.

    I tried to address this on the Kodi side, not much solution there yet. With suspiction, that you guys already sucesfully fought with this before (and then benefit was lost when Kodi code changed), I am trying get some opinions here also.

    The code for CApplication::Render()changed since Jarvis, and unfortunatelly I wasnt able to stop/limit Rendering, through similiar modification on the Leia:

    Code
    void CApplication::Render()
    {
    // do not render if we are stopped, in background, or screensaver active
    if (m_bStop || (m_screensaverActive))
    return;

    I didnt see any change and video out was always rendering. Limitframes variable is gone, so for now I dont know, how to kick at least frame limitation, during screensaver.

    Is there any chance, that this could be solveable similiary as on Jarvis release? I dont get much Kodi support on their forum yet. I believe, that even with Leia it should be possible be somewhere near 4% Idle. When I stopped Kodi service, CPU usage drops kinda that way, and I am pretty sure that Kodi itself when doing nothing doesnt take that amount (20%) of CPU, so it should be most propably rendering. And the same observation I had on Jarvis..

    Differences between LE 7.0.3 and LE 9, with black screensaver on inactivity, without any of my modifications.

    CPU-Snap-Kodi-16-1.jpg

    CPU-Snap-Kodi-18.jpg


    Correction: with Irix mode off top results drops to

    4-6% with default config

    1.5-3.5% with `smartredraw true`

    Busybox’s top from 7.0.3 run in “Solaris mode”, procps-ng from 9.x runs in Irix mode. Not sure yet, why average load doesnt fits, but it seems I was wrong and CPU usage is relativelly same. With smartredraw even better maybe.

    Edited 12 times, last by JimmySmith (January 25, 2019 at 10:54 AM).

  • Correction: with Irix mode off top results drops to

    4-6% with default config

    1.5-3.5% with `smartredraw true`

    Busybox’s top from 7.0.3 run in “Solaris mode”, procps-ng from 9.x runs in Irix mode. Not sure yet, why average load doesnt fits, but it seems I was wrong and CPU usage is relativelly same. With smartredraw even better maybe.