CN112328178A - Method and device for processing IO queue full state of solid state disk - Google Patents

Method and device for processing IO queue full state of solid state disk Download PDF

Info

Publication number
CN112328178A
CN112328178A CN202011225903.1A CN202011225903A CN112328178A CN 112328178 A CN112328178 A CN 112328178A CN 202011225903 A CN202011225903 A CN 202011225903A CN 112328178 A CN112328178 A CN 112328178A
Authority
CN
China
Prior art keywords
completion
linked list
completion command
storage node
engine
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
CN202011225903.1A
Other languages
Chinese (zh)
Other versions
CN112328178B (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.)
Suzhou Inspur Intelligent Technology Co Ltd
Original Assignee
Suzhou Inspur Intelligent 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 Suzhou Inspur Intelligent Technology Co Ltd filed Critical Suzhou Inspur Intelligent Technology Co Ltd
Priority to CN202011225903.1A priority Critical patent/CN112328178B/en
Publication of CN112328178A publication Critical patent/CN112328178A/en
Application granted granted Critical
Publication of CN112328178B publication Critical patent/CN112328178B/en
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/061Improving I/O performance
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0659Command handling arrangements, e.g. command buffers, queues, command scheduling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device

Abstract

The invention provides a method and equipment for processing IO queue full state of a solid state disk, wherein the method comprises the following steps: creating a linked list in a memory and establishing a plurality of storage nodes; responding to the solid state disk to send an IO completion command to an IO completion engine, returning the IO completion engine to a preset state, storing the IO completion command into an idle storage node and hanging the storage node stored with the IO completion command into a linked list; after a preset time, sending an IO completion command stored in a first storage node in a linked list according to a linking sequence to an IO completion engine and deleting the IO completion command in the first storage node; and releasing the IO completion command in response to the IO completion engine returning a message of successfully processing the IO completion command. By using the scheme of the invention, the solid state disk can be effectively ensured to normally operate and work in a queue full state without causing performance bottleneck.

Description

Method and device for processing IO queue full state of solid state disk
Technical Field
The field relates to the field of computers, and more particularly to a method and device for processing an IO queue full state of a solid state disk.
Background
With the continuous development of a storage system, an NVMe SSD (solid state disk) is increasingly widely used, a Host submits an IO request of a kernel Block layer through an NVMe IO (input/output) submission queue, and the Host returns a completion state to the Host through an IO completion queue after the SSD completes a corresponding IO command.
Disclosure of Invention
In view of this, an object of the embodiments of the present invention is to provide a method and a device for processing an IO queue full state of a solid state disk, which can effectively ensure that the solid state disk can normally operate and work in the queue full state without causing performance bottleneck.
Based on the foregoing object, an aspect of the embodiments of the present invention provides a method for processing an IO queue full state of a solid state disk, including the following steps:
creating a linked list in a memory and establishing a plurality of storage nodes;
responding to the solid state disk to send an IO completion command to an IO completion engine, returning the IO completion engine to a preset state, storing the IO completion command into an idle storage node and hanging the storage node stored with the IO completion command into a linked list;
after a preset time, sending an IO completion command stored in a first storage node in a linked list according to a linking sequence to an IO completion engine and deleting the IO completion command in the first storage node;
and releasing the IO completion command in response to the IO completion engine returning a message of successfully processing the IO completion command.
According to one embodiment of the invention, creating a linked list and establishing a plurality of storage nodes in a memory comprises:
creating an idle linked list and a use linked list in a memory;
establishing a plurality of storage nodes for storing IO completion commands in a memory and hanging the storage nodes into an idle linked list.
According to an embodiment of the present invention, in response to the solid state disk sending an IO completion command to the IO completion engine and the IO completion engine returning to the preset state, storing the IO completion command in an idle storage node and attaching the storage node in which the IO completion command is stored to a linked list includes:
and responding to the solid state disk to send an IO completion command to the IO completion engine and the IO completion engine returns to a full state, storing the IO completion command into the storage nodes of the idle linked list, and hanging the storage nodes stored with the IO completion command into the use linked list in sequence.
According to an embodiment of the present invention, sending the IO completion command stored in the first storage node in the linked list according to the hitching order to the IO completion engine after the preset time and deleting the IO completion command in the first storage node includes:
after a preset time, an IO completion command stored in a first storage node in the use chain table is sent to an IO completion engine;
and deleting the IO completion command in the first storage node and hanging the first storage node into the idle linked list.
According to an embodiment of the present invention, further comprising:
responding to the full state returned by the IO completion engine, and storing the IO completion command into a storage node in the idle linked list;
and hanging the storage nodes storing the IO completion command into the use linked list in sequence.
In another aspect of the embodiments of the present invention, an IO queue full state processing device for a solid state disk is further provided, where the device includes:
the establishing module is configured to establish a linked list in a memory and establish a plurality of storage nodes;
the storage module is configured to respond to the solid state disk and send an IO completion command to the IO completion engine, the IO completion engine returns to a preset state, the IO completion command is stored in an idle storage node, and the storage node in which the IO completion command is stored is hung in a linked list;
the sending module is configured to send the IO completion command stored in the first storage node in the linked list according to the hanging order to the IO completion engine after preset time, and delete the IO completion command in the first storage node;
and the release module is configured to respond to a message that the IO completion engine returns to successfully process the IO completion command and release the IO completion command.
According to an embodiment of the invention, the setup module is further configured to:
creating an idle linked list and a use linked list in a memory;
establishing a plurality of storage nodes for storing IO completion commands in a memory and hanging the storage nodes into an idle linked list.
According to one embodiment of the invention, the storage module is further configured to:
and responding to the solid state disk to send an IO completion command to the IO completion engine and the IO completion engine returns to a full state, storing the IO completion command into the storage nodes of the idle linked list, and hanging the storage nodes stored with the IO completion command into the use linked list in sequence.
According to one embodiment of the invention, the sending module is further configured to:
after a preset time, an IO completion command stored in a first storage node in the use chain table is sent to an IO completion engine;
and deleting the IO completion command in the first storage node and hanging the first storage node into the idle linked list.
According to an embodiment of the present invention, further comprising a hooking module configured to:
responding to the full state returned by the IO completion engine, and storing the IO completion command into a storage node in the idle linked list;
and hanging the storage nodes storing the IO completion command into the use linked list in sequence.
The invention has the following beneficial technical effects: the method for processing the IO queue full state of the solid state disk provided by the embodiment of the invention comprises the steps of establishing a linked list in a memory and establishing a plurality of storage nodes; responding to the solid state disk to send an IO completion command to an IO completion engine, returning the IO completion engine to a preset state, storing the IO completion command into an idle storage node and hanging the storage node stored with the IO completion command into a linked list; after a preset time, sending an IO completion command stored in a first storage node in a linked list according to a linking sequence to an IO completion engine and deleting the IO completion command in the first storage node; the technical scheme of responding to the message that the IO completion engine returns the command of successfully processing the IO completion and releasing the IO completion command can effectively ensure that the solid state disk can normally operate and work under the queue full state and cannot cause performance bottleneck.
Drawings
In order to more clearly illustrate the embodiments of the present invention or the technical solutions in the prior art, the drawings used in the description of the embodiments or the prior art will be briefly described below, and it is obvious that the drawings in the following description are only some embodiments of the present invention, and it is obvious for those skilled in the art that other embodiments can be obtained by using the drawings without creative efforts.
Fig. 1 is a schematic flow chart of a method of IO queue full state handling of a solid state disk according to an embodiment of the present invention;
fig. 2 is a schematic diagram of an IO queue full state processing device of a solid state disk according to an embodiment of the present invention.
Detailed Description
In order to make the objects, technical solutions and advantages of the present invention more apparent, the following embodiments of the present invention are described in further detail with reference to the accompanying drawings.
In view of the foregoing, a first aspect of the embodiments of the present invention provides an embodiment of a method for handling an IO queue full state of a solid state disk. Fig. 1 shows a schematic flow diagram of the method.
As shown in fig. 1, the method may include the steps of:
s1 creating a linked list in a memory and creating a plurality of storage nodes, creating storage nodes for storing IO completion commands in the memory, wherein the storage nodes have no physical storage structure, the storage nodes store memory addresses, the IO completion commands can be taken out at any time according to the memory addresses, the linked list is used for queuing the IO completion commands, and the IO completion commands are re-sent in sequence according to the sequence of the IO completion commands stored in the linked list;
s2, responding to the solid state disk, sending an IO completion command to the IO completion engine, enabling the IO completion engine to return to a preset state, storing the IO completion command into an idle storage node, and hanging the storage node stored with the IO completion command into a linked list, wherein the preset state is that the IO completion engine returns to a full state, and when the state is returned, the Host end has a large load and cannot process the IO completion command in time, so that the IO completion command is stored into the storage node firstly, then the storage node is hung into the linked list, and the IO completion command is released from the solid state disk temporarily;
s3, after a preset time, sending an IO completion command stored in the first storage node in the linked list according to the hanging sequence to an IO completion engine and deleting the IO completion command in the first storage node, wherein a timer can be set, after the timer finishes timing, the IO completion command stored in the storage node in the linked list firstly is sent to the IO completion engine again, and the IO completion command stored in the storage node is deleted to release the storage node, if the Host end can process the IO completion command, the IO completion command is released, and if the Host end cannot store the IO completion command to the idle storage node again according to the method;
s4 releases the IO completion command in response to the IO completion engine returning a message of successfully processing the IO completion command.
By the technical scheme, the solid state disk can be effectively ensured to normally operate and work in a queue full state without causing performance bottleneck.
In a preferred embodiment of the present invention, creating a linked list and establishing a plurality of storage nodes in a memory comprises:
creating an idle linked list and a use linked list in a memory;
establishing a plurality of storage nodes for storing IO completion commands in a memory and hanging the storage nodes into an idle linked list. Creating and initializing a linked list in a memory space, initializing an idle linked list and an IO queuing use linked list, and establishing a physical storage structure of idle nodes and use nodes, wherein the number of idle node entries is allocated and initialized according to the maximum IO depth of a plurality of IO queues, the idle nodes are connected to the idle linked list, and the use nodes are connected to the use linked list.
In a preferred embodiment of the present invention, in response to the solid state disk sending an IO completion command to the IO completion engine and the IO completion engine returning to the preset state, storing the IO completion command in the idle storage node and attaching the storage node in which the IO completion command is stored to the linked list includes:
and responding to the solid state disk to send an IO completion command to the IO completion engine and the IO completion engine returns to a full state, storing the IO completion command into the storage nodes of the idle linked list, and hanging the storage nodes stored with the IO completion command into the use linked list in sequence. When the IO completion engine returns to the full state, the load of the Host end is large, the IO completion command cannot be processed in time, the IO completion command is stored in the idle storage node, and then the storage node is sequentially connected to the use linked list to be queued. If the IO completion engine returns a successful state, the context of the IO completion command is released.
In a preferred embodiment of the present invention, sending the IO completion command stored in the first storage node in the linked list according to the hitching order to the IO completion engine after the preset time and deleting the IO completion command in the first storage node includes:
after a preset time, an IO completion command stored in a first storage node in the use chain table is sent to an IO completion engine;
and deleting the IO completion command in the first storage node and hanging the first storage node into the idle linked list. The preset time can be set by using a timer, an IO completion command in a first sequence storage node in a usage chain table is sent to an IO completion engine again after the timer times out, the storage node is hung in an idle chain table after the IO completion command in the first sequence storage node is deleted, if the IO completion engine returns to a success state, the context of the IO completion command is released, if the IO completion engine returns to a full state, the IO completion command is stored in the idle storage node again, then the storage node is hung in the usage chain table in sequence for queuing, and the like is performed until all the IO completion commands are processed.
In a preferred embodiment of the present invention, the method further comprises:
responding to the full state returned by the IO completion engine, and storing the IO completion command into a storage node in the idle linked list;
and hanging the storage nodes storing the IO completion command into the use linked list in sequence.
By the technical scheme, the solid state disk can be effectively ensured to normally operate and work in a queue full state without causing performance bottleneck.
It should be noted that, as will be understood by those skilled in the art, all or part of the processes in the methods of the above embodiments may be implemented by instructing relevant hardware through a computer program, and the above programs may be stored in a computer-readable storage medium, and when executed, the programs may include the processes of the embodiments of the methods as described above. The storage medium may be a magnetic disk, an optical disk, a Read-Only Memory (ROM), a Random Access Memory (RAM), or the like. The embodiments of the computer program may achieve the same or similar effects as any of the above-described method embodiments.
Furthermore, the method disclosed according to an embodiment of the present invention may also be implemented as a computer program executed by a CPU, and the computer program may be stored in a computer-readable storage medium. The computer program, when executed by the CPU, performs the above-described functions defined in the method disclosed in the embodiments of the present invention.
In view of the above object, in a second aspect of the embodiments of the present invention, an apparatus for processing an IO queue full state of a solid state disk is provided, as shown in fig. 2, the apparatus 200 includes:
the establishing module is configured to establish a linked list in a memory and establish a plurality of storage nodes;
the storage module is configured to respond to the solid state disk and send an IO completion command to the IO completion engine, the IO completion engine returns to a preset state, the IO completion command is stored in an idle storage node, and the storage node in which the IO completion command is stored is hung in a linked list;
the sending module is configured to send the IO completion command stored in the first storage node in the linked list according to the hanging order to the IO completion engine after preset time, and delete the IO completion command in the first storage node;
and the release module is configured to respond to a message that the IO completion engine returns to successfully process the IO completion command and release the IO completion command.
In a preferred embodiment of the present invention, the establishing module is further configured to:
creating an idle linked list and a use linked list in a memory;
establishing a plurality of storage nodes for storing IO completion commands in a memory and hanging the storage nodes into an idle linked list.
In a preferred embodiment of the present invention, the storage module is further configured to:
and responding to the solid state disk to send an IO completion command to the IO completion engine and the IO completion engine returns to a full state, storing the IO completion command into the storage nodes of the idle linked list, and hanging the storage nodes stored with the IO completion command into the use linked list in sequence.
In a preferred embodiment of the present invention, the sending module is further configured to:
after a preset time, an IO completion command stored in a first storage node in the use chain table is sent to an IO completion engine;
and deleting the IO completion command in the first storage node and hanging the first storage node into the idle linked list.
In a preferred embodiment of the present invention, the mobile terminal further comprises a hooking module configured to:
responding to the full state returned by the IO completion engine, and storing the IO completion command into a storage node in the idle linked list;
and hanging the storage nodes storing the IO completion command into the use linked list in sequence.
The embodiments described above, particularly any "preferred" embodiments, are possible examples of implementations and are presented merely to clearly understand the principles of the invention. Many variations and modifications may be made to the above-described embodiments without departing from the spirit and principles of the technology described herein. All such modifications are intended to be included within the scope of this disclosure and protected by the following claims.

