有了这个,树莓派可以做成 VR/AR 摄影机

作者:长空无名

谈到 VR/AR 摄影机什么的,人们大多会觉得高大上。不但售价不菲,而且厂商一般不会让开发者在里面运行自己的代码。

那我要是不想破解商用闭源设备,又想定制开发自己的 VR/AR 摄影机怎么办?

来看一个叫做 StereoPi 的设备。

它是一款基于树莓派的开源立体摄影机。可以捕捉、保存、直播和处理实时的立体视频和图像。在机器人、VR/AR、计算机视觉、无人机、全景视频等领域提供了可能性。

核心配件是 StereoPi板卡、树莓派计算模块、还有两个摄像头,有效组合后是一个很棒的立体拍摄、360º监控、虚拟现实平台构建工具。

超薄版和标准版 StereoPi 板卡

该板卡可附带 树莓派计算模块 的任何版本,包括最新发布的CM3+,你可以把它当普通树莓派一样开发,通过 Python 模块 picamera 对其进行控制。

这款配件的众筹价是69美元(不带树莓模块,没有以太网RJ45接口、GPIO报头和双USB Type-A 的超薄版)。

链接:https://www.crowdsupply.com/virt2real/stereopi

这里再给大家看一眼新款的树莓派计算模块长什么样:

Raspberry Pi CM3+


StereoPi 两个摄像头间距是人眼之间的平均距离,大约在65毫米,如果你要自己制作外壳的时候需要注意此项。

两个摄像头中心的推荐间距

如果你是普通用户,建议使用 StereoPi 的标准版。因为超薄版主要是给那些打算将 StereoPi 集成到(不需要自带接口的)另一个设备中的高级用户设计的。具体来说,超薄版没有USB Type-A接口、RJ45以太网接口或GPIO头。当然,这些PCB板上的接线点仍然可用,以备你想焊接它们或安装自己的接口。

还有一个可选配件是Waveshare“G”广角摄像头(160°),它的体验很好,当然价格会有点贵,StereoPi 的豪华版套件里有提供。

Waveshare “G” wide-angle (160°)

你可以用 StereoPi 在 Youtube 上做3D视频的直播,也可以将它和 Oculus Go 连线感受不一样的视觉体验,开发新款的游戏。亦或是结合 OpenCV 做一些AI上的应用;创建一个空间感知机器人……对于相关领域的开发者来说,这诱惑难以抗拒。

目前该项目由俄罗斯一个名为 virt2real 的极客团队在推动,众筹时间将在2019年3月10日结束,但现在所筹到的金额早已超出目标所需要的35000美元。

PS: 之前有不少新人问IoT前哨站“树莓派计算模块”是干吗用的,相信看过这篇文章后,会有点概念了吧?

相关视频演示:

http://v.qq.com/x/page/d0839zc5l85.html

本文为“IoT前哨站”原创,转载请注明原文作者和出处。

树莓派官方推出 Raspberry Pi 线下体验店

春节期间, Raspberry Pi 基金会在英国推出了一个线下体验店。标志着树莓派这项原本小众的电子教育产品,开始近距离面向大众。

Raspberry Pi 创始人 Eben Upton 表示,这家实体店会让大家认识到学习STEM技能的重要性。他避免将其描述为商店,而是将其描述为“陈列室”。

Raspberry Pi体验店并不打算做传统零售,更像是一个创客空间。

该店出售树莓派以及各种配件、杂志、书籍。顾客还可以在货架上找到树莓派周边商品,如马克杯和服装。但重点还是放在为顾客提供学习电子设备和编程的机会。

即使它没有收支平衡,该仍然有价值,Raspberry Pi 基金会将其作为与新客户互动的实验室,允许它为更广泛的人群定制其产品。

很多人好奇为什么 Raspberry Pi 基金会决定在人口不到125,000的剑桥开设体验店,答案也很明显,剑桥不但因其世界领先的大学而闻名,而且它还是一个富裕的中产阶级城市,英国科技产业的核心,也是 ARM Holdings、微软(英国)等公司的所在地。

这家体验店的具体位置在剑桥市中心的大拱廊一楼。在英国的朋友如果有兴趣可以去看一看。营业时间是周一到周日,推荐造访时间是上午11点到下午17点之间。

