G06F11/22 G06F13/42
1.一种带外数据访问优化方法,其特征在于,应用于I2C总线通信,包括:
检测申请队列中是否有功能线程发起的访问申请;
若有,则解析所述访问申请发起I2C读写;
接收I2C总线反馈的与所述访问申请对应的反馈数据;
发送所述反馈数据至相应的功能线程。
2.根据权利要求1所述的带外数据访问优化方法,其特征在于,还包括:
所述申请队列接收CLI接口发起的检测申请,以读写任意硬件的数据。
3.根据权利要求2所述的带外数据访问优化方法,其特征在于,所述解析所述访问申请发起I2C读写的过程,包括:
解析所述访问申请中的访问地址、读写地址和读写长度,确定目标硬件;
所述I2C总线向所述目标硬件发起I2C读写获取所述反馈数据。
4.根据权利要求3所述的带外数据访问优化方法,其特征在于,所述解析所述访问申请发起I2C读写之后,还包括:
若所述I2C总线未在预设响应时间内发起读写操作,则修复所述I2C总线;
重新对修复后的所述I2C总线发起I2C读写。
5.根据权利要求4所述的带外数据访问优化方法,其特征在于,所述修复所述I2C总线之后,还包括:
若修复所述I2C总线的修复次数超过预设的修复阈值,则向相应的功能线程反馈异常。
6.根据权利要求4所述的带外数据访问优化方法,其特征在于,所述接收I2C总线反馈的与所述访问申请对应的反馈数据之后,还包括:
判断所述反馈数据是否能够解析;
若不能解析,则重新对所述反馈数据进行解析,直至达到预设的解析阈值,则向相应的功能线程反馈异常。
7.一种带外数据访问优化系统,其特征在于,包括:
申请队列检测模块,用于检测申请队列中是否有功能线程发起的访问申请;
访问申请解析模块,用于若所述队列检测模块检测有所述访问申请,则解析所述访问申请发起I2C读写;
反馈数据接收模块,用于接收I2C总线反馈的与所述访问申请对应的反馈数据;
反馈数据发送模块,用于发送所述反馈数据至相应的功能线程。
8.根据权利要求7所述的带外数据访问优化系统,其特征在于,所述访问申请解析模块,包括:
解析单元,用于解析所述访问申请中的访问地址、读写地址和读写长度,确定目标硬件;
读写单元,用于所述I2C总线向所述目标硬件发起I2C读写获取所述反馈数据。
9.一种带外数据访问优化装置,其特征在于,包括:
存储器,用于存储计算机程序;
处理器,用于执行所述计算机程序以实现如权利要求1至6任一项所述的带外数据访问优化方法。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如权利要求1至6任一项所述的带外数据访问优化方法。
本发明涉及计算机技术领域,特别涉及一种带外数据访问优化方法、系统、装置及计算机可读存储介质。
对于软件应用:有一个机箱管理模块,实时检测设备的运行情况,包括温度、电压、风扇等;为了保证设备可以长时间稳定可靠的运行,需要实时检测这些外围硬件的信息。
机箱管理模块,分为两部分:一部分是以SES程序或者BMC程序为主的数据采集和状态上报,另一部分则是存储主程序里的EM线程,用于数据的告警和处理。
BMC程序的主体任务如下:
1、高频率循环读取设备的外围状态,如风扇、电压、风扇等信息,并做异常判定;当判定出现异常状态,则将其状态和信息上报给EM线程;
2、接收并执行EM线程发来的控制指令;
3、内部也可以做一些自控制处理,比如检测机箱温度的高低时,按照风扇转速策略自动调整风扇转速。
EM线程,作为存储主程序的一部分,主体任务如下:
1、接收到BMC发来的数据和状态,更新内部数据;
2、当有异常状态,则发起用户可以直观查看的告警,并通知主系统是否要针对异常做其他处理;(比如当某些关键元件温度超高,是否要进行关机保护);
3、当主系统在程序运行中控制某个硬件,则经过EM线程下发给BMC程序,由BMC程序实际控制(如读写VPD配置信息,点某个异常控制灯)。
BMC程序做为数据处理采集单元,主要以i2c链路为主,采集各类数据;I2C链路是很繁忙的;i2c访问的数据有:各类传感器,CPLD、PSU、VPD等各类数据;且每一类数据都很多,需要增加i2c switch来扩展GPIO;即一路i2c总线可能要挂很多路访问通路。
BMC采用Linux系统,采用多线程编程的方式,为每个功能创建一个单独的线程,每个人分别开发;这样常常一路i2c上连接的有多种类型的元器件,在软件上属于不同的线程来维护;各个线程是宏观并行的,但是会出现多个线程要通过一路i2c来访问器件;加上i2c是一个两线总线,同一个时间只能做一个通信,这样有多个线程的多个任务同时触发i2c访问时,就需要排队等待;I2C的访问属于线程之间的共用资源,被称为临界区,需要线程之间的加锁机制等保持其同步;存在大量的同步锁,容易出现死锁现象,给程序带来复杂度;这样的问题包括:
1、原本并行的程序需要在真正器件访问时变成了串行;加锁机制的等待,造成了线程切换的开销;
2、当某个元器件访问异常时,增加的重试机制,造成的时间延迟会影响到每个线程;
3、同一路i2c链路的数据访问,重试,异常处理策略是一致的;每个线程在编程时,要单独做数据的访问判断,确认是否访问成功和失败;这样造成故障策略的重复;
4、每个线程里程序闭环,不容易做注入测试和验证。
因而,如何将多功能的i2c访问链路优化编程,保证该链路上数据访问串行,各个功能线程可以顺畅执行,增加可扩展线,是需要解决的问题。
有鉴于此,本发明的目的在于提供一种带外数据访问优化方法、系统、装置及计算机可读存储介质,能够提前发现故障。其具体方案如下:
一种带外数据访问优化方法,应用于I2C总线通信,包括:
检测申请队列中是否有功能线程发起的访问申请;
若有,则解析所述访问申请发起I2C读写;
接收I2C总线反馈的与所述访问申请对应的反馈数据;
发送所述反馈数据至相应的功能线程。
可选的,还包括:
所述申请队列接收CLI接口发起的检测申请,以读写任意硬件的数据。
可选的,所述解析所述访问申请发起I2C读写的过程,包括:
解析所述访问申请中的访问地址、读写地址和读写长度,确定目标硬件;
所述I2C总线向所述目标硬件发起I2C读写获取所述反馈数据。
可选的,所述解析所述访问申请发起I2C读写之后,还包括:
若所述I2C总线未在预设响应时间内发起读写操作,则修复所述I2C总线;
重新对修复后的所述I2C总线发起I2C读写。
可选的,所述修复所述I2C总线之后,还包括:
若修复所述I2C总线的修复次数超过预设的修复阈值,则向相应的功能线程反馈异常。
可选的,所述接收I2C总线反馈的与所述访问申请对应的反馈数据之后,还包括:
判断所述反馈数据是否能够解析;
若不能解析,则重新对所述反馈数据进行解析,直至达到预设的解析阈值,则向相应的功能线程反馈异常。
本发明还公开了一种带外数据访问优化系统,包括:
申请队列检测模块,用于检测申请队列中是否有功能线程发起的访问申请;
访问申请解析模块,用于若所述队列检测模块检测有所述访问申请,则解析所述访问申请发起I2C读写;
反馈数据接收模块,用于接收I2C总线反馈的与所述访问申请对应的反馈数据;
反馈数据发送模块,用于发送所述反馈数据至相应的功能线程。
可选的,所述访问申请解析模块,包括:
解析单元,用于解析所述访问申请中的访问地址、读写地址和读写长度,确定目标硬件;
读写单元,用于所述I2C总线向所述目标硬件发起I2C读写获取所述反馈数据。
本发明还公开了一种带外数据访问优化装置,包括:
存储器,用于存储计算机程序;
处理器,用于执行所述计算机程序以实现如前述的带外数据访问优化方法。
本发明还公开了一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如前述的带外数据访问优化方法。
本发明中,带外数据访问优化方法,应用于I2C总线通信,包括:检测申请队列中是否有功能线程发起的访问申请;若有,则解析所述访问申请发起I2C读写;接收I2C总线反馈的与所述访问申请对应的反馈数据;发送所述反馈数据至相应的功能线程。
本发明设置申请队列,将现有技术中的并行通信,改用申请队列进行线性通信,避免了现有技术中多个功能创建多个功能线程并向通信致使I2C通信堵塞的问题,同时每个功能线程依旧是并行的向申请队列中发送访问申请,对于功能线程而言,与现有并行通信方案变化不大,减少了开发难度,通过申请队列依次依序的对访问申请进行I2C读写,使得I2C读写变的有序,不再堵塞,提高了访问效率。
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1为本发明实施例公开的一种带外数据访问优化方法流程示意图;
图2为本发明实施例公开的另一种带外数据访问优化方法流程示意图;
图3为本发明实施例公开的一种带外数据访问优化系统结构示意图。
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明实施例公开了一种带外数据访问优化方法,参见图1所示,应用于I2C总线通信,该方法包括:
S11:检测申请队列中是否有功能线程发起的访问申请。
具体的,每个功能线程需要发起访问读写时,生成访问申请,并将访问申请发送至预先建立的申请队列中,申请队列对访问申请进行存储和依序排序,申请队列会定期检测是否接收到功能线程发送的访问申请,如果检测到接收到访问申请,则进行下一步准备发起I2C读写。
可以理解的是,申请队列不去主动获取功能线程生成的访问申请。
S12:若有,则解析访问申请发起I2C读写。
具体的,如果申请队列中有访问申请,则解析访问申请,以便根据访问申请中记载的访问信息向相应的硬件发起I2C读写操作,以便接收相应的反馈数据。
可以理解的是,若无则继续等待访问申请,不做其它操作。
S13:接收I2C总线反馈的与访问申请对应的反馈数据。
具体的,在根据访问申请发起I2C读写后,I2C总线会反馈与访问申请对应的硬件反馈的反馈数据。
S14:发送反馈数据至相应的功能线程。
具体的,在接收到反馈数据后再将反馈数据转发至与访问申请对应的功能线程中,从而完成一次完整的I2C读写操作。
可见,本发明实施例设置申请队列,将现有技术中的并行通信,改用申请队列进行线性通信,避免了现有技术中多个功能创建多个功能线程并向通信致使I2C通信堵塞的问题,同时每个功能线程依旧是并行的向申请队列中发送访问申请,对于功能线程而言,与现有并行通信方案变化不大,减少了开发难度,通过申请队列依次依序的对访问申请进行I2C读写,使得I2C读写变的有序,不再堵塞,提高了访问效率。
本发明实施例公开了一种具体的带外数据访问优化方法,相对于上一实施例,本实施例对技术方案作了进一步的说明和优化。参见图2所示,具体的:
S201:检测申请队列中是否有功能线程发起的访问申请;
S202:若有,则解析访问申请中的访问地址、读写地址和读写长度,确定目标硬件。
具体的,通过解析出访问申请中的访问地址、读写地址和读写长度,确定目标硬件,从而精确的向目标请见发起I2C读写。
S203:若I2C总线未在预设响应时间内发起读写操作,则修复I2C总线。
具体的,由于I2C总线存在故障的可能性,所以存在需要I2C总线发起I2C读写,但却长时间无响应的情况,为此,增设对I2C总线无响应的判断,一旦I2C总线未在预设响应时间内发起读写操作,例如,10秒内,则认为I2C总线故障,主动发起对I2C总线的修复操作。
S204:重新对修复后的I2C总线发起I2C读写。
具体的,如果修复成功,则重新对修复后的I2C总线发起I2C读写。
S205:若修复I2C总线的修复次数超过预设的修复阈值,则向相应的功能线程反馈异常。
具体的,如果尝试数次修复,例如,3次修复,每次I2C总线均超过预设响应时间未发起读写操作,则向相应的功能线程反馈异常,认定I2C总线无法通过软件修复恢复正常。
S206:I2C总线向目标硬件发起I2C读写获取反馈数据;
S207:接收I2C总线反馈的与访问申请对应的反馈数据;
S208:判断反馈数据是否能够解析;
S209:若不能解析,则重新对反馈数据进行解析,直至达到预设的解析阈值,则向相应的功能线程反馈异常。
具体的,由于可能存在反馈的反馈数据出现错误致使无法正常解析反馈数据,为了避免遇到异常的反馈数据后没有提示,因此,在接收到反馈数据后,判断反馈数据是否能够解析,如果解析正常,则进行下一步,如果解析失败,则重新对反馈数据进行解析,如果仍然失败,可以多次重复解析,直至达到预设的解析阈值,例如,重复对反馈数据解析3次后,算为超过解析阈值不再解析,向与反馈数据对应的功能线程反馈异常。
S210:若能解析,则发送反馈数据至相应的功能线程。
S211:申请队列接收CLI接口发起的检测申请,以读写任意硬件的数据。
具体的,申请队列还预留CLI接口,允许用户通过CLI接口发起检测申请,以此判断I2C总线是否通常。在命令行线程里,可以手动输入参数,直接发起读写,而CLI接口则不需要该代码,方便读写任意硬件的数据,在生产和维护阶段的硬件检测、故障注入检测和故障定位时提供极大便利。
可以理解的是,本发明实施例的执行主体可以是单独的线程,在此称为数据访问线程,上述中正常和异常的重试和修复策略,为每个硬件访问所共用,不需要额外再重复开发,降低了开发复杂度,提高运行效率。
相应的,本发明实施例还公开了一种带外数据访问优化系统,参见图3所示,该系统包括:
申请队列检测模块11,用于检测申请队列中是否有功能线程发起的访问申请;
访问申请解析模块12,用于若队列检测模块检测有访问申请,则解析访问申请发起I2C读写;
反馈数据接收模块13,用于接收I2C总线反馈的与访问申请对应的反馈数据;
反馈数据发送模块14,用于发送反馈数据至相应的功能线程。
可见,本发明实施例设置申请队列,将现有技术中的并行通信,改用申请队列进行线性通信,避免了现有技术中多个功能创建多个功能线程并向通信致使I2C通信堵塞的问题,同时每个功能线程依旧是并行的向申请队列中发送访问申请,对于功能线程而言,与现有并行通信方案变化不大,减少了开发难度,通过申请队列依次依序的对访问申请进行I2C读写,使得I2C读写变的有序,不再堵塞,提高了访问效率。
具体的,访问申请解析模块12,包括:
解析单元,用于解析访问申请中的访问地址、读写地址和读写长度,确定目标硬件;
读写单元,用于I2C总线向目标硬件发起I2C读写获取反馈数据。
具体的,还包括:
CLI接口模块,用于申请队列接收CLI接口发起的检测申请,以读写任意硬件的数据。
具体的,还包括:
总线状态判断模块,用于若I2C总线未在预设响应时间内发起读写操作,则修复I2C总线;
读写发起模块,用于重新对修复后的I2C总线发起I2C读写。
具体的,还包括:
总线异常反馈模块,用于若修复I2C总线的修复次数超过预设的修复阈值,则向相应的功能线程反馈异常。
具体的,还包括:
反馈数据判断模块,用于判断反馈数据是否能够解析;
数据异常反馈模块,用于若不能解析,则重新对反馈数据进行解析,直至达到预设的解析阈值,则向相应的功能线程反馈异常。
此外,本发明实施例还公开了一种带外数据访问优化装置,包括:
存储器,用于存储计算机程序;
处理器,用于执行计算机程序以实现如前述的带外数据访问优化方法。
另外,本发明实施例还公开了一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序,计算机程序被处理器执行时实现如前述的带外数据访问优化方法。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
以上对本发明所提供的技术内容进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
本文发布于:2023-04-13 11:39:01,感谢您对本站的认可!
本文链接:https://patent.en369.cn/patent/1/86468.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |