我使用的是树莓派3B+,买的新的三星32G的SD卡,电源也买的新的,供电充足。系统是官方的,目前还只有32位系统,据网上有人自己适配了一些64位系统的测试结果,提升非常大,可能32位系统是性能低下的一个因素。后台使用Nginx和Samba两种,主要做点播。Nginx后端的话,我就用Kodi点播。Samba的话,就直接文件浏览器中双击播放了,使用的播放器是MPC-HC。
现在在的问题就是一点,卡顿。
我的任务就是一个,点播视频。我的视频基本分为两档,普通的电影电视剧和高清的纪录片。普通的基本没问题,高清的纪录片容易卡。纪录片一般是4G多一些1080P的,时长基本四五十分钟。码率确实算是比较高,基本是10Mbps向上。
可是我很疑惑的点在于,树莓派并不涉及解码,它就是提供数据流而已,我是在自己的电脑上播放解码的,那它为什么还这么卡?关键是它运行起来的时候CPU和内存负载都很低,可是就会卡。
看参数有介绍是基于USB2.0的网卡,最高也就到480Mbps。可是我Nginx后端,在电脑上下载树莓派的文件也才只有10M左右的速度,大约100Mbps带宽。系统运行很稳定,几个月没宕机,负载也很低,可是传输速度就是低。不过话说回来,不涉及解码,只按照百兆带宽传输也足够我点播用了,可实际上却是10Mbps以上的码流就会卡了。
负载极高的情况下卡也就算了,现在内存CPU等都没啥压力,新的SD卡读写速度也都好几十M无压力的,这个卡顿让我猜不透。
还是希望有热心玩家交流下,树莓派的内容写在这里,因为不想单独在一些树莓派论坛注册发帖,凑活下。另外树莓派4也出来了,性能提升很大,或许以后可以换个4代试试。
补充:
用了新路由3后,手机端连接wifi访问树莓派上的点播资源,发现我最高清的视频(一小时12G的宇宙时空之旅)也不卡了。可能不是树莓派性能问题?电脑访问的方式有线网络应该更快才对,Samba和Kodi点播两种都会卡的,现在手机用了Wifi却不卡了。还是比较诡异的,该问题我会在后面使用更多有了更多对比的时候再更新。
更新:
确实,用了新路由3后,点播体验得到了巨大提升。感觉像是路由器承担了很多负载从而减轻了联通光猫路由的压力一样。尤其是手机端,其表现甚至反超电脑的。原来电脑和树莓派都连接到联通自己配备的光猫路由器上,都是有线网络,电脑Kodi点播的时候,一般的还好,高清的视频会卡。表现为断流,就是比如宇宙时空之旅这个片子,稳定几十秒40mbps,然后卡住了,等过了几秒开始有速度,且达到90到100mbps。现在,手机Wifi连接到新路由3,然后点播同样的片子,从头到尾不卡(虽然它也没在进度条上显示很多缓冲)。这可能是Kodi的请求处理问题吗?就是手机和电脑平台不一样,所以表现不一致,不过按理说应该电脑端的强大才对。
就现在来说,手机端和电脑都是经过新路由后再到联通光猫然后访问到树莓派的,比原来没这个新路由的情况改善特别大。虽然多一个路由器对于原来直接访问上层路由器的网络请求究竟有什么样的负载变化还不是很清楚,但现在确实完全不用买新的设备了。原来还以为是树莓派性能差,点播卡顿。这个路由器买的真香啊,关于它的科学上网功能,我会在我的个人网站上记录,地址就是:
http://beavermagic.com/doc.html
再更新:
我将一个1G的电影放在内存卡上,直接用网页端下载方式,测试速度稳定达到了20-30MB/s,也就是大约300mbps不到的速度,与网上查到的基本一致。而我的电影在3T的外接盘上,再通过USB连接到树莓派,那么下载速度很不稳定,平均在10M/s。所以这个不稳定也就对应了前面点播时卡顿的原因了,就是通过外接一个盘走主板再到网卡是比直接从内存卡读书据卡得多的。用top命令可以看出来在内存卡上读取的时候wa值是不很高的,而外接的方式基本就是读一段,卡几秒,wa达到六七十,缓一会再继续。
由于我的笔记本给了家里人使用,也想着尽量少玩点游戏(DOTA2),就决定用树莓派作为主力了。我当然知道它打价格也就两百多块,不应该要求太多。只是实际使用中才发现是真的性能太弱。外接HDMI屏幕1080P,本来想着能作为播放器用看看视频,不过并不好用。用浏览器看看Youtube,卡到爆。后来决定就普通浏览吧,结合Vim写一点Python代码。就是这种轻度使用都要耐心等待,它打开页面就转,绿灯不闪,等几秒绿灯才闪(就是读写数据的灯),所以即使很简单打网页打开也要好几秒。另外也不能开太多页面,两三个就最多了。写这段内容就是用打树莓派,小心翼翼。
本来以为会比一般手机性能强的,后来发现并不是。浏览网页都很卡,加载很慢,毕竟才1G内存,还要分一点作为显存。确实就价格上来说,千元机都是它的好几倍,没什么好说的。所以作为主力机器也就能简单浏览下普通网页了,写点博客。想要播发在线视频还是非常卡的,720P的Youtube都带不动的。也就是说,买来真的想要用,就只能用来学习了。IDE一般也带不动,就靠Vim写点代码,结合浏览器记录下博客。想看高清视频,刷美剧或者逛Youtube怕是想多了。树莓派4代有4G内存打版本可能能胜任这些日常工作了,不过我手头没有也没法测试。
这样也好,脱离了Windows平台,在Linux的世界中越走越远。遇到点问题就搜索学习记录下,比在Windows上有空就玩游戏要好不少。
根据实际使用,想要看点视频,稍微设置大了点,256M的显存,导致系统很卡,打开浏览器写博客都能卡死,wa值居高不下。16M或者64M显存则能较好使用浏览器,就这一点点内存差距就能让体验非常不同。
ctr+alt+t:呼出终端;在终端中ctr+shift+t可以打开新标签页;
ctr+alt+del:呼出任务管理器
Top命令中,输入P可以按cpu使用率查看;
系统卡顿的时候,对于树莓派来说一般是io问题,也就是wa(wait的意思)很高,就是等待io太多。那么可以用iotop查看进程io情况,对于树莓派,我个人用浏览器很多,卡顿都是那个flashplayer的文件导致,每次开启一个页面就很多个flashplayer线程占用io。
树莓派性能较弱,安装的桌面版系统也没自带音视频播放软件。像是用ffplay也不太方便,有时视频还要视频硬解,所以还是要安装别的软件。
首先,安装vlc,该软件在树莓派上我暂时测试发现无法播放视频,但是音频播放较好,能保存列表,随机播放,要求算是满足了。
然后是视频,安装了omxplayer和kodi,不过启动的时候报错无法打开vchiq实例,主要是因为用户没权限。输入如下命令:
sudo usermod -a -G video myusername
将所需用户添加到video组,不过为了让它生效,可能要用newgrp命令或者重新退出登录,我还是用重启大法。
另外,用id这个命令可以查看当前用户的信息,比如在哪些组内等;groups命令则直接列出用户所属的组。
根据:
https://www.raspberrypi.org/forums/viewtopic.php?t=109088
先建立input组:
sudo addgroup --system input
不过由于我有这个,就不用做了。然后:
sudo vim /etc/udev/rules.d/99-input.rules
并输入:
SUBSYSTEM==input, GROUP=input, MODE=0660
KERNEL==tty[0-9]*, GROUP=tty, MODE=0660
接着:
sudo vim /etc/udev/rules.d/10-permissions.rules
并输入:
# input
KERNEL=="mouse*|mice|event*", MODE="0660", GROUP="input"
KERNEL=="ts[0-9]*|uinput", MODE="0660", GROUP="input"
KERNEL==js[0-9]*, MODE=0660, GROUP=input
# tty
KERNEL==tty[0-9]*, MODE=0666
# vchiq
SUBSYSTEM==vchiq, GROUP=video, MODE=0660
然后执行:
sudo usermod -a -G audio pi
sudo usermod -a -G video pi
sudo usermod -a -G input pi
sudo usermod -a -G dialout pi
sudo usermod -a -G plugdev pi
sudo usermod -a -G tty pi
注意用户名不是pi的要修改为自己设定的用户名,完美解决。
不过根据kodi帖子说的要1080p流畅播放起码分派180m内存,所以我分配了192M。一开始用64M内存作为显存,虽然kodi软件能进入,但是无法打开视频播放。改192后就好了,且界面都更清晰了,可能和它的皮肤机制有关。可怜的3代树莓派1g内存真是太少,视频是很好播放了,做别的事情可能就很卡了。
一直都是右键粘贴的vim,但是树莓派上不是这样,所以修改下:
sudo vim /usr/share/vim/vim80/defaults.vim
然后输入“70gg”跳转到70行,修改为set mouse-=a即可。
树莓派默认有ipv6,虽然我路由器上都没开启ipv6,但是它有时候还是会请求一些ipv6的地址。安装软件的时候,可以使用下面的命令设置只使用ipv4:
sudo apt install xxx -o Acquire::ForceIPv4=true
在遇到速度太慢或者解析错误无法安装的时候可能很有用。
前面折腾视频播放分配了一些内存出去,还是比较卡,所以扩展下交换分区,好像有点效果。执行:
sudo vim /etc/dphys-swapfile
修改为2048,也就是2G交换分区,默认的就100还是太小了。然后执行:
sudo /etc/init.d/dphys-swapfile restart
这样就配置完成了。
用了一阵子,交换分区可以说毫无用处,非常卡,还是要把显存分配少点。
执行:
sudo apt install scrot
然后输入下面的命令回车后就能选择一片区域截图了:
scrot -s
截取的图片在主目录下。
视频播放和音频还是不要在树莓派上进行了,拿个手机在旁边娱乐下就是了。所以给树莓派分配16M内存作为显存即可,这是最低的值了,留出最多的内存给系统用,保证浏览器尽可能流畅。
编辑/boot/config.txt并设置:
dtoverlay=pi3-disable-wifi
dtoverlay=pi3-disable-bt
然后执行:
sudo systemctl disable hciuart
之后重启即可。这样蓝牙和wifi都不启动,也尽量减少不必要的系统资源消耗。
默认的是50Mhz,可以改为100试试,就是修改/boot/config.txt,添加:
dtparam=sd_overclock=83
我这里是83,因为我改100后用dmesg看到日志中出现太多错误,回退到了83,因此我才设置为83。
之后测试速度,注意不要在/tmp下测试,据网山查的资料说/tmp是从内存创建的,读写速度很高。
我在自己的主目录下测试的,命令为:
dd if=/dev/zero of=test.dd bs=1k count=100000
dd if=test.dd of=/dev/zero bs=1k count=100000
实际上,写入大约19M/s,增加了频率后也就提高到了20出头,基本还是一如既往地卡。
补充:
我的自动驾驶小车用的闪迪的卡,可以100Mhz运行。
执行raspi-config,在高级选项中启用OpenGL,选完全的KMS那一项,性能会好一些。不过实际写OpenGL代码的时候会发现开启OpenGL驱动会报错“failed to add service - already in use”,因为这个ARM端的GL驱动有很多不兼容问题,用VPU端的则没问题。所以尝试在树莓派上用OpenGL要关闭OpenGL驱动,另外注意分配较多的显存,比如256M。
然后是设置OpenGL有关库的时候要注意,树莓派上的名字多了brcm(也就是博通Broadcom )前缀,比如下面这个命令:
gcc -w main.c -o main.bin \
-I/opt/vc/include/ \
-I/opt/vc/include/EGL \
-I/opt/vc/include/interface/vcos/pthreads \
-I/opt/vc/include/interface/vmcs_host/linux \
-I/opt/vc/include/GLES2/ \
-L/opt/vc/lib/ \
-L./ \
-lbcm_host -lbrcmEGL -lbrcmGLESv2 -lvcos -lvchiq_arm -lpthread -lrt -lm
这里-I(大写的i)指定头文件是没问题的,-l(小写的L)指定库的时候则要带前缀了,否则报错找不到GLESv2和EGL库。
我还有一个树莓派,做自动驾驶小车用的。对比发现,这个闪迪的32G卡比三星的流畅好多,二者价格是差不多的,三星的树莓派服役一年多了,这个闪迪的基本没用过。
另外,之前用魅族的充电头5v-1.5A的,发现有黄色闪电标志,也就是电压不足。后来单独买的充电头解决了该问题,但是第二个自动驾驶的树莓派就不想再买充电头了,查找一些资料发现线材会有影响。用了一些其他的测试发现很稳定,手机的充电头可以稳定带动的。
对于线材的问题,正好记录下另一个发现。新换了华为Mate10的二手手机,以便等待5G。该手机支持22.5W快充,就是5V-4.5A的,也买了快充头,充电很快。但是手头的另一个线就不行,另外支持快充的线拷贝速度却慢,只是USB2.0的标准。所以买type-c的线的要注意买贵一点的优质线材,要求usb3.0的速度,且要求电阻低,能承担更大的电压电流才是完美的线。
执行:
sudo apt remove fcitx-module-kimpanel
然后重启即可。
我一般用fstab挂我的外接3T盘,但是这个盘是用外接的Orico,它本身是有个电源开关的,如果突然断电,再想开的时候要单独按Orico的电源开关,而如果它没启动则会导致树莓派无法启动。
所以还是将fstab自动挂载取消了,然后在etc的rc.local中加一句:
mount -t ntfs-3g /dev/sda1 /mnt/hdd_3t -o uid=zbzdys,gid=zbzdys,dmask=022,fmask=022
这里用我的用户名和组,并设置目录和文件权限掩码为022,也就是写入权限不给其他组和用户。
经过验证,可以在无法挂载的情况下正常启动,而不会像fstab无法挂载导致进入救援模式那样。
树莓派作为主力机卡的原因主要在io,经过对比,我的另一台树莓派用的闪迪的卡就表现很好,日常使用主要是浏览器,查找资料和写博客基本不会卡。所以可以选择读写性能较好的卡来提升树莓派的表现,这样就能用起来了。我那个32G的三星卡则会在浏览器随便打开一个页面的时候卡三五秒,实在没法做主力机。
另外树莓派解析网站很慢,比如打开youtube.com,虽然我树莓派上不浏览YouTube,因为太卡。就这个例子来说,还未加载缓存的情况下,页面就是转,解析很慢。其他网站有时候也是这样,该情况不是io问题,因为还没加载,应该是某些地方导致网络解析慢,相比于用电脑和手机来说。