Claims (10)

1. A method for processing IO queue full state of solid state disk is characterized by comprising the following steps:
creating a linked list in a memory and establishing a plurality of storage nodes;
responding to an IO completion command sent by a solid state disk to an IO completion engine and the IO completion engine returning to a preset state, storing the IO completion command into an idle storage node and hanging the storage node stored with the IO completion command into the linked list;
after a preset time, sending an IO completion command stored in a first storage node in the linked list according to the hanging sequence to the IO completion engine and deleting the IO completion command in the first storage node;
and responding to the message that the IO completion engine returns to successfully process the IO completion command, and releasing the IO completion command.
2. The method of claim 1, wherein creating a linked list and establishing a number of storage nodes in the memory comprises:
creating an idle linked list and a use linked list in the memory;
establishing a plurality of storage nodes for storing IO completion commands in the memory and hanging the storage nodes into the idle linked list.
3. The method of claim 2, wherein in response to the solid state disk sending an IO completion command to an IO completion engine and the IO completion engine returning to a preset state, storing the IO completion command in an idle storage node and attaching the storage node in which the IO completion command is stored to the linked list comprises:
responding to the solid state disk to send an IO completion command to the IO completion engine and the IO completion engine returns to a full state, storing the IO completion command into the storage nodes of the idle linked list and hanging the storage nodes stored with the IO completion command into the use linked list in sequence.
4. The method of claim 3, wherein sending the IO completion command stored in the first storage node in the linked list in the hitching order to the IO completion engine and deleting the IO completion command in the first storage node after a preset time comprises:
after a preset time, sending an IO completion command stored in a first storage node in the use linked list to the IO completion engine;
and deleting an IO completion command in the first storage node and hanging the first storage node into the idle linked list.
5. The method of claim 1, further comprising:
responding to the IO completion engine to return to a full state, and storing an IO completion command into a storage node in an idle linked list;
and hanging the storage nodes storing the IO completion command into the use linked list in sequence.
6. An IO queue full state processing device of a solid state disk, the device comprising:
the system comprises an establishing module, a storage module and a judging module, wherein the establishing module is configured to establish a linked list in a memory and establish a plurality of storage nodes;
the storage module is configured to respond to the fact that the solid state disk sends an IO completion command to an IO completion engine and the IO completion engine returns to a preset state, store the IO completion command into an idle storage node and hang the storage node in which the IO completion command is stored into the linked list;
a sending module configured to send an IO completion command stored in a first storage node in an hitching order in the linked list to the IO completion engine and delete the IO completion command in the first storage node after a preset time;
a release module configured to release the IO completion command in response to the IO completion engine returning a message of successfully processing the IO completion command.
7. The device of claim 6, wherein the setup module is further configured to:
creating an idle linked list and a use linked list in the memory;
establishing a plurality of storage nodes for storing IO completion commands in the memory and hanging the storage nodes into the idle linked list.
8. The device of claim 7, wherein the storage module is further configured to:
responding to the solid state disk to send an IO completion command to the IO completion engine and the IO completion engine returns to a full state, storing the IO completion command into the storage nodes of the idle linked list and hanging the storage nodes stored with the IO completion command into the use linked list in sequence.
9. The device of claim 8, wherein the transmitting module is further configured to:
after a preset time, sending an IO completion command stored in a first storage node in the use linked list to the IO completion engine;
and deleting an IO completion command in the first storage node and hanging the first storage node into the idle linked list.
10. The apparatus of claim 6, further comprising a hitch module configured to:
responding to the IO completion engine to return to a full state, and storing an IO completion command into a storage node in an idle linked list;
and hanging the storage nodes storing the IO completion command into the use linked list in sequence.
CN202011225903.1A 2020-11-05 2020-11-05 Method and device for processing IO queue full state of solid state disk Active CN112328178B (en)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202011225903.1A CN112328178B (en) 2020-11-05 2020-11-05 Method and device for processing IO queue full state of solid state disk

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202011225903.1A CN112328178B (en) 2020-11-05 2020-11-05 Method and device for processing IO queue full state of solid state disk

