物联网操作系统HelloX V1.83发布公告
经过HelloX开发团队近半年的努力,在HelloX V1.82版本基础上,增加许多功能特性,并对V1.82版本的一些特性进行了进一步优化之后,正式形成HelloX V1.83测试版本。经相对充分的测试和验证之后,现正式发布。相关代码,已全部上载到github上(github.com/hellox-project/HelloX_OS),欢迎对HelloX感兴趣的朋友下载测试和试用,并进一步反馈问题。
除继续保持V1.82所有特性之外,V1.83版本主要对下列特性进行了支持或优化:
完整支持多CPU功能。V1.83支持SMP(对称多处理)功能,可在安装有多个CPU,或者在多核CPU上运行,充分发挥多CPU的并行计算能力。当前版本缺省支持32个CPU(或CPU核),在任何少于32个CPU的计算机上,都可以正常运行。如果计算机CPU数量多于32个,可以通过修改宏定义并重新编译来支持;
对先前版本V1.82的网络功能有较大幅度的优化。比如,对TCP校验和算法进行了性能提升,对网络地址转换(NAT)的查表方法做了改进,由线性链表修改为完整的RADIX树的方式,可大大提升查表效率。同时,通过把IP协议栈的多个线程(比如PPPOE客户端线程,DHCP服务器线程,IP转发线程,网络控制管理线程等),同时调度到多个CPU上,充分发挥多核CPU的性能,大大提升了转发和处理效率;
增加了更加丰富和完整的调试与诊断手段,包括日志输出功能,异常情况下的调试信息输出功能,以及内存申请跟踪等功能。当前的内核,已经很少出现异常情况。万一出现异常,通过分析上述手段输出的信息,可以快速定位问题。
HelloX V1.83编译后的可执行文件大小,包括内核,网络功能,用户命令行界面,文件系统,各类驱动程序等,在560K左右,比V1.82编译后的镜像稍大一些,但也仍然比较小,可满足大多数嵌入式硬件的要求。
而JerryScript等程序,则以外部可执行文件的方式存在,可以存放在外部存储介质如USB stick或者SD card上,按需加载和卸载。
HelloX V1.82的核心功能是网络,而V1.83的最核心功能是多CPU支持。主要表现在下列几个点上:
支持ACPI(Advanced Configure Power Interface)功能,HelloX在启动的时候,会按照ACPI规范,搜索内存中的配置数据表格,通过分析这些表格,得到系统配置的CPU数量,CPU核心连接的拓扑结构,内存数量等信息,进而建立一张处理器拓扑结构表格。在HelloX的命令行界面中,用sysinfo命令可以查看建立的CPU连接拓扑。对于每一个检测到的CPU(processor),HelloX都会记录在案,并加以管理和使用;
支持spin lock,处理器间中断(IPI)等CPU间的同步通信机制,确保不同CPU之间有效通信,协调运作,形成一个多核心分布式的计算系统。当前的spin lock机制,采用共享全局变量加原子操作指令方式实现,大部分操作系统都是以这种方式实现的。为了进一步提升性能,后续将基于链表方式实现spin lock,这对当前的代码是透明的。对于IPI(Inter-Processor Interrupt),HelloX采用APIC(Advanced Programming Interrupt Controller)来控制实现。IPI可用于完成即时调度,TLB刷新等功能;
HelloX V1.83的锁粒度(主要是spin lock),是对象级的,即每个内核对象,比如内核线程,同步对象(Mutex/Semaphore/Mailbox等),都有自己的spin lock。这与子系统级的spin lock不同。在子系统级spin lock的实现中,每个子系统有一个共享的锁,所有属于该子系统的对象共享这个spin lock。这样会导致明显的效率下降,因为一旦一个子系统的对象占有子系统锁,那么同一个子系统的其它对象则无法同时获得该spin lock,只能等待。HelloX V1.83则没有该问题,因为其spin lock是对象级的。对象级spin lock也有其不足,那就是容易产生死锁(dead lock),因为锁的粒度很小,很多代码片段需要同时获得多个对象锁,在编程时需要仔细排列获取锁的顺序。一旦操作顺序排列不仔细,很容易产生死锁。在HelloX V1.83的开发过程中,曾产生多次死锁。为了检测死锁,HelloX实现了“死锁超时等待机制”,在等待一个spin lock的时候,如果超出了预设的最大等待时间,则引发系统告警,便于代码调试;
基于多CPU架构,对HelloX的网络子系统进行了全面的优化。如果你认为相比单处理器系统,多处理器系统一定会增强网络的性能,那就错了。最开始的时候,我也这么认为,把网络子系统的多个核心线程,调度到多个CPU上,显然会增加整体吞吐性能。但实际情况是,在第一次把网络子系统的多个线程分布到多个CPU上时,网络性能明显下降了。经过仔细分析发现,在多处理器系统上,多个线程实现了真正的并行运行,这些线程同时竞争USB总线(网卡是USB接口的),因为USB总线本身的瓶颈,导致整体效率下降。打个比方,就好比从高速公路(代表CPU)上下来,进入国道(代表USB总线)。单CPU系统是一条高速公路进入一条国道,而多核系统则是多条高速公路同时进入一条国道,显然,后者由于国道入口的汇聚和共享,效率会比第一种情况明显变慢。经过仔细的优化,比如调整线程的调度优先级,引入批量发送机制,合理的组合相关线程到单个CPU,最终达到了理想的网络吞吐效果。后续版本将进一步对网络子系统进行优化,以达到线速支持10G bps的转发级别。
与以前版本的原则一致,在HelloX V1.83版本的开发过程中,我们始终坚持“稳定可靠,不留问题死角,可直接应用”为原则,所有代码都经过了详细深入的内部测试。在开发过程中,通过编写仿真高压程序分布到每个CPU上,这些程序之间通过mailbox,semaphore,mutex,message queue等方式频繁交互(5ms交互一次),同时定义多个定时器,来测试多核功能,整体表现符合预期。
在所有代码集成完成的时候,又沿用了HelloX V1.82版本的实际测试用例,用一台笔记本电脑加一个无线AP(因目前尚无WLAN发射模块,故用工作在二层模式的AP替代),搭建了一个家庭宽带路由器,并连续使用了将近一个星期(期间因为断电,有过几次重启),体验与普通路由器没有任何差别。测试期间,HelloX路由器连接了20台左右的终端,包括智能手机,笔记本电脑,Pad,儿童手表,家用无线打印机,电视机,小米智能台灯等设备,所有设备的网络状态都正常。
在测试过程中,随着越来越多的物联网设备接入到HelloX网关,我个人越来越体会到物联网操作系统的真实和价值,越来越感受到物联网网关的重要性。设想一下,物联网网关可以看到所有物联网设备的通信模式,包括报文的平均长度,发送间隔,带宽,时间分布,MAC地址,通信协议类型,等等信息。通过这些信息,即使不对IP报文做深度分析(这样做是不符合法律规定的),也可以通过大数据或者AI技术识别出设备类型和设备能力,从而有目的的与物联网设备进行协同。单个物联网网关,是一个本地网络的控制中心,而所有的物联网网关组成的大的网络,则是整个世界的控制中心。HelloX将聚焦物联网网关方向,做深入的技术耕耘,为人类建立安全,可靠,智能的物联网数字中心。
HelloX后续会针对新的网络发展,比如5G等,对网络功能做进一步的增强。同时也会进一步引入业界先进的网络架构和新技术,比如SDN(软件定义网络),新的网络安全技术,打造一个兼容现有的路由器功能,同时面向物联网应用的软件平台。这个软件平台完全开源,并始终保持安全,高效,灵活等特点,立足中国,面向全球,为人类的信息化建设增砖添瓦。
作为物联网操作系统,HelloX将始终聚焦物联网领域的应用,为物联网量身定制一套最优的系统软件解决方案。我们认为,只有一个内核的支撑,是远远不够的。物联网和智能硬件的有效发展和壮大,需要更多技术的支持,比如人工智能,分布式计算,机器学习,等等。但一个稳定可靠和可扩展的物联网操作系统,是这些技术的最好生存土壤。
同时我们认为,物联网中的一个关键组件将会是物联网接入网关。不论是哪种应用场景,物联网网关将是物联网世界连接用户或者真实世界的最核心角色。因此,后续HelloX会首先瞄准这一个物联网应用场景,进行深入耕耘。物联网网关首先是一个更安全和高效的宽带接入网关,同时具备支撑物联网应用的能力。
物联网网关并不是孤立存在的,而是需要AI平台,大数据平台,物联网设备管理平台等一系列后端平台的支撑,共同组成一个面向物与物互联和协同的数字神经。我们的目标,就是构筑这样一套数字神经。
俗语有云:“难事必做于易,大事必做于细”。HelloX操作系统当前的主要应用目标,定位于物联网网关,但是要真正做出特色,做出价值,还是要从一些具体的功能入手,来打开缺口。经过与行业内一些人士交流之后,我们决定,HelloX的下一个版本将在下列功能领域进行进一步增强和开发:
我们认为,物联网网关与现有的宽带接入网关不同。现有的宽带接入网关,强调的是网络处理和转发能力,只是作为一个路由器存在,其计算能力非常有限。但是到了物联网时代,网关的功能将在需求驱动下,功能和处理能力将呈指数级增强。首先,边缘计算能力(Edge Computing)会被加入到物联网网关中,负责网关所辖区域内的计算任务,比如AI建模和训练,复杂的逻辑推断,庞大的树或者图遍历(大于1万个节点),等等。同时,边缘网关还将面对各种各样不同厂商,不同功能的物联网终端设备,每个设备都可能会有自己独立的处理任务。
为了适应这种情况,我们需要对HelloX的内核做进一步优化,甚至是重构。比如,当前HelloX内核支持多核CPU的数量上限是32个,后续要支持多CPU的数量达到上百个的级别。同时通过高效的通信技术,多个HelloX系统组成集群,形成密集的本地计算能力,应对物联网和人工智能/区块链的需求。对内存管理算法和机制,也有非常大的优化空间。现在是基于空闲链表算法来管理内存,在内存块数量急剧上升(达到十万级别)的时候,分配和释放效率都会出现下降。
另外一个值得关注的方向,就是HelloX云化部署。通过把HelloX部署在云上(VM内),可以构筑更加高效和安全的云计算环境,为应用提供更加高效,实时,安全和可靠的计算环境。还有其它诸多的优化或者重构的方面,在此不做赘述。
总之,我们的目标是,下一个版本的HelloX的内核,其内核并发效率,实时性,简洁性和安全性等,将超越Linux和大多数操作系统。
现在5G的发展如火如荼,5G必将替代现在广泛部署的3/4G网络,成为通信的主流。与3/4G主要面向个人用户(2C)不同,5G提供eMBB,uRLLC,mMTC等不同类型的通信支持,同时面向个人和行业应用(2B)。5G不仅仅对运营商网络是一个全新的技术,同时对芯片,终端,软件,网络,数据中心等都提出了新的要求。举例来说,5G支持的网络切片技术(Network Slicing),就对传统的TCP/IP协议栈提出新的要求,因为在切片环境下,一个终端可能会同时获得多个IP地址,而且这多个IP地址还可能是重叠的。这样就要求IP协议栈支持多实例(Multiple Instance),这多个协议栈实例再与不同的5G应用(或者多个虚拟终端)绑定,实现真正的差异化通信服务。
HelloX的体系架构满足这种需求,后续版本将开发一个闭源的面向5G的网络通信子系统。闭源的目的是保证安全,而且只是对部分最核心的代码闭源,HelloX内核,设备驱动等代码,仍然按照原有方式开源。
未来将对HelloX的网络协议栈做进一步增强和重构,开发一个业界独创,面向未来的网络协议栈。主要包括下列方面:
同时支持IPv6和IPv4协议,能够按照用户的需求,同时高效处理这两种IP协议。我们要设计一种全新的协议架构,设计一套通用的数据结构,同时为IPv4和IPv6两种协议所用,而不是像现在的大多数实现一样,IPv4和IPv6相互隔离,没有交互;
进一步增强网络的安全,充分吸收新的网络架构和技术,比如SDN等,来做到最大限度的安全。我们认为,未来的网络安全,怎么强调都不过分。而一个自主和全新的网络架构,可以甩掉长期积累的包袱,轻装上阵,满足未来网络和信息系统的需要;
在支撑网络的基础算法和数据结构有创新,满足未来网络的性能需要。比如融合IPv4和IPv6的路由查找算法,网络报文DPI深度解析算法等等,以期达到业界顶尖水平。
总之,我们的定位是,下一个版本的HelloX,其网络协议栈的安全,效率,架构等方面,将达到业界顶第一的水平。
现在有很多物联网开发框架,比如IoTivity,三星主导的IoT.js等。这些框架都是基于企业开发框架来衍生或者设计的,我们认为并不能很好的适应物联网的本质特征,无法对物联网的发展启动助推作用。
我们计划,基于JavaScript语言,构筑一套全新的,分三个层级的物联网开发框架。通过充分的抽象和模型建立,形成一套基础的物联网模型库。基于这一套基础模型库,进一步派生出二级面向具体行业的模型库,可以成为Tier 2模型库。进一步地,基于Tier 2模型库,进一步派生出某个行业内的物联网模型。这样某个行业内的具体应用,就可以快速和直接地引用这些行业特定模型,或者对这些模型进行派生和扩展,快速高效的开发出独立于运行硬件和运行软件环境的物联网应用。
总之,我们的定位很高,但不是盲目定位,而是基于已有HelloX的代码和成果,以及前期探索的基础上,做出的可以预期达到的定位。这些功能和特性开发完毕之后,将会极大增强HelloX的竞争力,相信能够达到物联网操作系统领域业界第一的位置。
欢迎有志于物联网和系统软件开发的人士加入加入我们,进一步开发和优化HelloX操作系统。相信在我们的共同努力下,必然能够做出面向未来的基础软件平台和核心软件部件,有效促进物联网和信息化的发展水平,进一步提升人们的生活水准,为人类的发展做出贡献。
对于参与其中的朋友们来说,您的开发成果和代码输出,可以共同积累在一个相同的平台上,永远沉淀下来。如果我们做成了,您将“青史留名“。即使做不成,通过这个过程,您也可以对自身的专业技能和行业理解有一个系统的梳理和提升,必然有助于您职业的发展。打一个更加通俗的比方,相比每天拿着手机刷半天花边新闻,看半天视频,然后自责的关上手机,感叹一天又快过去了,您是不是更愿意做一些与自身专业相关且有持续积累和持续产出的事情呢?相信这样会更充实和有意义。:-)
更具体的细节,欢迎加入QQ群讨论:38467832
对HelloX和物联网操作系统的进一步信息,请关注blog:blog.csdn.net/hellochina15