RetroPie forum home
    • Recent
    • Tags
    • Popular
    • Home
    • Docs
    • Register
    • Login
    Please do not post a support request without first reading and following the advice in https://retropie.org.uk/forum/topic/3/read-this-first

    Low framerate on main EmulationStation menu - Pi 4

    Scheduled Pinned Locked Moved Help and Support
    pi 4estationperformance
    136 Posts 16 Posters 30.0k Views
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • B
      bluestang
      last edited by

      I couldn’t find this issue at first but I did remember reading at some point. Seems relevant to the issues described in this thread.

      https://github.com/raspberrypi/firmware/issues/1154#issuecomment-544428380

      1 Reply Last reply Reply Quote 0
      • GreenHawk84G
        GreenHawk84
        last edited by

        I am glad there is interest in this, thanks for the updates !

        1 Reply Last reply Reply Quote 0
        • B
          bluestang
          last edited by bluestang

          Can anyone with a Pi 3 assist with some info?

          With EmulationStation running, can you open an SSH session and run the following cmds and post the results?

          1. cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
          2. vcgencmd measure_clock v3d
          3. vcgencmd dispmanx_list
          4. tvservice -s

          Appreciate the help.

          mituM stooS 2 Replies Last reply Reply Quote 0
          • mituM
            mitu Global Moderator @bluestang
            last edited by

            @bluestang said in Low framerate on main EmulationStation menu - Pi 4:

            cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
            output:

            ondemand
            ondemand
            ondemand
            ondemand
            

            vcgencmd measure_clock v3d
            output:

            frequency(43)=300000000
            

            vcgencmd dispmanx_list
            output:

            display:2 format:RGB565 transform:0 layer:-127 1920x1080 src:0,0,1920,1080 dst:0,0,1920,1080 cost:889 lbm:0
            display:2 format:RGBA32 transform:20000 layer:0 1920x1080 src:0,0,1920,1080 dst:0,0,1920,1080 cost:1156 lbm:0
            display:2 format:UNKNOWN transform:20000 layer:10000 0x0 src:0,0,1920,1080 dst:0,0,1920,1080 cost:0 lbm:0
            display:2 format:UNKNOWN transform:20000 layer:10000 0x0 src:0,0,1920,1080 dst:0,0,1920,1080 cost:0 lbm:0
            display:2 format:UNKNOWN transform:20000 layer:10000 0x0 src:0,0,1920,1080 dst:0,0,1920,1080 cost:0 lbm:0
            

            tvservice -s
            output:

            state 0xa [HDMI CEA (16) RGB lim 16:9], 1920x1080 @ 60.00Hz, progressive
            
            1 Reply Last reply Reply Quote 0
            • stooS
              stoo @bluestang
              last edited by

              @bluestang

              cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor

              ondemand
              ondemand
              ondemand
              ondemand
              

              vcgencmd measure_clock v3d

              frequency(43)=250000000
              

              vcgencmd dispmanx_list

              display:2 format:XRGB8888 transform:0 layer:-127 src:0,0,1920,1080 dst:0,0,1920,1080 cost:1156 lbm:0
              display:2 format:UNKNOWN transform:20000 layer:10000 src:0,0,1920,1080 dst:0,0,1920,1080 cost:0 lbm:0
              display:2 format:RGBA32 transform:20000 layer:10000 src:0,0,1920,1080 dst:0,0,1920,1080 cost:1156 lbm:0
              

              tvservice -s

              state 0x12000a [HDMI CEA (16) RGB lim 16:9], 1920x1080 @ 60.00Hz, progressive
              
              1 Reply Last reply Reply Quote 0
              • B
                bluestang
                last edited by

                Thanks @mitu and @stoo!

                Well looks like the 30 FPS issue for Pi 4s is related to the clock speed of v3d aka the GPU. The framerate drop is easily reproducible on the larger theme sets. (i.e. Cosmic Rise)

                During video playback, a stock Pi 4's GPU clock speed will scale to 500 Mhz. On my Pi 4, I have a custom splash screen that plays prior to loading the ES main menu. During that video playback, the frequency reported is 500 Mhz. The GPU can technically be clocked higher with specific command line overclocks but for clarity lets eliminate overclocked use cases.

                Whatever is telling the scaling governor to downclock the GPU is the cause of the 30 fps issue for Pi 4s. If I go to one of my collection menus where I also have video snaps played back, the GPU will scale its frequency to 500 Mhz, and I do not ever see the 30 FPS issue within those menus. It is only in the Main Menu in my case and I can induce the fps drop by invoking the screensaver where the GPU begins to downclock down to 300 Mhz or lower.

                This also makes perfect sense that the issue "goes away" if you play a game and come back to the menu...its safe to say that is because the GPU stays scaled to 500 Mhz until the scaling governor downclocks the GPU.

                I put v3d_freq_min=500 in /boot/config.txt and that has solved the issue for me. My SoC temp stays around 43/44* C and I'm using the Canakit case with a fan.

                You could also change the scaling_governor to performance as well, but that will also keep the arm frequency to the max clock speed as well.

                stooS 1 Reply Last reply Reply Quote 1
                • stooS
                  stoo @bluestang
                  last edited by

                  @bluestang I'll check your fix out soon.

                  I have no idea about the Pi4 arch, but in my completely ignorant opinion, this sounds like a firmware problem.

                  B 1 Reply Last reply Reply Quote 0
                  • B
                    bluestang @stoo
                    last edited by

                    @stoo Yea this could be an issue with how the kernel handles the scaling_governor on the ondemand setting. In fairness though, this could be expected behavior on this setting but I just asked the question on the official forums in the 5.4 Kernel thread.

                    In RetroPie's use case, it would make sense to scale the GPU to its highest allowable setting but that might not be the desired effect for users outside of RetroPie.

                    stooS dankcushionsD 2 Replies Last reply Reply Quote 0
                    • stooS
                      stoo @bluestang
                      last edited by stoo

                      @bluestang How does it differ from the Pi3? How much does the Pi3 scale the GPU while ES is running?

                      The reason I ask is that while forcing the GPU to remain at 500MHz does indeed make ES much smoother on the Pi4, I can't help wondering whether we're just masking a deeper performance issue with ES...

                      ...or a deeper performance issue somewhere else in the Pi4.

                      B 1 Reply Last reply Reply Quote 0
                      • dankcushionsD
                        dankcushions Global Moderator @bluestang
                        last edited by

                        @bluestang said in Low framerate on main EmulationStation menu - Pi 4:

                        In RetroPie's use case, it would make sense to scale the GPU to its highest allowable setting but that might not be the desired effect for users outside of RetroPie.

                        i don't agree. my retropie box spends 99% of it's uptime idling in ES, so I don't want it maxed out at CPU/GPU frequencies when it doesn't need them - that's just wasting power. for portable users on batteries, it's even more important.

                        if the issue is confirmed i guess it's a bug with the governor not correctly evaluating the GPU demand.

                        B 1 Reply Last reply Reply Quote 1
                        • B
                          bluestang @stoo
                          last edited by

                          @stoo said in Low framerate on main EmulationStation menu - Pi 4:

                          @bluestang How does it differ from the Pi3? How much does the Pi3 scale the GPU while ES is running?

                          The reason I ask is that while forcing the GPU to remain at 500MHz does indeed make ES much smoother on the Pi4, I can't help wondering whether we're just masking a deeper performance issue with ES.

                          Now you are talking about hardware differences between the Pi 3 and Pi 4. There are a lot of variables involved so it's hard to even begin to go down this road.

                          The Pi 4 is taking a more standard approach to Linux when it comes to software development. What worked on the Pi 0-3 may not work on the Pi 4.

                          1 Reply Last reply Reply Quote 0
                          • stooS
                            stoo
                            last edited by stoo

                            Also, the reason that this issue is so noticable on the Pi4 seems to be a difference in the way they handle framerate drops, compared to the Pi3.

                            On the Pi3 (at least, on my Pi3) if you open the "Start" menu in ES (the Main Menu with Scraper etc.), the framerate will drop to around 50fps. This menu seems to have a fairly heavy performance impact.

                            On the Pi4, opening this menu (and you may have to go into a System and look at a game list to make this happen) causes the framerate to drop to 30fps.

                            In other words:

                            Pi3, when losing v-sync, will drop to whatever framerate it can manage.

                            Pi4, when losing v-sync, will drop to half the refresh-rate.

                            B 1 Reply Last reply Reply Quote 0
                            • B
                              bluestang @dankcushions
                              last edited by bluestang

                              @dankcushions said in Low framerate on main EmulationStation menu - Pi 4:

                              @bluestang said in Low framerate on main EmulationStation menu - Pi 4:

                              In RetroPie's use case, it would make sense to scale the GPU to its highest allowable setting but that might not be the desired effect for users outside of RetroPie.

                              i don't agree. my retropie box spends 99% of it's uptime idling in ES, so I don't want it maxed out at CPU/GPU frequencies when it doesn't need them - that's just wasting power. for portable users on batteries, it's even more important.

                              if the issue is confirmed i guess it's a bug with the governor not correctly evaluating the GPU demand.

                              And this is the exact reason why I think the ondemand setting may be operating as advertised. No point in wasting cpu/gpu cycles for "low demand" apps.

                              Without any answers as to why this setting is causing this issue I can speculate all day long but no need to waste anyone's time with that.

                              1 Reply Last reply Reply Quote 0
                              • B
                                bluestang @stoo
                                last edited by bluestang

                                @stoo I am aware of this too. This is good info for future reference.

                                @stoo said in Low framerate on main EmulationStation menu - Pi 4:

                                Also, the reason that this issue is so noticable on the Pi4 seems to be a difference in the way they handle framerate drops, compared to the Pi3.

                                On the Pi3 (at least, on my Pi3) if you open the "Start" menu in ES (the Main Menu with Scraper etc.), the framerate will drop to around 50fps. This menu seems to have a fairly heavy performance impact.

                                On the Pi4, opening this menu (and you may have to go into a System and look at a game list to make this happen) causes the framerate to drop to 30fps.

                                In other words:

                                Pi3, when losing v-sync, will drop to whatever framerate it can manage.

                                Pi4, when losing v-sync, will drop to half the refresh-rate.

                                1 Reply Last reply Reply Quote 0
                                • F
                                  FrancesKelsey
                                  last edited by

                                  you need to change some keys before launching

                                  1 Reply Last reply Reply Quote 0
                                  • B
                                    bluestang
                                    last edited by bluestang

                                    The ondemand setting ramps the frequency of the gpu to its default/overlocked setting and then will downclock the gpu when not in use.

                                    It appears that the EmulationStation OpenGL/ES calls do not trigger the gpu to ramp up its frequency therefore the gpu stays downclocked and renders 30 fps when downclocked. If it did, then the gpu would be constantly be at the 500 Mhz default setting. Just as it does for video snap playbacks, and even then after the gpu is no longer being used for video playback the kernel downclocks the gpu again. Or if you play a game from an emulator, the gpu clock rate may temporarily stay at its setting but will eventually downclock.

                                    So there are several options, one of them was already posted earlier as to what can be done to fix this. I'm not sure opening an issue with the RPi team will fix this since the kernel seems to be behaving as expected in the ondemand setting.

                                    The issue for me is trivial and fixable by the setting the v3d minimum frequency. My temps did not increase, in fact the only time when my temps increase to eye popping levels is during code compiles rather than the emulators I normally play.

                                    dankcushionsD stooS 2 Replies Last reply Reply Quote 1
                                    • dankcushionsD
                                      dankcushions Global Moderator @bluestang
                                      last edited by

                                      @bluestang said in Low framerate on main EmulationStation menu - Pi 4:

                                      So there are several options, one of them was already posted earlier as to what can be done to fix this. I'm not sure opening an issue with the RPi team will fix this since the kernel seems to be behaving as expected in the ondemand setting.

                                      i'm not sure i understand this - emulationstation is rendering via the GPU so if it's dropping down to 30fps that implies to me that the demand is not being correctly identified, however i'm not sure how it detects GPU load/demand. i wonder if it's the same using the GLES2 version of ES? https://github.com/RetroPie/EmulationStation/commit/55df3d833235976585d549d0a0548244ab838ebf

                                      in any case, to report it to the firmware we'd need to create a simple example program.

                                      B 1 Reply Last reply Reply Quote 0
                                      • B
                                        bluestang @dankcushions
                                        last edited by

                                        @dankcushions said in Low framerate on main EmulationStation menu - Pi 4:

                                        @bluestang said in Low framerate on main EmulationStation menu - Pi 4:

                                        So there are several options, one of them was already posted earlier as to what can be done to fix this. I'm not sure opening an issue with the RPi team will fix this since the kernel seems to be behaving as expected in the ondemand setting.

                                        i'm not sure i understand this - emulationstation is rendering via the GPU so if it's dropping down to 30fps that implies to me that the demand is not being correctly identified, however i'm not sure how it detects GPU load/demand. i wonder if it's the same using the GLES2 version of ES? https://github.com/RetroPie/EmulationStation/commit/55df3d833235976585d549d0a0548244ab838ebf

                                        I've also tested the GLES 2.0 renderer in EmulationStation's master branch and it exhibits the same behavior.

                                        in any case, to report it to the firmware we'd need to create a simple example program.

                                        Agreed.

                                        1 Reply Last reply Reply Quote 0
                                        • BuZzB
                                          BuZz administrators
                                          last edited by

                                          Not directly related but new Mesa was mentioned. I have a branch with a module I use for testing latest mesa. It should be considered development only and it breaks often due to upstream changes. It should be considered unsupported so don't try it unless you are confident at fixing problems.

                                          https://github.com/joolswills/RetroPie-Setup/tree/mesa

                                          You will need to manually enable deb-src for the raspbian repos so the apt build-dep works (in raspi.list).

                                          The module will also upgrade meson, and build new libdrm and libglvnd packages.

                                          This builds the latest git Mesa. Using Debian package info from latest Debian experimental with some patches.

                                          retropie_packages.sh mesa 
                                          

                                          To install. But safer to do depends, sources, build, install separately in case of error.

                                          retropie_packages.sh mesa downgrade
                                          

                                          To restore to raspbian versions.

                                          To help us help you - please make sure you read the sticky topics before posting - https://retropie.org.uk/forum/topic/3/read-this-first

                                          B 1 Reply Last reply Reply Quote 3
                                          • stooS
                                            stoo @bluestang
                                            last edited by

                                            the only time when my temps increase to eye popping levels is during code compiles rather than the emulators I normally play.

                                            The GPU just doesn't seem to generate that much heat. Maybe if we had a FurMark equivalent or something it would, but under normal operation, even with the frequency locked high, it seems fine.

                                            As you say, the only time the fan on my Argon ONE case actually comes on is during compiles. Even then it tops out at around 56c (and this is with the Pi4 oc'd to 2GHz).

                                            1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Contributions to the project are always appreciated, so if you would like to support us with a donation you can do so here.

                                            Hosting provided by Mythic-Beasts. See the Hosting Information page for more information.