Publications (2)

Publication Number Publication Date
CN112328178A true CN112328178A (en) 2021-02-05
CN112328178B CN112328178B (en) 2022-08-09

Family

ID=74316984

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202011225903.1A Active CN112328178B (en) 2020-11-05 2020-11-05 Method and device for processing IO queue full state of solid state disk

Country Status (1)

Country Link
CN (1) CN112328178B (en)

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103543955A (en) * 2013-08-05 2014-01-29 记忆科技(深圳)有限公司 Method and system for reading cache with solid state disk as equipment and solid state disk
CN108984121A (en) * 2018-07-03 2018-12-11 深圳忆联信息系统有限公司 Ensure the method, apparatus and computer equipment of Request Priority
CN111459417A (en) * 2020-04-26 2020-07-28 中国人民解放军国防科技大学 NVMeoF storage network-oriented lock-free transmission method and system

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103543955A (en) * 2013-08-05 2014-01-29 记忆科技(深圳)有限公司 Method and system for reading cache with solid state disk as equipment and solid state disk
CN108984121A (en) * 2018-07-03 2018-12-11 深圳忆联信息系统有限公司 Ensure the method, apparatus and computer equipment of Request Priority
CN111459417A (en) * 2020-04-26 2020-07-28 中国人民解放军国防科技大学 NVMeoF storage network-oriented lock-free transmission method and system

