CN117591271A - 一种Linux系统下实时数据采集与保存的方法、系统、设备 - Google Patents

一种Linux系统下实时数据采集与保存的方法、系统、设备 Download PDF

Info

Publication number
CN117591271A
CN117591271A CN202311359568.8A CN202311359568A CN117591271A CN 117591271 A CN117591271 A CN 117591271A CN 202311359568 A CN202311359568 A CN 202311359568A CN 117591271 A CN117591271 A CN 117591271A
Authority
CN
China
Prior art keywords
memory
data
file
real
acquisition
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202311359568.8A
Other languages
English (en)
Inventor
白世军
唐先明
岳维功
郭琦
徐勃
邓永超
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Xi'an Xidian Power Electronics Co ltd
China XD Electric Co Ltd
Original Assignee
Xi'an Xidian Power Electronics Co ltd
China XD Electric Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Xi'an Xidian Power Electronics Co ltd, China XD Electric Co Ltd filed Critical Xi'an Xidian Power Electronics Co ltd
Priority to CN202311359568.8A priority Critical patent/CN117591271A/zh
Publication of CN117591271A publication Critical patent/CN117591271A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/16Handling requests for interconnection or transfer for access to memory bus
    • G06F13/1605Handling requests for interconnection or transfer for access to memory bus based on arbitration
    • G06F13/1652Handling requests for interconnection or transfer for access to memory bus based on arbitration in a multiprocessor architecture
    • G06F13/1663Access to shared memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/16Handling requests for interconnection or transfer for access to memory bus
    • G06F13/1668Details of memory controller
    • G06F13/1673Details of memory controller using buffers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/38Information transfer, e.g. on bus
    • G06F13/40Bus structure
    • G06F13/4004Coupling between buses
    • G06F13/4027Coupling between buses using bus bridges
    • G06F13/404Coupling between buses using bus bridges with address mapping
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/17Details of further file system functions
    • G06F16/172Caching, prefetching or hoarding of files
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/4401Bootstrapping
    • G06F9/4405Initialisation of multiprocessor systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/50Indexing scheme relating to G06F9/50
    • G06F2209/5012Processor sets

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Hardware Design (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本发明公开了一种Linux系统下实时数据采集与保存的方法、系统、设备,启动具有多核处理器和Linux系统的设备;利用BootLoader引导程序读取隔离核心配置并解析隔离核心配置的内容,通过隔离核心配置的内容选择并实施Linux系统与实时采集任务协同工作的隔离CPU核心的方式、确定采集核心的编号与数量和处理核心的编号与数量;利用采集核心根据采集配置进行实时采集任务,收集内存硬件实时产生的数据填充到当前空闲的缓冲区得到缓冲区数据;利用处理核心根据存储配置从内存文件系统上的内存文件池中获取空闲文件,将采集核心完成填充的缓冲区数据通过内存映射拷贝到空闲文件内存,获得内存文件,将内存文件拷贝到存储配置预设的外存位置,完成实时数据采集与保存。

Description

一种Linux系统下实时数据采集与保存的方法、系统、设备
技术领域
本发明属于计算机技术领域,具体涉及一种Linux系统下实时数据采集与保存的方法、系统、设备。
背景技术
关于实时数据的采集存储,目前已经有很多成熟的方案可供选择。这些方案根据实时性要求及软硬件模块参与的程度,可以分为纯硬件实时采集存储系统、软硬件结合的实时采集存储系统以及纯软件的实时采集存储系统。
纯硬件实时采集存储系统主要应用于高速数据采集领域。这类系统一般借助FPGA(Field Programmable Gate Array,现场可编程门阵列)、CPLD(Complex Programmablelogic device,复杂可编程逻辑器件)等技术及专有器件实现。通过硬件编程语言,将专用逻辑固化到硬件芯片中,由时钟驱动时序逻辑完成数据的实时采集和保存。这种方案因为是纯硬件实现,所以实时性可以得到保证,不存在软件方法中可能存在的漏采丢失问题。当然,采用这种方法,成本较高,设计验证复杂,通用性较差。
一般实时数据采集存储系统还伴随有很多分析处理工作,这方面软件更加擅长,所以基于实时操作系统的软硬结合方案也得到了广泛应用。通过专用嵌入式实时操作系统,比如VxWorks、freeRTOS等,实时调度任务线程,实现数据的实时采集,并对数据进行存储和分析处理。采用实时操作系统可在一定程度上避免由于任务调度、中断干扰导致的漏采丢失问题。但在高速、安全性要求较高的数据采集领域,软件能够保证的精度不如纯硬件方案高。另外,商业实时操作系统价格不菲,在一定程度上会抬高成本,而免费实时操作系统可靠性无法保证,存在一定风险,且周边支持功能少,后期开发工作量大。
在实时性要求不是很高,数据来源多样,数据量又较大的场景,比如大数据处理领域,纯软件的采集存储方案更有优势。此时,硬件和基础软件系统不需要过多关注实时性,只要性能能够满足实时处理要求即可,更多的工作是在应用层软件上实现的。当然,也有将Linux进行实时改造后应用于有一定实时性要求的数据采集存储领域的方案,以期在成本、可靠性、开发便捷等方面取得平衡。
在上述几种方案中,现有方法更多的是关注数据采集的实时性,而数据的实时保存方面,高效、简洁、通用的方法相对缺乏。主要用到的手段有:
1、直接对接物理内存。比如在纯硬件方案中,通过专用IP核,实现FPGA对物理内存的读写。这种情况下,数据直接保存到内存中。这种方法可保存实时数据,但是内存相当于数据的缓冲,当需要转换为文件方式存储或者分析时,需要二次处理。
2、为了弥补上述1中的缺点,现有数据保存方案多使用双缓冲策略,也就是乒乓缓冲。在将采集数据填充到第二缓冲区的间隔期,系统读取第一缓冲区中的数据进行存盘或处理。这种方法相对于上述1中的方式,在不影响实时数据采集的前提下还能够实时保存和分析数据,因此,在很多领域都得到了广泛的应用。但是采用这种方案,缓冲过大,则间隔期会变长,存储、分析的及时性就受到影响;缓冲过小,则可能出现间隔期时间不够,无法正确完成数据的存储分析。
3、还有一些系统选择了数据采集与数据的存储、分析分离的方案。采集的数据通过高速网络或者无线网络传送到另一系统进行处理。比如,通过光纤,可以走SAN架构,直接落盘存储;再比如物联网场景中,大量数据通过移动互联网或者专网传送到边缘或者云上的消息队列、时序数据库等加以保存、分析、显示。通过无线网络传输数据,一般只适用于小数据量,实时性要求不是很高的场景;而使用SAN方案,则会带来实施维护复杂,成本高的问题。
4、在最终的数据存盘处理中,为了保证实时性,有采用高性能硬件的方案,也有改造文件系统的方案比如将随机读写改造为顺序读写,以此提高存取效率。总体而言,此类方案大都存在成本较高,系统复杂的问题。
另外,现有实时数据采集存储方法缺乏灵活配置的功能。很多时候,并不是需要对所有数据进行采集、存储和分析。即使在同一个系统中,也不一定所有数据都有实时性要求或者说有相同等级的实时性要求。比如,在电力系统中,充电运行模式和放电工作状态,需要实时关注的数据就有不同。再比如,运行过程中过压过流等故障信息需要及时获知并采取应急措施,而温度信息的实时性要求就没有那么高。此时可以根据系统内外部需求,减少数据采集量,节省存储和分析处理时间,从而以更小的代价获得更好的实时性保证。
故,目前需要解决数据实时保存方法复杂、实时数据采集存储方法缺乏灵活配置的问题。
发明内容
本发明的目的在于克服数据实时保存方法复杂、实时数据采集存储方法缺乏灵活配置的问题,提出了一种Linux系统下实时数据采集与保存的方法、系统、设备。
为达到上述目的,本发明采用如下技术方案:
一种Linux系统下实时数据采集与保存的方法,包括以下步骤:
启动具有多核处理器和Linux系统的设备;
利用BootLoader引导程序读取隔离核心配置并解析隔离核心配置的内容,通过隔离核心配置的内容选择并实施Linux系统与实时采集任务协同工作的隔离CPU核心的方式、确定采集核心的编号与数量和处理核心的编号与数量;
利用采集核心根据采集配置进行实时采集任务,实时采集任务收集内存硬件实时产生的数据填充到当前空闲的缓冲区得到缓冲区数据;
利用处理核心根据存储配置从内存文件系统上的内存文件池中获取空闲文件,将采集核心完成填充的缓冲区数据通过内存映射拷贝到空闲文件内存,获得内存文件;
将内存文件拷贝到存储配置预设的外存位置,完成实时数据采集与保存。
进一步地,所述隔离核心配置包括最顶层和第二级,所述最顶层选择隔离CPU核心的方式,所述第二级实施最顶层选择的隔离CPU核心的方式。
进一步地,所述隔离CPU核心的方式包括可感知方式和不可感知方式,所述可感知方式在实施时配置隔离核心的编号、共享内存区域的地址和大小、实时采集任务程序的位置;所述不可感知方式在实施时配置隔离核心的编号、共享内存区域的地址和大小、Linux系统内存的大小、实时采集任务程序存放位置及运行的内存起始地址和大小、隔离核心的启动加载地址;所述不可感知方式中共享内存区域、Linux系统内存、隔离核心程序运行内存无交叠。
进一步地,所述利用采集核心根据采集配置进行实时采集任务,收集内存硬件实时产生的数据保存到当前空闲缓冲区得到缓冲区数据具体为:所述实时采集任务根据采集配置设置的数据采集频率从地址映射表中数据的物理地址读取数据并保存到共享缓冲区。
进一步地,所述缓冲区的结构逻辑具体为:将实时性要求接近或者关联性密切的数据划分到同一个组中,确定组的采集频率,同一组中的若干份数据实例构成一个池,若干个池构成一个块,重复的块构成一个包,包按照文件方式存储。
进一步地,所述利用处理核心根据存储配置从内存文件系统上的内存文件池中获取空闲文件,将采集核心完成填充的缓冲区数据通过内存映射拷贝到空闲文件内存,获得内存文件,将内存文件拷贝到存储配置预设的外存位置,完成实时数据的采集与保存的具体步骤如下:
S1、根据采集配置和存储配置,确定每一个数据采集文件的大小;
S2、根据存储配置,划分内存区域,创建内存镜像文件,将内存镜像文件挂载到系统中,构建内存文件系统;
S3、格式化内存文件系统,并挂载到Linux系统中;
S4、根据存储配置,在内存文件系统中预先创建文件池;
S5、从文件池中获取一个空闲文件,使用mmap系统调用接口,进行文件内存映射,得到文件内核物理地址对应的虚拟地址;
S6、将S5得到的虚拟地址传递给内核层处理数据拷贝任务,数据拷贝任务获知空闲文件的开始地址及大小,确定空闲文件对应的内存地址区间;
S7、内核层中的数据拷贝任务根据采集配置检测数据采集情况,所述检测数据采集情况采用核间中断方式或高频查询方式,并将实时采集任务填充好的缓冲区中的数据拷贝到上述S6所获得的空闲文件对应的内存地址区间中;
S8、内核数据拷贝任务完成文件数据的拷贝后,通知应用层解除文件映射;
S9、应用层收到通知后,解除当前文件映射关系,然后获取新的空闲文件,建立映射,并传递给内核层处理数据拷贝的驱动任务;
S10、应用层将S9解除映射关系得到的文件拷贝到存储配置预设的磁盘位置;
S11、返回S6,内核数据拷贝驱动任务开始新文件的拷贝处理。
进一步地,所述隔离核心配置、采集配置和存储配置均通过本地提供或通过远程提供。
一种Linux系统下实时数据采集与保存的系统,包括隔离CPU核心模块,用于利用BootLoader引导程序读取隔离核心配置并解析隔离核心配置的内容,通过隔离核心配置的内容选择并实施Linux系统与实时采集任务协同工作的隔离CPU核心的方式、确定采集核心的编号与数量和处理核心的编号与数量;
实时采集模块,用于利用采集核心根据采集配置进行实时采集任务,实时采集任务收集内存硬件实时产生的数据保存到当前空闲缓冲区得到缓冲区数据;
内存映射模块,用于利用处理核心根据存储配置从内存文件系统上的内存文件池中获取空闲文件,将采集核心完成填充的缓冲区数据通过内存映射拷贝到空闲文件内存,获得内存文件;
拷贝保存模块,用于将内存文件拷贝到存储配置预设的外存位置,完成实时数据采集与保存。
一种电子设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现任一项中所述的Linux系统下实时数据采集与保存的方法。
一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现所述的Linux系统下实时数据采集与保存的方法。
与现有技术相比,本发明具有以下有益的技术效果:
本发明一种Linux系统下实时数据采集与保存的方法,通过隔离CPU核心的方式让实时任务独占CPU核心,不对Linux进行实时性改造,对Linux系统改动很小,保证了整个代码的完整性,升级方便;硬件不需要构建多CPU板卡,连线也相对减少,整体设计更加简洁,成本更低。通过文件映射,直接访问文件存储区域,避免了大量系统调用带来的性能损失;通过使用内存文件系统,在数据采集缓存与磁盘IO之间增加了一层文件缓冲,不仅不需要对存盘做额外的IO缓存优化,还减轻了存盘过程的IO操作对处理核心带来的压力,又保持了文件机制的完整性。
本发明一种Linux系统下实时数据采集与保存的方法,借助Linux系统本身提供的丰富功能接口,通过多级缓冲,在不额外增加硬件,不额外修改操作系统的情况下,提供的实时数据采集与保存方法实施简便、通用性强、处理高效、应用场景广泛,简洁、方便、低成本的实现了具有广泛适用性的实时数据采集与存储。
本发明实现的处理核心相关功能基于Linux系统开发,可充分利用Linux提供的文件管理和网络协议方面支持,简化开发,提升效率。
本发明通过配置策略对实时数据采集与保存的整个过程进行控制优化,使得整体方案更加灵活,适用面更广。
附图说明
说明书附图用来提供对本发明的进一步理解,构成本发明的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。
图1为本发明一种Linux系统下实时数据采集与保存的方法流程示意图。
图2为本发明一种Linux系统下实时数据采集与保存的系统结构示意图。
图3为本发明的电子设备结构示意图。
图4为本发明具有多核处理器与Linux系统的设备示意图。
图5为本发明上电后引导程序BootLoader首先运行时设备状态示意图。
图6为本发明隔离CPU核心的过程示意图。
图7为本发明缓冲区结构逻辑关系示意图。
图8为本发明数据从产生到存盘的整个流转途径示意图。
具体实施方式
下面将参考附图并结合实施例来详细说明本发明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。
以下详细说明均是示例性的说明,旨在对本发明提供进一步的详细说明。除非另有指明,本发明所采用的所有技术术语与本申请所属领域的一般技术人员的通常理解的含义相同。本发明所使用的术语仅是为了描述具体实施方式,而并非意图限制根据本发明的示例性实施方式。
参见图1,一种Linux系统下实时数据采集与保存的方法,包括以下步骤:
启动具有多核处理器和Linux系统的设备;
利用BootLoader引导程序读取隔离核心配置并解析隔离核心配置的内容,通过隔离核心配置的内容选择并实施Linux系统与实时采集任务协同工作的隔离CPU核心的方式、确定采集核心的编号与数量和处理核心的编号与数量;
利用采集核心根据采集配置进行实时采集任务,实时采集任务收集内存硬件实时产生的数据填充到当前空闲的缓冲区得到缓冲区数据;
利用处理核心根据存储配置从内存文件系统上的内存文件池中获取空闲文件,将采集核心完成填充的缓冲区数据通过内存映射拷贝到空闲文件内存,获得内存文件;
将内存文件拷贝到存储配置预设的外存位置,完成实时数据采集与保存。
隔离核心配置包括最顶层和第二级,最顶层选择隔离CPU核心的方式,第二级实施最顶层选择的隔离CPU核心的方式。
隔离CPU核心的方式包括可感知方式和不可感知方式,可感知方式在实施时配置隔离核心的编号、共享内存区域的地址和大小、实时采集任务程序的位置;不可感知方式在实施时配置隔离核心的编号、共享内存区域的地址和大小、Linux系统内存的大小、实时采集任务程序存放位置及运行的内存起始地址和大小、隔离核心的启动加载地址;不可感知方式中共享内存区域、Linux系统内存、隔离核心程序运行内存无交叠。
利用采集核心根据采集配置进行实时采集任务,收集内存硬件实时产生的数据保存到当前空闲缓冲区得到缓冲区数据具体为:实时采集任务根据采集配置设置的数据采集频率从地址映射表中数据的物理地址读取数据并保存到共享缓冲区。
缓冲区的结构逻辑具体为:将实时性要求接近或者关联性密切的数据划分到同一个组中,确定组的采集频率,同一组中的若干份数据实例构成一个池,若干个池构成一个块,重复的块构成一个包,包按照文件方式存储。
利用处理核心根据存储配置从内存文件系统上的内存文件池中获取空闲文件,将采集核心完成填充的缓冲区数据通过内存映射拷贝到空闲文件内存,获得内存文件,将内存文件拷贝到存储配置预设的外存位置,完成实时数据的采集与保存的具体步骤如下:
S1、根据采集配置和存储配置,确定每一个数据采集文件的大小;
S2、根据存储配置,划分内存区域,创建内存镜像文件,将内存镜像文件挂载到系统中,构建内存文件系统;
S3、格式化内存文件系统,并挂载到Linux系统中;
S4、根据存储配置,在内存文件系统中预先创建文件池;
S5、从文件池中获取一个空闲文件,使用mmap系统调用接口,进行文件内存映射,得到文件内核物理地址对应的虚拟地址;
S6、将S5得到的虚拟地址传递给内核层处理数据拷贝任务,数据拷贝任务获知空闲文件的开始地址及大小,确定空闲文件对应的内存地址区间;
S7、内核层中的数据拷贝任务根据采集配置检测数据采集情况,检测数据采集情况采用核间中断方式或高频查询方式,并将实时采集任务填充好的缓冲区中的数据拷贝到上述S6所获得的空闲文件对应的内存地址区间中;
S8、内核数据拷贝任务完成文件数据的拷贝后,通知应用层解除文件映射;
S9、应用层收到通知后,解除当前文件映射关系,然后获取新的空闲文件,建立映射,并传递给内核层处理数据拷贝的驱动任务;
S10、应用层将S9解除映射关系得到的文件拷贝到存储配置预设的磁盘位置;
S11、返回S6,内核数据拷贝驱动任务开始新文件的拷贝处理。
隔离核心配置、采集配置和存储配置均通过本地提供或通过远程提供。
参见图2,一种Linux系统下实时数据采集与保存的系统,包括隔离CPU核心模块,用于利用BootLoader引导程序读取隔离核心配置并解析隔离核心配置的内容,通过隔离核心配置的内容选择并实施Linux系统与实时采集任务协同工作的隔离CPU核心的方式、确定采集核心的编号与数量和处理核心的编号与数量;
实时采集模块,用于利用采集核心根据采集配置进行实时采集任务,实时采集任务收集内存硬件实时产生的数据保存到当前空闲缓冲区得到缓冲区数据;
内存映射模块,用于利用处理核心根据存储配置从内存文件系统上的内存文件池中获取空闲文件,将采集核心完成填充的缓冲区数据通过内存映射拷贝到空闲文件内存,获得内存文件;
拷贝保存模块,用于将内存文件拷贝到存储配置预设的外存位置,完成实时数据采集与保存。
参见图3,一种电子设备,包括存储器、处理器以及存储在存储器中并可在处理器上运行的计算机程序,处理器执行计算机程序时实现任一项中Linux系统下实时数据采集与保存的方法。
一种计算机可读存储介质,计算机可读存储介质存储有计算机程序,计算机程序被处理器执行时实现Linux系统下实时数据采集与保存的方法。
以下结合实施例对本发明做进一步详细解释:
实施例
一种Linux系统下实时数据采集与保存的方法整体过程如下:
1、采用具有多CPU核心的可运行Linux系统的装置,如图4。
2、上电后,引导程序BootLoader首先运行。通过读取配置,确定核心隔离方式。这里以异构AMP方式为例,引导程序从存储设备中读取实时采集任务程序,将其加载到内存设定位置后,唤醒隔离核心,之后隔离核心开始运行实时采集任务。同上,引导程序引导Linux系统启动,此时,设备状态如图5。
3、实时采集任务根据配置,将内存特定区域的硬件实时产生的数据收集到特定缓冲区空间;Linux系统中的存储任务将缓冲区的数据搬运到内存文件系统当前数据采集文件映射的文件内存,满足文件存储量后,将该内存文件拷贝到外存。具体见图8。
4、重复第三步所述过程,实时采集保存数据。
本发明基于多核心处理器与Linux系统实现。
在工艺制程、成本、功耗等因素的约束限制下,摩尔定律已经趋向于极限。处理器性能的改进重点不再单纯依靠频率提升,而是综合处理器架构、工艺等多种方法来实现。其中架构方面,集成多核心是主流做法。目前除了专用芯片和一些低端芯片,大部分中高端芯片都已经支持多核心。
传统的实时数据采集存储领域,经常采用多处理器方案。这类方案使用单个的处理器进行实时任务处理,然后将数据交给其他处理器进行存储、分析、显示相关处理。这种方案普遍存在成本高、软硬件系统设计复杂、可靠性差的问题。如果能够将多核心处理器充分利用起来,使其中部分核心处理实时任务,部分核心处理其他任务,那么在软硬件设计上就不需要考虑多处理器布板及其相互通信问题,从而可以减少不确定性因素的引入,提高整体可靠性。
Linux是一款开源操作系统内核。经过近30年的发展,已经广泛应用于各类工业及消费电子产品中,其可靠性、可配置性、性能经过了时间、实践的充分验证,其周边生态也都得到了充分的发展和完善。基于Linux系统的方法,具有适用面广,通用性好的特点。
将Linux系统应用于实时数据采集存储领域,技术人员惯用的思路是对Linux系统进行实时性改造。这主要通过给内核打实时性补丁,让系统具有一定的实时处理能力来实现。但是,这种改造影响面大,且由于大量系统任务及中断的存在,实时性并不可靠。考虑到现在多核处理器已经十分普遍,且实时数据采集存储场景,大部分情况下正真需要实时处理的任务并不多,因此,可以将关键实时任务放到独立核心运行,满足其实时性要求,其他任务则仍然采用常规方式在其他核心上进行调度执行。这样做,既兼顾了实时任务的处理,又可以充分利用Linux提供的便捷资源,方便开发文件管理、网络传输等方面的功能。
为方便后面的讨论,下面将处理实时任务的核心称为采集核心,将处理其他任务的核心称为处理核心。
核心隔离一般有两种方式,一种是主操作系统Linux可感知的,一种是主操作系统Linux不可感知的。对于可感知的方式,Linux根据配置命令,将需要隔离的核心抽离出来,不参与整体调度,以此来保证任务的实时性。在本发明中,将实时采集任务运行于隔离核心上,不受系统调度和其他任务影响,专职执行采集数据的操作,以此保证源端数据不漏采,不丢失。这种方法,使用Linux命令将采集任务加载到隔离核心上运行,同样可以通过Linux命令停止任务运行,卸载任务,并加载新的任务。因为隔离核心所运行采集任务的装载、启停都由Linux系统控制,因此其对主操作系统Linux而言是可以感知的。这种方式的缺点是实时采集任务对系统资源的使用受限,其本身相当于Linux下的一个进程,如果要在隔离核心上运行实时操作系统,则这种方法不适用。优点则是控制调试比较方便,跟主系统在一个内存空间,共享数据也很方便。
对于不可感知的方式则采用异构架构。方法为通过BootLoader传递启动参数,限制Linux系统可以使用的CPU物理核心数目,这样Linux只将配置参数给定数量的CPU核心纳入资源调度管理,其他核心的运行完全不受Linux系统控制。为了将其他核心利用起来,需要修改BootLoader,在配置为该异构方案时,为其他核心在物理内存中划定运行范围和启动地址,再将启动地址告知控制特定隔离核心的寄存器,之后唤醒特定隔离核心。隔离核心接收到唤醒事件后,就从配置的内存地址开始读取指令执行。因为处理器中有一些资源是全局的,要避免重复初始化,这可以通过在隔离核心上的BSP代码中添加宏控制来实现,判断到当前为异构模式时,不对全局资源进行二次初始化。采用这种方法,因为Linux系统感知不到实时采集任务所在的核心,因此实时采集任务对隔离核心的使用灵活度更大,比如可以运行嵌入式实时操作系统到隔离核心,从而支撑逻辑较为复杂的实时流程处理。缺点是控制不方便,更新程序比较麻烦,需要自己开发更新程序。还有一点,Linux和隔离核心上的代码对内存的使用是完全独立的,如果要共享数据,就需要单独划分一块额外的内存作为共享数据的内存。
本发明支持通过配置,选择上述两种方式的一种,作为采集核心运行模式的实施方式。配置信息采用层级化的方式管理。最顶层为方式的选择,包括可感知的还是不可感知的。向下为第二级。对于可感知的方式,配置隔离核心的编号,共享内存区域的地址和大小,实时采集任务程序的位置;对于不可感知的方式,配置隔离核心的编号,共享内存区域的地址和大小,Linux系统内存的大小,实时采集任务程序存放位置及运行的内存起始地址和大小,隔离核心的启动加载地址等。共享内存、Linux系统内存、隔离核心程序运行内存在异构模式下不能有交叠。
设备启动时,首先运行BootLoader引导程序。引导程序在运行过程中会读取配置,解析配置内容,确定Linux系统与实时采集任务协同工作的方式。如果是前述可感知方式,则将该方式下的配置信息传递给Linux系统,启动Linux系统。Linux系统启动后,从配置指定的位置找到实时采集任务程序,并将其加载到配置指定编号的隔离核心上。Linux系统和实时采集任务使用配置指定的内存区域共享数据。如果是前述不可感知方式,则引导程序根据配置信息,分别引导启动Linux系统和隔离核心上的实时采集任务。具体方法为:根据配置,获得实时采集任务程序,将其加载到配置指定的内存地址区域,并将该起始地址告知隔离核心,唤醒隔离核心。隔离核心被唤醒后,就跳转到实时采集任务在内存的起始地址处运行。运行过程中,隔离核心不对全局资源进行初始化,以免导致错误出现。采集核心运行后,引导程序将隔离核心编号、共享内存区域信息、Linux系统内存大小信息传递给Linux系统,启动Linux系统。Linux启动过程中完成全局资源的初始化,并将配置中给定的非隔离核心加入调度管理,同时确保自身使用的内存范围不超过配置限定的范围。Linux启动后,根据引导程序传递的共享内存区域信息与采集核心进行数据通信。上述核心隔离的过程如图6所示。
采集核心启动后,就开始实时收集数据。为了增强数据收集的灵活性,数据来源通过采集配置指定。采集配置以地址映射表的方式给实时采集任务提供数据源。地址映射表中包括了数据的名称和其所在的物理地址。另外,采集配置还指定了数据采集频率。采集任务按配置要求的频率,从映射表指定的物理地址读取数据,将其保存到共享缓冲区。
本发明所述方法支持缓冲区的规格化处理。首先,将实时性要求接近或者关联性密切的数据划分到同一个组中,确定组的采集频率。其次,同一组的多份数据实例构成一个池,多个池构成一个块。最后,重复的块构成一个包。包最终按照文件方式存储。比如像电压电流这类数据,就是实时性要求高,且有一定关联的数据,而像温度就是实时性没有那么高,且影响因素众多,不具备有明确关联的数据。缓冲区结构逻辑关系如图7所示。
将数据分组,可以在灵活性和实时性方面取得更好的平衡。比如,有的数据需要高频采集,有的数据不需要,都安排在一起,就会造成CPU计算资源的浪费。如果进行分组,那么最终高实时性要求的数据量就会相对变少,采集较少的数据,消耗的CPU指令周期相对也少,循环处理的频率就可以提高。将关联性强的数据组合在一起,也可以方便后续的处理。比如独立发送,独立存储,独立分析等,不用再额外解析归类。实际上,相当于在源头上完成了数据的第一次分析。
将前述分组数据缓冲到池中,可以避免数据采集和处理同时进行,相互影响。这方面惯用手段是双缓冲,也就是乒乓缓冲。往第一缓冲写数据时,读第二缓冲数据。反之亦然。本方法改进了该处理,通过池的概念,可以通过配置决定缓冲数目。实时采集任务每次写数据时,找到当前组在当前块所包含的池中的空闲组,将采集数据写入其中。当一个块的数据被写入内存文件中时,该块的所有组就会被重新标记为空闲状态。实时采集任务就可以继续使用这些组。(一个数据块由具有相对固定比例关系的组构成,这个比例关系通过池来约束。比如,一个块由K个池,每个池Ki有Mi个组构成,每个组由Pi个数据项构成)。
当一个块的数据被填满后,就会被拷贝到文件内存。缓冲区由两个块构成,分别标识为A块和B块。A块填充完成后,实时采集任务填充B块,Linux系统处理任务则在此间隔期将A块内容拷贝到文件内存中。当两个任务完成数据填充后,再交换,实时采集任务填充A块,Linux系统处理任务拷贝B块。这就是一个乒乓块缓冲工作的过程。
上述缓冲区工作过程所涉及的组项目、池中组个数、块中池项目等信息也是构成采集配置的一部分。具体实践中,可根据应用场景需求,做最佳调配。比如,对于实时性高,重要性高的组,可以将对应池的空间配置大一些,以容纳更多的组,反之,可以配置小一些,从而在处理实时性、可靠性、内存空间消耗方面,取得平衡。
至此,采集核心的处理完成了。总的来看,采集任务的工作过程是根据配置,收集数据,将其放入缓冲块,等待处理核心读取,然后进入下一次的收集过程,如此往复。
处理核心承担的任务一般较为繁杂。典型的,实时数据存储通常都有格式要求,而且除了本地存储外,还有被远程网络节点读取的需求,有些还有实时分析显示的要求。正如前面所述,如果这些工作都使用嵌入式实时操作系统来完成,那其在文件系统、磁盘管理和网络协议支持方面,远远不如Linux系统强大方便。也正因为Linux有如此强大的功能,导致其内部系统任务繁多,处理复杂,在实时性方面不如简洁的嵌入式实时操作系统有优势。前面采用隔离核心的方法解决采集实时性的问题。实时数据采集后通过缓冲暂存起来,这样处理的实时性要求就没有采集那么严格了。为了保证数据录制的可靠性,提升性能,同时又能够利用Linux系统的强大功能,这里通过Linux的文件内存映射、内存文件系统等技术解决数据保存的实时性问题。
为了更好的使用实时采集的数据,通常需要将数据保存到文件中。这里,现有技术的惯用思路是在用户空间创建一个文件,底层编写一个读取数据的驱动,然后通过read系统调用读取底层采集的数据,再使用write系统调用将读取的数据写入文件。一读一写需要两次系统调用,两次数据拷贝(数据先从内核空间拷贝到用户空间,再从用户空间拷贝到内核空间)。当采集频率较高,数据量较大的情况下,这种方法浪费在系统调用和数据拷贝上的时间将大大增加,影响处理的及时性、可靠性和性能。
解决这个问题常用的优化方法是采用内存映射技术,将物理地址映射到用户空间的虚拟地址。这样,在用户空间使用映射的虚拟地址访问数据存储区域,直接将数据拷贝到文件中,可以省去数据从内核空间搬运到用户空间的这次拷贝。
通过上面的方法虽然可以优化数据拷贝,但是写文件的过程仍然需要切换上下文,从用户空间回到内核空间,如果在用户空间进行拷贝操作,则用户任务的实时性不能得到很好的保证,内核的中断随时可能打断用户任务。而且,对于文件读写,Linux操作系统虽然有缓冲机制,但是主要针对的是page页面和磁盘块,并没有针对整个文件的机制。所以在写文件的过程中,可能随时触发磁盘读写这类IO操作。在实时性要求下,这些处理对文件的完整性和可靠性也有一定的影响。为了解决这些问题,本发明采用了如下的改进方法:
1根据采集配置和存储配置,确定每一个录制文件的大小;
2根据存储配置,划分专门的内存区域,创建内存镜像文件,将其挂载到系统中,构建内存文件系统;
3格式化内存文件系统,并挂载到Linux系统中;
4根据存储配置,在内存文件系统中预先创建文件池;
5从文件池中获取一个空闲文件,调用mmap系统调用,进行文件内存映射,得到文件内核物理地址对应的虚拟地址;
6将上面第5步得到的虚拟地址,传递给内核层处理数据拷贝的驱动任务,此时数据拷贝任务就获知了文件的开始地址及大小,从而确定了文件对应的内存地址区间;
7内核中的数据拷贝任务根据采集配置,检测数据采集情况(可通过核间中断或高频查询方式),并适时将采集任务填充好的缓冲块中的数据拷贝到上述第6步所获得的文件对应的内存地址区间中;
8内核数据拷贝任务完成文件数据的拷贝后,通知应用层解除文件映射;
9应用层收到通知后,解除当前文件映射关系,然后获取新的空闲文件,建立映射,并传递给内核层处理数据拷贝的驱动任务;
10应用层将第9步解除映射关系得到的文件拷贝到存储配置指定的磁盘位置;
11回到第6步,内核数据拷贝驱动任务开始新文件的拷贝处理。
通过上面的方法,一个实时数据存储文件的生成,只需要在开始和结束时,进行系统调用,数据拷贝过程中不会有系统调用和上下文切换开销。而且,数据也是从实时采集任务填充的内存缓冲块直接搬运到内核文件缓冲区,没有其他额外的拷贝操作。
更进一步的,通过划分专门的内存区域,将其挂载为内存文件系统,并基于内存文件系统创建文件,可以显著提升文件的读写速度。也就是说,此时虽然读写的是文件,但文件的存储是在物理内存中的,而非磁盘,这样既获得了使用文件这一载体形式的便利性,又获得了物理内存的高速特性,相当于在内存提供了文件的完整缓冲。通过将实时数据存储任务实际访问物理磁盘时间进一步的延后,大大降低了存盘的实时性压力。
从整个数据更新频率来讲,采集核心读取数据的频率最高,更新缓冲区要慢一些,因为填满缓冲区需要时间。处理核心读写文件会更慢一些,因为一个文件可存储多个缓冲区的数据,填满文件需要更长的时间。将文件写到物理磁盘,所需要的实时性相比最开始的采集就弱了许多,这就为处理核心提供了充分的时间将文件拷贝到磁盘,而不用担心数据丢失。
数据从产生到存盘的整个流转途径如图8所示。
对实时数据的处理,可以在任何一个层次进行。比如在缓冲区,处理核心可以通过共享内存方式,将缓冲区数据直接发送到其他计算节点处理;在文件层,可以对内存文件实体进行分析处理或者发送到远端处理和存储;还可以在磁盘保存后,通过专业的分析工具对数据进行分析处理。总的来看,上述方法为数据的实时分析也提供了更大的灵活性。
上述配置,包括隔离核心配置、采集配置、存储配置,都可以通过本地提供,也可以通过远程配置。通过配置,灵活的调整隔离、采集、存储的各项指标,最终达到以更低的代价获得更好的实时性的效果。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
最后应当说明的是:以上实施例仅用以说明本发明的技术方案而非对其限制,尽管参照上述实施例对本发明进行了详细的说明,所属领域的普通技术人员应当理解:依然可以对本发明的具体实施方式进行修改或者等同替换,而未脱离本发明精神和范围的任何修改或者等同替换,其均应涵盖在本发明的权利要求保护范围之内。

Claims (10)

1.一种Linux系统下实时数据采集与保存的方法,其特征在于,包括以下步骤:
启动具有多核处理器和Linux系统的设备;
利用BootLoader引导程序读取隔离核心配置并解析隔离核心配置的内容,通过隔离核心配置的内容选择并实施Linux系统与实时采集任务协同工作的隔离CPU核心的方式、确定采集核心的编号与数量和处理核心的编号与数量;
利用采集核心根据采集配置进行实时采集任务,实时采集任务收集内存硬件实时产生的数据填充到当前空闲的缓冲区得到缓冲区数据;
利用处理核心根据存储配置从内存文件系统上的内存文件池中获取空闲文件,将采集核心完成填充的缓冲区数据通过内存映射拷贝到空闲文件内存,获得内存文件;
将内存文件拷贝到存储配置预设的外存位置,完成实时数据采集与保存。
2.根据权利要求1所述的Linux系统下实时数据采集与保存的方法,其特征在于,所述隔离核心配置包括最顶层和第二级,所述最顶层选择隔离CPU核心的方式,所述第二级实施最顶层选择的隔离CPU核心的方式。
3.根据权利要求1所述的Linux系统下实时数据采集与保存的方法,其特征在于,所述隔离CPU核心的方式包括可感知方式和不可感知方式,所述可感知方式在实施时配置隔离核心的编号、共享内存区域的地址和大小、实时采集任务程序的位置;所述不可感知方式在实施时配置隔离核心的编号、共享内存区域的地址和大小、Linux系统内存的大小、实时采集任务程序存放位置及运行的内存起始地址和大小、隔离核心的启动加载地址;所述不可感知方式中共享内存区域、Linux系统内存、隔离核心程序运行内存无交叠。
4.根据权利要求1所述的Linux系统下实时数据采集与保存的方法,其特征在于,所述利用采集核心根据采集配置进行实时采集任务,收集内存硬件实时产生的数据保存到当前空闲缓冲区得到缓冲区数据具体为:所述实时采集任务根据采集配置设置的数据采集频率从地址映射表中数据的物理地址读取数据并保存到共享缓冲区。
5.根据权利要求1所述的Linux系统下实时数据采集与保存的方法,其特征在于,所述缓冲区的结构逻辑具体为:将实时性要求接近或者关联性密切的数据划分到同一个组中,确定组的采集频率,同一组中的若干份数据实例构成一个池,若干个池构成一个块,重复的块构成一个包,包按照文件方式存储。
6.根据权利要求1所述的Linux系统下实时数据采集与保存的方法,其特征在于,所述利用处理核心根据存储配置从内存文件系统上的内存文件池中获取空闲文件,将采集核心完成填充的缓冲区数据通过内存映射拷贝到空闲文件内存,获得内存文件,将内存文件拷贝到存储配置预设的外存位置,完成实时数据的采集与保存的具体步骤如下:
S1、根据采集配置和存储配置,确定每一个数据采集文件的大小;
S2、根据存储配置,划分内存区域,创建内存镜像文件,将内存镜像文件挂载到系统中,构建内存文件系统;
S3、格式化内存文件系统,并挂载到Linux系统中;
S4、根据存储配置,在内存文件系统中预先创建文件池;
S5、从文件池中获取一个空闲文件,使用mmap系统调用接口,进行文件内存映射,得到文件内核物理地址对应的虚拟地址;
S6、将S5得到的虚拟地址传递给内核层处理数据拷贝任务,数据拷贝任务获知空闲文件的开始地址及大小,确定空闲文件对应的内存地址区间;
S7、内核层中的数据拷贝任务根据采集配置检测数据采集情况,所述检测数据采集情况采用核间中断方式或高频查询方式,并将实时采集任务填充好的缓冲区中的数据拷贝到上述S6所获得的空闲文件对应的内存地址区间中;
S8、内核数据拷贝任务完成文件数据的拷贝后,通知应用层解除文件映射;
S9、应用层收到通知后,解除当前文件映射关系,然后获取新的空闲文件,建立映射,并传递给内核层处理数据拷贝的驱动任务;
S10、应用层将S9解除映射关系得到的文件拷贝到存储配置预设的磁盘位置;
S11、返回S6,内核数据拷贝驱动任务开始新文件的拷贝处理。
7.根据权利要求1所述的Linux系统下实时数据采集与保存的方法,其特征在于,所述隔离核心配置、采集配置和存储配置均通过本地提供或通过远程提供。
8.一种Linux系统下实时数据采集与保存的系统,其特征在于,包括隔离CPU核心模块,用于利用BootLoader引导程序读取隔离核心配置并解析隔离核心配置的内容,通过隔离核心配置的内容选择并实施Linux系统与实时采集任务协同工作的隔离CPU核心的方式、确定采集核心的编号与数量和处理核心的编号与数量;
实时采集模块,用于利用采集核心根据采集配置进行实时采集任务,实时采集任务收集内存硬件实时产生的数据保存到当前空闲缓冲区得到缓冲区数据;
内存映射模块,用于利用处理核心根据存储配置从内存文件系统上的内存文件池中获取空闲文件,将采集核心完成填充的缓冲区数据通过内存映射拷贝到空闲文件内存,获得内存文件;
拷贝保存模块,用于将内存文件拷贝到存储配置预设的外存位置,完成实时数据采集与保存。
9.一种电子设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现权利要求1-7任一项中所述的Linux系统下实时数据采集与保存的方法。
10.一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现权利要求1-7任一项中所述的Linux系统下实时数据采集与保存的方法。
CN202311359568.8A 2023-10-19 2023-10-19 一种Linux系统下实时数据采集与保存的方法、系统、设备 Pending CN117591271A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202311359568.8A CN117591271A (zh) 2023-10-19 2023-10-19 一种Linux系统下实时数据采集与保存的方法、系统、设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202311359568.8A CN117591271A (zh) 2023-10-19 2023-10-19 一种Linux系统下实时数据采集与保存的方法、系统、设备

Publications (1)

Publication Number Publication Date
CN117591271A true CN117591271A (zh) 2024-02-23

Family

ID=89917268

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202311359568.8A Pending CN117591271A (zh) 2023-10-19 2023-10-19 一种Linux系统下实时数据采集与保存的方法、系统、设备

Country Status (1)

Country Link
CN (1) CN117591271A (zh)

Similar Documents

Publication Publication Date Title
CN100573456C (zh) 一种并行多处理器虚拟机系统
US8972699B2 (en) Multicore interface with dynamic task management capability and task loading and offloading method thereof
CN102023844B (zh) 并行处理器及其线程处理方法
EP2834744B1 (en) System and method for memory management
JP2003524969A (ja) コンピュータのための再構成可能なロジック
CN112612523B (zh) 一种嵌入式设备驱动系统及方法
CN103793255B (zh) 可配置的多主模式多os内核实时操作系统架构的启动方法
WO2018018611A1 (zh) 一种任务处理方法以及网卡
KR20130009926A (ko) 유연한 플래시 명령어
CN115033188B (zh) 一种基于zns固态硬盘的存储硬件加速模块系统
EP1760580B1 (en) Processing operation information transfer control system and method
CN115033356B (zh) 一种基于异构可重构的动态资源调度方法及系统
CN112131208A (zh) 全量数据迁移方法、装置、设备及计算机可读存储介质
CN102193831B (zh) 一种建立层次化的映射/归约并行编程模型的方法
CN102195361B (zh) 一种多核单芯片的配电智能终端的数据采集处理方法
CN116561091A (zh) 一种日志存储方法、装置、设备及可读存储介质
CN117591271A (zh) 一种Linux系统下实时数据采集与保存的方法、系统、设备
CN111125070A (zh) 一种数据交换方法及平台
CN105893036A (zh) 一种嵌入式系统的兼容式加速器扩展方法
CN113282407B (zh) 基于持久性内存的用户层异步io方法与系统
CN106354486B (zh) nand flash设备管理的方法和系统
CN114692585A (zh) 表服务处理方法及系统
CN100492299C (zh) 一种嵌入式软件开发的方法及系统
CN114416322A (zh) 基于双链表的任务调度方法、装置、电子设备及存储介质
CN110083469A (zh) 一种异构硬件组织运行统一内核方法及系统

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination