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.
    • 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
                            • B
                              bluestang @BuZz
                              last edited by

                              @BuZz installed your mesa module without issue. One thing that can be done to possibly cut down on the build time/size of the mesa libraries is to just pass the needed Gallium drivers - v3d,vc4,kmsro for the Pi platform. Drm and surfaceless are default as well, so you also can just pass x11 for -Dplatform argument. I am glad to see a module that brings the latest and greatest from mesa on the pi platforms.

                              I don't have any experience with Debian packages so I've grown accustomed to just installing things through source.

                              Unfortunately, as am sure you are aware...the upstream mesa drivers don't resolve the topic of this thread (I wasn't expecting as much though just based on what I've found to be the cause personally). I also have SDL2 v2.0.12 installed on my Pi 4 and that also does not solve this issue either. I've seen that upstream "v2.0.13" has a lot of changes to the KMS/DRM driver so I guess its a wait and see approach there.

                              https://github.com/raspberrypi/linux/blob/rpi-5.4.y/drivers/gpu/drm/v3d/v3d_drv I believe this is the source of where the issue lies but I don't much time as of late to go through it.

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

                                @bluestang Upstream changed the debian rules around a fair amount - I built with everything as it's easier to maintain and wanted to keep my rules patch minimal (See history - and meson array changes).

                                Current SDL2 master doesn't work at all currently on the RPI4 (the atomic code isn't supported - related to EGL_KHR_fence_sync). I plan to do a ticket upstream.

                                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 2 Replies Last reply Reply Quote 1
                                • B
                                  bluestang @BuZz
                                  last edited by

                                  @BuZz

                                  Current SDL2 master doesn't work at all currently on the RPI4 (the atomic code isn't supported - related to EGL_KHR_fence_sync). I plan to do a ticket upstream.

                                  Is this just a Pi4 issue or does it affect all Pis? I did learn this the hard way, so I ended up going back to v2.0.12 release.

                                  1 Reply Last reply Reply Quote 0
                                  • M
                                    mtucker6784
                                    last edited by

                                    Don't know if this will help, or be beneficial at all to anyone at this point; but if you're still in this position, I hope this post will help you.

                                    I have a 75" LG TV with an Rpi4 box, the tearing was pretty awful (but I never saw this problem with my previous Rpi3 box.)

                                    Here is what I did, and followed is my configuration which seems to have done the trick.

                                    sudo apt-get install libgles2-mesa libgles2-mesa-dev xorg-dev
                                    

                                    Here's my config file

                                    [pi4]
                                    cpu_freq=1800
                                    over_voltage=5
                                    gpu_freq=700
                                    
                                    [all]
                                    dtoverlay=vc4-fkms-v3d
                                    gpu_mem=128
                                    hdml_drive=2
                                    hdmi_group=1
                                    hdmi_mode=76
                                    dtparam=audio=on
                                    

                                    No turbo flag, cpufrequtil or things like that. Short and simple config file.
                                    Emulationstation shows no lag between screens, games play without tearing.

                                    I'm sure the config file can be improved upon, or my flags aren't 100% correct and are open to criticize, or maybe the drivers weren't necessary---but in the offshoot someone is still looking for answers, I hope this helps none the less.

                                    Good luck!

                                    K 1 Reply Last reply Reply Quote 2
                                    • K
                                      Kestrel42 @mtucker6784
                                      last edited by

                                      @mtucker6784 I am running a 4 GB Pi4 B and this certainly made a noticeable difference, thank you.

                                      I didn’t make any other changes except this.

                                      I am using a retroflag NES case with the SSD cartridge on a 65” 4K tv.

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

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

                                        @bluestang Upstream changed the debian rules around a fair amount - I built with everything as it's easier to maintain and wanted to keep my rules patch minimal (See history - and meson array changes).

                                        Current SDL2 master doesn't work at all currently on the RPI4 (the atomic code isn't supported - related to EGL_KHR_fence_sync). I plan to do a ticket upstream.

                                        Have you checked out SDL2 v2.0.14 and the 5.10.2 KMS driver? Everything seems to be working AFAIK. Considering that 5.10 is the next LTS for RPiOS that is good news.

                                        The PulseAudio update kinda came out of nowhere, but with the KMS audio driver it is playing nice.

                                        The 5.10.2 FKMS driver has a nasty screen tearing issue that will never be fixed. The current roadmap has the RPi4 ditching FKMS entirely.

                                        P 1 Reply Last reply Reply Quote 0
                                        • P
                                          paddydukes @bluestang
                                          last edited by paddydukes

                                          Here's my 2c. I also have a 65" LCD tv. I am using the retropie exclusively for games. I was getting crazy low framerate in the main menu, and more worryingly in games. It turned out that the PI was detecting the 4k capabiltiy and autodefaulting to that mode.

                                          I set it to output in 720p, set the TV to detect the resolution so that it adapts to etc. in game.

                                          I am setting 16 bit consoles to runahead 2 frames. So far I've not noticed any tearing or slowdown in SNES and SEGA. I don't really play NES but can test. I haven't noticed any tearing in alphaneo.

                                          I do notice some tearing in N64 and Dreamcast. Mostly in Redream though, and it is experimental. Still, it's the best Dreamcast emulator IMO.

                                          I added comical notes to my config. Edited to remove some unnecessary settings that were the result of incremental change and experimentation:

                                          # uncomment this if your display has a black border of unused pixels visible
                                          # and your display can output without overscan
                                          disable_overscan=1
                                          # uncomment to force a specific HDMI mode (this will force VGA)
                                          # Set to 720p 60hz
                                          hdmi_group=1
                                          hdmi_mode=4
                                          #OVERCLOCK
                                          # Up voltage
                                          over_voltage=6
                                          # Arm at 2
                                          arm_freq=2000
                                          # read loads of shite saying that you should edit v3d directly. It capped me at 500. Changed gpu_freq, boom 700. So I guess don't believe everything you read
                                          gpu_freq=700
                                          

                                          @bluestang I would like to do an experimental build on a different card. I couldn't find good simple instructions on using the KMS driver. When I tried to set the dt_overlay to kms as per online instructions it would fail to boot. If I removed the hdmi cable I could SSH in, but reconnecting it wasn't detected by the TV. Soon as I revert it is detected again. Wasn't sure if I was missing drivers or what I had to do to get them.

                                          Also I've been noticing a few random crashes and reboots, so I might reduce some of the current overclock.

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

                                            @paddydukes said in [Low framerate on main EmulationStation menu - Pi 4]

                                            @bluestang I would like to do an experimental build on a different card. I couldn't find good simple instructions on using the KMS driver. When I tried to set the dt_overlay to kms as per online instructions it would fail to boot. If I removed the hdmi cable I could SSH in, but reconnecting it wasn't detected by the TV. Soon as I revert it is detected again. Wasn't sure if I was missing drivers or what I had to do to get them.

                                            Also I've been noticing a few random crashes and reboots, so I might reduce some of the current overclock.

                                            First and foremost you need to run the latest kernel by running sudo apt update && sudo apt full-upgrade -y.

                                            There are additional steps that you need to do to set up the KMS driver but first let's address your /boot/config.txt:

                                            gpu_freq sets the core clock for various blocks in the gpu and is not recommended anymore.
                                            Change gpu_freq to v3d_freq=700.
                                            I also set the minimum v3d freq to 500, v3d_freq_min=500 but this is completely optional.
                                            gpu_mem is also not a setting needed for the Pi4 either, you can delete this alltogether.
                                            

                                            Proper overclocking documentation can be found here. Make sure that you are using an adequate cooling solution when overclocking.

                                            Now there are 2 distinct configurations you can use from this point forward w/ KMS:

                                            1. KMS w/ Broadcom Audio:
                                            dtoverlay=vc4-kms-v3d,noaudio **AND** dtparam=audio=on in /boot/config.txt
                                            ***This uses the KMS driver only for display and uses the Broadcom firmware audio driver***
                                            ***dtparam=audio=on must be placed before dtoverlay=vc4-kms-v3d,noaudio or else you will have no audio!!!***
                                            

                                            If you chose option 1, you can reboot after you have edited the /boot/config.txt file with the necessary changes.

                                            2. KMS w/ KMS Audio: 
                                            dtoverlay=vc4-kms-v3d ***AND*** dtparam=audio=off or commented in /boot/config.txt
                                            ***This uses the KMS driver for display and audio and disables firmware audio, however, it requires more files to be edited to get KMS audio to work***
                                            Note: the KMS audio is capable of multi-channel audio i.e. 5.1, 7.1, etc. You will need to look at the volume control applet on the desktop and see what is available to your setup.
                                            

                                            For both options, you will need to edit the /boot/config.txt.

                                            If you choose to go with option 2, you will also need to edit the vc4-hdmi.conf file and the pulse audio rules file to get sound from the KMS audio driver to work properly.

                                            Edit as follows w/ proper privileges:

                                            /usr/share/alsa/cards/vc4-hdmi.conf

                                            # Configuration for the VC4-HDMI sound card using software IEC958
                                            # subframe conversion
                                            
                                            <confdir:pcm/hdmi.conf>
                                            vc4-hdmi.pcm.hdmi.0 {
                                            	@args [ CARD AES0 AES1 AES2 AES3 ]
                                            	@args.CARD {
                                            		type string
                                            	}
                                            	@args.AES0 {
                                            		type integer
                                            	}
                                            	@args.AES1 {
                                            		type integer
                                            	}
                                            	@args.AES2 {
                                            		type integer
                                            	}
                                            	@args.AES3 {
                                            		type integer
                                            	}
                                            	type iec958
                                            	slave {
                                            		format IEC958_SUBFRAME_LE
                                            		pcm {
                                            			type hooks
                                            			slave.pcm {
                                            				type hw
                                            				card $CARD
                                            				device 0
                                            			}
                                            			hooks.0 {
                                            				type ctl_elems
                                            				hook_args [
                                            				{
                                            					name "IEC958 Playback Default"
                                            					optional true
                                            					lock true
                                            					preserve true
                                            					value [ $AES0 $AES1 $AES2 $AES3 ]
                                            				}
                                            				]
                                            			}
                                            		}
                                            	}
                                            	status [ $AES0 $AES1 $AES2 $AES3 ]
                                            }
                                            
                                            # default with plug
                                            vc4-hdmi.pcm.default {
                                            	@args [ CARD ]
                                            	@args.CARD {
                                            		type string
                                            	}
                                            	type plug
                                            	slave.pcm {
                                            		type softvol
                                            		slave.pcm {
                                            			@func concat
                                            			strings [ "hdmi:" $CARD ]
                                            		}
                                            		control {
                                            			name "PCM Playback Volume"
                                            			card $CARD
                                            		}
                                            	}
                                            }
                                            

                                            The PulseAudio rules file needs to be edited as well.

                                            /lib/udev/rules.d/91-pulseaudio-rpi.rules

                                            SUBSYSTEM!="sound*", GOTO="end"
                                            ACTION!="change", GOTO="end"
                                            KERNEL!="card*", GOTO="end"
                                            ENV{SOUND_FORM_FACTOR}!="internal", GOTO="end"
                                            
                                            ATTRS{id}=="b1", ENV{PULSE_PROFILE_SET}="rpi-hdmi.conf", GOTO="end"
                                            ATTRS{id}=="b2", ENV{PULSE_PROFILE_SET}="rpi-hdmi.conf", GOTO="end"
                                            ATTRS{id}=="Headphones", ENV{PULSE_PROFILE_SET}="rpi-analog.conf", GOTO="end"
                                            
                                            LABEL="end"
                                            

                                            Reboot after all changes have been made and enjoy!

                                            P 1 Reply Last reply Reply Quote 1
                                            • 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.