.

天猫精灵为什么要用RTOSLinux与R

布景

当你在选购手机的时光,小二会跟你确认型号(比如Mate30),颜色,储备空间(比如8G+G)。

颜色是部分审美,这边不敞开。代表手机才力的硬核参数是:

1)手机型号Mate30:决计CPU算力

2)8G:RAM内存空间

3)G:Flash闪存空间,宛如电脑硬盘的观点

种种硬件产物都有宛如的观点,比如天猫精灵方糖R,双核1.2GCPU,64MRAM,MFlash。

营业价格

咱们把方糖R从Linux系统转移到RTOS系统,坚持同样的机能,RAM/Flash的占用从64M/M大幅度减小到16M/16M。

这个优化起码见两方面的价格:

一方面,也许坚持同样的机能,采纳更小规格的硬件,低落硬件成本。(减脂)

另一方面,也也许坚持硬件成本固定,用腾出来的75%的RAM空间、87.5%的Flash空间,开采新的机能。(增肌)

资本优化的道理

Linux有繁杂的内存治理机制,关系Linux系统的物理住址、逻辑住址、虚构住址,内存映照,缺页间断,DMA,Cache,Slab,内核态用户态等观点,在网络上、竹帛中都有大段的形貌,不少读者也都是Linux系统的大师,这边就不再赘述。

RTOS系统,比如FreeRTOS,任何一册讲解FreeRTOS的竹帛也都市形貌heap1-heap5的观点,这边也不再赘述。

我来往过不少Linux大师,RTOS大师。从Linux转移到RTOS,资本会有俭约,这个是众人的共鸣,众人也都能列出一两个资本节省的重心,然则很少见人能给出一个周全的形貌,搜遍网络,也没有一篇文章能把Linux转移到RTOS详细能节省哪些内存说明白。

本文将聚集天猫精灵RTOS系统的研发试验,归纳RTOS系统关系于Linux系统资本节省的道理,为百般IOT产物从Linux到RTOS转移供给一些参考。

一些根底观点

.text:代码段,寄放代码编译输出的操纵指令。

.data:数据段,已初始化的数据,包含静态变量,有初始值的周全变量。

.bss:BSS段,未初始化的数据,主若是未初始化的周全变量,在程序加载的时光由内核清零。

heap:堆,malloc等动态分派。

stack:栈,寄放部分变量。

内存行使模子相比

相比一下Linux和RTOSRAM行使模子,从下往上看

1)操纵系统内核冗余

Linux系统大而全,机能美满,默许扶助虚构内存,繁杂的文献系统,网络协定等。基于Linux系统的硬件产物研发需求对Linux举办恰当裁剪,然则依然会有冗余。

RTOS系统小而美,机能简略,按需完结。比如最小的FreeRTOS系统内核仅需求3个文献。基于RTOS系统的硬件产物研发是对RTOS系统的巩固,每一段代码都是必需求的才会参预。

以天猫精灵系统为例,这一部份Linux内核是6M,而咱们采纳的AliOS-Things内核+网络协定栈唯有多K。

其它咱们对启动程序、Wi-Fi固件、Slab小内存池也做了优化,这一部份不再敞开。

注:

低摆设的硬件产物上通罕用的是RTOS系统,是以不少人说“RTOS系统太弱,不能扶助繁杂算法”。

这是一个误区,系统机能现实上取决于硬件才力,操纵系统不过这些硬件资本的治理者,唯有硬件才力强,RTOS同样也许扶助大型算法。

况且RTOS系统自身占用的资本较少,是以某些方面机能反而更优,比如开机时光,RTOS天猫精灵从上电到听到第一声是3.5s,而Linux需求7s。

2)三方库冗余

Linux软件资本充分,唯有你想获得的机能,都有对应的开源库也许行使。基于Linux的天猫精灵依赖几十个动态库,不少只是行使个中几个API,这就形成了Flash和RAM资本的铺张。

RTOS系统中,采纳的都是轻量的精简版本的三方库。同时RTOS系统全静态编译,惟独真实挪用到的代码才会被编入。

3)多过程冗余

