ffddybz
ffddybz

注册于 6 years ago

回答
0
文章
0
关注者
0

双核不是 vbus 组件?这个似乎不是虚拟化的方案

没错,VMM就是一个hypervisor。不过在这个VMM上运行RT-Thread还是很有必要,即使是类似xen的,它在内部也有部分这种调度,甚至是小型的TCP/IP协议栈,更重要的是虚拟设备,例如Linux的Virtio。

RT-Thread/VMM实现成native方式,所以所有的代码、指令都需要原生的数据。例如硬件是一个AM335x的硬件,那么必须要Linux的AM335x版本才能够跑起来,RT-Thread也需要一份RT-Thread/AM335x的移植才能够跑起来。这样的好处在于双方的性能损失非常小,例如Linux的损失就在个位数百分比。

RT-Thread与Linux间的通信是通过VBUS来进行,这个在PPT中有部分介绍。运行在VMM模式下的RT-Thread实时性能和单独运行RT-Thread相差不大,目前的开销(相比原始的RT-Thread)主要是Linux在切换模式时有短暂的额外开销。这部分我们也在考虑是否能够优化掉。

运行RT-Thread/VMM只需要ARM926EJ-S这种级别的CPU就可以运行起来了,再往上的可以是各种Cortex-A 32位处理器。ARM Cortex-M不能够跑Linux,所以不能够支持这种方式。目前我们的实现局限于硬件,所以暂时还不能开启硬件虚拟化,后续我们会在Zynq上做更多的工作(支持TrustZone)


Hi,根据 RTT 的各种资料简要了解了下单核的 RTT/Linux 执行技术,以下是我的疑问,可能不大正确或者理解不到位:
1、benard 说这是一种半虚拟化的技术,但是如果把 RTT 作为 hypervisor 的话,其仅仅实现了中断虚拟化,好处在于减少关中断时间,而 CPU 虚拟化和设备虚拟化并没有实现,所以
1)即使通过 ARM 的domain技术(并不是特别了解)实现了内存等等的隔离,那么如何实现计算资源上的隔离,如怎么限制每个系统的 CPU 利用率。
2)没有设备虚拟化的话,按照 benard 的说法是每个系统都要实现自己的设备驱动,比如说如果板子上只有一个网口的话,那么只有其中一个系统能够使用网络?这种分配策略是怎么样的?
2、RTT 的启动是依赖于 Linux 的,那么其启动时间能做出保证吗?或者是能不能将 VMM 组件独立于 Linux,启动 VMM 后再启动RTT 这样能够加快 RTT 的启动?

RTT已经实现了RMS算法吗?
另外,其实也有一些动态调度算法,如EDF(在RT-Linux/Erika Enterprise(正在学习中的)上有实现)等,只是很多的这类算法都停留在实验室中!
原文中提到的静态优先级的设置是这么说的Always assign priorities according to RMA. Manually assigning fixed priorities will not give you a better solution.因为RMS的算法有说到只要其他静态调度可以做到任务集完全可调度,那么RMS完全可做到!

RMS是针对周期任务的静态调度算法,是根据任务周期来判定优先级的,这里有RTEMS的RMS实现,还在消化中

6lowpan是不是可以列入计划了

发布
问题

分享
好友