相关视频链接:http://v.qq.com/x/page/c08371z7nna.html

情人节让伴侣会心一笑的“爱情鸟”

作者:Alex Bate

情人节快到了,各位男同胞准备给女朋友或妻子一个什么礼物呢?

如果你不想采购现成的商品,不如为你心爱的人制作一个可爱的语音装置吧。

“爱情鸟”例子视频:https://v.qq.com/x/page/q0830fgrsbi.html

“Blah blah blah 说声‘我爱你’。我的手机已经能做到了,为什么还要搞这些?”有人可能会这么问。

答案也很简单。虽然你可以使用手机,但是“爱情鸟”语音装置的重点在于其本身表达的意义。移动电话是你日常工作生活的所在,里面有你的银行信息,商务沟通等等。

但使用 “爱情鸟” ,你向她传递的信息将会更专注更有诚意。

该项目的发起人 Olivier Ros  表示,即使那些不怎么懂技术的人,该装置也很容易使用:

“用爱情鸟通话只需一个按钮。对于儿童,不喜欢智能手机的老年人,异地恋,或者只是希望通过简单方式进行私密交流的夫妇来说,这很酷。”

打造爱情鸟(一个或两个都行)

每个“爱情鸟”设备需要一个Raspberry Pi,虽然Olivier的版本用的是Pi Zero W,但Raspberry Pi 2或3也可以。

你还需要一个麦克风和扬声器。 而且,幸运的是,Raspiaudio提供了一个同时包含两者的HAT!

你也可以从其他树莓派配件制造商那里找到类似的电路板,或者使用标准的USB麦克风和扬声器,这些在电子卖场和网上商城都可以买到。

怎么让“小鸟”啁啾提示呢?

为了让盒子上的“爱情鸟”跳舞,你还需要一个伺服电机。或者你可以尝试闪烁的发光二极管或播放声音作为通知。我们总是希望看到人们如何将自己的天份加到开源项目中。

相关代码 (欢迎参与维护这个项目):

https://github.com/kheperV3/LoveBirds/

Telegram

别忘了你还需要注册Telegram,以便通过互联网安全地发送语音信息。同样,还有其他可用的服务,具体你就看情况改代码吧。

译者注:如果在中国不方便使用Telegram的话,可以使用网易云信或声网的服务来实现类似功能。

来源:raspberrypi.org

编译:王文文,前51CTO安全频道主编,阿里巴巴资深安全工程师,现供职UCloud技术市场,IoT前哨站创始人。

用一行命令把树莓派变成视频后视镜

大家在冬季骑行的时候少不了要穿一堆厚衣服,戴上帽子围巾什么把自己裹得紧紧的。

比如像这样

这样暖和是暖和了,但安全问题来了 —— 不方便回头看背后是否有车或行人靠近,万一有车在加速,你又正好在转弯,那可就惨了。

能不能给自行车装一个视频后视镜?这样不用回头也能知道后方发生的一切。

一个叫 Alex Eames 的外国人就是这么做的。 他戏称冬天的自己戴着“忍者”模式的巴拉克拉瓦帽和自行车头盔让他看起来像个“山雀”。

某天他出门的时候,有辆车差点和他撞上。幸好他们都及时刹住了车,但离得已经很近了。

原本他买了一面小镜子,但效果不太理想。于是想到了摄像头和显示屏的组合,这样不但可以实时看到车况,而且还能当记录仪用。

他先是在亚马逊上看了一些产品,但要么不合适,要么价格太贵(200英镑以上)。而他的需求主要就是能实时了解车前后的状况(主要是后面)。而且他对GPS之类的功能并无需求,最多也就是希望能拍到野生兔子路过这种有趣的镜头。

那基于树莓派的项目如何呢?

在重新发明轮子之前,看看别人已经做了什么是个好主意。

