CN113806019A - 一种OpenStack云平台中绑定及解绑PMEM设备的方法 - Google Patents

一种OpenStack云平台中绑定及解绑PMEM设备的方法 Download PDF

Info

Publication number
CN113806019A
CN113806019A CN202111079521.7A CN202111079521A CN113806019A CN 113806019 A CN113806019 A CN 113806019A CN 202111079521 A CN202111079521 A CN 202111079521A CN 113806019 A CN113806019 A CN 113806019A
Authority
CN
China
Prior art keywords
pmem
equipment
binding
virtual machine
cloud platform
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.)
Granted
Application number
CN202111079521.7A
Other languages
English (en)
Other versions
CN113806019B (zh
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.)
Inspur Jinan data Technology Co ltd
Original Assignee
Inspur Jinan data Technology 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 Inspur Jinan data Technology Co ltd filed Critical Inspur Jinan data Technology Co ltd
Priority to CN202111079521.7A priority Critical patent/CN113806019B/zh
Publication of CN113806019A publication Critical patent/CN113806019A/zh
Application granted granted Critical
Publication of CN113806019B publication Critical patent/CN113806019B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

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/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • 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/445Program loading or initiating
    • G06F9/44505Configuring for program initiating, e.g. using registry, configuration 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/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/45583Memory management, e.g. access or allocation
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明公开了一种OpenStack云平台中绑定及解绑PMEM设备的方法,绑定方法包括,配置PMEM设备的驱动;选择PMEM规格,调用计算服务接口发起虚拟机绑定PMEM请求;计算节点服务调用资源管理系统分配PMEM规格中的所有PMEM设备,如果资源不够,返回资源不足错误;如果资源够用,在资源管理系统中绑定虚拟机和PMEM设备的对应关系;在虚拟机的设备中绑定PMEM内存;在智能加速设备管理工具数据库记录虚拟机和PMEM设备的对应关系。提高了PMEM设备的易用性和使用率。和创建虚拟机绑定PMEM规格相统一,为后续绑定有PMEM设备虚拟机的高级操作(迁移、疏散等)奠定了基础。

Description

一种OpenStack云平台中绑定及解绑PMEM设备的方法
技术领域
本发明涉及绑定及解绑PMEM设备技术领域,尤其涉及一种OpenStack云平台中绑定及解绑PMEM设备的方法。
背景技术
目前,在基于OpenStack开发的云平台中,我们只能通过创建虚拟机绑定PMEM设备,通过删除虚拟机解绑PMEM设备,不支持单独对PMEM设备绑定解绑虚拟机的功能,不利于PMEM设备的管理和使用,降低了PMEM设备使用的效率和使用率。云平台是基于硬件资源和软件资源服务的,提供计算、网络和存储能力的云计算平台。OpenStack是一个开源的云计算管理平台项目,是一系列软件开源项目的组合。PMEM是Intel厂商的持久化内存设备。 IO速度介于普通内存和SSD之间,略小于普通内存且远大于SSD,持久内存容量远大于普通内存。
作为云平台用户,我们希望能够灵活使用PMEM设备,随时解绑虚拟机的PMEM设备,然后绑定给其他虚拟机使用,使得云平台中PMEM设备的使用更加方便,提高云平台的易用性以及PMEM设备的利用率。
发明内容
本发明的目的就是为了解决上述问题,提供一种OpenStack云平台中绑定及解绑PMEM 设备的方法,使用智能加速设备管理工具(cyborg)对虚拟机绑定解绑PMEM设备解决方案,使得在基于OpenStack云平台中,可以自动发现PMEM资源并进行数据上报,然后对虚拟机进行绑定解绑PMEM设备的操作。为了实现上述目的,本发明采用如下技术方案:
一种OpenStack云平台中绑定PMEM设备的方法,包括:
步骤一、配置PMEM设备的驱动;
步骤二、选择PMEM规格,调用计算服务接口发起虚拟机绑定PMEM请求;
步骤三、计算节点服务调用资源管理系统分配PMEM规格中的所有PMEM设备,如果资源不够,返回资源不足错误;如果资源够用,在资源管理系统中绑定虚拟机和PMEM设备的对应关系;
步骤四、在虚拟机的设备中绑定PMEM内存;
步骤五、在智能加速设备管理工具数据库记录虚拟机和PMEM设备的对应关系。
所述步骤一中,配置PMEM设备的驱动时需保证PMEM设备自动上报到智能加速设备管理工具和资源管理系统中。
所述步骤一中,配置PMEM设备的驱动包括创建PMEM命名空间和规格,在智能加速设备管理工具资源发现服务文件中配置PMEM命名空间,重启智能加速设备管理工具资源发现服务使得配置内容生效。
所述步骤三中的具体方法包括:
步骤3.1、从智能加速设备管理工具获取虚拟机所在物理主机的所有可用的PMEM设备;
步骤3.2、设定PMEM设备的关键值key,把个数作为判断值value,循环遍历规格中需要的PMEM设备,判断主机上的PMEM设备是否满足请求;
步骤3.3、如果资源不够,返回资源不足错误;如果资源够用,在资源管理系统中绑定虚拟机和PMEM设备的对应关系。
所述步骤3.1中,把PMEM设备的产品号、类型及命名空间作为关键值key。
所述步骤四中计算节点服务根据绑定PMEM设备划分的内存的偏移量、大小和对应的访问路径属性,生成VPMEM对象,添加到虚拟机的设备中,在QEMU启动虚拟机的配置文件中增加NVDIMM标签,绑定PMEM内存。
调用Libvirt通过热添加技术添加到虚拟机的设备中。
所述步骤五中,同时标记使用的PMEM设备为已使用状态。
采用所述一种OpenStack云平台中绑定PMEM设备的方法的解绑方法,包括:
步骤S1、选择PMEM规格,发起虚拟机解绑PMEM请求;
步骤S2、计算节点服务调用资源管理系统释放PMEM规格中的所有PMEM设备;
步骤S3、计算节点服务根据绑定PMEM设备的属性,生成VPMEM对象,调用Libvirt解绑PMEM设备;
步骤S4、计算节点服务调用智能加速设备管理接口在智能加速设备管理工具数据库解除虚拟机和PMEM设备的对应关系。
所述步骤S3中,PMEM设备的属性包括PMEM设备划分的内存的偏移量、大小和对应的访问路径属性。
本发明的有益效果:
1、提高了PMEM设备的易用性和使用率。
2、和创建虚拟机绑定PMEM规格相统一,为后续绑定有PMEM设备虚拟机的高级操作(迁移、疏散等)奠定了基础。
附图说明
图1为使用PMEM规格绑定虚拟机方法流程图;
图2为使用PMEM规格解绑虚拟机方法流程图。
具体实施方式
下面结合附图与实施例对本发明作进一步说明。
本发明涉及基于OpenStack的云平台中使用硬件加速资源管理组件Cyborg对虚拟机绑定解绑PMEM持久化内存设备的设计方案,主要包括PMEM设备的资源自动发现与数据上报,以及对已有虚拟机进行绑定解绑PMEM设备的操作。PMEM设备Intel推出的持久内存设备, IO速度介于普通内存和SSD之间,略小于普通内存且远大于SSD,持久内存容量远大于普通内存。持久内存的AD(APP Direct)工作模式可以实现数据的持久化,将持久内存以AD模式提供给云主机增强云主机的IO性能,同时持久内存中的数据在断电情况下不会丢失,便于后期云主机数据的恢复。
本发明提供的绑定和解绑方法为:
首先,准备一台有PMEM设备的物理服务器,创建PMEM命名空间;
其次,在智能加速设备管理工具(Cyborg)资源发现服务文件中配置PMEM命名空间,重启该服务使得配置内容生效;
然后,创建PMEM规格,选择虚拟机绑定该PMEM规格,待虚拟机绑定完成后,使用Libvirt命令查看虚拟机XML文件绑定有NVDIMM标签;进入虚拟机,查看绑定有PMEM 设备。
最后,选择该PMEM规格进行解绑,待虚拟机解绑完成后,使用Libvirt命令查看虚拟机XML文件没有了NVDIMM标签。进入虚拟机,查看PMEM设备也相应不存在了。
具体的,一种OpenStack云平台中绑定PMEM设备的方法,如图1所示,
Nova-api:OpenStack中控制节点上为用户提供计算服务接口。
Placement:资源管理服务,OpenStack中对CPU、Memory、Disk、GPU、PMEM等资源的使用、维护、管理的服务。
Nova-compute:OpenStack中启动虚拟机的计算节点服务。
Libvirt:用于管理虚拟化平台的开源的API,后台程序和管理工具,用于管理KVM、Xen、 VMware ESX,QEMU和其他虚拟化技术。
Cyborg-api:硬件加速资源管理组件提供对外接口的服务。
Cyborg-conductor:硬件加速资源管理组件中访问数据库的服务。
Cyborg-agent:硬件加速资源管理组件自动发现并上报PMEM设备的服务。
绑定方法包括:
步骤一、配置PMEM设备的驱动(driver),保证PMEM设备自动上报到智能加速设备管理工具(Cyborg)和资源管理系统(placement)系统中
步骤二、选择PMEM规格,调用计算服务接口(nova-api)发起虚拟机绑定PMEM请求
步骤三、计算节点服务(Nova-compute)调用资源管理系统(placement)分配PMEM规格中的所有PMEM设备,在分配资源之前,需要判断资源是否够用;
先从智能加速设备管理工具(Cyborg)获取该虚拟机所在物理主机的所有可用的PMEM 设备,把PMEM设备的产品号、类型、命名空间作为key,个数作为value,循环遍历规格中需要的PMEM设备,判断主机上的PMEM设备是否满足请求;如果资源不够,返回资源不足错误;如果资源够用,在资源管理系统(placement)中绑定虚拟机和PMEM设备的对应关系;
步骤四、计算节点服务(Nova-compute)根据绑定PMEM设备的align、size和devpath 属性,生成VPMEM对象(LibvirtConfigGuestVPMEM),调用Libvirt通过热添加技术(HOTPLUG)到虚拟机的设备中,在虚拟机XML增加NVDIMM标签,绑定PMEM内存,虚拟机XML是QEMU启动虚拟机的配置文件;
其中:align是划分的内存的偏移量,用来存储这块地址的基本信息,一般大小是2G;
size是该内存的大小;
devpath是该内存对应的访问路径;
根据这三个属性可以确定唯一的PMEM内存块;
步骤五、;计算节点服务(Nova-compute)调用智能加速设备管理接口(cyborg-api)在智能加速设备管理工具(Cyborg)数据库记录虚拟机和PMEM设备的对应关系,同时标记使用的PMEM设备为已使用状态。
具体的解绑方法:
采用所述一种OpenStack云平台中绑定PMEM设备的方法的解绑方法,如图2所示,包括:
步骤S1、用户选择PMEM规格,发起虚拟机解绑PMEM请求;
步骤S2、计算节点服务(Nova-compute)调用资源管理系统(placement)释放PMEM规格中的所有PMEM设备;
步骤S3、计算节点服务(Nova-compute)根据绑定PMEM设备的align、size和devpath 属性,生成LibvirtConfigGuestVPMEM对象,调用Libvirt解绑PMEM设备;
其中:align是划分的内存的偏移量,用来存储这块地址的基本信息,一般大小是2G;
size是该内存的大小;
devpath是该内存对应的访问路径;
根据这三个属性可以确定唯一的PMEM内存块,
步骤S4、计算节点服务(Nova-compute)调用智能加速设备管理接口(cyborg-api)在智能加速设备管理工具(Cyborg)数据库解除虚拟机和PMEM设备的对应关系。
上述虽然结合附图对本发明的具体实施方式进行了描述,但并非对本发明保护范围的限制,所属领域技术人员应该明白,在本发明的技术方案的基础上,本领域技术人员不需要付出创造性劳动即可做出的各种修改或变形仍在本发明的保护范围以内。

