这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 如何缩短VxWorks的启动时间!请高手指点!!加急!!

共15条 1/2 1 2 跳转至

如何缩短VxWorks的启动时间!请高手指点!!加急!!

菜鸟
2007-04-24 19:55:18     打赏

如何缩短VxWorks的启动时间!请高手指点

系统配置:目前使用系统为数字逻辑公司的PC104主板586SEV,主频133MHz,带网络接口

启动方式:CF卡

目前启动时间:带网线时28秒,不带网线时58秒

需求:达到10秒之内的启动速度。

请高手指点




关键词: 如何     缩短     VxWorks     启动     时间     高手     指点    

菜鸟
2007-04-25 00:08:00     打赏
2楼
[转贴]缩短vxworks启动时间的方法

by dxding
from
http://dxding.blogchina.com/3382115.html

缩短vxworks启动时间的方法

对于有mmu的cpu系统,vxworks系统的一般启动时间在10秒左右。相对于windows之类启动时间几分钟来说,可以说是非常短了。然而对于从上电到启动用户程序在1秒内的特殊要求。10秒显然是太长了。这里解决了这个问题。具体的平台为一块powerpc7xx单板机,有南桥,北桥,pci,vme总线。这里的解决方法,实际上是不限于powerpc cpu的,因此对于有类似要求,别的平台的用户来说也具有价值。
由于对于启动时间有特殊要求,因此首先做的是要详细了解vxWorks OS 的启动步骤。通过研读代码,知道启动部分后,相应找到了影响启动时间的关键部分,通过修改 1内存清零操作,2 sdram ECC 校验 3,网络启动部分 4,vxWorks内存管理。使启动时间控制在1秒内。
这里主要介绍对于vxWorks内存管理的修改。先简要介绍PowerPC MMU

1 MMU简介

内存管理是一项由MMU硬件以及VxWorks软件配合完成的工作。
硬件的MMU特性对于OS中的设计有较大的影响,内核OS算法处理页表及TLB的底层函数受硬件MMU特性的影响很大。
OS内核软件与处理器MMU硬件的接口、内存管理的软硬件分工,是OS设计中的关键部分。
MMU(硬件):负责使用PTE来转换虚拟地址为物理地址。
OS内核:建立页表,在PTE中填写正确的数据,设置MMU相关寄存器使之指向页表。

1.1 TLB模式

4位段寄存器索引 | 16位页索引 | 12位的字节偏移量
段寄存器
32位有效地址
24位 VSID | 16位页索引 | 12位的字节偏移量
52位虚拟地址
TLB/页表
20位物理页号 | 12位的字节偏移量
32位物理地址


处理器在每次地址转换时都要访问内存中的页表,则系统会产生大量的内存访问。因此,上述问题是通过MMU硬件中的TLB(快表)来实现缓存当前使用的地址转换。
通过在处理器中的TLB来保存一份在物理内存中的最近被使用过的页表入口项(PTEs),从而缩短对页表搜索的时间。
TLB由硬件实现,其中的表项的每一项映射一个物理页面。每次MMU进行地址转换操作时,首先检查该TLB所有表项及其控制的相应Cache,如果一份拷贝在TLB中的PTE被找到,则可免除在内存中查找页表(page table)而占用总线。
TLB有两个操作:(1)加载;(2)报废/清除。
当MMU硬件产生一个TLB失效时,OS内核定位地址转换信息,显式加载一个TLB表项。TLB表项的更新需与页表项的更新同步。TLB并不能自动保持与PTEs的一致性,所以每次软件改变了物理内存中的页表之后,软件必须执行相应的TLB失效操作,以便保持TLB与页表的一致性。页目录基地址寄存器被写入时,OS清除整个TLB。

TLB的使用有两个注意的事项:
(1) 清空TLB是非常耗时的操作,当涉及多个页面的时候,内核OS必须选择清除整个TLB缓存,逐一清除许多表项会带来更多的TLB失效。
(2) 尽可能减少TLB的竞争使用;过度的竞争TLB会导致TLB刷新频繁,效率大大下降。

1.2 BAT模式
BAT模式是另外一种从逻辑地址到物理地址的转译方式,这不同于TLB/哈希表的页面机制。BAT用于映射大于一页的连续物理内存空间,这样的空间可以不受控于通常的虚拟内存管理。BAT寻址模式依靠8个BAT寄存器来实现,这些BAT寄存器实现128K或者更大的虚拟内存块映射到连续的物理内存中。这样的大块连续物理内存空间一般用于保存数据,例如映射到内存中的显示缓冲区或者是巨型数组中的数据。
BAT模式的缺点是颗粒度太粗,最小的内存块也必须是大于128K。

2 VxWorks 内存管理

