[1.1.35] Linux - Lower FPS on Steam version than on non Steam version
[1.1.35] Linux - Lower FPS on Steam version than on non Steam version
Hello there, I have made this post on Steam first and some people recommended me to post here in the bug reports. Original post: https://steamcommunity.com/app/427520/d ... 883910697/
For some reason, at least in Linux, the Steam version of the game is much slower than the non steam version. I am running on a laptop hooked into a 4K display, the Steam version runs at 40fps while the non Steam version runs at a 60fps. Both with the same configuration. There's a 20 fps loss just for using Steam. I used mods in both versions though disabling them all hasn't changed the performance difference any bit. I still have the same results with or without mods. The logs confirm I am using the dedicated GPU on both versions. The Linux Nvidia driver is set to run all OpenGL programs with VSync on, since Factorio's VSync option is broken for Linux versions.
Logs:
Steam Log: https://pastebin.com/UGeGXsxs
Non Steam Log: https://pastebin.com/q1sxAxeU
My specs:
PC: MSI Leopard 8RF (Laptop)
OS: Arch Linux
Kernel: 5.12.10-arch1-1
DE: Plasma 5.22.0 (KWin w/ OpenGL 3.1)
GPU: Nvidia GTX 1070M (using the dedicated gpu)
GPU driver: nvidia 465.31-8
Display Server: X Server (Xorg)
Game Version: 1.1.35
For some reason, at least in Linux, the Steam version of the game is much slower than the non steam version. I am running on a laptop hooked into a 4K display, the Steam version runs at 40fps while the non Steam version runs at a 60fps. Both with the same configuration. There's a 20 fps loss just for using Steam. I used mods in both versions though disabling them all hasn't changed the performance difference any bit. I still have the same results with or without mods. The logs confirm I am using the dedicated GPU on both versions. The Linux Nvidia driver is set to run all OpenGL programs with VSync on, since Factorio's VSync option is broken for Linux versions.
Logs:
Steam Log: https://pastebin.com/UGeGXsxs
Non Steam Log: https://pastebin.com/q1sxAxeU
My specs:
PC: MSI Leopard 8RF (Laptop)
OS: Arch Linux
Kernel: 5.12.10-arch1-1
DE: Plasma 5.22.0 (KWin w/ OpenGL 3.1)
GPU: Nvidia GTX 1070M (using the dedicated gpu)
GPU driver: nvidia 465.31-8
Display Server: X Server (Xorg)
Game Version: 1.1.35
Definition of Evil: put train lines at (0, 0) with a constant stream of trains passing by.
Re: [1.1.35] Linux - Lower FPS on Steam version than on non Steam version
The steam version has actually lower graphic settings, although its slower. Very strange.andrfgs wrote: βSat Jul 03, 2021 8:29 pm
Logs:
Steam Log: https://pastebin.com/UGeGXsxs
Non Steam Log: https://pastebin.com/q1sxAxeU
Code: Select all
0.378 Graphics options: [Graphics quality: normal] [Video memory usage: all] [DXT: low-quality] [Color: 32bit]
0.378 [Max threads (load/render): 32/12] [Max texture size: 2048] [Tex.Stream.: 0] [Rotation quality: normal] [Other: STDCWT] [B:0,C:0,S:100]
Code: Select all
0.902 Graphics options: [Graphics quality: high] [Video memory usage: all] [DXT: high-quality] [Color: 32bit]
0.902 [Max threads (load/render): 32/12] [Max texture size: 0] [Tex.Stream.: 0] [Rotation quality: normal]
However, I would create a log with identical settings and probably also take a screenshot from ingame debug values (F4 -> show-time-usage, show-fps)
Re: [1.1.35] Linux - Lower FPS on Steam version than on non Steam version
Right, I'm sorry, I lowered the settings on the Steam version to check if it helped and forgot about it.
Here are the logs with the same options on both:
Steam Log: https://pastebin.com/QRLUrVwB
Non Steam Log: https://pastebin.com/rPU3n06G
I used "__GL_SYNC_TO_VBLANK=0" on both but it seems to make no difference. The cap is 60FPS for both, but thats probably due to the driver as Factorio's VSync seems to have no effect. Well, sorta. Factorio's VSync definitely does affect the time in "Wait for Update", but the result is not the intended by a conventional VSync implementation.
Given how lightweight Factorio is on the GPU, and given that having lower quality doesn't help, this is likely a bad integration with Steam on the Linux version or a problem in Steam itself on Linux. Though other games do not seem to suffer the same issue. Even Subnautica, a non Linux native game, runs faster in Steam proton (using the Steam overlay) than it does on Lutris. Though it might be the overlay itself causing the bug for all I know.
Also quite strange the Non Steam version is has a non zero time for "Wait for Update" when Factorio's VSync was disabled in both versions and I passed "__GL_SYNC_TO_VBLANK=0". If it's the driver doing this, then it is disobeying the env variable I passed.
Here are the logs with the same options on both:
Steam Log: https://pastebin.com/QRLUrVwB
Non Steam Log: https://pastebin.com/rPU3n06G
I used "__GL_SYNC_TO_VBLANK=0" on both but it seems to make no difference. The cap is 60FPS for both, but thats probably due to the driver as Factorio's VSync seems to have no effect. Well, sorta. Factorio's VSync definitely does affect the time in "Wait for Update", but the result is not the intended by a conventional VSync implementation.
Given how lightweight Factorio is on the GPU, and given that having lower quality doesn't help, this is likely a bad integration with Steam on the Linux version or a problem in Steam itself on Linux. Though other games do not seem to suffer the same issue. Even Subnautica, a non Linux native game, runs faster in Steam proton (using the Steam overlay) than it does on Lutris. Though it might be the overlay itself causing the bug for all I know.
Also quite strange the Non Steam version is has a non zero time for "Wait for Update" when Factorio's VSync was disabled in both versions and I passed "__GL_SYNC_TO_VBLANK=0". If it's the driver doing this, then it is disobeying the env variable I passed.
- Attachments
-
- Non Steam version.png (10.22 MiB) Viewed 7672 times
-
- Steam Time Usage.png (15.74 MiB) Viewed 7678 times
Definition of Evil: put train lines at (0, 0) with a constant stream of trains passing by.
Re: [1.1.35] Linux - Lower FPS on Steam version than on non Steam version
it's just a factor of the steam web browser getting crazy and consuming CPU, which is why i switched from steam a couple years ago.
My Mods - Crashed spaceship belt balancer
PHP Train Schedule Editor
β’ β’ β’
Base: Bob's @ 1 Million SPM
β’ β’ β’
Tool: Linux-optimized Factorio launch script
PHP Train Schedule Editor
β’ β’ β’
Base: Bob's @ 1 Million SPM
β’ β’ β’
Tool: Linux-optimized Factorio launch script
Re: [1.1.35] Linux - Lower FPS on Steam version than on non Steam version
You can cut steam's overhead on the library page *a lot* by switching to small mode in the view menu.
Re: [1.1.35] Linux - Lower FPS on Steam version than on non Steam version
Wow, nice tip.
At least __GL_SYNC_TO_VBLANK gets listed in the log around first 10 lines, so i think it will be considered.
I also disabled OpenGL Extension KHR_debug via Ctrl+Alt + Settings -> The rest -> "disable opengl ext."
Not sure what it does, but it sounds like debug overhead.
Re: [1.1.35] Linux - Lower FPS on Steam version than on non Steam version
jodokus31 wrote: βSun Jul 04, 2021 7:46 amWow, nice tip.
At least __GL_SYNC_TO_VBLANK gets listed in the log around first 10 lines, so i think it will be considered.
I also disabled OpenGL Extension KHR_debug via Ctrl+Alt + Settings -> The rest -> "disable opengl ext."
Not sure what it does, but it sounds like debug overhead.
This extension allows the GL to notify applications when various events
occur that may be useful during application development, debugging and
profiling.
These events are represented in the form of enumerable messages with a
human-readable string representation. Examples of debug events include
incorrect use of the GL, warnings of undefined behavior, and performance
warnings.
My Mods - Crashed spaceship belt balancer
PHP Train Schedule Editor
β’ β’ β’
Base: Bob's @ 1 Million SPM
β’ β’ β’
Tool: Linux-optimized Factorio launch script
PHP Train Schedule Editor
β’ β’ β’
Base: Bob's @ 1 Million SPM
β’ β’ β’
Tool: Linux-optimized Factorio launch script
Re: [1.1.35] Linux - Lower FPS on Steam version than on non Steam version
@quyxkh I disabled the entire Steam overlay, but it had no effect no fps. Also this is the only game I've had this issue with, so far.
@judokus Where do I find those settings? I should add that turning VSync off on the nvidia driver affects ALL OpenGL applications, including my compositor, which then causes tearing in all my day to day windows. But regardless, I haven't found this to solve the problem anyways. Where is that option to disable the debug? Can I simply pass 'KHR_debug=0' to the game launch parameters?
@judokus Where do I find those settings? I should add that turning VSync off on the nvidia driver affects ALL OpenGL applications, including my compositor, which then causes tearing in all my day to day windows. But regardless, I haven't found this to solve the problem anyways. Where is that option to disable the debug? Can I simply pass 'KHR_debug=0' to the game launch parameters?
Definition of Evil: put train lines at (0, 0) with a constant stream of trains passing by.
Re: [1.1.35] Linux - Lower FPS on Steam version than on non Steam version
If you open Factorio in main menu, click on "Settings" with Ctrl+Alt pressed.
Then an additional menu entry appears in Settings menu called "The Rest"
Here are a lot of different options like "disable opengl extensions"
The same options can be found in config.ini:
I'm not sure, if it really has any impact. Thanks @ptx0 for the info
Then an additional menu entry appears in Settings menu called "The Rest"
Here are a lot of different options like "disable opengl extensions"
The same options can be found in config.ini:
Code: Select all
; Comma separated list of OpenGL extensions that should not be used (for example: ARB_copy_image,KHR_debug)
disabled-opengl-extensions=KHR_debug
Re: [1.1.35] Linux - Lower FPS on Steam version than on non Steam version
OK, I did that and no performance gain. Seriously, I'm really thinking there is a bug in how the Steam integration is implemented for Linux. This is not happening in other games and the Steam overlay being disabled does not improve anything at all.
Definition of Evil: put train lines at (0, 0) with a constant stream of trains passing by.
Re: [1.1.35] Linux - Lower FPS on Steam version than on non Steam version
if you want more info, you can use perf top
on Debian derivatives, sudo apt-get -y install perf-tools
on RH derivatives, sudo dnf install perf-tools
then run:
perf top
and if you want a more visual output, use a flame graph: https://www.brendangregg.com/FlameGraph ... raphs.html
on Debian derivatives, sudo apt-get -y install perf-tools
on RH derivatives, sudo dnf install perf-tools
then run:
perf top
and if you want a more visual output, use a flame graph: https://www.brendangregg.com/FlameGraph ... raphs.html
My Mods - Crashed spaceship belt balancer
PHP Train Schedule Editor
β’ β’ β’
Base: Bob's @ 1 Million SPM
β’ β’ β’
Tool: Linux-optimized Factorio launch script
PHP Train Schedule Editor
β’ β’ β’
Base: Bob's @ 1 Million SPM
β’ β’ β’
Tool: Linux-optimized Factorio launch script
Re: [1.1.35] Linux - Lower FPS on Steam version than on non Steam version
I used Hotspot (https://github.com/KDAB/hotspot), which a GUI version of perf and with flamegraphs integrated to it.
I first had to change the kernel perf event flags to -1 with: 'sudo sysctl -w kernel.perf_event_paranoid=-1'
So here's the flamegraph for the Steam version: And the flamegraph for the Non Steam version: From the graph, the Non Steam version takes most time on the init phase of the game but afterwards it runs smoothly. On the Steam version though, we can see the SwapBuffers call is the problem here. In fact, 'glxSwapBuffers' seems to be called by 'gameoverlayrenderer.so' which is the Steam overlay, making additional calls to the nvidia libraries. And this was with the Steam Overlay disabled on the launcher. So it appears disabling the overlay simply hides the UI, but the render calls are still there.
I first had to change the kernel perf event flags to -1 with: 'sudo sysctl -w kernel.perf_event_paranoid=-1'
So here's the flamegraph for the Steam version: And the flamegraph for the Non Steam version: From the graph, the Non Steam version takes most time on the init phase of the game but afterwards it runs smoothly. On the Steam version though, we can see the SwapBuffers call is the problem here. In fact, 'glxSwapBuffers' seems to be called by 'gameoverlayrenderer.so' which is the Steam overlay, making additional calls to the nvidia libraries. And this was with the Steam Overlay disabled on the launcher. So it appears disabling the overlay simply hides the UI, but the render calls are still there.
Definition of Evil: put train lines at (0, 0) with a constant stream of trains passing by.
Re: [1.1.35] Linux - Lower FPS on Steam version than on non Steam version
Stupid question: What happens, if steam program is running, but you play the non-steam version of factorio independently?
Re: [1.1.35] Linux - Lower FPS on Steam version than on non Steam version
Not a stupid question at all. I do understand your thinking, it could be the platform issuing expensive syscalls to the OS, but unfortunately, nothing changes. The non steam version runs at 60fps regardless.
Definition of Evil: put train lines at (0, 0) with a constant stream of trains passing by.
Re: [1.1.35] Linux - Lower FPS on Steam version than on non Steam version
well thanks for running that, the results weren't what i observed. it looks like steam is garbage in more than one way
My Mods - Crashed spaceship belt balancer
PHP Train Schedule Editor
β’ β’ β’
Base: Bob's @ 1 Million SPM
β’ β’ β’
Tool: Linux-optimized Factorio launch script
PHP Train Schedule Editor
β’ β’ β’
Base: Bob's @ 1 Million SPM
β’ β’ β’
Tool: Linux-optimized Factorio launch script
Re: [1.1.35] Linux - Lower FPS on Steam version than on non Steam version
That's strange. Why should steam version be influenced, but non-steam version not, when steam is running. I cannot imagine, that the executables themselves are different. The problem has to be, how the steam version is called or configured. Maybe you could try to call steam version directly from file manager?
I have steam, but never bothered to activate factorio for steam, because i liked the standalone version more. So i cant test it.
Re: [1.1.35] Linux - Lower FPS on Steam version than on non Steam version
you're chasing your own tail, the library is only running when it is steam that is running the game. context switching is expensive.jodokus31 wrote: βWed Jul 07, 2021 8:33 pmThat's strange. Why should steam version be influenced, but non-steam version not, when steam is running. I cannot imagine, that the executables themselves are different. The problem has to be, how the steam version is called or configured. Maybe you could try to call steam version directly from file manager?
I have steam, but never bothered to activate factorio for steam, because i liked the standalone version more. So i cant test it.
My Mods - Crashed spaceship belt balancer
PHP Train Schedule Editor
β’ β’ β’
Base: Bob's @ 1 Million SPM
β’ β’ β’
Tool: Linux-optimized Factorio launch script
PHP Train Schedule Editor
β’ β’ β’
Base: Bob's @ 1 Million SPM
β’ β’ β’
Tool: Linux-optimized Factorio launch script
Re: [1.1.35] Linux - Lower FPS on Steam version than on non Steam version
Your logs say they're different. Your steam setup has a 175% custom UI scale and a 2048 texture size cutoff.Both with the same configuration.
-
- Inserter
- Posts: 22
- Joined: Wed Dec 09, 2020 3:53 pm
- Contact:
Re: [Oxyd] [1.1.35] Linux - Lower FPS on Steam version than on non Steam version
Steam on Linux has one huge bug/feature, called Steam Runtime.
https://wiki.archlinux.org/title/Steam/Troubleshooting#Steam_runtime
It is a feature, because it (usually) lets you ignore library dependencies of your games and just play them.
It is a bug, because most of the time it degrades performance a lot, and sometimes (very rarely) results in library version conflicts causing crashes.
Usually I disable it on a computer when I play on it enough to get bothered by performance, and haven't enabled it back even once.
For me, Factorio runs, like, 50% faster? With Steam Runtime disabled. Still a bit slower than on Windows, but that's "thanks" to primusrun.
If your distribution doesn't provide a ready way to launch Steam without its Runtime, try something like "STEAM_RUNTIME=0 steam".
(Though that variable might be overridden by the distribution-provided script for running Steam, will have to find and fix it there then.)
When running like that, you might have to install some extra libraries, but if standalone games provide none and still work you should be ok already.
Another option that should work, I think, is to set Launch Options for the game in Steam to something like:
env -u LD_PRELOAD -u LD_LIBRARY_PATH %command%
That should get rid of any possible chance for Steam to force or even suggest any libraries to that one game.
Actually, I'd suggest using this option anyway, because I think Steam tries to inject something even with both Steam Overlay and Runtime disabled.
Again, installing missing libraries might be required.
In general, lots of (semi-)commercial software for Linux is distributed bundled with libraries and utilities "just in case", often old, sometimes broken.
I even had one case where an IDE (STM32Cube) improved from nearly unusable (very broken GUI) to perfectly working after removing bundled JRE.
Basically, your specific Linux setup is an unknown for many software distributors and they try to compensate by bundling extra stuff,
but if your system is properly managed then that bundled stuff is a much greater unknown for you due to being foreign to your system.
https://wiki.archlinux.org/title/Steam/Troubleshooting#Steam_runtime
It is a feature, because it (usually) lets you ignore library dependencies of your games and just play them.
It is a bug, because most of the time it degrades performance a lot, and sometimes (very rarely) results in library version conflicts causing crashes.
Usually I disable it on a computer when I play on it enough to get bothered by performance, and haven't enabled it back even once.
For me, Factorio runs, like, 50% faster? With Steam Runtime disabled. Still a bit slower than on Windows, but that's "thanks" to primusrun.
If your distribution doesn't provide a ready way to launch Steam without its Runtime, try something like "STEAM_RUNTIME=0 steam".
(Though that variable might be overridden by the distribution-provided script for running Steam, will have to find and fix it there then.)
When running like that, you might have to install some extra libraries, but if standalone games provide none and still work you should be ok already.
Another option that should work, I think, is to set Launch Options for the game in Steam to something like:
env -u LD_PRELOAD -u LD_LIBRARY_PATH %command%
That should get rid of any possible chance for Steam to force or even suggest any libraries to that one game.
Actually, I'd suggest using this option anyway, because I think Steam tries to inject something even with both Steam Overlay and Runtime disabled.
Again, installing missing libraries might be required.
In general, lots of (semi-)commercial software for Linux is distributed bundled with libraries and utilities "just in case", often old, sometimes broken.
I even had one case where an IDE (STM32Cube) improved from nearly unusable (very broken GUI) to perfectly working after removing bundled JRE.
Basically, your specific Linux setup is an unknown for many software distributors and they try to compensate by bundling extra stuff,
but if your system is properly managed then that bundled stuff is a much greater unknown for you due to being foreign to your system.
Re: [Oxyd] [1.1.35] Linux - Lower FPS on Steam version than on non Steam version
First sorry for the long time to reply, I have been a bit busy with work related stuff so I couldn't reply right away.
I tried to run Steam in the native mode. I even ran directly on the terminal:
> STEAM_RUNTIME=0 steam
But the FPS is still low.
Next I tried to use the following launch parameters
when running Steam Native and the FPS is still low. Sorry to insist on this, might it actually be the specific implementation of Factorio for steam on Linux that's a bit inneficient?
I don't want to sound rude to the developers or anything, I'm just trying to narrow down the causes of this problem. I really would love to run Factorio with steam because it helps synchronizing the game saves and also blueprints between machines.
I tried to run Steam in the native mode. I even ran directly on the terminal:
> STEAM_RUNTIME=0 steam
But the FPS is still low.
Next I tried to use the following launch parameters
Code: Select all
env -u LD_PRELOAD -u LD_LIBRARY_PATH prime-run %command%
when running Steam Native and the FPS is still low. Sorry to insist on this, might it actually be the specific implementation of Factorio for steam on Linux that's a bit inneficient?
I don't want to sound rude to the developers or anything, I'm just trying to narrow down the causes of this problem. I really would love to run Factorio with steam because it helps synchronizing the game saves and also blueprints between machines.
Definition of Evil: put train lines at (0, 0) with a constant stream of trains passing by.