分类:
转:缩短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影射。修改效果好。达到了预期效果。
对于有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影射。修改效果好。达到了预期效果。
- 顶
- 1
- 踩
- 0
- 猜你在找
核心技术类目
全部主题
Hadoop
AWS
移动游戏
Java
Android
iOS
Swift
智能硬件
Docker
OpenStack
VPN
Spark
ERP
IE10
Eclipse
CRM
JavaScript
数据库
Ubuntu
NFC
WAP
jQuery
BI
HTML5
Spring
Apache
.NET
API
HTML
SDK
IIS
Fedora
XML
LBS
Unity
Splashtop
UML
components
Windows Mobile
Rails
QEMU
KDE
Cassandra
CloudStack
FTC
coremail
OPhone
CouchBase
云计算
iOS6
Rackspace
Web App
SpringSide
Maemo
Compuware
大数据
aptech
Perl
Tornado
Ruby
Hibernate
ThinkPHP
HBase
Pure
Solr
Angular
Cloud Foundry
Redis
Scala
Django
Bootstrap
- 文章搜索
- 文章分类
- vxworks 2011总结(43)
- Linux总结(32)
- windows常识(5)
- 常用芯片积累(3)
- 行业常识(14)
- 行业英文翻译(1)
- fpga(13)
- lwip+ucos(4)
- windml(7)
- vxworks任务异常调试(8)
- vxworks 2月总结(4)
- u-boot 2月调试总结(3)
- linux shell(3)
- u-boot 3月资料收集(4)
- vxworks 4月(1)
- linux驱动(16)
- S3C44B0(3)
- vxworks理解(5)
- p2020(14)
- BCM SDK(13)
- 杂谈(2)
- 读书笔记(4)
- powerpc(4)
- 待验证问题(3)
- 工作调试(12)
- 理财学习(3)
- 编译原理(1)
- PCI/PCI-E(7)
- Linux MTD(21)
- 面试题目(2)
- Linux MMU(5)
- flash transfer layer(2)
- WLAN知识(4)
- Ethernet 协议学习(4)
- qt学习(8)
- openWrt(11)
- omapL138(0)
- Linux 面向对象思想(2)
- linux spi架构分析(3)
- java开发(1)
- emmc(1)
- ROS(6)
- ubuntu(2)
- 多媒体(16)
- webrtc(1)
- android(1)
- 视频网址(1)
- 阅读排行
- (18504)
- (11800)
- (11587)
- (8320)
- (7556)
- (6821)
- (6552)
- (6408)
- (5229)
- (4913)
- 评论排行
- (5)
- (3)
- (2)
- (2)
- (2)
- (2)
- (2)
- (2)
- (2)
- (1)
- 推荐文章
- 最新评论
: 难道播放的时候,没有发现视频是横屏的吗?在电脑上面,以及一些手机播放器上面,还有iOS上面
: @u011018121:你应该是用到了libjpeg.so库了吧?
: 博主你好,我在写jpeg的时候出现了Error:error: 'jniLibs/armeabi/li...
: 你好,我编译的时候总会报错,请问这种错误怎么解决?cp210x.c:200: error: unkn...
: @handsome_for_kill:在主机上交叉编译
: @qq_26848541:请问你解决这个问题了吗?我在TX1上编译会报错
: 博主,这个cp210x.ko是在tegra下编译的吗,还是在主机上交叉编译的呢?
: mark
: 请问怎么编译生成cp210x.ko
: 学习了
对于有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影射。修改效果好。达到了预期效果。
暂无评论