-
Notifications
You must be signed in to change notification settings - Fork 128
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Steamwebhelper burns a few CPU cores and doesn't render on ARM64 #1127
Comments
index e58d65c9,e58d65c9..9316571b
--- a/Source/Tests/FEXLoader.cpp
+++ b/Source/Tests/FEXLoader.cpp
@@@ -352,8 -352,8 +352,15 @@@ int main(int argc, char **argv, char **
std::string Program = Args[0];
// These layers load on initialization
-- FEXCore::Config::AddLayer(std::make_unique<FEX::Config::AppLoader>(std::filesystem::path(Program).filename(), true));
-- FEXCore::Config::AddLayer(std::make_unique<FEX::Config::AppLoader>(std::filesystem::path(Program).filename(), false));
++ auto ProgramName = std::filesystem::path(Program).filename();
++ FEXCore::Config::AddLayer(std::make_unique<FEX::Config::AppLoader>(ProgramName, true));
++ FEXCore::Config::AddLayer(std::make_unique<FEX::Config::AppLoader>(ProgramName, false));
++
++ if (ProgramName == "steamwebhelper") {
++ while (1) {
++ select(0, nullptr, nullptr, nullptr, nullptr);
++ }
++ } If you just want steamwebhelper to stop. |
|
Ran the interpreter a couple of times and managed to get a run where it didn't max out a bunch of threads? |
Enabling JIT globally and only having the interpreter enabled for a
|
Additionally.
|
More frustrating results. Setting the max instruction count to 1 works around the issue but it is of course slow and consumes a ton of ram. And a basic app profile for steamwebhelper to do this {"Config": {"MaxInst": "1"}} |
@Sonicadvance1 disabling SRA is a couple of hours of work at best, more involved if you want to mix SRA and non-sra blocks |
I mostly just want a compile time or runtime config flag for controlling using SRA or not. Shouldn't need to be mixed. |
|
Confirmed that setting thread affinity of steamwebhelper to 1 core doesn't change behaviour. |
Additional confirmation that setting thread affinity to 1 core and disabling TSO also doesn't change behaviour. |
Additional. mfence after every instruction and disabling SRA doesn't resolve the issue. |
For reference, this now also needs to include {"Config": {"MaxInst": "1", "StallProcess": "0"}} |
steamwebhelper maxes out 4+ CPU cores on ARM64 and fails to render any content.
This looks like for some reason it is just constantly spinning for work and not getting any.
This doesn't happen on x86-64. It even renders some parts of the UI correctly.
This doesn't seem to be optimization pass related. Same problem even disabling optimization passes.
From what I can tell it doesn't look like it is syscall related. I've been combing through syscalls finding weird edge cases, but nothing that has affected the behaviour.
Switching to llvmpipe doesn't resolve the issue, so it isn't freedreno/turnip related.
Switching to interpreter /might/ resolve the issue, but it runs so slowly that it may just not be passing jobs between threads?So it looks like it might be a JIT bug? It's being a pain to nail down.
This happens with the steamwebhelper 64-bit processes. The 32-bit steam side seems to not care.
This is hard to tell if it happens in a standalone chromium process, it uses a lot of CPU time just idling.
The text was updated successfully, but these errors were encountered: