Easy To Use Patents Search & Patent Lawyer Directory

At Patents you can conduct a Patent Search, File a Patent Application, find a Patent Attorney, or search available technology through our Patent Exchange. Patents are available using simple keyword or date criteria. If you are looking to hire a patent attorney, you've come to the right place. Protect your idea and hire a patent lawyer.


Search All Patents:



  This Patent May Be For Sale or Lease. Contact Us

  Is This Your Patent? Claim This Patent Now.



Register or Login To Download This Patent As A PDF




United States Patent Application 20110238938
Kind Code A1
Kloeppner; John R ;   et al. September 29, 2011

EFFICIENT MIRRORING OF DATA ACROSS STORAGE CONTROLLERS

Abstract

A method includes multicasting an Input/Output (I/O) data associated with a host computing device through a multicast device associated with a storage controller coupled to another storage controller in a redundant configuration, and minoring, through the multicasting, the I/O data across the storage controller and the another storage controller through a bus utilized to couple the storage controller and the another storage controller. The method also includes transmitting an early write status message to the host computing device following the minoring of the I/O data across the storage controller and the another storage controller. The early write status message is associated with a successful completion of the mirroring of the I/O data across the storage controller and the another storage controller prior to the I/O data being written to a storage device associated therewith.


Inventors: Kloeppner; John R; (Buhler, KS) ; El-Batal; Mohamad; (Westminster, CO)
Assignee: LSI Corporation
Milpitas
CA

Serial No.: 127055
Series Code: 13
Filed: October 30, 2008
PCT Filed: October 30, 2008
PCT NO: PCT/US08/81658
371 Date: May 31, 2011

Current U.S. Class: 711/162; 711/E12.103
Class at Publication: 711/162; 711/E12.103
International Class: G06F 12/16 20060101 G06F012/16


Claims



1. A method comprising: multicasting an Input/Output (I/O) data associated with a host computing device through a multicast device associated with a storage controller coupled to another storage controller in a redundant configuration; mirroring, through the multicasting, the I/O data across the storage controller and the another storage controller through a bus utilized to couple the storage controller and the another storage controller; and transmitting an early write status message to the host computing device following the mirroring of the I/O data across the storage controller and the another storage controller, the early write status message being associated with a successful completion of the mirroring of the I/O data across the storage controller and the another storage controller prior to the I/O data being written to a storage device associated therewith.

2. The method of claim 1, wherein mirroring the I/O data includes generating, through the multicasting, a data set and another data set associated with the I/O data, the data set and the another data set having identical data content but differing control information, and the control information including a routing information associated with at least one of the data set and the another data set.

3. The method of claim 2, wherein mirroring the I/O data further comprises: writing the identical data content of the data set to the storage controller; routing the another data set to the another storage controller through the bus; and writing the identical data content of the another data set to the another storage controller, the writes to both the storage controller and the another storage controller being completed prior to the generation of the early write status message.

4. The method of claim 2, wherein the bus is based on a Peripheral Component Interconnect Express (PCIe) standard and the multicast device is a PCIe switch, and wherein when the I/O data passes the multicast device in the form of packets, the data set and the another data set are generated as distinct PCIe packets having a same data payload associated therewith.

5. The method of claim 1, further comprising coupling the multicast device between a host I/O device associated with the storage controller and a memory controller associated therewith.

6. The method of claim 1, further comprising writing the I/O data mirrored to both the storage controller and the another storage controller to the storage device associated therewith utilizing one of the storage controller and the another storage controller in a functional mode upon a failure of the corresponding other of the storage controller and the another storage controller.

7. A method comprising: multicasting an I/O data associated with a host computing device through a multicast device associated with a storage controller coupled to another storage controller through an appropriate bus in a redundant configuration; generating, through the multicasting, a data set and another data set associated with the I/O data, the data set and the another data set having identical data content but differing control information, and the control information including a routing information associated with at least one of the data set and the another data set; writing the identical data content of the data set to the storage controller; routing the another data set to the another storage controller through the bus; and writing the identical data content of the another data set to the another storage controller.

8. The method of claim 7, further comprising transmitting an early write status message to the host computing device following a successful completion of the writes to the storage controller and the another storage controller.

9. The method of claim 8, further comprising writing the I/O data to a storage device associated with the storage controller and the another storage controller following the transmission of the early write status message through one of the storage controller and the another storage controller following a failure of the corresponding other of the storage controller and the another storage controller.

10. The method of claim 7, wherein the bus is based on a PCIe standard and the multicast device is a PCIe switch, and wherein when the I/O data passes the multicast device in the form of packets, the data set and the another data set are generated as distinct PCIe packets having a same data payload associated therewith.

11. The method of claim 7, further comprising coupling the multicast device between a host I/O device associated with the storage controller and a memory controller associated therewith.

12. A storage system comprising: a host computing device to generate I/O data; a first storage controller including a multicast device associated therewith to multicast the I/O data therethrough; a bus; a second storage controller coupled to the first storage controller through the bus such that the multicast I/O data is configured to be mirrored across the first storage controller and the second storage controller, the first storage controller and the second storage controller including memories associated therewith to store the mirrored I/O data thereat; and a storage device associated with both the first storage controller and the second storage controller, wherein at least one of the first storage controller and the second storage controller is configured to transmit an early write status message back to the host computing device following the successful minoring of the I/O data prior to the I/O data being written to the storage device through one of the first storage controller and the second storage controller.

13. The storage system of claim 12, wherein when the multicast device enables the multicasting of the I/O data, a data set and another data set associated with the I/O data are generated, the data set and the another data set having identical data content but differing control information, and the control information including a routing information associated with at least one of the data set and the another data set.

14. The storage system of claim 13, wherein the identical data content of the data set is configured to be written to the first storage controller, wherein the another data set is configured to be routed to the second storage controller through the bus, and wherein the identical data content of the another data set is configured to be written to the second storage controller, the writes to both the first storage controller and the second storage controller being completed prior to the generation of the early write status message.

15. The storage system of claim 13, wherein the bus is based on a PCIe standard and the multicast device is a PCIe switch, and wherein when the I/O data passes the multicast device in the form of packets, the data set and the another data set are generated as distinct PCIe packets having a same data payload associated therewith.

16. The storage system of claim 12, wherein the first storage controller further comprises a host I/O device and a memory controller configured to be coupled through the multicast device.

17. The storage system of claim 12, wherein the I/O data mirrored to both the first storage controller and the second storage controller is written to the storage device associated therewith utilizing one of the first storage controller and the second storage controller in a functional mode upon a failure of the corresponding other of the first storage controller and the second storage controller.

18. The storage system of claim 12, wherein the storage system further comprises a computer network configured to couple the host computing device to at least one of the first storage controller and the second storage controller.

19. The storage system of claim 12, wherein the storage device is an array of disks.

20. The storage system of claim 12, wherein each of the first storage controller and the second storage controller includes a processor associated therewith to address storage locations in the memory associated therewith, the processor being configured to execute appropriate instructions associated with mirroring the I/O data of the host computing device at the first storage controller and the second storage controller.
Description



CLAIM OF PRIORITY

[0001] This is a national phase utility application and claims priority from PCT Application Number PCT/US08/81658 titled "STORAGE CONTROLLER DATA REDISTRIBUTION" filed on Oct. 30, 2008.

FIELD OF TECHNOLOGY

[0002] This disclosure relates generally to storage systems and, more particularly, to efficient mirroring of data across storage controllers.

BACKGROUND

[0003] In a storage system, a storage controller may be paired with another storage controller (e.g., as a mirror or a dual controller) in a redundant configuration such that if one of the storage controller fails, the other storage controller may have access to one or more storage devices (e.g., disks) associated therewith. Each of the storage controllers may have the capability to provide Input/Output (I/O) writes. An I/O write includes data from a host computing device that may be written to the one or more storage devices coupled to the storage controllers. As part of the I/O write, one (or, both) of the storage controllers may return a status message associated with the completion of the write processes to the host computing device.

[0004] When the completion is a success as indicated through the status message, the host computing device may proceed with other tasks associated with the normal operation thereof. When the completion is a failure as indicated through the status message, the write operation(s) may be retried or a system fault may be created. In order to reduce latency associated with the generation of the status message, the storage controller may return the status message associated with a successful completion prior to the data being written to the one or more storage messages. However, if the storage controller including the write data fails prior to the data being written to the one or more storage devices, the data may be lost.

