一种提升嵌入式设备配置文件读写效率的方法与流程

文档序号:12886985阅读:665来源:国知局
一种提升嵌入式设备配置文件读写效率的方法与流程

本发明涉及通信领域,具体涉及一种提升嵌入式设备配置文件读写效率的方法。



背景技术:

对嵌入式设备进行管理时,一般都需要对设备的配置进行保存,保存配置的文件叫配置文件,多以.cfg命名。设备在启动的时候,需要读取初始化的配置或者保存后的配置,所以对配置文件需要进行读写操作。

epon设备的配置信息较多,包括olt和onu的配置,现有olt设备的配置文件名称为startup.cfg,往往读写配置的实现方式如附图1所示,具体过程为调用cmdrecreatefile函数,发送信号量gcfgfilegensem,当任务cmdcfgfilemaintask接收到信号量之后去创建文件,并将配置的命令写入到临时的配置文件中,当系统执行write命令的时候,就从这些临时配置文件中读取并写到startup.cfg中,虽然能满足读写的要求,但是仍然存在以下不足:

(1)将配置数据存放在临时配置文件中,当用户需要进行showrunning-config操作即读配置时或者保存配置(即写配置)时是通过读写文件进行操作的。对文件进行频繁的打开和读写操作,会影响系统读写配置文件的性能;

(2)当配置内容较多或者系统满配时,文件内容较大,需要的时间较长,不能满足用户的要求。

针对onu的配置,当pon板满配onu时,onu的数目多达10240个,每个onu最少有4个端口,如果onu及其端口都满配,显而易见配置文件是很大的,对较大的配置文件进行读写时,如果不使用高效的读写方法,需要的时间较长,影响系统读写配置文件的性能,不能满足用户的要求。



技术实现要素:

本发明要解决的技术问题是,针对现有读取较大文件性能存在的上述不足,提供一种读写嵌入式设备配置文件的方法,将配置信息直接存储到内存中供读写,把相应的配置数据存储到内存中,当保存或者读取配置时就直接从内存中读取数据组成相应的配置命令,改善嵌入设备保存配置命令的性能,特别是在大配置的时候,虽然会占用多一点的内存空间,但是明显提高系统配置性能。

本发明为解决上述技术问题所采用的技术方案是:

一种提升嵌入式设备配置文件读写效率的方法,包括如下步骤:

(1)初始化cfgmgr模块时,挂载回调函数,每一个配置项对应一个函数,回调函数函数包含增加、删除、修改记录项节点,为提供查找效率,通过b树的方式将所有的节点存储;

(2)下发配置文件时,通过回调函数对数据库进行相应的增加、删除、修改记录项操作;

(3)根据数据库表id分别调用不同的cfgmgr内部接口函数,获取的数据通过动态内存的方式存储到开辟的内存;

(4)保存配置文件时,直接对内存进行操作,将从内存中获取的所有数据写入相应配置文件并存储到flash中;

(5)读配置文件获取数据时,直接对表id表项进行操作,从内存中读取数据输出到相应的界面。

按上述方案,所述步骤(1)中cfgmgr模块包括startcfg模块和runningcfg模块,startcfg模块主要用于统一管理配置保存的startcfg文件,给cmd模块提供获取此文件的指针,cmd模块用于读取、生成、擦除、恢复配置操作;runningcfg模块用于管理当前运行的配置,包括保存、修改和删除,以及向外提供接口,供生成buildrun信息或生成startcfg文件。

按上述方案,所述步骤(2)中下发配置文件时配置文件的修改都在内存中进行,回调函数节点的查找通过hash算法进行查找。

按上述方案,所述步骤(3)中表id表项的查找通过hash算法来完成,查找到相应的表项后直接操作回调函数;通过动态内存的方式存储到开辟的内存是指内存在在堆里,堆里的内存空间动态释放。

按上述方案,所述步骤(4)中flash挂载一个可读性的文件系统,当有保存配置的需求时才进行写flash。

按上述方案,所述步骤(5)中直接对表id表项进行操作是指将配置文件的数据通过内存数据库将数据存储起来,数据的信息以原始的命令行信息展示给客户。

