树莓派上Web浏览速度的瓶颈在哪里?


23

在带有Raspbian“ wheezy”的B型512 MB Pi上,我尝试了Midori,Chromium和Iceweasel。当网页变大时,即使我将其超频至1 GHz之后,加载速度仍然很慢。在具有1 GHz CPU的Android手机上,网页加载似乎要快得多。

我想知道的是,Pi的瓶颈在哪里?是CPU,RAM大小还是未加速的X服务器?浏览器是否可以直接使用GPU来加快速度?


而pi正在驱动3.5英寸480 x 800屏幕?;)如果不是仅此一点,这就是一个因素...
goldilocks

使用VGA监视器通过HDMI到VGA电缆进行显示,并且配置为hdmi_mode=35 1280x1024 60Hz...但是将配置更改为hdmi_mode=9 800x600 60Hz
hello.wjx

毫无疑问。我认为挖掘出的答案可以正确回答这个问题,但我添加了另一个想法。
goldilocks

Answers:


15

它是Raspberry Pi相对较弱的ARM11 CPU和未加速的X服务器的结合。由于GPU无法加速,因此CPU必须完成所有渲染。在类似Pi上的ARM11内核的产品上,这给本来就很弱的CPU带来了很多额外的负担。

有趣的是,当看着htopPi上的Midori加载一个像Facebook这样的沉重网站时,我已经看到X进程占用了25%的CPU。

将您的Android手机中的芯片与Pi中的芯片(甚至超频)进行比较并不是很公平。手机中的1 GHz芯片可能类似于Cortex-A8或A9,它们使用该架构的ARMv7版本。因此,它们每个时钟周期的性能都比使用ARMv6的ARM11高。


GPU可以加速哪种2D绘制操作?
Trismegistos

@Trismegistos用颜色填充区域。结合透明背景的图层。平滑字体边缘。
德米特里·格里戈里耶夫

14

已经是IMO的正确答案,我的建议可能不会有多大改变,但了解它可能会很有用。

如果您只想运行浏览器,则不必同时运行桌面环境。创建一个如下所示的文件$HOME/.xinitrc

#!/bin/sh

midori

如果.xinitrc已经存在,请将其暂时移动或注释掉其他任何内容。现在,startx(显然,您不应该已经在其中了-在不运行GUI的情况下从控制台执行此操作)。瞧,您只有浏览器,而没有桌面。

这节省了一点点的内存,尽管到目前为止浏览器是房间里的笨蛋,而且Xorg服务器本身(正在运行)比基本的 lxde(现在未运行)大。如果您有太多负载加载到RAM中以至于要使用交换,那将影响性能。上面的midori +裸X占用的<100 MB根据free

             total       used       free     shared    buffers     cached
Mem:        448708     242604     206104          0      82660     105156
-/+ buffers/cache:      54788     393920
Swap:       102396          0     102396

448708-393920 = 54788/1024 = 53.5 MB

打开了四个标签。同样,如果您查看这些内容并发现您的RAM几乎已满,那就是性能问题。请注意,这是正常使用比特交换的,即使RAM是完整的,所以不要担心-那换东西是低优先级。

在性能方面,需要进一步考虑的是缓冲区和缓存的重要性。我没有将它们包括在总数中,请注意,它实际上比承诺的内存还多(大约两倍)。那是正常的。如果您用承诺的东西填满了内存,系统将只使用较少的缓存和/或将其转移以进行交换。无论哪种方式,这都会导致性能下降,因为缓存非常重要(它在大小上不是至关重要的或不变的,因此不属于已提交的内存状态)。

换句话说,最理想的情况是您希望已承诺的内存不超过 pi 上可用内存的75%,甚至可能少于该值。如果您使用LXDE并开始打开其他内容,则可能会很快开始采用这种方法。


5

免责声明:以下描述了具有可疑效果的实验功能的使用。确保测试引入的回归和实际性能提升。

您可以在下面尝试使用某些Google Chrome浏览器/ Chromium的标志chrome://flags以提高(明显)的浏览性能。有一篇文章解释了一些与性能有关的标志。我将尝试在这里收集一些:

通过启用“ Overrrite Software Rendering List”(Overrrite软件渲染列表)来强制GPU加速,即使未将驱动程序列入白名单,也会使用GPU进行渲染,但代价是可能会出现伪像。不过,我不知道这与Pi的GPU配合得如何。

所有页面上的GPU合成将使用GPU滚动所有图层。因此,在没有GPU加速图层的页面上,滚动性能应有所提高。

平铺刷新窗口将是另一个提示。它会渲染图块并在准备就绪时立即显示每个图块,而不是等待最后一个图块完成。实际上,由于引入的开销,渲染将花费更长的时间,但是内容显示得更快。

在单独的线程中进行渲染将异步进行渲染并保持接口响应。您可以在页面仍在渲染时滚动。

禁用GPU VSync将更新渲染的内容,无论监视器是否已加载它们。这以不一致的呈现为代价提高了帧速率。

启用/禁用所有开关后,您必须重新启动Chrome / Chromium才能应用该设置。标志页面底部的按钮可以为您完成此操作。

更进一步,命令行开关可用于优化Chrome / Chromium。有关完整列表,请参见Chromium命令行开关列表。

--default-tile-width并且--default-tile-height可以设置为与屏幕尺寸的一小部分匹配,以加快每个页面的初始呈现速度。


我试过的标志Override software rendering listGPU compositing on all pagesThreaded compositing在皮,但似乎没有明显的改善。我还尝试了在PC上的那些标志,似乎也没有任何改进。
hello.wjx

确保在编辑标志后重新启动Chrome。要测试,请Override software rendering list打开一个WebGL演示。要进行测试,请Threaded compositing尝试在仍然加载大页面时滚动。
Bengt 2013年

从我在这里阅读的内容:chromium.org/developers/design-documents/…使用“线程合成”对pi毫无帮助-它只有一个核心-可能会变得更糟,具体取决于重要性是“ 对当前呈现状态的副本进行操作”。
goldilocks

页面加载性能会降低,是的。但是Javascript不会阻止并等待渲染,并且页面将保持响应状态。您正在将一些客观绩效换成一些可感知的绩效。
Bengt
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.