Linux系统扶助多过程,各个过程之间内存空间断绝,如许做的便宜是多过程互相自力,平安性高。然则这也引入了冗余。比如动态库的代码段是RO只读的,也许惟独一份多过程同享。然则数据段是RW可读写的,是需求在各个过程都占用空间的。

RTOS系统中,没有过程的观点。周全RTOS系统也许领会为一个猛过程,而task就宛如于Linux过程内部的线程观点。是以这一部份资本占用要小不少。

4)内核态用户态栈的冗余

Linux份内核态用户态,每一个线程会实用户栈和内核栈,栈的size正常都是统一摆设的默许值,比如天猫精灵Linux版本线程内核栈8K,用户栈4K-8M动态调度。

RTOS没有内核态用户态之分,相当于周全系统都是内核。而每个线程的栈空间是遵照万古间运转后的水线,筛选的符合的数值,是以比Linux要省不少。

内核栈用户栈的冗余从单个线程看,优化并不显然,然则天猫精灵扶助相比繁杂的机能,同时运转的线程会有几十个,是以这部份会有很大的影响。

比如多台天猫精灵的场景:就近叫醒后,多台同步播放,此时来了一个VoIP的电话。这就触及到灌音叫醒关系线程,音讯反映关系线程,网络关系线程,就近叫醒的仲裁线程,播放器关系线程,多台音讯和数据同步线程,VoIP关系线程,埋点线程,以及其余系统线程等几十个线程。

注:

Linux内核安定,用户态过程倘若涌现题目,比如空指针,只会致使现时过程崩溃,唯有要重启现时过程。

RTOS不区份内核态用户态带来的题目是,任何一个crash,都市致使周全系统崩溃,需求重启周全系统来复原。是以RTOS对研发人员提议更高的请求,需求统统研发人员像开采内核同样应付每一路程序代码。

5)天猫精灵内部冗余

天猫精灵的Linux完结,为了抬高研发效率,直接行使FFmpeg如许的老练框架,其它有不少内部buffer都开得相比大。

而RTOS完结中对这些地点做了深度优化。比如:

播放器去掉了FFmpeg,行使了简略的解码逻辑。播放过程多实例改成单实例,减小buffer巨细。

OTA完结了分片下载,跳过文献系统缓存,直接从RAM晋级。

日记编码收缩储备,经过将日记实质变换成ID模式储备,均匀缩小90%以上日记储备空间。

大模子算法去掉了冗余的模子buffer,优化了施行逻辑。

VoIP从头完结了超轻量级的版本。

Real-Fi多台同播对临时不必的buffer准时释放。

6)XIP

XIP:executeinplace,即芯片内施行,是指程序直接在Flash闪存中取指、译码、施行,不必把代码读到系统RAM中。

Flash分Nand和Nor两种。Nand正常容量大,写速率更快,然则轻易涌现坏块,不恰当XIP。而Nor容量小,读速率更快,正常没有坏块题目,恰当XIP。基于RTOS的天猫精灵也许行使16MNorFlash,XIP的运用成为或者。

XIP也许节省代码段的RAM占用。然则运用XIP后,Flash储备的实质不能做收缩,会补充Flash占用。是以XIP要遵照不同项目RAM/Flash的资本情状,筛选是不是运用。

归纳

天猫精灵从Linux切换到RTOS,资本占用变成1/4RAM,1/8Flash。

RTOS资本占用更少的道理是:去冗余、去冗余、再去冗余。

采纳RTOS的营业价格是:坚持同样的机能,低落硬件成本;或者坚持同样成本,腾出空间开采新机能。

自然RTOS也有不少瑕玷:不区份内核态用户态、没有过程断绝,任何一个crash,都市致使周全系统崩溃;系统API不准则,种种RTOS系统碎片化严峻,可移植性差;三方库资本少,开采同样的机能相比Linux更艰难。筛选RTOS依然Linux要基于产物机能繁杂度、量产范围,在硬件成本和软件成本之间做好均衡。

跋文

天猫精灵遵照POSIX国际准则,把智能音箱机能速即转移到RTOS系统,完结了大幅降本。并引领智能音箱行业继续切换到RTOS系统。

/1天猫精灵RTOS音箱颁布(业界首款)




转载请注明:http://www.abachildren.com/sszl/734.html