Claims (10)

1.一种OpenStack云平台中绑定PMEM设备的方法,其特征是,包括:
步骤一、配置PMEM设备的驱动;
步骤二、选择PMEM规格,调用计算服务接口发起虚拟机绑定PMEM请求;
步骤三、计算节点服务调用资源管理系统分配PMEM规格中的所有PMEM设备,如果资源不够,返回资源不足错误;如果资源够用,在资源管理系统中绑定虚拟机和PMEM设备的对应关系;
步骤四、在虚拟机的设备中绑定PMEM内存;
步骤五、在智能加速设备管理工具数据库记录虚拟机和PMEM设备的对应关系。
2.如权利要求1所述一种OpenStack云平台中绑定PMEM设备的方法,其特征是,所述步骤一中,配置PMEM设备的驱动时需保证PMEM设备自动上报到智能加速设备管理工具和资源管理系统中。
3.如权利要求1或2所述一种OpenStack云平台中绑定PMEM设备的方法,其特征是,所述步骤一中,配置PMEM设备的驱动包括创建PMEM命名空间和规格,在智能加速设备管理工具资源发现服务文件中配置PMEM命名空间,重启智能加速设备管理工具资源发现服务使得配置内容生效。
4.如权利要求2所述一种OpenStack云平台中绑定PMEM设备的方法,其特征是,所述步骤三中的具体方法包括:
步骤3.1、从智能加速设备管理工具获取虚拟机所在物理主机的所有可用的PMEM设备;
步骤3.2、设定PMEM设备的关键值key,把个数作为判断值value,循环遍历规格中需要的PMEM设备,判断主机上的PMEM设备是否满足请求;
步骤3.3、如果资源不够,返回资源不足错误;如果资源够用,在资源管理系统中绑定虚拟机和PMEM设备的对应关系。
5.如权利要求4所述一种OpenStack云平台中绑定PMEM设备的方法,其特征是,所述步骤3.1中,把PMEM设备的产品号、类型及命名空间作为关键值key。
6.如权利要求1所述一种OpenStack云平台中绑定PMEM设备的方法,其特征是,所述步骤四中计算节点服务根据绑定PMEM设备划分的内存的偏移量、大小和对应的访问路径属性,生成VPMEM对象,添加到虚拟机的设备中,在QEMU启动虚拟机的配置文件中增加NVDIMM标签,绑定PMEM内存。
7.如权利要求6所述一种OpenStack云平台中绑定PMEM设备的方法,其特征是,调用Libvirt通过热添加技术添加到虚拟机的设备中。
8.如权利要求1所述一种OpenStack云平台中绑定PMEM设备的方法,其特征是,所述步骤五中,同时标记使用的PMEM设备为已使用状态。
9.采用权利要求1所述一种OpenStack云平台中绑定PMEM设备的方法的解绑方法,其特征是,包括:
步骤S1、选择PMEM规格,发起虚拟机解绑PMEM请求;
步骤S2、计算节点服务调用资源管理系统释放PMEM规格中的所有PMEM设备;
步骤S3、计算节点服务根据绑定PMEM设备的属性,生成VPMEM对象,调用Libvirt解绑PMEM设备;
步骤S4、计算节点服务调用智能加速设备管理接口在智能加速设备管理工具数据库解除虚拟机和PMEM设备的对应关系。
10.如权利要求9所述解绑方法,其特征是,所述步骤S3中,PMEM设备的属性包括PMEM设备划分的内存的偏移量、大小和对应的访问路径属性。
CN202111079521.7A 2021-09-15 2021-09-15 一种OpenStack云平台中绑定及解绑PMEM设备的方法 Active CN113806019B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202111079521.7A CN113806019B (zh) 2021-09-15 2021-09-15 一种OpenStack云平台中绑定及解绑PMEM设备的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202111079521.7A CN113806019B (zh) 2021-09-15 2021-09-15 一种OpenStack云平台中绑定及解绑PMEM设备的方法

