System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本专利技术涉及一种内存共享方法,尤其涉及一种基于bios pci链路实现物理内存共享的方法。
技术介绍
1、随着科技的迅速进步,服务器业务需求不断上升,对服务器的易操作性、性能和功能希求都在持续提升。通过基板管理控制器(baseboard managementcontroller,即bmc)远程管理服务器,使用ipmi和redfsih实现远程管理。而bmc后端将持续处理ipmi大量事务严重降低bmc性能,目前普遍通过在bmc系统中开辟一块物理内存缓存作为bios和redfish数据存储缓存,用于减少ipmi带外管理和redfish频繁调用ipmi指令,提升数据交互响应和bmc性能指数。
2、在一些应用场景下,bmc需要与主机的服务器cpu)之间交互大量数据,主机指的是运行基本输入输出系统(basic input output system,即bios)。这两者之间的通信,主要使用的是ipmi(intelligent platform management interface)。ipmi是独立于主机系统cpu、bios/uefi和os之外,可独立运行的板上部件,其核心部件即为bmc(intelligentplatform management interface,ipmi)协议。
3、由于ipmi协议的串行交互方式,使得基于ipmi协议的交互方案需要阻塞等待当前ipmi命令返回执行结果后,才会继续发送下一个ipmi命令,一旦当前ipmi命令阻塞等待时间过长,容易造成主机任务阻塞。而且,ipmi协议的串行交互
4、redfish是一种基于https服务的管理标准,利用restful接口实现设备管理。每个https操作都以utf-8编码的json格式(json是一种key-value对的数据格式)提交或返回一个资源或结果,就像web应用程序向浏览器返回html一样。该技术具有降低开发复杂性的优势,易于实施和使用,而且提供了可扩展性优势,为设计灵活性预留了空间。
5、redfish部署在bmc上的好处是可以远程管理服务器,包括开机、重启、关机、查看状态等。同时,redfish还可以实现bios post(power-on self-test,上电自检)、固件下载和上传等功能,包括用户管理、获取服务器信息、管理模块信息、bios配置。虽然redfish功能强大,但是,其底层也是基于ipmi指令方式完成,会存在上面所述ipmi的传输效率低等弊端,交互量过大还将导致处理能力下降等问题,不能很好地满足实际的应用需求。
6、因此需要一种替代ipmi数据的交互数据方式,以满足实际的数据交互需求。
技术实现思路
1、本专利技术所要解决的技术问题是需要提供一种基于bios pci链路实现物理内存共享的方法,旨在通过内存映射空间实现bios数据、bmc数据以及redfish数据的共享,满足实际的数据交互需求。
2、对此,本专利技术提供一种基于bios pci链路实现物理内存共享的方法,包括以下步骤:
3、步骤s1,在linux系统内核启动时,通过申请物理内存ddr4从0x98e00000地址处偏移预设大小的连续物理内存空间,以此连续物理内存空间作为内存映射空间;
4、步骤s2,在bios启动过程中,通过pcie总线获取vga设备的配置信息;
5、步骤s3,通过uefi函数读取设备地址,获取基地址寄存器bar的数据;
6、步骤s4,读取和解析所述基地址寄存器bar的值,确定设备所需的地址空间范围和映射信息,通过基地址寄存器bar使能寄存器p2a的桥通道和重新映射基址;
7、步骤s5,在linux系统中初始化应用程序,通过mmap()内存映射函数映射从0x98e00000地址开始的内存映射空间,在所述内存映射空间的内存区域实现读写操作。
8、本专利技术的进一步改进在于,所述预设大小的连续物理内存空间指的是2mbyte的内存映射空间。
9、本专利技术的进一步改进在于,所述步骤s1中,通过内存管理的memblock_reserve()函数在linux系统内核启动时预留一段预设大小的连续物理内存空间,并对其物理内存块进行标记,标记为已保留。
10、本专利技术的进一步改进在于,所述步骤s2包括以下步骤:
11、步骤s201,通过uefi函数的locatehandlebuffer()服务函数在uefi固件中遍历查找支持pci i/o协议的vga设备,并返回vga设备对应的设备句柄列表和设备数量;
12、步骤s202,通过设备句柄列表和设备数量在系统中枚举pcie设备信息;
13、步骤s203,通过uefi函数的第一数据读取函数从pci设备的配置空间中读取数据,读取设备地址pcis00所返回的vga设备信息。
14、本专利技术的进一步改进在于,所述步骤s203中,所述第一数据读取函数为pciio->pci.read(pciio,efipciiowidthuint32,0,1,&data32),其中,pciio表示指向efi_pci_io_protocol的指针,用于访问pci设备的i/o功能;参数efipciiowidthuint32表示数据读取的宽度,单位为字节;参数0表示读取的偏移量;参数1表示读取的数据数量;参数&data32表示指向32位数据变量的指针,用于存储读取到的数据。
15、本专利技术的进一步改进在于,所述步骤s3中,通过uefi函数的第二数据读取函数读取设备地址pcis14,获取基地址寄存器bar的数据。
16、本专利技术的进一步改进在于,所述第二数据读取函数为pciio->pci.read(pciio,efipciiowidthuint32, 0 ,1,&pcis14),其中,参数&pcis14表示指向设备地址pcis14的指针。
17、本专利技术的进一步改进在于,所述步骤s4包括以下步骤:
18、步骤s401,在基地址寄存器bar加上保护密钥寄存器p2a00的偏移赋值为1;并加上重新映射基址寄存器p2a04的偏移赋值,该偏移赋值为内存映射的地址0x98e00000;
19、步骤s402,通过基地址寄存器bar加上0x10000的地址空间以获取到内存重映射的首地址内存空间,把当前地址赋值给一个用于操作内存的指针;
20、步骤s403,返回所述指针,所述指针用于对内存进行读写操作。
21、本专利技术的进一步改进在于,所述步骤s5包括以下子步骤:
22、步骤s501,通过open() 函数打开内存字符设备驱动,返回一个文件句柄;
23、步骤s502,通过本文档来自技高网...
【技术保护点】
1.一种基于BIOS PCI链路实现物理内存共享的方法,其特征在于,包括以下步骤:
2.根据权利要求1所述的基于BIOS PCI链路实现物理内存共享的方法,其特征在于,所述预设大小的连续物理内存空间指的是2Mbyte的内存映射空间。
3.根据权利要求1或2所述的基于BIOS PCI链路实现物理内存共享的方法,其特征在于,所述步骤S1中,通过内存管理的memblock_reserve()函数在Linux系统内核启动时预留一段预设大小的连续物理内存空间,并对其物理内存块进行标记,标记为已保留。
4.根据权利要求1或2所述的基于BIOS PCI链路实现物理内存共享的方法,其特征在于,所述步骤S2包括以下步骤:
5.根据权利要求4所述的基于BIOS PCI链路实现物理内存共享的方法,其特征在于,所述步骤S203中,所述第一数据读取函数为PciIo->Pci.Read(PciIo,EfiPciIoWidthUint32,0,1,&Data32),其中,PciIo表示指向EFI_PCI_IO_PROTOCOL的指针,用于访问PCI
6.根据权利要求5所述的基于BIOS PCI链路实现物理内存共享的方法,其特征在于,所述步骤S3中,通过UEFI函数的第二数据读取函数读取设备地址PCIS14,获取基地址寄存器BAR的数据。
7.根据权利要求6所述的基于BIOS PCI链路实现物理内存共享的方法,其特征在于,所述第二数据读取函数为PciIo->Pci.Read(PciIo,EfiPciIoWidthUint32, 0 ,1,&PCIS14),其中,参数& PCIS14表示指向设备地址PCIS14的指针。
8.根据权利要求1或2所述的基于BIOS PCI链路实现物理内存共享的方法,其特征在于,所述步骤S4包括以下步骤:
9.根据权利要求1或2所述的基于BIOS PCI链路实现物理内存共享的方法,其特征在于,所述步骤S5包括以下子步骤:
10.根据权利要求9所述的基于BIOS PCI链路实现物理内存共享的方法,其特征在于,所述步骤S502中,通过内存映射指令mmap(NULL,0x200000,PROT_READ|PROT_WRITE,MAP_SHARED,fd,0x98E00000)将文件或设备映射到进程的虚拟内存空间中,用于访问文件内容或对特定的物理内存进行读写操作;其中,0x200000表示要映射的字节数;PROT_READ |PROT_WRITE表示对映射的内存区域可以进行读取和写入操作;MAP_SHARED表示映射的内存可被其他进程共享,并且对映射内存的修改会映射回底层对象;fd表示要映射的文件描述符,指向要进行映射的对象;0x98E00000表示映射的起始物理内存地址。
...【技术特征摘要】
1.一种基于bios pci链路实现物理内存共享的方法,其特征在于,包括以下步骤:
2.根据权利要求1所述的基于bios pci链路实现物理内存共享的方法,其特征在于,所述预设大小的连续物理内存空间指的是2mbyte的内存映射空间。
3.根据权利要求1或2所述的基于bios pci链路实现物理内存共享的方法,其特征在于,所述步骤s1中,通过内存管理的memblock_reserve()函数在linux系统内核启动时预留一段预设大小的连续物理内存空间,并对其物理内存块进行标记,标记为已保留。
4.根据权利要求1或2所述的基于bios pci链路实现物理内存共享的方法,其特征在于,所述步骤s2包括以下步骤:
5.根据权利要求4所述的基于bios pci链路实现物理内存共享的方法,其特征在于,所述步骤s203中,所述第一数据读取函数为pciio->pci.read(pciio,efipciiowidthuint32,0,1,&data32),其中,pciio表示指向efi_pci_io_protocol的指针,用于访问pci设备的i/o功能;参数efipciiowidthuint32表示数据读取的宽度,单位为字节;参数0表示读取的偏移量;参数1表示读取的数据数量;参数&data32表示指向32位数据变量的指针,用于存储读取到的数据。
6.根据权利要求5所述的基于bios pci链路实现物理内存共享的方法,其特征在于,所述步骤s3中,通过...
【专利技术属性】
技术研发人员:赵金波,
申请(专利权)人:深圳市国鑫恒运信息安全有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。