VxWorks内存模式为flat模式。所有的任务都运行在同一地址空间里。内存管理混合使用BAT模式与页表模式.VxWorks通过两个数据结构来抽象BAT模式与页表模式.
BAT模式:UINT32 sysBatDesc [2 * (_MMU_NUM_IBAT + _MMU_NUM_DBAT)]为一整形数组
页表模式:PHYS_MEM_DESC sysPhysMemDesc [] 为结构PHYS_MEM_DESC的数组。

PHYS_MEM_DESC定义如下
/* physical memory descriptor is used to map virtual memory in sysLib
* and usrConfig.
*/
typedef struct phys_mem_desc
{
void *virtualAddr;
void *physicalAddr;
UINT len;
UINT initialStateMask; /* mask parameter to vmStateSet */
UINT initialState; /* state parameter to vmStateSet */
} PHYS_MEM_DESC;

问题的产生, bsp里主要使用页表影射,页表影射内存与所需页表的大小之间的关系如下:
页表尺寸 = ((内存总数(sdram+pci mem + pci I/O +vme mem + flashrom)/页尺寸(4k))/2)*sizeof(PTEGS)(64)
1G的影射内存所需页表数为8Mbyte.因此建立页表,在PTE中填写正确的数据所需时间需5~6秒。

初步解决对策:
1. 缩小页表,即缩小内存总数
2. 将页表存为文件,启动时直接读取,跳过建立页表部分
3. 转换思路,从主要使用页表影射转换为主要使用BAT影射

我们来看一下上述解决对策是否可行。
1对策
缩小页表,即缩小内存总数,可以修改的部分包括SDRAM ,PCI MEM,PCI I/O MEM,VME MEM,修改方法在Tornado环境里修改配置参数,修改容易,修改后的效果较好,启动时间只需2
秒。不利的方面,SDRAM缩减为32M,而且时间仍然较长。

2对策
将页表存为文件,启动时直接读取,跳过建立页表部分。因我们的系统资源是固定的,使用此法可行.但要将页表存为文件,我们又面临多种选择,1重写OS MMU 部分。2改写Vxworks MMU.
2.1重写OS MMU 部分
难度较大,时间紧迫,而且最关键部分,重写的OS MMU与VxWorks是否能够无缝结合,实践证明能够在另一操作系统下稳定运行的OS MMU与VxWorks结合,并不能稳定运行。原因OS MMU并不能完全与OS Memory,OS I/O无关。OS设计需要一种综合考虑。微内核体系结构也并不能完全解决此问题。结论,此路不通
2.2改写Vxworks MMU
需要Vxworks kernel 源码,所幸已经得到。但考虑到1G的影射内存所需页表数为8Mbyte,而flashrom读取速度为10M/s .即使修改完毕,仅读取页表所需时间将近1s.所耗甚大,所得甚微。结论,此路不通

3对策
使用BAT影射,需要修改部分为sysBatDesc [],即BAT影射数组,修改容易。
但BAT寄存器只有4对,分为指令与数据BAT,因此只有与页表影射相结合。将大块内存使用BAT影射,小块内存使用页表影射.因此将SDRAM,FLASHROM影射改为使用BAT影射。修改效果好。达到了预期效果。


菜鸟
2007-04-25 06:33:00     打赏
3楼

to 楼主:

你的情况我可以做如下判断:::BIOS加载时间我们基本上无法控制,因为我们不大可能去修改BIOS,当然不是说绝对不可以,而是它的难度大,周期也长。

至于二楼所描述的MMU相关调整,实际上对X86的启动速度来说,没有质的影响,为什么这么说呢?因为因为MMU相关原因造成的启动时间消耗与非MMU相关原因造成的时间消耗比起来是微乎其微的,当然不是说MMU的原因就可以忽略不计,在一些没有BIOS的RISC计算机上(二楼是基于PowerPC来描述的),它的耗时就变得重要了。

针对你的情况,网卡物理层检测是可以控制的消耗时间的主要方面,,,,你得首先确认一下,插上网线和不插上网线,启动时间差别是多少。。。。我想应该超过10秒。。。。

如果是这样的话,,,,,,

等你回复,因为如果不是这样,说下去就没有意义了。。。。。


菜鸟
2007-05-09 23:32:00     打赏
4楼
怎么没有后文了

菜鸟
2007-05-13 02:34:00     打赏
5楼
楼主估计搞定了。。。。。。

菜鸟
2007-05-13 05:52:00     打赏
6楼
说说啊,我也遇到了,不过没他那么夸张,介绍介绍经验

菜鸟
2007-05-13 19:45:00     打赏
7楼
你的情况是主要由于网卡检测造成时间损耗么?

菜鸟
2007-05-14 23:23:00     打赏
8楼

是的


菜鸟
2007-05-14 23:26:00     打赏
9楼

最小代价的做法是:把网卡物理接口初始化放在单独线程执行。

效果是:不影响其他任何程序执行,仅是启动时候的10左右网络连接不上,但这通常对我们工作影响不大。


菜鸟
2007-05-16 00:55:00     打赏
10楼
是,真正工作的时候是单机的

共15条 1/2 1 2 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]