Publications (2)

Publication Number Publication Date
CN113806019A true CN113806019A (zh) 2021-12-17
CN113806019B CN113806019B (zh) 2024-02-23

Family

ID=78940989

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202111079521.7A Active CN113806019B (zh) 2021-09-15 2021-09-15 一种OpenStack云平台中绑定及解绑PMEM设备的方法

Country Status (1)

Country Link
CN (1) CN113806019B (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114356501A (zh) * 2021-12-30 2022-04-15 苏州浪潮智能科技有限公司 一种用于云平台虚拟机中容器的持久内存访问方法及装置

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106506636A (zh) * 2016-11-04 2017-03-15 武汉噢易云计算股份有限公司 一种基于OpenStack的云平台集群方法及系统
CN106775947A (zh) * 2016-12-06 2017-05-31 中国电子科技集团公司第三十二研究所 基于openstack的大规模虚拟计算动态负载均衡方法
US20200341797A1 (en) * 2019-04-29 2020-10-29 Red Hat, Inc. Virtual machine memory migration facilitated by persistent memory devices
CN111858509A (zh) * 2020-07-06 2020-10-30 苏州浪潮智能科技有限公司 一种基于容器的分布式计算方法和装置
CN112003895A (zh) * 2020-07-24 2020-11-27 苏州浪潮智能科技有限公司 OpenStack云平台中云主机疏散方法、装置、设备及存储介质
CN112711462A (zh) * 2020-12-28 2021-04-27 中国银联股份有限公司 一种云平台虚拟cpu热绑定方法、装置及计算机可读存储介质

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106506636A (zh) * 2016-11-04 2017-03-15 武汉噢易云计算股份有限公司 一种基于OpenStack的云平台集群方法及系统
CN106775947A (zh) * 2016-12-06 2017-05-31 中国电子科技集团公司第三十二研究所 基于openstack的大规模虚拟计算动态负载均衡方法
US20200341797A1 (en) * 2019-04-29 2020-10-29 Red Hat, Inc. Virtual machine memory migration facilitated by persistent memory devices
CN111858509A (zh) * 2020-07-06 2020-10-30 苏州浪潮智能科技有限公司 一种基于容器的分布式计算方法和装置
CN112003895A (zh) * 2020-07-24 2020-11-27 苏州浪潮智能科技有限公司 OpenStack云平台中云主机疏散方法、装置、设备及存储介质
CN112711462A (zh) * 2020-12-28 2021-04-27 中国银联股份有限公司 一种云平台虚拟cpu热绑定方法、装置及计算机可读存储介质

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
谢迎运;张傲;: "基于OpenStack的分布式虚拟路由流量统计设计研究", 电子设计工程, no. 24, 20 December 2017 (2017-12-20), pages 106 - 109 *

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114356501A (zh) * 2021-12-30 2022-04-15 苏州浪潮智能科技有限公司 一种用于云平台虚拟机中容器的持久内存访问方法及装置

Also Published As

Publication number Publication date
CN113806019B (zh) 2024-02-23

Similar Documents

Publication Publication Date Title
JP6607901B2 (ja) スケーラブル分散ストレージアーキテクチャ
US9413683B2 (en) Managing resources in a distributed system using dynamic clusters
EP2344953B1 (en) Provisioning virtual resources using name resolution
US9875122B2 (en) System and method for providing hardware virtualization in a virtual machine environment
US8635616B2 (en) Virtualization processing method and apparatuses, and computer system
US8959512B2 (en) System and method to improve memory usage in virtual machines running as hypervisor guests
US9547605B2 (en) Method for data backup, device and system
US20190235900A1 (en) Automated data migration of services of a virtual machine to containers
WO2019148854A1 (zh) 虚拟化网元设备的部署方法以及装置
JP2013513174A (ja) 仮想マシンのストレージスペースおよび物理ホストを管理するための方法およびシステム
EP2176747A1 (en) Unified provisioning of physical and virtual images
US10754675B2 (en) Identifying entities in a virtualization environment
CN110046026A (zh) 云主机指定虚拟磁盘限速方法、计算设备及云平台
CN105468429A (zh) 一种高效虚拟化集群管理方法和集群节点
US20240053998A1 (en) Method and apparatus for processing inter-core communication, and computer system
CN115576654A (zh) 一种请求处理方法、装置、设备及存储介质
CN113806019B (zh) 一种OpenStack云平台中绑定及解绑PMEM设备的方法
CN107547258A (zh) 一种网络策略的实现方法和装置
CN105677481B (zh) 一种数据处理方法、系统及电子设备
CN107967165B (zh) 基于lvm的虚拟机离线迁移方法
CN112015515B (zh) 一种虚拟网络功能的实例化方法及装置
CN112398668B (zh) 一种基于IaaS集群的云平台和节点的切换方法
CN103562869B (zh) 虚拟化环境下的音频处理方法和设备
CN117406921A (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
GR01 Patent grant
GR01 Patent grant