Also Published As

Publication number Publication date
CN112328178B (en) 2022-08-09

Similar Documents

Publication Publication Date Title
CN109597818A (en) Data-updating method, device, storage medium and equipment
CN108055311B (en) HTTP asynchronous request method, device, server, terminal and storage medium
CN108121511B (en) Data processing method, device and equipment in distributed edge storage system
JP2005520429A5 (en)
CN103780679A (en) Long time delay remote invocation method based on HTTP protocol
CN113568686B (en) Asynchronous processing method and device for Lua language, computer equipment and storage medium
CN113656157A (en) Distributed task scheduling method and device, storage medium and electronic equipment
CN113672406A (en) Data transmission processing method and device, electronic equipment and storage medium
WO2017032152A1 (en) Method for writing data into storage device and storage device
CN110399329B (en) RDMA data processing method and related device
CN111541762A (en) Data processing method, management server, device and storage medium
CN108429703B (en) DHCP client-side online method and device
CN112328178B (en) Method and device for processing IO queue full state of solid state disk
CN108063809B (en) Machine equipment data acquisition method and acquisition system
CN110995817B (en) Request callback method and device and client equipment
CN117407159A (en) Memory space management method and device, equipment and storage medium
CN107819855A (en) A kind of message distributing method and device
CN111782417A (en) Message-based multi-process sharing serial port resource implementation method
JP3713977B2 (en) Real-time distributed system
US10250515B2 (en) Method and device for forwarding data messages
CN103399949B (en) A kind of database storage block state control method and device
CN112822299B (en) RDMA (remote direct memory Access) -based data transmission method and device and electronic equipment
US20140025730A1 (en) Managing concurrent conversations over a communications link between a client computer and a server computer
CN106991119A (en) Processing data method and device based on distributed file system
CN111045787B (en) Rapid continuous experiment method and system

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