[0005] In order to eliminate the loss of data in the aforementioned scenario, the mirroring process may start with the storage controller accepting I/O write data from the host computing device and writing the aforementioned data to a memory associated therewith. The storage controller may then read the data from the memory and write the data to a memory associated with the other storage controller. As the memory on a storage controller may offer limited performance, the memory read process inherent in the mirroring may limit the overall performance of the storage controller associated therewith.

SUMMARY

[0006] A method, apparatus and/or a system of efficient mirroring of data across storage controllers are disclosed.

[0007] In one aspect, a method includes multicasting an Input/Output (I/O) data associated with a host computing device through a multicast device associated with a storage controller coupled to another storage controller in a redundant configuration and mirroring, through the multicasting, the I/O data across the storage controller and the another storage controller through a bus utilized to couple the storage controller and the another storage controller. The method also includes transmitting an early write status message to the host computing device following the minoring of the I/O data across the storage controller and the another storage controller. The early write status message is associated with a successful completion of the mirroring of the I/O data across the storage controller and the another storage controller prior to the I/O data being written to a storage device associated therewith.

[0008] In another aspect, multicasting an I/O data associated with a host computing device through a multicast device associated with a storage controller coupled to another storage controller through an appropriate bus in a redundant configuration, and generating, through the multicasting, a data set and another data set associated with the I/O data. The data set and the another data set have identical data content but differing control information, and the control information includes a routing information associated with the data set and/or the another data set. The method also includes writing the identical data content of the data set to the storage controller, routing the another data set to the another storage controller through the bus, and writing the identical data content of the another data set to the another storage controller.

[0009] In yet another aspect, a storage system includes a host computing device to generate I/O data, a first storage controller including a multicast device associated therewith to multicast the I/O data therethrough, a bus, and a second storage controller coupled to the first storage controller through the bus such that the multicast I/O data is configured to be mirrored across the first storage controller and the second storage controller. The first storage controller and the second storage controller include memories associated therewith to store the mirrored I/O data thereat. The storage system also includes a storage device associated with both the first storage controller and the second storage controller. The first storage controller and/or the second storage controller are configured to transmit an early write status message back to the host computing device following the successful mirroring of the I/O data prior to the I/O data being written to the storage device through the first storage controller or the second storage controller.

[0010] The methods, systems, and apparatuses disclosed herein may be implemented in any means for achieving various aspects, and may be executed in a form of a machine-readable medium embodying a set of instructions that, when executed by a machine, cause the machine to perform any of the operations disclosed herein. Other features will be apparent from the accompanying drawings and from the detailed description that follows.

BRIEF DESCRIPTION OF THE DRAWINGS

[0011] Example embodiments are illustrated by way of example and not limitation in the figures of the accompanying drawings, in which like references indicate similar elements and in which:

[0012] FIG. 1 is a schematic view of a storage controller configuration, according to one or more embodiments.

[0013] FIG. 2 is a schematic view of another storage controller configuration, according to one or more embodiments.

[0014] FIG. 3 is a flowchart summarizing the communication protocol involved in writing data to storage device(s) utilizing the storage controller configuration of FIG. 2, according to one or more embodiments.

[0015] FIG. 4 is a process flow diagram detailing the operations involved in a method of providing redundancy in writing Input/Output (I/O) data from a host computing device to a storage device associated with the storage controller configuration of FIG. 2, according to one or more embodiments.

[0016] FIG. 5 is a process flow diagram detailing the operations involved in a method of mirroring I/O data from a host computing device across the storage controllers of FIG. 2, according to one or more embodiments

[0017] Other features of the present embodiments will be apparent from the accompanying drawings and from the detailed description that follows.

DETAILED DESCRIPTION

[0018] A method, apparatus and/or system of efficient mirroring of data across storage controllers are disclosed. Although the present embodiments have been described with reference to specific example embodiments, it will be evident that various modifications and changes may be made to these embodiments without departing from the broader spirit and scope of the various embodiments.

[0019] FIG. 1 shows a storage controller configuration 100, according to one or more embodiments. In one or more embodiments, storage controller configuration 100 may include storage controller A 102 and storage controller B 104 configured to write data from a host computing device 106 to one or more storage devices (e.g., disks 108.sub.1-N) associated therewith. In one or more embodiments, storage controller A 102 and storage controller B 104 may be paired with one another in a redundant configuration such that whenever one of storage controller A 102 and storage controller B 104 fails, host computing device 106 may still have access to the one or more storage devices associated with the other storage controller. In one or more embodiments, data (e.g., Input/Output (I/O) write data) from host computing device 106 may be mirrored to memories associated with storage controller A 102 and storage controller B 104 to provide for redundancy.

[0020] In one or more embodiments, each of storage controller A 102 and storage controller B 104 may include a host I/O device (112, 122) offering a platform to receive data from host computing device 106. In one or more embodiments, each of host I/O device (112, 122) (or, alternately storage controller A 102 and storage controller B 104 respectively) may have a memory (114, 124) and a processor (118, 128) associated therewith. In one or more embodiments, a memory controller (116, 126) may control data transmitted to and/or from memory (114, 124). Here, in one or more embodiments, processor (118, 128) may be associated with memory controller (116, 126). For example, memory controller (116, 126) may be a chip distinct from processor (118, 128) or memory controller (116, 126) may be provided on the same chip as processor (118, 128).

[0021] In one or more embodiments, memory controller (116, 126) may interface with a drive I/O device (120, 130) configured to offer a platform for storage I/O data communication with disks 108.sub.1-N. In one or more embodiments, I/O write data may be defined as data associated with host computing device 106 that is configured to be written to one or more of disks 108.sub.1-N. In one or more embodiments, the aforementioned I/O write data may be mirrored across storage controller A 102 and storage controller B 104 to provide functionality through redundancy during a failure of one of the aforementioned storage controllers.

[0022] In one or more embodiments, the I/O write data may first be copied from storage controller A 102 to storage controller B 104 such that both storage controllers have copies thereof before the early write status is returned to host computing device 106. Here, early write status is referred to the status message associated with the completion of the aforementioned write process prior to the writing of the I/O write data to the storage devices (e.g., disks 108.sub.1-N). Now, in one or more embodiments, if storage controller A 102 fails, storage controller B 104 may complete the writing of the I/O write data to the storage devices (e.g., disks 108.sub.1-N).

[0023] To summarize, in one or more embodiments, the abovementioned minoring process may involve three memory transfers. In one or more embodiments, first, the I/O write data may be written to memory 114 of storage controller A 102. In one or more embodiments, then the I/O write data written to memory 114 may be read therefrom prior to being written to storage controller B 104. In one or more embodiments, finally, the I/O write data may be written to memory 124 of storage controller B 104.

[0024] As discussed above, it is obvious that to mirror data across storage controllers (e.g., storage controller A 102, storage controller B 104), one storage controller may read I/O write data from a memory thereof and then write the data to a memory associated with another storage controller. For the aforementioned write process, a communication medium is required for transmission of appropriate data (e.g., messages associated with a protocol of communication) between the storage controllers. As the memory on each of the storage controllers may offer limited performance, the additional memory read(s) required to mirror the data across storage controllers may limit the performance thereof.

[0025] FIG. 2 shows another storage controller configuration 200, according to one or more embodiments. In one or more embodiments, storage controller configuration 200 may also include storage controller A 202 and storage controller B 204, analogous to storage controller configuration 100 having storage controller A 102 and storage controller B 104. Also, in one or more embodiments, host I/O device (212, 222), memory (214, 224), memory controller (216, 226), processor (218, 228), disks 208.sub.1-N and drive I/O device (220, 230) are analogous to host I/O device (112, 122), memory (114, 124), memory controller (116, 126), processor (118, 128), disks 108.sub.1-N and drive I/O device (120, 130) respectively. In one or more embodiments, memory (214, 224) may include storage locations configured to be addressable through processor (218, 228).

[0026] In one or more embodiments, in contrast to storage controller configuration 100, storage controller configuration 200 may have multicast device(s) (232, 242) associated with the storage controller(s) (e.g., storage controller A 202, storage controller B 204), the multicast device(s) (232, 242) being coupled between host I/O device(s) (212, 222) and memory controller(s) (216, 226). In an example embodiment, multicast device(s) (232, 242) may be Peripheral Component Interconnect Express (PCIe) switches. In one or more embodiments, multicast device(s) (232, 242) may enable splitting of the I/O write data into two distinct memory operations prior to the first memory write through multicasting (or, alternately, dual-casting, forking). Multicasting may be defined to be delivery of data simultaneously to plural destinations over a communication link, where copies are created only when the communication link splits.

[0027] In one or more embodiments, additionally, storage controller A 202 and storage controller B 204 may be coupled to each other through an appropriate bus 234 to allow for the multicast data to be transferred therebetween. For example, in the case of PCIe switches being employed in storage controller A 202 and storage controller B 204, storage controller A 202 and storage controller B 204 may be coupled to one another through an appropriate additional PCIe bus (example of bus 234) coupling the PCIe switch on storage controller A 202 and the PCIe switch on storage controller B 204. In one or more embodiments, when the I/O write data passes through a multicast device (e.g., multicast device 232; e.g., the I/O write data passes through the multicast device in the form of packets), the I/O write data may be split into two distinct memory write data having identical data content but differing control information. For example, the I/O write data in the form of a packet may be split into two distinct PCIe memory write packets having the same data payload (again, but differing control information).

[0028] In one or more embodiments, the differing control information (e.g., routing information) may initiate a memory write (e.g., write to memory 214) of the data content of a distinct memory write data to storage controller A 202 and a routing of the other distinct memory write data to storage controller B 204 through bus 234. In one or more embodiments, data content associated with the other distinct memory write data may be written to memory 224 associated with storage controller B 204. In one or more embodiments, the lack of a need of a memory read operation may reduce the memory bandwidth load on the storage controllers (e.g., storage controller A 202, storage controller B 204). In one or more embodiments, the overall I/O write performance associated with the storage controllers is also increased in storage controller configuration 200 compared to other storage controller configuration(s) (e.g., storage controller configuration 100).

[0029] In one or more embodiments, less expensive memory may now be utilized on storage controllers in storage controller configuration 200 when compared to storage controller configuration 100 because of the lack of need for a memory read analogous thereto. It is obvious that the I/O write data may be written to both memory 214 and memory 224 associated with storage controller A 202 and storage controller B 204 respectively prior to the early write status message (associated with the completion of the write(s) to memory 214 and memory 224) being transmitted (e.g., through storage controller A 202 and/or storage controller B 204) to host computing device 206. In one or more embodiments, along with the advantage offered through the early write status message, viz., the lack of a need to write to disks 208.sub.1-N prior to returning the early write status message, whenever one of storage controller 202 and storage controller 204 fails (e.g., through failure of memory 214 or memory 224) prior to the I/O write data being written to disks 208.sub.1-N, the other storage controller may have the capability to write the aforementioned data to disks 208.sub.1-N without any loss therein.

[0030] In the example embodiment utilizing the PCIe standard, the multicasting feature defined in the Multicasting ECN for PCIe Base 2.0 specification may allow for packets associated with the I/O write data to be split into two distinct PCIe memory write packets including the same data payload. It is obvious that mirroring may be performed across more than two storage controllers and that, in such cases, the multicasting may involve splitting of the I/O write data into an appropriate number (e.g., >2) of distinct data. Also, storage controller configuration 200 is merely disclosed for the purpose of concept illustration. Variations in implementations of elements including but not limited to the memory controller(s) and processor(s) are within the scope of the exemplary embodiments.

[0031] FIG. 3 shows a flowchart summarizing the communication protocol involved in writing data to storage device(s) (e.g., disks 208.sub.1-N) utilizing storage controller configuration 200, according to one or more embodiments. In one or more embodiments, operation 302 may involve multicasting I/O write data to be written to storage controller A 202 and storage controller B 204 through a multicast device (e.g., multicast device 232, multicast device 242) provided in a storage controller (e.g., storage controller A 202, storage controller B 204) to generate a distinct pair of identical data having different control information. Here, in one or more embodiments, multicast device (232, 242) may be coupled between host I/O device (212, 222) and memory controller (216, 226) associated with the appropriate storage controller (A 202, B 204). In one or more embodiments, control information may include routing information associated with at least one of the pair of the additional data generated.

[0032] In one or more embodiments, storage controller A 202 and storage controller B 204 may be coupled to each other through bus 234. Thus, multicast device (e.g., multicast device 232, multicast device 242) may be provided on each of the storage controllers, despite the identical data being generated through one multicast device associated with a storage controller. In one or more embodiments, operation 304 may involve generating, based on the multicasting, a write of the identical data content to a storage controller (e.g., storage controller A 202; or, alternately, memory 214 of storage controller A 202). In one or more embodiments, operation 306 may involve routing the appropriate identical data to another storage controller (e.g., storage controller B 204) through bus 234 based on the associated control information. In one or more embodiments, operation 308 may involve writing the appropriate identical data to the another storage controller (e.g., storage controller B 204; or, alternately, memory 224 of storage controller B 204).

[0033] In one or more embodiments, operation 310 may then involve checking as to whether the writes to both storage controller A 202 and storage controller B 204 have been completed. In one or more embodiments, if yes, operation 312 may then involve returning an early write status message to host computing device 206. The early write status message has already been discussed above and, therefore, discussion associated therewith has been skipped here. In one or more embodiments, operation 314 may involve writing data written to storage controller A 202 and storage controller B 204 to disks 208.sub.1-N.

[0034] Implementations associated with the exemplary embodiments may not be limited to the PCIe standard. Variations therein are within the scope of the exemplary embodiments. Also, specific details of the PCIe standard (e.g., maintaining routing tables for PCIe switches)/are known to one skilled in the art. Therefore, discussion associated therewith has been skipped for the sake of convenience.

[0035] In one or more embodiments, storage controller configuration 200 may be part of a storage system. In one or more embodiments, host computing device 206 may be coupled to storage controller A 202 and/or storage controller B 204 through a computer network (e.g., Internet). It is obvious that the communication protocol therein may have to be modified to suit the computer network.

[0036] FIG. 4 shows a process flow diagram detailing the operations involved in a method of providing redundancy in writing I/O data from host computing device 206 to a storage device (e.g., disks 208.sub.1-N), according to one or more embodiments. In one or more embodiments, operation 402 may involve multicasting the I/O data through a multicast device (e.g., multicast device 232) associated with storage controller A 202 coupled to storage controller B 204 in a redundant configuration. In one or more embodiments, operation 404 may involve minoring, through the multicasting, the I/O data across storage controller A 202 and storage controller B 204 through bus 234 utilized to couple storage controller A 202 and storage controller B 204.

[0037] In one or more embodiments, operation 406 may then involve transmitting an early write status message to host computing device 206 following the minoring of the I/O data across storage controller A 202 and storage controller B 204. In one or more embodiments, the early write status message may be associated with a successful completion of the mirroring of the I/O data across storage controller A 202 and storage controller B 204 prior to the I/O data being written to a storage device (e.g., disks 208.sub.1-N) associated therewith.

[0038] FIG. 5 shows a process flow diagram detailing the operations involved in a method of mirroring I/O data from a host computing device 206 across storage controller A 202 and storage controller B 204, according to one or more embodiments. In one or more embodiments, operation 502 may involve multicasting the I/O data through a multicast device (e.g., multicast device 232) associated with storage controller A 202 coupled to storage controller B 204 through bus 234 in a redundant configuration. In one or more embodiments, operation 504 may involve generating, through the multicasting, a data set and another data set associated with the I/O data, where the data set and the another data set have identical data content but differing control information. In one or more embodiments, the control information may include a routing information associated with the data set and/or the another data set.

[0039] In one or more embodiments, operation 506 may involve writing the identical data content of the data set to storage controller A 202. In one or more embodiments, operation 508 may involve routing the another data set to storage controller B 204 through bus 234. In one or more embodiments, operation 510 may then involve writing the identical data content of the another data set to storage controller B 204.

[0040] Although the present embodiments have been described with reference to specific example embodiments, it will be evident that various modifications and changes may be made to these embodiments without departing from the broader spirit and scope of the various embodiments. For example, the various devices, modules, analyzers, generators, etc. described herein may be enabled and operated using hardware circuitry (e.g., CMOS based logic circuitry), firmware, software and/or any combination of hardware, firmware, and/or software (e.g., embodied in a machine readable medium). For example, the various electrical structure and methods may be embodied using transistors, logic gates, and electrical circuits (e.g., application specific integrated (ASIC) circuitry and/or in Digital Signal Processor (DSP) circuitry).

[0041] In addition, it will be appreciated that the various operations, processes, and methods disclosed herein may be embodied in a machine-readable medium and/or a machine accessible medium compatible with a data processing system (e.g., a computer system), and may be performed in any order (e.g., including using means for achieving the various operations). Accordingly, the specification and drawings are to be regarded in an illustrative rather than a restrictive sense.

* * * * *

File A Patent Application

  • Protect your idea -- Don't let someone else file first. Learn more.

  • 3 Easy Steps -- Complete Form, application Review, and File. See our process.

  • Attorney Review -- Have your application reviewed by a Patent Attorney. See what's included.