在(http://pidashcam.blogspot.com)上有一个很好的“双摄像头行车记录仪”实现,该项目使用了一个树莓派II代,Pi摄像头和USB摄像头。

看起来很棒,但 Alex Eames 不想在这个阶段使用GPS,只需要一个屏幕来实时查看他身后的情况,另外还想使用一些自己买过的零件。

两年前他在ebay上花20英镑买了一个Keidei HDMI 3.5英寸屏幕,可以通过HDMI连接树莓派。而且有电阻触控。

3.5英寸KeDei屏幕背面
3.5英寸可触控Kedei屏幕正面(带HDMI接口)

“如果要追求效果,我可以升级显示屏以便拥有更高的分辨率。然后用一个全新的Pi 3A+,配上Pi摄像头在前面。再弄一个Pi Zero W带摄像头在后面。” Alex Eames 说道。

测试中

前面的树莓派将作为无线接入点和后面的Pi Zero W连起来。

这两个树莓派都将被设置为开机后自动运行。后方的Pi Zero W将其视频传输到端口8090。然后前面的Pi将抓取视频流并显示它,此处可以使用vlc。这样他就能在屏幕上看到身后的东西了。

装好树莓派后视镜的自行车

好了,最关键的一招是怎么实现的呢?一句命令就可以搞定,那就是:

raspivid -o – -t 0 | tee test_video.h264 |
cvlc -v stream:///dev/stdin –sout ‘#standard{access=http,mux=ts,dest=:8090}’ :demux=h264

如果你有冬季骑行的习惯,不妨也给自己也做个树莓后视镜吧。有相关技术问题欢迎在“IoT前哨站”公众号上给我私信。

相关素材来自:Raspi.tv

编译:王文文,前51CTO安全频道主编,阿里巴巴资深安全工程师,现供职UCloud技术市场,IoT前哨站创始人。

树莓派北美团队 vs 树莓派驱动的“密室逃脱”

作者:Christina Foust

编译:IoT前哨站

几天前,树莓派北美团队在旧金山体验了一个非常特别的,由树莓派驱动的密室逃脱店。

这就是由Palace Games运营的一个充满灯光、传感器和大量惊喜体验的“爱迪生密室”。

以下是关于我们如何进入、探索并最终逃离这个房间的经过。

在今年的世界创客大会(World Maker Faire)上,我们的社交媒体明星亚历克斯•贝特(Alex Bate)遇到了乔丹•邦克(Jordan Bunker),他是制作Palace Games的艺术家之一。

经过电子邮件的连番轰炸后,树莓派北美团队订好日期,“直面交锋”爱迪生密室!

密室逃脱

“密室逃脱”是一种物理世界的冒险游戏,玩家通过线索、逻辑和策略来解决一系列的谜题和谜语,从而完成游戏的目标。许多密室逃脱设计师使用实体互动装置来控制玩家体验中涉及的众多传感器和触发器。

树莓派北美团队 vs 爱迪生密室

进入爱迪生密室后,我和我的团队很快意识到自己身处一个像巨型计算机一样的复杂系统中!所以即使这是我们第一次玩密室逃脱,也不是一个劣势。

(小编语:难道你们很擅长巨型计算机?)

我们的目标是完成各种任务。包括解决许多谜题,在任何事情中寻找隐藏的线索,完成电路,移动地板,并进行一些试验。

然而,真正的考验是我们之间的沟通和合作 —— 我们在这方面做得非常出色!

我们做了分工,以便有效地找出不同的谜题和线索,大家不停的在房间里大喊:“试试这样做”,“也许它是这个意思”,“如果它应该那样做呢?”

当我们完成最后一个挑战并最终逃脱时,我们欣喜若狂!每个人都戴上了爱迪生思维帽。

内部机制

逃离密室后,我们有机会去幕后一探究竟。

我们发现了一个由多个树莓派组成的本地网络,这些Pi由一个中心服务器(也是树莓派)协调。而Python写的Banyan框架(The Python Banyan framework)是树莓派及其附属组件之间的连接关键。

该框架帮助Pi和中心服务器之间的内网通信。树莓派被用来读取各种类型的传感器,控制灯光、开门或播放音乐。上面还跑着一个用来让工作人员设置和跟踪游戏的控制面板。

“树莓派让我们进步,它是我们密室的核心和灵魂。” ——伊丽莎白·桑德,密室设计师兼产品经理说道。

我们强烈推荐你去Palace Games(https://palace-games.com/)玩一个密室。这是一种很好的团建方式,可以让你了解和你一起工作的人。最后感谢Palace Games团队对我们的接待,希望不久以后能再回去探索他们的密室!

双因素认证就够了?让我们用树莓派做个三因素的

双因素认证就够了?让我们用树莓派做个三因素的。

虽然双因素认证一直在我们在线访问电子邮件和网上银行时提供更多的安全性,但在物理世界,现在已经有三因素认证可以保护我们的贵重物品。

扫描指纹进行身份验证

不明白什么意思? 以下是来自Switched On Network的视频,演示了如何使用Raspberry Pi构建三因素门锁,包括RFID密钥环,6位密码和发送到手机的一次性密码。

(视频地址:https://v.qq.com/x/page/t07975pca69.html

Alex Bate的三因素门锁制作关键

要构建Switched On Network的三因素门锁,你需要采购Raspberry Pi 3,USB RFID读取器和遥控器,触摸屏,电子门锁和继电器开关。如果这些都有了,你最好再找个电源和胶枪。

胶水枪

为屏幕安装适当的驱动程序(如果点不亮屏幕)后,你就可以安装Switched On Network在GitHub repo公布的Python脚本。

地址:https://github.com/paulfp/Three-Factor-Security-Door

在竖屏模式下连接到Pi的三因素认证

然后是物理构造:你需要把门锁、引线和其他东西连接到Pi上,所有这些都要连接到门和门框上。

三因素认证门锁组件

最终成品是一个你提供密码、RFID标签(或卡片)和手机短信才能打开的高级门锁。 虽然我们不建议你用这种技术从外侧保护你的房屋,但它却是办公室或密室的完美配置。

《德克斯特实验室》经典台词

正如美国经典动画角色,德克斯特说的那样:“每个人都要有个私密之地。”

用树莓派和TV HAT做个电视机

不知道是不是用树莓派看电视的人非常多,树莓派官方干脆在近日推出一款电视帽(TV HAT),让树莓派粉丝直接拥有做电视机的能力。

该电视帽的全称是”Raspberry Pi DVB TV HAT”,价格是20英镑。相信将给喜欢看电视的树莓派开发者带来极大的满足。

电视帽可以让任何版本的树莓派(带有40针GPIO)实时解码数字电视信号,并将其传输到远程设备。比如另一台Pi、电脑,甚至智能手机。

电视帽内置的Sony CXD2880调谐器支持DVB-T2和DVB-T标准(英国Freeview),你可以通过它观看所有喜欢的频道。

在这里,我们向你展示如何设置它,甚至通过它把树莓派变成全合一的电视/PVR。

装配工作

将随附的银色射频电缆适配器的细端插入电视帽侧面的金色接头。取出40针的接头,将其插入电视帽底部的孔(不是插入顶部的黑色母头)!

然后把电视帽扣在Pi上,将RF适配器装在microSD卡插槽端。 为了确保安全,你要将螺丝和螺帽拧紧。

安装Tvheadend

首先你需要一个靠谱的数字电视(比如英国的Freeview)接收装置才能让调谐器工作。然后把电视信号线插入电视帽上的射频适配器。

在microSD卡上装好树莓派系统,启动后会看见一个绿色的LED点亮电视帽。

我们需要安装一个名为Tvheadend的后端电视服务来流化视频。

打开终端窗口并输入:

sudo apt-get update
sudo apt-get install tvheadend

配置Tvheadend

安装Tvheadend需要几分钟,所以你可能想去泡杯茶。

最后会出现一个配置屏幕,提示你输入Tvheadend管理员用户名。为了简单起见,在这里输入kodi,然后也输入kodi作为密码,你以后可以随时更改它。现在可以从另一个设备登录了。

远程登录

现在,Tvheadend正在运行,你可以从另一台计算机访问它(可以是第二个树莓派)。

在Web浏览器中,输入http://raspberrypi.local:9981/extjs.html。

如果不行就用Pi的IP地址,后面跟着:9981/extjs.html。

使用kodi这个用户名和密码登录后。将出现一个配置向导,允许你选择电视网络类型和信号源。

配置电视网络

在配置向导的“网络设置”中,应该显示“Tuner: Sony CDX2880 #0 DVB-T #0”。

对于网络类型,选择“DVB-T网络”。

对于预定义的muxes,选择你本地信号源。

例如,我们的是uk-Rowridge。单击Save & Next,它将开始扫描mux和服务(通道)。

当它达到100%后,在所有三个框中打勾(映射所有服务、创建提供者标记、创建网络标记),一个电视频道列表(EPG)将出现。

看电视

现在你可以在浏览器中通过电视帽观看直播。在EPG中,点击任何节目左边的电视图标,都可以在窗口中显示,可以全屏。也有计划任务和记录等选项 —— 使用“帮助”获得更多细节。

除了使用Web浏览器,你还能使用各种客户端,比如Kodi、omxplayer、VLC和智能手机应用程序 —— 你可以在Tvheadend网站上找到完整的列表。

友情提示:不是所有国家都支持这款电视帽,采购时请注意自己所在地区支持该标准和协议。

来自:https://www.raspberrypi.org/magpi/raspberry-pi-tv-hat-kodi/

编译:IoT前哨站

为避免重新洗衣服而做的降雨报警机

没有什么比刚晾干的衣服更舒服了,除非一场突如其来的阵雨把一切都毁了。

从一名家庭成员那里听到:“下雨了!”,然后紧接着是楼梯上雷鸣般的脚步声。

这样的话太惨了。

想要拯救你最好的周日时光,免于再一次去洗衣房的痛苦吗?

看看这个小东西。

当雨点开始时,这个简单的设备就会在你的手机检测到雨点时发出警报。不需要焊接,只需要几根电缆。借助低功耗电路板和WiFi,我们能做出一个基于Raspberry Pi Zero W的完美项目。

测雨器需要的组件:

2个雨水传感器板和一个控制器
面包板
充电宝
密封小食品容器
跳线
树莓派 Zero w

核心代码:

from gpiozero import DigitalInputDevice
from time import sleep
import http.client, urllib.parse

# Some setup first:
APP_TOKEN = ‘YOUR_PUSHOVER_APP_TOKEN’ # The app token – required for Pushover
USER_TOKEN = ‘YOUR_PUSHOVER_USER_TOKEN’ # Ths user token – required for Pushover

# Set up our digital input and assume it’s not currently raining
rainSensor = DigitalInputDevice(17)
dryLastCheck = True

# Send the pushover alert
def pushover(message):
print(message)
conn = http.client.HTTPSConnection(“api.pushover.net:443”)
conn.request(“POST”, “/1/messages.json”,
urllib.parse.urlencode({
“token”: APP_TOKEN, # Insert app token here
“user”: USER_TOKEN, # Insert user token here
“title”: “Rain Detector”,
“message”: message,
}), { “Content-type”: “application/x-www-form-urlencoded” })
conn.getresponse()

# Loop forever
while True:

# Get the current reading
dryNow = rainSensor.value
print(“Sensor says: ” + str(dryNow))

if dryLastCheck and not dryNow:

pushover(“It’s Raining!”)

elif not dryLastCheck and dryNow:

pushover(“Yay, no more rain!”)

# Remember what the reading was for next check
dryLastCheck = dryNow

# Wait a bit
sleep(5)

在做其他事情之前,在SD卡上安装一个Raspbian Stretch Lite(我们不需要桌面),然后插入到Pi中。确保已启用SSH访问。执行sudo apt更新和升级的常规程序,然后重启,检查SSH连接,然后关机。

将传感器安装到盖子上:

你可以使用任意数量的传感器,但是两个就可以了。用保温层或管道胶带将两块板固定在盖子上。

注:3d打印外壳图片(STL文件可从这里得到)。

需要连接两对跳线;每个传感器板一个,极性无关紧要。电缆的另一端必须穿入容器内,所以在适当的地方尽可能地挖一个小洞,这样电线才能通过,从而减少水进入的机会。

将传感器连接到控制器

为了让树莓派明白发生了什么,一个小的控制板(与传感器一起提供)是必需的。这就把被水短路的小电流转换成数字信号。利用面包板,将传感器上的两对导线并联起来(这样两个传感器都可以构成电路),然后将控制器的接收引脚(带有两个连接器的一侧)插入到面包板上,使每个引脚与传感器上的一根导线相连。

连接控制器

为了完成我们的电路,仔细看看控制板上的四个引脚。它们将被标记为A0、D0、GND和VCC。

使用一些跳线,将控制器与Pi连接如下:

VCC到GPIO pin 2 (5v),

GND到GPIO上的任何GND(例如pin 6),

D0到GPIO 17 (pin 11)。

D0和A0是传感器读取输出的两种不同方式。D0是一个直接的数字开关,阈值由板子上的可变电阻控制。A0是一个模拟输出(当转换为数字时),范围在0到1024之间,取决于雨的强度。

装配雨探测器

把充电宝接上树莓派,然后放进容器。理想情况下,东西不应该移动,所以要用胶带或大头针把所有东西都固定好。

你现在应该可以把所有东西都密封在容器里了,连接传感器板的电线不会被挤压或变形。一旦你高兴,打开它并连接电源,然后再次关闭它并检查你的连接。确保充电宝能给树莓派至少几个小时的电力。

检测软件

在这个特性的末尾添加脚本,并将其保存为rainbot.py(或从GitHub下载)到一个方便的位置,比如~/pi/rainbot。一旦就位,通过运行python3 ~/pi/rainbot/rainbo.py来执行一个初始测试。你应该每五秒钟就会看到一个读数:

如果是干的,是“真”;如果是湿的,是“假”。按CTRL+C停止脚本。

Pushover:在你的手机上获取降雨警报

为了获得提醒,我们将使用Pushover,这是一个向智能手机推送消息的服务(有七天的免费试用)。

注册pushover.net后,你将看到一个“用户密钥”,把这个复印一份。按照说明创建一个“应用程序令牌”。

编辑脚本,把现有的API键值替换成你自己的(在提示的地方),然后在你的手机安装了“pushover”程序。

再次运行脚本。把其中一块感应板稍微弄湿。控制器上应该亮一盏灯。如果一切正常,几秒钟后你的手机就会显示一个警报。

自动运行雨探测器

让我们设置脚本在启动时运行。 作为超级用户创建以下文件:

sudo nano /lib/systemd/system/rainbot.service
填入:

[Unit]
Description=Rainbot
After=multi-user.target

[Service]
Type=idle
ExecStart=/usr/bin/python3 /home/pi/rainbot/rainbot.py

[Install]
WantedBy=multi-user.target

按CTRL+X保存并退出nano。

然后输入以下命令:

sudo chmod 644 /lib/systemd/system/rainbot.service
sudo systemctl enable rainbot.service
sudo systemctl daemon-reload
重新启动树莓派。脚本将在重新启动时运行(尽管您不会看到任何输出)。再用水测试一下。

为你的雨天探测器做改进

Pushover很方便,而且可以很容易地替换为任何你喜欢的函数。检查的频率可以改变(目前是每五秒一次)。或者把模拟电路改成数字电路,然后用A0输出来测量雨下得有多大。

如果你开始记录这些数据,这对气象站项目来说也是一个很好的起步。你还可以增加一个使用后安全关闭树莓派的按钮。

用树莓派实现网站访客LED闪亮提醒

用树莓派实现网站访客LED闪亮提醒,每当有用户访问你博客时LED就会闪一下,闪得频率越快访问者越多。

以下是清单列表:

LED 1个、公/母杜邦线2条、220欧姆电阻1个、面包版1个。
首先我们先来安装WiringPi(通过它我们可以用php来控制GPIO)

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install git-core
git clone git://git.drogon.net/wiringPi
cd wiringPi
git pull origin
./build

下面我们开始链接LED到GPIO,直接看图就好,你可以连接到任何一个绿色的借口,我们这里连接的是GPIO.0(LED正负极我就不讲了自己百度吧),PS,图不是我画的如果严谨点GND应该用黑线。

好了接下来我们来写点PHP代码,可以直接嵌入到网站的PHP页面内。

<? php
exec(“gpio mode 0 out”);/*mode 0就是蓝线插入的针脚,可以使用0-7*/
exec(“gpio write 0 1”);/*点亮led*/
exec(“gpio write 0 0”);/*关闭led*/
? >

到这里我们的游客提醒功能就完成了,各位还可以发挥想象力,比如用三(绿,黄,红)显示剩余内存,CPU使用率等等。

怎么用 Fio 来测试树莓派的磁盘性能

为了测试系统IO性能的高低,在实际开发中,需要使用IO性能测试工具进行测试。

这里要介绍一款经典神器 —— Fio(Flexible I/O Tester)。

这是一款由 Jens Axboe 开发的用于测评和压力/硬件验证的开源软件。

它支持 19 种不同类型的 I/O 引擎 (sync、mmap、libaio、posixaio、SG v3、splice、null、network、 syslet、guasi、solarisaio,以及更多), I/O 优先级(针对较新的 Linux 内核),I/O 速度,fork 的任务或线程任务等等。它能够在块设备和文件上工作。

Fio被广泛的应用在非常多的地方,包括测评、QA,以及验证用途。它支持 Linux、BSD、OS X、Android 以及 Windows。

简单来说,Fio是用来测试系统IO性能的工具,它的强大之处在与提供了一套测试框架,能够支持多线程多进程的IO测试,用户只需进行参数的配置,便能够方便地定制不同的IO行为(顺序读写,随机读写等),并对其性能进行监测。

对于Debian/Raspbian来说,Fio的安装很容易。

执行 sudo apt-get install fio 即可。

一般的参数和说明:

bs : 设置IO请求的块大小,可以给出上下限
支持对read,write,trim分别进行设置,以逗号隔开
比如:bs=1k-2k,3k-4k,5k-6k
size : 文件请求的大小,控制job结束
rw : 控制读写类型: read/write/rw/randread/randwrite/randrw
direct : 1表示绕过buffer,直接作用于设备
ioengine: io引擎:libaio(异步IO),syslet等
iodepth : 异步IO情况下,IO队列的长度
runtime : 执行时间限制,控制job结束
filename: 输出文件或者设备名,eg:/dev/sba

例子:

bs=4k:单次io的块文件大小为4k
ioengine=libaio:IO引擎使用libaio方式
direct=1: 测试过程绕过机器自带的buffer,使得测试结果更真实,等效于buffered=0
runtime=7200:运行时间设置7200s
size=20G :设置本次测试的空间为20G
filename=/dev/sdb20 :被测裸盘的盘符
group_reporting=1:汇总每一个进程的信息
rate_iops=5000 : rate_iops设置额定的iops,一般测试不需要设置
time_based :设置测试基于时间,注:虽然设置了runtime为7200s,如果没有设置time_based,在空间写满之后停止。
write_iops_log=w-4kb-7200s-numjobs4-iodepth128-ssd:表示将iops写入到一个在fio目录下名叫4kb-7200s-numjobs4-iodepth128.iops.1.log的文件中,注:如果numjobs设置为多线程,则每一个线程的iops写入到一个log文件中。
log_avg_msec=1000: 每隔1000ms往log中写一次数据
rw=randwrite : 测试方式随机写

numjobs=4:设置测试线程数
iodepth=128:io 深度设置为128

实际操作:

随机写入的性能测试:

sudo fio –name=randwrite –ioengine=libaio –iodepth=1 –rw=randwrite –bs=4k –direct=0 –size=512M –numjobs=2 –runtime=240 –group_reporting

输出的结果:

随机读取的测试:

sudo fio –name=randread –ioengine=libaio –iodepth=16 –rw=randread –bs=4k –direct=0 –size=512M –numjobs=2 –runtime=240 –group_reporting

输出的结果:

结果里面包含吞吐量和时间。io=表示总共完成的IO量。在基于容量的测试中,这个值能匹配size参数。aggrb是所有进程/设备的汇总带宽。minb/maxb表示测量到的最小/最大带宽。mint/maxt表示测试的最短和最长耗时。和io=参数类似,时间值对于基于时间的测试应该能匹配runtime参数,对于基于容量的测试是一个变量。

如果对相关参数搞不明白可以看帮助:

好了,IoT前哨站希望大家熟练掌握这个性能检测工具。