Closed Bug 1261620 Opened 10 years ago Closed 10 years ago

plugin-container.exe renamed; causes GPU driver issues

Categories

(Core :: Graphics: Layers, defect)

48 Branch
All
Windows
defect
Not set
major

Tracking

()

RESOLVED INVALID
Tracking Status
firefox47 --- unaffected
firefox48 + fixed
firefox49 + fixed

People

(Reporter: repinski23, Unassigned)

References

Details

(Keywords: regression, Whiteboard: [gfx-noted])

Attachments

(5 files)

Attached image GraphicalArtifacts.png
User Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:48.0) Gecko/20100101 Firefox/48.0 Build ID: 20160402030226 Steps to reproduce: Updated to the latest (2016/04/02) Windows Nightly build, plugin-container.exe has now been renamed to firefox-webcontent.exe Actual results: Major memory leaks and graphical artifacts were caused by the AMD GPU drivers. After forcing firefox-webcontent.exe to use the Power Saving GPU instead of the default High Performance GPU, the problem was resolved. See attachments. Expected results: The GPU drivers should have kept firefox-webcontent.exe restricted to the internal GPU to avoid this problem, as it does for plugin-container.exe While this IS an issue with the drivers, driver support for some of these systems is going to be dropped very soon. If AMD cannot be made aware of this, many people may be SOL if it's not fixable on Firefox's side. This particular system uses a Radeon HG 6620G as the "Power Saving" GPU, and a Radeon HD 6750M as the "High Performance" GPU.
Attached image MemoryUsage.png
Attached image CCCFixAndInfo.png
OS: Unspecified → Windows
Hardware: Unspecified → All
Component: Untriaged → Plug-ins
Product: Firefox → Core
Component: Plug-ins → Graphics: Layers
[Tracking Requested - why for this release]: Regression
Severity: normal → major
Status: UNCONFIRMED → NEW
Ever confirmed: true
Keywords: regression
(In reply to Kyle Repinski from comment #0) > Created attachment 8737527 [details] > GraphicalArtifacts.png > > User Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:48.0) Gecko/20100101 > Firefox/48.0 > Build ID: 20160402030226 > > Steps to reproduce: > > Updated to the latest (2016/04/02) Windows Nightly build, > plugin-container.exe has now been renamed to firefox-webcontent.exe > > > Actual results: > > Major memory leaks and graphical artifacts were caused by the AMD GPU > drivers. After forcing firefox-webcontent.exe to use the Power Saving GPU > instead of the default High Performance GPU, the problem was resolved. See > attachments. > > > Expected results: > > The GPU drivers should have kept firefox-webcontent.exe restricted to the > internal GPU to avoid this problem, as it does for plugin-container.exe > > While this IS an issue with the drivers, driver support for some of these > systems is going to be dropped very soon. If AMD cannot be made aware of > this, many people may be SOL if it's not fixable on Firefox's side. > > This particular system uses a Radeon HG 6620G as the "Power Saving" GPU, and > a Radeon HD 6750M as the "High Performance" GPU. In both the broken and non-broken modes, can you attach the graphics section of about:support?
Flags: needinfo?(repinski23)
Attached image AboutSupportWorking.png
Flags: needinfo?(repinski23)
(In reply to David Anderson [:dvander] from comment #4) > In both the broken and non-broken modes, can you attach the graphics section > of about:support? Yes, I have attached them. You'll notice that they're exactly the same. I suspect the crux of the issue is that the GPU drivers are running firefox.exe and firefox-webcontent.exe on different GPUs, and I can't imagine that working nicely. Unfortunately I can't force firefox.exe to run on the High Performance GPU, as it locks it (and the old plugin-container.exe) for "system stability purposes". Now I understand why they did that. Just my 2 cents here: if Firefox used a single process name (firefox.exe+firefox.exe instead of firefox.exe+firefox-webcontent.exe) like other browsers this would be a non-issue. While that might look confusing in Task Manager to some people, it seems to be more trouble than expected having these separate names and files. At the very least I think opinions need to be set aside for a minute and look at the technical advantages and disadvantages to both.
(In reply to Kyle Repinski from comment #7) > (In reply to David Anderson [:dvander] from comment #4) > > In both the broken and non-broken modes, can you attach the graphics section > > of about:support? > > Yes, I have attached them. You'll notice that they're exactly the same. > > I suspect the crux of the issue is that the GPU drivers are running > firefox.exe and firefox-webcontent.exe on different GPUs, and I can't > imagine that working nicely. Unfortunately I can't force firefox.exe to run > on the High Performance GPU, as it locks it (and the old > plugin-container.exe) for "system stability purposes". Now I understand why > they did that. We have code to prevent this, but we've run into problems with Windows 7 before: Optimus drivers report the wrong adapter in the child process. We get around this by detecting whether the vendor mismatches, but if ATI has similar problems and both GPUs have the same vendor - that workaround won't work. Whether or not the processes renaming sticks, we should probably look into this. Jeff, any ideas? Do we have any machines in the lab with this hardware?
Flags: needinfo?(jmuizelaar)
(In reply to David Anderson [:dvander] from comment #8) > (In reply to Kyle Repinski from comment #7) > > (In reply to David Anderson [:dvander] from comment #4) > > > In both the broken and non-broken modes, can you attach the graphics section > > > of about:support? > > > > Yes, I have attached them. You'll notice that they're exactly the same. > > > > I suspect the crux of the issue is that the GPU drivers are running > > firefox.exe and firefox-webcontent.exe on different GPUs, and I can't > > imagine that working nicely. Unfortunately I can't force firefox.exe to run > > on the High Performance GPU, as it locks it (and the old > > plugin-container.exe) for "system stability purposes". Now I understand why > > they did that. > > We have code to prevent this, but we've run into problems with Windows 7 > before: Optimus drivers report the wrong adapter in the child process. We > get around this by detecting whether the vendor mismatches, but if ATI has > similar problems and both GPUs have the same vendor - that workaround won't > work. I'm not familiar with the code in question, but would it be possible to extend it to also look at the device ID rather than just the vendor ID?
(In reply to Kyle Repinski from comment #9) > I'm not familiar with the code in question, but would it be possible to > extend it to also look at the device ID rather than just the vendor ID? Yes - we do do that, actually [1], but drivers return buggy data on Windows 7. Optimus goes as far as to return the same unique ID for both adapters. So if the check is failing ATI might be doing something even worse :( We could try including even more fields in the check. I'll send something to try tonight. [1] hg.mozilla.org/releases/mozilla-release/file/tip/gfx/thebes/gfxWindowsPlatform.cpp#l1673
(In reply to David Anderson [:dvander] from comment #8) > > Whether or not the processes renaming sticks, we should probably look into > this. Jeff, any ideas? Do we have any machines in the lab with this hardware? Not exactly a 6620G, but the 6450 that Benoit has in "Bulldozer" system should be close enough.
Flags: needinfo?(bgirard)
Whiteboard: [gfx-noted]
Jeff, maybe we can find out from our local AMD contacts if they do "magic" (like Nvidia did) by checking the executable name and doing different things if they detect "firefox"?
I don't think we have any dual AMD GPU systems in the office. Kyle, what's the make and model of the machine you're using?
Flags: needinfo?(jmuizelaar)
The bulldozer has a single GPU. Let me know if you need me to run a test and/or get a second GPU for it (if it's supported).
Flags: needinfo?(bgirard)
I've purchased a laptop that has a AMD Radeon HD 7470M/Radeon 6520G combo. Hopefully, that will be similar enough to reproduce the problem.
(In reply to David Anderson [:dvander] from comment #13) > Kyle, can you try one of the nightly builds here? > > http://archive.mozilla.org/pub/firefox/try-builds/danderson@mozilla.com- > 4c022d94cd1d66bf746816a8f87c4a97449750ca/try-win32/ Same issue with this build. (In reply to Jeff Muizelaar [:jrmuizel] from comment #16) > I've purchased a laptop that has a AMD Radeon HD 7470M/Radeon 6520G combo. > Hopefully, that will be similar enough to reproduce the problem. That should be close enough, this is a (AMD+AMD) Switchable Graphics thing in general I think. (In reply to Milan Sreckovic [:milan] from comment #12) > Jeff, maybe we can find out from our local AMD contacts if they do "magic" > (like Nvidia did) by checking the executable name and doing different things > if they detect "firefox"? I believe the 'magic' they do for Firefox is simply locking "firefox" and "plugin-container" to the same GPU in the Switchable Graphics settings. With the subprocess being renamed this magic is obviously no longer in place. I have a bad feeling that the way Switchable Graphics profile settings work is something along the lines of "point ALL adapters to the profile's GPU setting". :(
Flags: needinfo?(repinski23)
OK, we can reproduce the issue here. Paul, I understand you might be able to help us out here. Is there a way for us to add code to Firefox to state a preference for which GPU to run on? Or is there at least a way for us to detect which GPU we're running on? Our existing dual GPU detection code doesn't seem to see both GPUs here.
Flags: needinfo?(paul.blinzer)
Let's back this change out while we're waiting for the updates.
In regards to stating which GPU Firefox would like to run on, there is this: extern "C" { __declspec(dllexport) int AmdPowerXpressRequestHighPerformance = 1; } This would request that an application use the dGPU, albeit with the caveat that it's only supposed to work if a Switchable Graphics profile is not already assigned. firefox.exe is already locked to the iGPU... so does this flag by chance work in reverse (set to 0 for iGPU)? Or is there another flag similar to this that could be useful?
For such Dual-GPU systems there is indeed some filename detection going on, causing the corruption if "the wrong" GPU is used (plugins are directed to integrated GPU). We will address this in the profile data. As workaround the end user can also set up the firefox-webcontent.exe through the Catalyst Control Center (CCC) to integrated, which should address the problem. To do so, go to CCC, select "Power", "Switchable Graphics Application Settings", "Add Application" and assign integrated GPU to firefox-webcontent.exe
Flags: needinfo?(paul.blinzer)
(In reply to Paul Blinzer from comment #21) > For such Dual-GPU systems there is indeed some filename detection going on, > causing the corruption if "the wrong" GPU is used (plugins are directed to > integrated GPU). We will address this in the profile data. > As workaround the end user can also set up the firefox-webcontent.exe > through the Catalyst Control Center (CCC) to integrated, which should > address the problem. > To do so, go to CCC, select "Power", "Switchable Graphics Application > Settings", "Add Application" and assign integrated GPU to > firefox-webcontent.exe Rather than be dependent on the profiles getting updated (new drivers for these GPUs aren't going to be around much longer if at all), or users being intelligent enough to figure this out, could you just add something similar to, but the opposite of, the AmdPowerXpressRequestHighPerformance symbol check? E.g. AmdPowerXpressRequestPowerSaving? Just something that can avoid these problems coming from something as simple as changing the name of an executable file. :/
(In reply to Kyle Repinski from comment #22) > Rather than be dependent on the profiles getting updated (new drivers for > these GPUs aren't going to be around much longer if at all), or users being > intelligent enough to figure this out, could you just add something similar > to, but the opposite of, the AmdPowerXpressRequestHighPerformance symbol > check? E.g. AmdPowerXpressRequestPowerSaving? Just something that can avoid > these problems coming from something as simple as changing the name of an > executable file. :/ Even if AMD adds this, then you're still requiring people to update their drivers to get access to this new flag. Which means they'll get the new profiles anyway. So I don't think this helps unless they had sufficient foresight and that flag already exists.
There is actually such a setting to select a default GPU in the Control application. But that typically defeats the purpose for a lot of users that expect the discrete GPU to be used for the majority of the applications (= perceived performance issue). The issue is typically caused by plugins like Flash, which do not have an understanding of multi-GPU systems. Native HTML5 playback should operate better here.
Milan, gcp, can you help find an owner for this bug? What is it that we may want to back out, mentioned in comment 19?
Flags: needinfo?(milan)
Flags: needinfo?(gpascutto)
The change that caused this was backed out a few days after it landed, and it's not going to be landed again. This bug should be closed as invalid.
Status: NEW → RESOLVED
Closed: 10 years ago
Flags: needinfo?(milan)
Flags: needinfo?(gpascutto)
Resolution: --- → INVALID
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Creator:
Created:
Updated:
Size: