Abstract:
In one aspect, a method includes measuring performance parameters for each path, determining classifications of each path based on a service level objective and sending I/Os using load balancing by the classifications determined. In another aspect, an apparatus includes electronic hardware circuitry configured to measure performance parameters for each path, determine classifications of each path based on a service level objective and send I/Os using load balancing by the classifications determined. In a further aspect, an article includes a non-transitory computer-readable medium that stores computer-executable instructions. The instructions cause a machine to measure performance parameters for each path, determine classifications of each path based on a service level objective and send I/Os using load balancing by the classifications determined.

Description:
BACKGROUND 
     A path management product may be used to provide management of multiple paths that run from an application to storage devices. A path management product is typically a host-based solution that is used to manage storage area networks (SANs) and, among other things, can detect load imbalances for disk array controllers in a SAN and can identify alternate paths through which to route data. An example of path management product is EMC® POWERPATH® by EMC Corporation of Hopkinton, Mass. 
     SUMMARY 
     In one aspect, a method includes measuring performance parameters for each path, determining classifications of each path based on a service level objective and sending I/Os using load balancing by the classifications determined. In another aspect, an apparatus includes electronic hardware circuitry configured to measure performance parameters for each path, determine classifications of each path based on a service level objective and send I/Os using load balancing by the classifications determined. In a further aspect, an article includes a non-transitory computer-readable medium that stores computer-executable instructions. The instructions cause a machine to measure performance parameters for each path, determine classifications of each path based on a service level objective and send I/Os using load balancing by the classifications determined. 
    
    
     
       BRIEF DESCRIPTION OF THE DRAWINGS 
         FIG. 1  is a block diagram of an example of a system having a virtual environment. 
         FIG. 2  is a block diagram of another example of a system having a virtual environment. 
         FIG. 3  is a block diagram of further example of a system having a virtual environment. 
         FIG. 4  is a block diagram of path manager of  FIG. 3 . 
         FIG. 5  is a flowchart of an example of a process to profile performance. 
         FIG. 6  is a flowchart of an example of a process to select a path based in service level objectives (SLOs). 
         FIG. 7  is a computer on which any of the processes of  FIGS. 5 and 6  may be implemented. 
     
    
    
     DETAILED DESCRIPTION 
     Described herein are techniques to select paths for I/Os that optimizes bandwidth based on service level objectives (SLOs) and load balancing techniques. 
     The following definitions may be useful in understanding the specification and claims. 
     HOST—at least one computer or networks of computers that runs at least one data processing application that issues I/O requests to one or more storage systems; a host connects to the SAN through an initiator; 
     I/O REQUEST—an input/output request to the storage device (sometimes referred to as an I/O), which may be a read I/O request (sometimes referred to as a read request or a read) or a write I/O request (sometimes referred to as a write request or a write). 
     Referring to  FIG. 1 , a system  100 , having a virtual environment, includes a virtual machine monitor  102  coupled to a storage array  106  by a storage area network  104 . In one example, the virtual machine monitor  102  is a HYPERVISOR®. The virtual machine monitor  102  includes multiple instances of virtual machines (VMs) (e.g., a VM  108   a , a VM  108   b , . . . , a virtual machine  108 N). The virtual machine monitor  102  includes initiator ports (e.g., an initiator port  112   a  and an initiator port  112   b ) and a path manager  110 . The initiator ports  112   a ,  112   b  are physical connections that access the SAN  104 . 
     The storage array  106  includes target ports (e.g., a target port  116   a  and a target port  116   b ) and logical units (e.g., a LUN  122   a  and a LUN  122   b ). 
     The multiple virtual environment accesses a shared storage (i.e., storage array  106 ) through a storage area network  104 . The virtual machine monitor  102  generates and manages multiple instances of the virtual machines  108   a - 108 M. Applications are hosted in the virtual machines  108   a - 108 M which run different operating systems. In one example, the virtual machine monitor runs on a physical server (not shown). 
     Application access to the storage array  106  happens through a block  10  processing subsystem  120  (e.g., SCSI) in the virtual machine monitor  102 . External storage systems are connected to the physical server through the initiator ports  112   a ,  112   b  through a SAN fabric and terminate at the target ports  116   a ,  116   b  at the storage array  106 . In one example, the initiator ports  112   a ,  112   b  are Host Bus Adaptors (HBA) and the SAN  104  is a Fibre Channel. 
     The LUNs  122   a ,  122   b  are made visible to a server through the target ports  116   a ,  116   b . A LUN can be visible through multiple target ports  116   a ,  116   b  and many LUNs can be present in this manner. 
     Thus, the virtual machine monitor  102  (and hence applications in VMs) can see multiple paths to a LUN. For example there are four paths to the LUN  122   a  shown in  FIG. 1 : 1) the initiator port  112   a  to the target port  116   a  to the LUN  122   a ; 2) the initiator port  112   a  to the target port  116   b  to the LUN  122   a ; 3) the initiator port  112   b  to the target port  116   a  to the LUN  122   a ; and 4) the initiator port  112   b  to the target port  116   b  to the LUN  122   a . Typically, the paths from the initiator ports  112   a ,  112   b  to the target port  116   a ,  116   b  to the LUNs  122   a .  122   b  established by the block I/O subsystem  120  resides in the virtual machine monitor  102 . 
     The path manager  110  inserts itself into this block I/O subsystem  120  and manages the paths in such a way that I/Os are load balanced across all paths. In addition, if there is an I/O failure it ensures that the I/O will failover to another path. 
     The path manager  110  implements various load balancing methods which can be a simple I/O dispatch in a round robin manner or an adaptive algorithm. Adaptive load balancing policies achieve optimal throughput and response time across a wide range of conditions by considering multiple factors when choosing a path to send an I/O down. These factors include: number of I/Os, size of I/Os, whether the I/Os are reads or writes, observed queuing delay on each path and the throughput of recent I/Os. 
     These methods work well in a typical data center environment. However, the advent of virtual volumes changed the way data residing in storage arrays is accessed by an application. A virtual volume is a virtual machine data store natively residing inside an attached storage system. Many such virtual volumes can be bound to an entity called Protocol Endpoint (PE) and a PE is made visible through array target ports  116   a ,  116   b  to the virtual machine monitor  102 . 
     Referring to  FIG. 2 , a system  100 ′ is the same as system  100  except for the following differences. The LUNs  122   a - 122   b  are replaced by PEs (e.g., a PE  222   a  and a PE  223   b ) and virtual volumes  242   a ,  242   b . The virtual volumes  242   a  include virtual volumes  250   a - 250   c  and the virtual volumes  242   b  include virtual volumes  252   a - 252   c.    
     A virtual volume is like a sub-LUN. The paths from the initiator ports  112   a ,  112   b  to the target port  116   a ,  116   b  to the LUNs  122   a .  122   b  established by block I/O subsystems  120  terminates at PEs  222   a ,  222   b . Any Array (which supports vVol) exposes something called “Storage containers” (SC) which is essentially a pool of storage tied with a “storage profile”. The profile contains different performance attributes for example IOs per second, latency etc. Virtual volume “data stores” are created out of a part of storage container, hence performance attributes are inherent in the characteristics of a virtual volume. For example, the four paths to the PE  222   a  as seen by the block I/O subsystem  120  are: 1) the initiator port  112   a  to the target port  116   a  to the PE  222   a;  2) the initiator port  112   a  to the target port  116   b  to the PE  222   a;  3) the initiator port  112   b  to the target port  116   a  to the PE  222   a ; and 4) the initiator port  112   b  to the target port  116   b  to the PE  222   a.    
     Each virtual volume can have different storage profiles including different performance attributes; however, the path manager  110  is not aware of these performance attributes. Load balancing done by the path manager  110  occurs across the paths from the initiator ports  112   a ,  112   b  to the target port  116   a ,  116   b  to the LUNs  122   a  established by the block I/O subsystem  120  that terminate at PEs  222   a ,  222   b . The path manager  110  does not consider performance attributes of the virtual volumes, which is behind the PEs  222   a ,  222   b.    
     For example, I/Os to a virtual volume with a highest class of service (CoS) (e.g., called a platinum service) which has an SLO for the highest performance and I/Os to another virtual volume with lower performance characteristics (e.g., called silver performance) bound to same PEs  222   a ,  222   b  will be load balanced in the same fashion by the path manager  110 . This can defeat performance SLO associated with high performance virtual volumes. 
     Similar problems can happen if the LUNs (not a virtual volume or sub-LUN) have different SLOs for performance. 
     Referring to  FIGS. 3 and 4 , a system  100 ′″ is similar to system  100 ″ except system  100 ′″ includes a virtual center  302  with a VASA (vSphere Storage APIs-Storage Awareness) client  304  and the storage array, which includes a VASA provider  306 . In addition, as explained further herein, the path manager  110 ′ has been modified from the path manager  110  to include SLO based I/O scheduling component  402 , a load balancing component  404  and a user mode component  408 . 
     The storage array  106 ′ communicates with the virtual center  302  via a VASA provider  306  to a VASA client  304  at the virtual center  302 . The storage array  106 ″ exposes a storage container which associates storage profiles. Storage profiles typically contain IOPs and latency parameters. When a virtual volume is generated, data store are carved out from storage container matching the profile requirement that the virtual volume imposes. These parameters are captured and passed by an external agent to the path manager  110 . The path manager  110 ′ also obtains a list of virtual volumes  250   a - 250   c ,  252   a - 252   c  bound to the protocol end points PE  222   a ,  222   b  it manages (using SCSI commands). The external agent, for example, may be a program (e.g., a user mode component  408 ) running on a computer system that is capable of communicating to storage array and path manager. 
     For example, the path manager  110 ′ uses a user mode component  408 , which listens to the events when a virtual volume is getting bound or un-bound to a PE. The user mode component  408  extracts profile information from the virtual volume and passes relevant information to the path manager  110 ′ and so it can associate this information along with a current load balancing algorithm to give proper weight to virtual volume with high performance characteristics when dispatching an I/O. 
     The path manager  110 ′ keeps track of performance parameters such as I/O throughput and/or latency of all paths, for example. The SLO based I/O scheduling component  402  enables SLO based filtering during path selection. The path performance will be profiled after a certain time interval (e.g., 10 sec). I/Os that belong to the lowest class of service will be directed to the slowest paths so that the better paths are used for the higher class of service. 
     Referring to  FIG. 5 , an example of a process to profile performance is a process  500 . Performance profiling is a periodic routine and responsibility of this routine is to measure performance of past compared to SLOs. Then, the routine readjusts path scopes associated to every class of service if necessary. 
     Process  500  receives new SLO for each LUN/sub-LUN ( 502 ). For example, the path manager  110  receives the performance parameters such as latency and/or throughput of each path. 
     Process  500  determines classification and scope of paths based on the SLO ( 504 ). For example, SLO based I/O scheduling component  402  performs classification of path for each LUN/sub-LUN. In one particular example, there are three classes of services: platinum, gold, and silver with respect to performance parameters (e.g., one or more of latency, throughput and so forth) and one LUN/sub-LUN is associated with each of these classes. 
     In one particular example, platinum represents the lowest latency and the highest throughput while silver represents the highest latency and the lowest throughput. There are 16 paths each having a latency L1, L2, . . . , L16, respectively, where L1&gt;L2&gt; . . . &gt;L16) for any interval of time (e.g., 10 sec). The lowest class (e.g., silver) requires that I/Os are dispatched on the first five highest latency paths (L1-L5). The middle class (e.g., gold) requires that I/Os are dispatched on the first ten highest latency paths (L1-L10). The best class (e.g., platinum) class requires I/Os are dispatched in all of the paths (L1-L16). 
     Performance (in this example latency) profiling of the paths is performed on every nth second depending on latency values and path scope changes for each class. In one particular example, the period of time is 10 seconds. 
     Process  500  measures the performance parameters ( 510 ). For example, average latency of each of the service classes is measured.
 
 L platinum=Average( L 1 . . .  L 16)
 
 L gold=Average( L 1 . . .  L 10)
 
 L silver=Average( L 1 . . .  L 5)
 
