答案1
所以,你让我很好奇,我决定对 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 本身还要多。
我们可以得出的结论是,为了减少 CPU 开销,你需要升级驱动程序,因为(与任何项目一样,仅供参考) 新的优化不断进行当然,你很难注意到几个月的工作有什么不同,但是,伙计,11.2.x您的 16.04 使用的 Mesa 版本是古老的!
为了进行比较,我在 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
。那会是什么呢?我在谷歌上找不到确切的结果,但我找到了找到这个源文件这表明它很可能与内存分配有关。
为了减少这个问题的影响,你可能会感兴趣在每个线程的 malloc 缓存中glibc 2.26 版本中的优化。如今,在经历了 Spectre 和 Meltdown 事件之后,优化变得更加重要,因为不要过于频繁地进入内核空间变得更加重要。
我认为libc6 软件包Ubuntu Xenial 的版本是 2.23。您可能想升级这个特定的软件包,但请注意,这可能会破坏某些东西,因为这个库是系统的核心。获取它的最佳方式是升级到 18.04,它有 2.27 版本。
答案2
有趣的是,我的笔记本电脑中有一块 r300 时代的显卡(Mobility Radeon 200M)和更古老的 CPU,两者都比这里描述的问题案例更快,并且没有 CPU 峰值 - 直到我升级了我的系统!
一开始我以为是内核,但降级到旧的 Xorg 和 mesa 使得一切都比以往更快。
我不知道发生了什么,但出于某种原因,GPU 加速变得更加占用 CPU。此外,在我的 perf 输出中,我主要看到大多数时间都在发生内存移动。在我的单核 CPU 上,CPU 使用率为 100%,而恢复到旧的 mesa+xorg 时,我最多得到 25-40%,而不是在 GPU 驱动程序中。显然在某一时刻出了问题。
答案3
您的 CPU 低端且速度慢。即使在一般使用情况下,其负载也很高。基准网站将其列为比传统低端 CPU(例如 Intel I5 5200u)慢得多。