
ブラウザーの実行ファイル名によって最適化を行う AMD の GPU ドライバー 46
ストーリー by headless
最適 部門より
最適 部門より
Yandex のエンジニアが Yandex Browser のパフォーマンスと安定性の問題を調べていたところ、AMD の GPU ドライバーの挙動がブラウザーの実行ファイル名によって変わることを発見したそうだ
(Neowin の記事、
Habr の記事)。
発見のきっかけとなったのは、Lenovo のノート PC に搭載されたタッチパッドでウェブページをスクロールする際、Yandex Browser ではひどくカクカクした動作になるのに対し、Google Chrome や Microsoft Edge では滑らかな動作がみられたことだ。Chrome も Yandex も Chromium ベースであり、タッチパッドイベントの処理もオープンソースの Chromium と違いはみられないという。そのため、何か他の部分に問題があると考えて調査を進め、実行ファイル名を「browser.exe」から「chrome.exe」に変えると問題が解消することを発見する。
ゲームアプリでは実行ファイル名によって GPU ドライバーが最適化を行うことが知られているが、Yandex は AMD の GPU ドライバーがブラウザーアプリでも実行ファイル名によって最適化を行うという仮説を立てて実験。Chromium のサンドボックス機能を利用して「GetModuleFilenameA/GetModuleFilenameW」関数と「GetModuleFilenameExA/GetModuleFilenameExW」関数が返す実行ファイル名をbrowser.exe」から「chrome.exe」に変更してテストを実行したところ、GPU プロセスのクラッシュ回数は 5.5 分の 1 に減り、メモリ使用量は 8% 減少したという。ウェブページの読み込みやユーザーインターフェイスの反応もわずかに向上したそうだ。
この結果を受けて Yandex は AMD に「browser.exe」を最適化対象の実行ファイル名リストに加えるよう要請する一方、Windows 版の Yandex Browser バージョン 22.9.0 以降では GPU プロセスで「chrome.exe」のふりをするよう変更したとのことだ。
発見のきっかけとなったのは、Lenovo のノート PC に搭載されたタッチパッドでウェブページをスクロールする際、Yandex Browser ではひどくカクカクした動作になるのに対し、Google Chrome や Microsoft Edge では滑らかな動作がみられたことだ。Chrome も Yandex も Chromium ベースであり、タッチパッドイベントの処理もオープンソースの Chromium と違いはみられないという。そのため、何か他の部分に問題があると考えて調査を進め、実行ファイル名を「browser.exe」から「chrome.exe」に変えると問題が解消することを発見する。
ゲームアプリでは実行ファイル名によって GPU ドライバーが最適化を行うことが知られているが、Yandex は AMD の GPU ドライバーがブラウザーアプリでも実行ファイル名によって最適化を行うという仮説を立てて実験。Chromium のサンドボックス機能を利用して「GetModuleFilenameA/GetModuleFilenameW」関数と「GetModuleFilenameExA/GetModuleFilenameExW」関数が返す実行ファイル名をbrowser.exe」から「chrome.exe」に変更してテストを実行したところ、GPU プロセスのクラッシュ回数は 5.5 分の 1 に減り、メモリ使用量は 8% 減少したという。ウェブページの読み込みやユーザーインターフェイスの反応もわずかに向上したそうだ。
この結果を受けて Yandex は AMD に「browser.exe」を最適化対象の実行ファイル名リストに加えるよう要請する一方、Windows 版の Yandex Browser バージョン 22.9.0 以降では GPU プロセスで「chrome.exe」のふりをするよう変更したとのことだ。
ソレに似ているWindowsの機能 (スコア:2)
設定 - システム - ディスプレイ - グラフィック
アプリのカスタム オプション
例えば、ゲームではdGPUを、ウェブブラウザではiGPUを使うといった設定を行える。
ファイル名だけで判別して (スコア:0)
挙動を変えるのはあまりよろしくない手法よね。
記事にあるように他のソフトウェアが成り済ませるし。
とはいえ、他に方法が無かったんだろうな多分。
Re:ファイル名だけで判別して (スコア:3, 参考になる)
AMDのGPUドライバーってのが 「AMD Software: Adrenaline Edition」のことだとしたら、騒ぐまでもなく設計通りの挙動。
ブラウザ、ゲームやグラフィックスアプリケーションなどを、パス・プロセス名のほかウインドウ名・ハッシュなどで認識してチューニングを切り変えている模様。
古いバージョンだと、例えば"game.exe"という名前のフリーのゲームなら、Unityだろうがツクールだろうがひとまとめだった。
最近の版は個別で認識しているから、ファイル名・パスだけ見ているわけではなさそう。
だから、ファイル名を偽装するようなことをしても、後で弾かれる可能性もある。
# GPUプロセスがクラッシュしまくるのは、アプリケーション/シェーダーの作りが根本的に悪いと思うんだけれどねぇ…
Re: (スコア:0)
詳しく知らないのだけどゲームへの最適化もファイル名でやってるのだろうか
ベンチマークソフトもファイル名変えたら挙動が変わるのだろうか
Re: (スコア:0)
browser.exeだと、他のアプリケーションと被る可能性があるし、実行ファイル名で判別は良くないですね。
Re: (スコア:0)
FEATURE_BROWSER_EMULATIONみたいな
Re: (スコア:0)
マインスイーパーやソリティアで、GPUフル稼働して消費電力が爆上げになるのは困るし、
ある程度しょうがないんじゃないでしょうか
Re: (スコア:0)
でも今回の場合とは逆にただのメモ帳ソフトが最適化対象として登録されているファイル名と偶然被っちゃってGPUフル稼働消費電力爆上げになってしまうみたいな可能性もあるんじゃなかろうか。
Re: (スコア:0)
Windowsセキュリティのランサムウェアの防止が、実行ファイル名しか指定できないので困る。
バッチファイルとかのスクリプトで何か処理しようとして引っかかり、
処理の間だけOFFにして処理が終わるとONにするようなことを頻繁にやってる。
Re:ファイル名だけで判別して (スコア:1)
いやそれは自分の挙動が自分が呼び出された名前で変わるって話だろう?これは自分を呼び出したものの名前で挙動が変わるって話で、たとえばブラウザがある日バイナリ名を変えてきたら動作しなくなってしまう。自分の名前は自分で把握できるけど、呼び出す側がどういう名前かは知ることはできない、それは悪手ではないかって話じゃないの?
Re: (スコア:0)
BusyBoxもそんな感じだったかしら。
実行時のメモリ消費量が多少増えそうだけど今時どうでも良いよね。
Re: (スコア:0)
コードセグメントをすべてのコマンドで共有できるのでむしろフットプリントを節約できる可能性がある
そもそもBusyBoxはメモリ要件が厳しい組み込み環境向けだが?
Re: (スコア:0)
「コードセグメントをすべてのコマンドで共有」するなら、一つ呼び出すときに全部読み込む分トータルでは増えるのが道理でしょ。CLIでコマンドを呼ぶ想定だと。
一方ストレージサイズは減るし、頻繁に呼び出してキャッシュにずっと乗ってる状況では有利。
なおBusyBoxはuClibcとやらを使うことでさらに節約してるがそれは別の話。
Re: (スコア:0)
MS-DOSみたいに同時に1つのプログラムしか動かないと思ってるの? psとか叩いてみたら?
Re: (スコア:0)
BusyBoxのコマンドの多くは実行後短時間で処理を終えて終了するので、パイプでつないだりしなければ複数同時に動いてることは多くないのでは。
シェルスクリプトで実行するときも基本的には「前のコマンドが処理を終えてから次のコマンドを起動」だよね。
Re: (スコア:0)
全部は読み込まないよ
ページサイズ(普通4KB)単位で使ったところだけです
とはいうものの、RAM上にinitrd(最近はinitramfs)を展開して実行していたりすると、全部RAMに読み込んじゃってることになりますね
陰謀論的に読み解く (スコア:0)
(以下はあくまで思考実験です)
キモはYandex。言わずとしれたロシアの企業だし、Wikipediaによれば「ヤンデックスはロシアによる国家管理を受け入れた」という曰く付きの存在。
一方、AMDに限らずGPUはいまや戦略物資の一端を担っているので、そのメーカーは米国政府とはツーカーの仲。
よって昨今の国政情勢に鑑み、米国政府の意を受けて、AMDがYandexに嫌がらせをしている?
Re: (スコア:0)
Yandexを排除したいんじゃなくて、ブラウザ向け最適化のターゲットにマイナーブラウザが含まれていないだけでは。
Re: (スコア:0)
タイトルが「陰謀論的に読み解く」で「(以下はあくまで思考実験です)」とわざわざ断っているのにマジレス
Re: (スコア:0)
陰謀脳論の人の予防線に見えた。ネタだったならごめんね。
Re: (スコア:0)
ゲスの勘繰りって書いてくれればよかったのに
陰謀論的に読み解く 大喜利編 (スコア:0)
最適化対象となっているブラウザはバックドア的な機構が有るため小細工不要だが
無いブラウザはドライバレベルでバックドア的機構を適用するので動作が遅くなるんだよ
Re: (スコア:0)
ところで、別の思考実験の時にリサ・スーは米国政府とケンエンの仲とか考えたりしませんでしたか?
最適化が必要なドライバって、出来が悪い? (スコア:0)
つまるのところ、ユーザー数からいって、最適化していなさそうな(憶測)Linux版Chromeではカクカクするんだろうか。
あとFirefoxは最適化の対象なのだろうか。
Re: (スコア:0)
汝持たざる者よ 尻に拡張子が付いてから物を言うのだな
だったりして
Re: (スコア:0)
a.out最適化か。
ニ●ニコ動画 (スコア:0)
AndroidのFirefox上で動画を流すとコメントがカクつくものの、UAをiOSのSafariに偽装すると何故か滑らかに流れるようになる
#記事の内容とは別になりますが、ブラウザによって挙動を変えるという話で思い出したので
Re: (スコア:0)
AndroidのFirefox上で動画を流すとコメントがカクつくものの、UAをiOSのSafariに偽装すると何故か滑らかに流れるようになる
iOSはWebmに対応していないからサーバ側でUAで判断して代わりに.mp4が提供されるんだけどハードウェアデコード的にはMP4のほうが手厚いからかと。
Re:ニ●ニコ動画 (スコア:2)
詳しくないけど WebM も MP4 もコンテナの名前なので、ハードウェアデコード云々に関係する動画コーデックとは直接には対応しないはず。
MP4 だったらコーデックは MPEG-1/2 から H-264/265、AV1 までなんでもありじゃないかな。WebM だったら普通は VP8 か VP9 だと思うけど、AV1 の可能性もあるのかな。
Re: (スコア:0)
やっぱWebMなんて要らんかったんや…
Re: (スコア:0)
ニコニコってWebm使ってましたっけ
YouTubeでは1440p以上がWebmなので長らくSafariで再生できなかったと聞きましたが(今はMac版のみ対応したとか)
Re: (スコア:0)
「コメント」のカクつきだからデコードが直接関与する部分とは違う気がする。
Androidはスペックの差異が広くて下位向けに調整されてるみたいな感じかと思った。
Re: (スコア:0)
WindowsのFirefoxでニコニコの動画再生をずっと行っているとそのうちウィンドウが真っ白になる
↓
タスクマネージャーでFirefoxのGPUプロセスを見ると、共有GPUメモリが141GBとかの搭載メモリ量よりはるかに多いありえない数値になっている。これはタスクマネージャーの表示がバグっているだけで、about:processesでは1GBとか普通の表示なので実際にはそこまで消費していないようだが無関係とも思えない
↓
タスクマネージャーからGPUプロセスを殺すと復帰する
というのがずっと続いてる
Re: (スコア:0)
仮想メモリがあるし、メモリ圧縮も有るから実際にバグで開放漏れが出来てるのかもよ。
Re: (スコア:0)
GPUメモリのスワップや圧縮ってできるんでしたっけ? 何らかのリソースリークが起きている可能性は否定しない(というか高確率でありそうだ)けど、タスクマネージャーの表示がそのまま正しいわけでもないと思うよ
Re: (スコア:0)
Firefoxは昔からブラウザゲームやっててもメモリ使用量がうなぎ上りなのよね
メモリ管理は下手くそな印象がある
ファイル名によるベンチマーク不正 (スコア:0)
こんなのかな?
NVIDIAのベンチマーク不正に対応した3DMark03アップデート
https://srad.jp/story/03/05/24/0931215/ [srad.jp]
Tridentにもベンチマーク不正疑惑
https://srad.jp/submission/11086/ [srad.jp]
スマホでも
ベンチマーク最適化、多くの端末メーカーが採用
https://mobile.srad.jp/story/13/10/05/1720253/ [mobile.srad.jp]
Re: (スコア:0)
Chromeってベンチマークアプリだったのか?
Re: (スコア:0)
ファイル名によって処理を変えた類似した話ってだけ
Re: (スコア:0)
こういうのはドライバ側が最適化モードを用意していても、アプリ側がそれを使ってくれないなら、ドライバ側が切り替え対象のリストを持つのもしょうがないよね。
Re: (スコア:0)
Intel 740も忘れてはいけない。
https://ascii.jp/elem/000/000/666/666972/3/ [ascii.jp]
CPUでは逆にソフトウェア側の方でインテルのハードウェアを認識すると高い数字が出るように不正
インテルがAMDを妨害するためにベンチマークテストを操作したとする集団訴訟で、CPUを購入した全ユーザー(イリノイ州除く)に対してインテルが15ドルを支払う事に
サイト設定にもよるからなぁ (スコア:0)
画像でもjpgをwebpに変えて配信したり
動画でもmp4をwebmに変えて配信したり
所によってはハードウェアチェックしてav1にってとこも
単にやってることをAMDが公開すればいいだけだよね (スコア:0)
普通にアプリケーション名で最適化やチューニングをしてますって言えばいいのであって、
最適化はしてるけどやり方は教えないとか、ゲームだけやっってるっぽい説明とか、その辺を見直せばいいだけではないかなと。
しかし本当にファイル名だけ(ファイルサイズとかディレクトリも見ない?)なのだとしたら、
問題起きそうですよね。
やたら電池の減りが早くなるとか、逆に省エネモードで動いてしまうとか。
Re: (スコア:0)
ロジックとターゲットを公開するとYandexみたくハックするやつが出てくるからだめ。
問題が置きそうというのはたしかにそうだがめったに起きない。リスクとメリットでいうと圧倒的にメリットが勝ってる。
この手の最適化は新しいものではないからね。
Re: (スコア:0)
> 普通にアプリケーション名で最適化やチューニングをしてますって言えばいいのであって、
言ってるけど読んでないやつが因縁付けてるだけ。