Here Lplatinum, Lgold, Lsilver represents average latency of each class. In other examples, average throughput is measured. In still further examples, average latency and average throughput are measured.
 
     Process  500  determines if the SLOs are being met ( 512 ). If the SLOs are not being met, process  500  sends an alert ( 516 ). For example, an alarm is raised. 
     Process  500  changes the path scope ( 518 ) if the SLOs are not being met. For example, an attempt is made to re-adjust path selection. For example if Lplatinum has a higher than expected latency of platinum class, the path scope of the lower class is reduced (e.g., Psilver=flb(pl1 . . . pl4 or one path is deleted). If the lowest class (e.g., Lsilver) has a higher latency than the SLO requirement for that class, more paths are added to the scope (e.g., Psilver=flb(pl1 . . . pl6) or one extra path is added). Precedence is given to the highest class of service. Thus, the lower class of service may be compromised for higher class requirements. An example of this case might happen in a cloud environment when a platinum volume suddenly receives a high amount of transactions. With this method, path scope is readjusted so that a silver volume may get only one path to send an I/O (e.g., pl1 in this example). As a result of this adjustment, a platinum volume could meet the SLO and the silver volume might not. Necessary alarms are raised and once the load normalizes for the platinum volume, a path will be readjusted, so that silver volume would be able to meet SLO. 
     Referring to  FIG. 6 , an example of selecting a path for an I/O based on SLOs is a process  600 . Process  600  receives an I/O request ( 662 ) and obtains a volume for the I/O ( 664 ). Process  600  obtains path scope associated with the I/O ( 660 ) 
     Process  600  applies load balancing on the obtained path scope ( 668 ). The load balancing component  404  take these I/Os from SLO based I/O scheduling component and dispatches them to the storage device in the array using load balancing techniques such as round-robin or adaptive ensuring that the I/Os are distributed across the paths. For example, the lowest class of service dispatches I/Os on the slowest paths ultimately to the storage array. For example, the paths selected for different classes of I/Os can be represented by:
 
 P platinum= flb ( pL 1 . . .  pL 16)
 
 P gold= flb ( pL 1 . . .  pL 10)
 
 P silver= flb ( pL 1 . . .  pL 5)
 
where pL1, . . . , pLn represent paths chosen by SLO Based I/O scheduling component  402  for each class. flb represent a load balancing algorithm used by the load balancing component  404  to return one path from the set of paths represented by pLi (where 0&lt;i&lt;16, for example). Some of the existing load balancing algorithms are intelligent to pick up less congested paths considering overhead of the pending I/Os, block size and so forth in each path.
 
     Process  600  completes the I/O ( 670 ) and updates the performance matrix ( 672 ). 
     One of ordinary skill in the art would recognize that the examples given above can be generalized for any number classes of services and any number of LUN/sub-LUNs and for any number of paths and that throughput along with latency may be used separately or together as performance parameters. 
     One of ordinary skill in the art recognizes that the approaches described herein are not limited to virtual volumes. Similar methods may be adapted to any system that contains LUNs or sub-LUNs with different classes of services. 
     The techniques described herein may also be used if SLOs are tied to applications (as opposed to LUNs or sub-LUNs) also. For example, in VMWARE®, if a class of service is defined for a virtual machine (VM), it is possible to detect all LUNs, which a particular VM is using and apply the same methods described herein. 
     Referring to  FIG. 7 , a computer  700  includes a processor  702 , a volatile memory  704 , a non-volatile memory  706  (e.g., hard disk) and the user interface (UI)  708  (e.g., a graphical user interface, a mouse, a keyboard, a display, touch screen and so forth). The non-volatile memory  706  stores computer instructions  712 , an operating system  716  and data  718 . In one example, the computer instructions  712  are executed by the processor  702  out of volatile memory  704  to perform all or part of the processes described herein (e.g., processes  500  and  600 ). 
     The processes described herein (e.g., processes  500  and  600 ) are not limited to use with the hardware and software of  FIG. 7 ; they may find applicability in any computing or processing environment and with any type of machine or set of machines that is capable of running a computer program. The processes described herein may be implemented in hardware, software, or a combination of the two. The processes described herein may be implemented in computer programs executed on programmable computers/machines that each includes a processor, a non-transitory machine-readable medium or other article of manufacture that is readable by the processor (including volatile and non-volatile memory and/or storage elements), at least one input device, and one or more output devices. Program code may be applied to data entered using an input device to perform any of the processes described herein and to generate output information. 
     The system may be implemented, at least in part, via a computer program product, (e.g., in a non-transitory machine-readable storage medium such as, for example, a non-transitory computer-readable medium), for execution by, or to control the operation of, data processing apparatus (e.g., a programmable processor, a computer, or multiple computers)). Each such program may be implemented in a high level procedural or object-oriented programming language to communicate with a computer system. However, the programs may be implemented in assembly or machine language. The language may be a compiled or an interpreted language and it may be deployed in any form, including as a stand-alone program or as a module, component, subroutine, or other unit suitable for use in a computing environment. A computer program may be deployed to be executed on one computer or on multiple computers at one site or distributed across multiple sites and interconnected by a communication network. A computer program may be stored on a non-transitory machine-readable medium that is readable by a general or special purpose programmable computer for configuring and operating the computer when the non-transitory machine-readable medium is read by the computer to perform the processes described herein. For example, the processes described herein may also be implemented as a non-transitory machine-readable storage medium, configured with a computer program, where upon execution, instructions in the computer program cause the computer to operate in accordance with the processes. A non-transitory machine-readable medium may include but is not limited to a hard drive, compact disc, flash memory, non-volatile memory, volatile memory, magnetic diskette and so forth but does not include a transitory signal per se. 
     The processes described herein are not limited to the specific examples described. For example, the processes  500  and  600  are not limited to the specific processing order of  FIGS. 5 and 6 , respectively. Rather, any of the processing blocks of  FIGS. 5 and 6  may be re-ordered, combined or removed, performed in parallel or in serial, as necessary, to achieve the results set forth above. 
     The processing blocks (for example, in the processes  500  and  600 ) associated with implementing the system may be performed by one or more programmable processors executing one or more computer programs to perform the functions of the system. All or part of the system may be implemented as, special purpose logic circuitry (e.g., an FPGA (field-programmable gate array) and/or an ASIC (application-specific integrated circuit)). All or part of the system may be implemented using electronic hardware circuitry that include electronic devices such as, for example, at least one of a processor, a memory, a programmable logic device or a logic gate. 
     Elements of different embodiments described herein may be combined to form other embodiments not specifically set forth above. Other embodiments not specifically described herein are also within the scope of the following claims.