本发明的工作原理:该方法包括把相应的配置文件中的数据(简称配置数据)通过有向双向链表的形式动态备份到系统特定内存块中,当需要读取配置数据或者将配置数据存储到flash中时,系统将直接从此特定内存块中通过有效索引去读取到相应数据,然后以epon需求组成相应的配置命令,显示到用户界面或者写入相应配置文件并存储到flash中。当系统操作数据库的时候,不再是去调用原本的接口,而是改成了调用在cfgmgr模块初始化的时候挂载上去的几个回调函数,并且根据表id来分发是对哪个数据表的操作,然后在cfgmgr内部根据表id将要配置的数据写到开辟的内存空间,即将配置数据保存到内存中,需要的时候直接从内存中读取。

与现有技术相比,本发明具有以下有益效果:

1、现有保存配置文件的思路是每下发一条配置写到配置文件中,读写操作需要对文件进行频繁的打开和关闭,且读取文件需要的时间较长,影响系统的配置性能以及用户感受,使用本发明的方法把数据存放到内存中,不再从flash中获取配置文件中的数据,需要的时候直接从内存中读取,从内存中直接读取数据肯定比从文件中读取数据要快,提高配置文件的访问速率;

2、配置文件中的数据的修改都在内存中完成,提高配置文件的修改效率,改善嵌入设备保存配置命令的性能,特别是在大配置的时候,虽然会占用多一点的内存空间,但是明显提高系统配置性能;

3、通过动态内存的方式存储到开辟的内存是指内存在在堆里,堆里的内存空间可以动态释放,提高内存的使用效率;当有保持配置的需求时才进行写flash,降低些flash的频率。

附图说明

图1为现有olt设备的配置文件读写配置的实现方式框图;

图2为本发明读写嵌入式设备配置文件的方法的流程图;

图3为本发明实施例将配置数据直接存储到内存中的框架图;

图4为本发明实施例将配置数据直接存储到内存中的具体实施流程图。

具体实施方式

以下结合附图对本发明的原理和特征进一步的描述,所举实例只用于解释说明本发明,并非限定本发明的应用范围。

如图2~图4所示,本发明实施例所述的提升嵌入式设备配置文件读写效率的方法,将配置文件中的数据直接存储到内存中,包括以下步骤:

(1)初始化cfgmgr模块,挂载回调函数

cfgmgr模块有两大模块,startcfg模块和runningcfg模块,startcfg模块主要用于统一管理配置保存的startcfg文件,给cmd模块提供获取此文件的指针,cmd模块用于读取、生成、擦除、恢复配置等操作;runningcfg模块用于管理当前运行的配置,包括保存、修改和删除,以及向外提供接口,供生成buildrun信息或生成startcfg文件。

(2)下发配置文件时,通过回调函数对数据库进行相应的增加、删除、修改记录项操作;

(3)根据数据库表id分别调用不同的cfgmgr内部接口函数,表id表项的查找通过hash算法来完成,查找到相应的表项后直接操作回调函数,为防止内存浪费,获取的配置文件中的数据通过动态内存的方式使用链表结构体存储到开辟的内存空间,链表操作的结构体用一个key作为索引,不同的部分在与数据域的成员,根据此种情况,定义cfgmgr通用链表结构体即能满足要求,结构体如下:

其中,pnext指针为指向单向链表的下一个节点的指针,uikey为链表节点的索引,pdata为指向该种链表对应数据结构的数据域。

同时,根据上面定义的cfgmgr通用链表结构体,定义了3个链表操作的函数接口:

i)链表的插入操作:

其中,pstheadnode为链表头结点指针,pdata为将要插入的数据域指针,uikey为链表节点的索引值;

ii)链表的删除操作:

其中,pstheadnode为链表头结点指针,uikey为将要删除节点的索引值;

iii)链表的修改操作:

其中,pstheadnode为链表头结点,pdata为指向将要修改数据的区域,uikey为链表节点的索引值,uilength为将要修改数据的数据域长度。

通过定义上面3个链表操作通用接口函数,就可以完全满足cfgmgr模块中关于链表操作的实现。

定义外部接口

(4)保存配置文件时,删掉以前的配置文件,将从内存中获取的所有数据写入相应配置文件并存储到flash中,在flash中以文件的方式存储,所以flash需要挂载一个可读性的文件系统;

(5)读配置文件时,直接对表id表项进行操作,从内存中读取数据输出到相应的界面,为提高用户的体验,数据的信息以原始的命令行信息展示给客户。

以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之类,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1