私のCPUはAMD A6-9220 RADEON R4です。 Ubuntu 16.04.1。を使用します。追加の(独自の)ドライバーはありません。 CPUはChromeとFirefoxの両方でロードしますが、Chromeではハードウェアアクセラレーションがオフになっています。主にページをスクロールすると発生します。または、ブラウザを開いて別の操作を行う(他のタスクを実行する)場合。ブラウジングにまったく問題があり、CPUからの反応なしで、はるかに重いタスクを実行できます(たとえば、HDビデオを23%以上ロードせずにHDDから視聴できます)。 top
コマンドが示したように、大量(50%)を消費するのはほとんどXorg
プロセスです。
興味深いことに、ラップトップにr300-eraカード(Mobility Radeon 200M)とはるかに古いCPUがあり、両方ともここで説明した問題の場合よりも高速で、システムがアップグレードされるまでCPUスパイクがありませんでした!
最初はカーネルだと思っていましたが、古いXorgとmesaにダウングレードすると、すべてがかつてないほど高速になりました。
何が起こっているのかわかりませんが、何らかの理由で、GPUアクセラレーションはCPUを集中的に使用するようになりました。また、perfの出力では、ほとんどの場合メモリの動きがほとんど見られます。 CPU使用率が100%のシングルコアCPUで、古いmesa + xorgに戻すと、GPUドライバーではなく最大25-40%しか得られません。ある時点で何かが明らかに間違っていました。
完全な分析についてはこちらをご覧ください: https://www.phoronix.com/forums/forum/linux-graphics-x-org-drivers/open-source-AMD-linux/1099745-how-to-tell- if-a-driver-is-gallium-or-just-mesa-slow-renderng-with-radeon / 。
それで、あなたは私に興味を持ちました、そして私はXorgを少しプロファイルすることに決めました。注:デバッグシンボルはインストールされていません(とにかく最適化されたコードでそれらを本当に信頼することはできません)、したがって、私が得た出力はいくらか不足していますが、それでも…
$ Sudo operf --pid=$(pgrep Xorg) # scroll youtube in chromium for a bit, then interrupt the command
^C
$ opreport -l | head -n 20
[warnings skipped]
CPU: AMD64 family12h, speed 1900 MHz (estimated)
Counted CPU_CLK_UNHALTED events (CPU Clocks not Halted) with a unit mask of 0x00 (No unit mask) count 100000
samples % image name symbol name
6030 26.0351 r600_dri.so /usr/lib/dri/r600_dri.so
4717 20.3661 Xorg /usr/lib/Xorg
2616 11.2948 radeon /radeon
1135 4.9005 drm /drm
833 3.5966 libc-2.28.so _IO_vfscanf
793 3.4239 ttm /ttm
686 2.9619 radeon_drv.so /usr/lib/xorg/modules/drivers/radeon_drv.so
642 2.7719 libglamoregl.so /usr/lib/xorg/modules/libglamoregl.so
524 2.2624 libEGL_mesa.so.0.0.0 /usr/lib/libEGL_mesa.so.0.0.0
476 2.0552 libc-2.28.so arena_get2.part.4
465 2.0077 libGLdispatch.so.0.0.0 /usr/lib/libGLdispatch.so.0.0.0
397 1.7141 libglapi.so.0.0.0 /usr/lib/libglapi.so.0.0.0
345 1.4896 libc-2.28.so exec_comm
328 1.4162 libEGL.so.1.1.0 /usr/lib/libEGL.so.1.1.0
325 1.4032 libpixman-1.so.0.34.0 /usr/lib/libpixman-1.so.0.34.0
178 0.7685 libdrm.so.2.4.0 /usr/lib/libdrm.so.2.4.0
154 0.6649 libfb.so /usr/lib/xorg/modules/libfb.so
ここでは、ユーザー空間のグラフィックドライバーであるr600_driでXorg自体に費やされる時間よりもさらに多くの時間がかかります。
私たちができる結論は、(すべてのプロジェクトのように、FWIW)絶えず新しい最適化が行われている のため、ドライバーをアップグレードする必要があるCPUオーバーヘッドを削減することですもちろん、あなたは数ヶ月の仕事との違いにほとんど気づきませんが、まあ、16.04が使用している 11.2.x Mesaバージョンはancient!
比較のために、YouTubeでFirefoxを起動し、少しスクロールしました。結果は以下のとおりです。多くのサンプルが少し大きくなっています。おそらく、集中的にスクロールしたか、長くスクロールしたか、またはその両方だったからでしょう。
CPU: AMD64 family12h, speed 1900 MHz (estimated)
Counted CPU_CLK_UNHALTED events (CPU Clocks not Halted) with a unit mask of 0x00 (No unit mask) count 100000
samples % image name symbol name
13128 41.2558 libc-2.28.so arena_get2.part.4
8628 27.1142 r600_dri.so /usr/lib/dri/r600_dri.so
2534 7.9633 Xorg /usr/lib/Xorg
1832 5.7572 radeon /radeon
776 2.4386 drm /drm
677 2.1275 ttm /ttm
565 1.7756 libc-2.28.so _IO_vfscanf
392 1.2319 libglamoregl.so /usr/lib/xorg/modules/libglamoregl.so
279 0.8768 libEGL_mesa.so.0.0.0 /usr/lib/libEGL_mesa.so.0.0.0
276 0.8674 radeon_drv.so /usr/lib/xorg/modules/drivers/radeon_drv.so
269 0.8454 libGLdispatch.so.0.0.0 /usr/lib/libGLdispatch.so.0.0.0
242 0.7605 libc-2.28.so exec_comm
212 0.6662 libglapi.so.0.0.0 /usr/lib/libglapi.so.0.0.0
178 0.5594 libpixman-1.so.0.34.0 /usr/lib/libpixman-1.so.0.34.0
160 0.5028 libEGL.so.1.1.0 /usr/lib/libEGL.so.1.1.0
95 0.2985 libfb.so /usr/lib/xorg/modules/libfb.so
86 0.2703 libdrm.so.2.4.0 /usr/lib/libdrm.so.2.4.0
今回は、グラフィックドライバーとXorgの違いがさらに大きくなり、ドライバーが優先されます。
しかし、興味深いことに、最も支配的なエントリはglibcのarena_get2.part.4
でした。それは何でしょうか?私はグーグルで正確な結果を見つけることができませんでしたが、私は このソースファイルを見つける を見つけました。
この影響を減らすには、おそらくglibc 2.26リリースの一部である スレッドごとのmallocキャッシュで 最適化に興味があります。最近では、SpectreやMeltdownがすべて発生した後、カーネルスペースに頻繁にアクセスしないことがさらに重要になるため、最適化はさらに重要になります。
Ubuntu Xenialのバージョン2.23は libc6パッケージ であると推測されます。この特定の1つのパッケージをアップグレードしたいと思うかもしれませんが、このライブラリはシステムの中核であるため、何かが壊れる可能性があることに注意してください。それを取得する最善の方法は、18.04にアップグレードすることです。これは 2.27バージョン です。
ローエンドの低速CPUを使用しています。一般的な使用でも高負荷を示します。 ベンチマークサイト Intel I5 5200uなどの従来のローエンドCPUよりも大幅に遅いものとしてリストします。