Patent Publication Number: US-9893953-B1

Title: Using application aware templates

Description:
BACKGROUND 
     Technical Field 
     This application relates to using application aware templates. 
     Description of Related Art 
     Computer systems may include different resources used by one or more host processors. Resources and host processors in a computer system may be interconnected by one or more communication connections. These resources may include, for example, data storage devices such as those included in the data storage systems manufactured by EMC Corporation. These data storage systems (also referred to as “storage array” or simply “array”) may be coupled to one or more servers or host processors and provide storage services to each host processor. Multiple data storage systems from one or more different vendors may be connected and may provide common data storage for one or more host processors in a computer system. 
     A host processor may perform a variety of data processing tasks and operations using the data storage system. For example, a host processor may perform basic system I/O operations in connection with data requests, such as data read and write operations. 
     Host processor systems may store and retrieve data using a storage device containing a plurality of host interface units, disk drives, and disk interface units. The host systems access the storage device through a plurality of channels provided therewith. Host systems provide data and access control information through the channels to the storage device and the storage device provides data to the host systems also through the channels. The host systems do not address the disk drives of the storage device directly, but rather, access what appears to the host systems as a plurality of logical disk units. The logical disk units may or may not correspond to the actual disk drives. Allowing multiple host systems to access the single storage device unit allows the host systems to share data in the device. In order to facilitate sharing of the data on the device, additional software on the data storage systems may also be used. 
     Different tasks may be performed in connection with a data storage system. For example, software may be executed on the data storage system in connection with performing data storage administration tasks such as for data storage configuration, management, and/or monitoring. Such tasks may include, for example, configuring storage for use with an email application. In connection with the configuration processing, tasks may include allocating storage, specifying the logical and/or physical devices used for the storage allocation, specifying whether the data should be replicated, the particular RAID (Redundant Array of Independent or Inexpensive Disks) level, and the like. With such options in connection with performing the configuration and allocation of storage, a customer may not have the appropriate level of sophistication and knowledge needed. Also, the particular level of knowledge may vary with each user. Additionally, a single user&#39;s knowledge level may vary for different applications and/or tasks that the single user may perform. 
     SUMMARY OF THE INVENTION 
     A method is used in using application aware templates for configuring data storage systems. An application aware template is received for configuring a data storage system. The application aware template includes a set of configuration preferences based on best practices for an application. The data storage system is configured based on the set of configuration preferences of the application aware template. 
    
    
     
       BRIEF DESCRIPTION OF THE DRAWINGS 
       Features and advantages of the present invention will become more apparent from the following detailed description of exemplary embodiments thereof taken in conjunction with the accompanying drawings in which: 
         FIG. 1  is an example of an embodiment of a computer system that may utilize the techniques described herein; 
         FIG. 2  is an example illustrating storage device layout; 
         FIGS. 3-6  are diagrams illustrating in more detail components that may be used in connection with techniques herein; 
         FIG. 7  is a flow diagram illustrating processes that may be used in connection with techniques herein; 
         FIGS. 8-9  are representations of a graphical user interface and are an example of an embodiment of a computer system that may utilize the techniques described herein; and 
         FIGS. 10-12  are representations of an application aware template and are an example of an embodiment of a computer system that may utilize the techniques described herein. 
     
    
    
     DETAILED DESCRIPTION OF EMBODIMENT(S) 
     Described below is a technique for use in using application aware templates, e.g., for configuring data storage systems, which technique may be used to provide, among other things, receiving an application aware template for configuring a data storage system, where the application aware template includes a set of configuration preferences based on best practices for an application and configuring the data storage system based on the set of configuration preferences of the application aware template. 
     In at least some scenarios, storage provisioning is a process of assigning storage (or “disk space”) to applications executing on a data storage system. Storage is provisioned to each of the applications based on the requirements of each of the applications. For example, an application such as Microsoft® Exchange may require 100 gigabytes (GB) of space for storing emails, and the required storage space is provisioned from the total amount of storage available in a data storage system. However, a storage space allocated for one application cannot be used by another application. For example, if a storage space of 500 gigabytes (GB) is provisioned for a database that is currently using only 100 gigabytes (GB), the remaining storage space of 400 gigabytes (GB) goes unused until the application actually uses a portion of the remaining storage. However, when an amount of storage space provisioned for an application is less than the application requires, users may experience network or application performance problems. Additionally, in such a case, the application may use all the provisioned storage space and fail due to an out of space error. Conversely, provisioning more storage than an application requires may result in waste of storage resources. 
     Thin storage provisioning helps address the problem of allocated but unused storage space by assigning storage space to an application on an “as needed” manner. Thin storage provisioning creates a pool of virtual storage that is allocated (e.g., in thin logical units or volumes, also referred to as TLUs) to applications in a conventional manner. The pool of virtual storage is supported by a much smaller pool of actual storage that is provisioned to applications as an actual amount of storage space needed by applications. In a thin provisioned data storage system, a storage administrator tracks a storage capacity for the entire data storage system, instead of having to track the storage capacity for each application of the data storage system. However, when a thin provisioned data storage system runs out of storage space, the entire thin provisioned data storage system runs out of space, not just a single application. 
     Generally, storage administrators must provide users of applications with access to hundreds of gigabytes (even terabytes) of data, while making the efficient use of available storage space of a data storage system. When provisioning storage, a storage administrator must ensure that each application receives an adequate amount of space, while maintaining or improving performance of a data storage system. Typically, requirements of an application include a type of disk, a type of a storage tier, a type of RAID level, performance of the application, an initial storage capacity required by the application, and an amount of storage space required for potential growth of the application data. A storage space is provisioned to an application by allocating a storage pool suitable to the application based on requirements of the application. 
     Generally, requirements and configuration preferences for an application change rapidly over time. Thus, even though a data storage system may include application aware best practices for an application that are integrated into the data storage system, changes in requirements and configuration preferences for the application may require updating application aware best practices included in the data storage system. 
     Conventionally, a storage administrator manually provisions storage for an application executing on a data storage system. In such a conventional system, provisioning storage may be difficult, tedious and an error-prone process, requiring a detailed knowledge of requirements of an application. In such a conventional system, a storage administrator must possess knowledge of a scripting language and detailed knowledge of storage devices in order to write a script for allocating an adequate amount of storage space to an application. Thus, in such a conventional system, a storage administrator may select a storage pool that may not be a good fit for an application. Further, in such a conventional system, when requirements and/or best practices of an application configured on a data storage system changes, the data storage system must be upgraded to included changed requirements and/or best practices of the application. For example, typical storage requirements of Microsoft® Exchange application indicate that a log for Microsoft® Exchange application must be stored on a disk of a specific RAID type. Further, the log and a database for Microsoft® Exchange application may not share physical spindles of a disk. Further, I/O operations performed on the log are sequential in nature whereas I/O operations performed on the database are random in nature. Further, the number of I/O operations that are performed on the database are generally greater than the number of I/O operations that are performed on the log. Conventionally, in such a case, a storage administrator must perform a lengthy and manual process in order to configure storage of a data storage system based on the requirements and the I/O characteristics of the Microsoft® Exchange application. Conventionally in such a case, the process may include creating a file system on an appropriate RAID group, configuring network devices, LUNs and the application. As a result, in such a conventional case, a storage administrator may find this process complicated and cumbersome without extensive knowledge of storage configurations of the data storage system. Thus, in such a conventional case, one of the mechanisms a storage administrator may use is to manually configure storage based on requirements and best practices of an application by either understanding detailed requirement of the application or relying on documentations that provides detailed explanation of methods for configuring storage for the application. However, in such a conventional system, a manual method to configure storage space is prone to errors, amounts to a guess work, lacks repeatability and automation, and requires a storage administrator to constantly keep up with changing requirements of the application. Further, conventionally, a second mechanism used to configure storage space includes using a storage template. In such a conventional case, a storage template includes information such as how to configure LUNs, storage pool and RAID groups. However, in such a conventional system, a storage template does not include information regarding requirements and best practices of an application. Moreover, conventionally, a third mechanism used to configure storage in a data storage system includes implementing best practices of an application as part of a storage system software of the data storage system. However, in such a conventional system, developing best practices of an application consumes resources in order to create software code corresponding to the best practices of each application used by a storage administrator. Further, in such a conventional system, when requirements of an application changes, the storage system software must be upgraded to include updated code corresponding to changed requirements. Thus, in such a conventional case, an upgrade must be performed on the data storage system in order to upload updated code including the changed requirements. 
     By contrast, in at least some implementations in accordance with the technique as described herein, use of an application aware template for provisioning storage for an application and configuring the application on a data storage system based on best practices of the application provides an efficient method for configuring storage for a large number of applications without any detailed knowledge of a script or programming language. Additionally, in at least some implementations as described herein, an application aware template may be used repeatedly by a user. Further, in at least some implementations as described herein, the current technique provides a user of a data storage system (e.g., a storage administrator) with a user interface for registering, uploading and executing an application aware template. An application aware template includes a set of configuration preferences and may be created by any user (e.g., an engineer, a storage administrator, a customer service personnel, a sales personnel) possessing knowledge of best practices of an application. In at least one embodiment of the current technique, an application aware template is created, distributed and uploaded to a data storage system. In at least one embodiment of the current technique, a user (e.g., a storage administrator) of a data storage system selects an application aware template. The application aware template is then execution on the data storage. During execution, the data storage system verifies whether sufficient amount of storage space is available on the data storage system based on configuration preferences included in the application aware template. The storage space is then provisioned based on the configuration preferences. Thus, in at least one embodiment of the current technique, a data storage system may be configured based on best practices of an application by a user such that the user neither need to possess knowledge of the best practices of the application nor perform a series of manual operations for provisioning storage space. 
     In at least some implementations in accordance with the technique as described herein, the use of using application aware templates can provide one or more of the following advantages: simplifying a process of provisioning storage by enabling users to use application aware templates that are based on best practices of applications, reducing the amount of time required for provisioning storage by enabling users to create a customized version of an application aware template based on best practices of an application and use the application aware template for configuring the application, lowering cost of maintaining a data storage system by rapidly deploying new application aware templates upon encountering a change in a system environment such as changes in requirements of an application, changes in disk types, and changes in version of a server, efficiently provisioning storage space by reducing the number of errors involved in a manual configuration process, and efficiently managing a data storage system by supporting multiple versions of an application aware template that are based on different requirements of an application, creating an application aware template that is based on a published documentation including best practices of an application and managing application aware templates associated with multiple versions of the application without having to upgrade a data storage system software. 
     Referring to  FIG. 1 , shown is an example of an embodiment of a computer system that may be used in connection with performing the techniques described herein. The computer system  10  includes one or more data storage systems  12  connected to server or host systems  14   a - 14   n  through communication medium  18 . The system  10  also includes a management system  16  connected to one or more data storage systems  12  through communication medium  20 . In this embodiment of the computer system  10 , the management system  16 , and the N servers or hosts  14   a - 14   n  may access the data storage systems  12 , for example, in performing input/output (I/O) operations, data requests, and other operations. The communication medium  18  may be any one or more of a variety of networks or other type of communication connections as known to those skilled in the art. Each of the communication mediums  18  and  20  may be a network connection, bus, and/or other type of data link, such as a hardwire or other connections known in the art. For example, the communication medium  18  may be the Internet, an intranet, network or other wireless or other hardwired connection(s) by which the host systems  14   a - 14   n  may access and communicate with the data storage systems  12 , and may also communicate with other components (not shown) that may be included in the computer system  10 . In one embodiment, the communication medium  20  may be a LAN connection and the communication medium  18  may be an iSCSI or fibre channel connection. 
     Each of the host systems  14   a - 14   n  and the data storage systems  12  included in the computer system  10  may be connected to the communication medium  18  by any one of a variety of connections as may be provided and supported in accordance with the type of communication medium  18 . Similarly, the management system  16  may be connected to the communication medium  20  by any one of variety of connections in accordance with the type of communication medium  20 . The processors included in the host computer systems  14   a - 14   n  and management system  16  may be any one of a variety of proprietary or commercially available single or multiprocessor system, such as an Intel-based processor, or other type of commercially available processor able to support traffic in accordance with each particular embodiment and application. 
     It should be noted that the particular examples of the hardware and software that may be included in the data storage systems  12  are described herein in more detail, and may vary with each particular embodiment. Each of the host computers  14   a - 14   n , the management system  16  and data storage systems may all be located at the same physical site, or, alternatively, may also be located in different physical locations. In connection with communication mediums  18  and  20 , a variety of different communication protocols may be used such as SCSI, Fibre Channel, iSCSI, and the like. Some or all of the connections by which the hosts, management system, and data storage system may be connected to their respective communication medium may pass through other communication devices, such as a Connectrix or other switching equipment that may exist such as a phone line, a repeater, a multiplexer or even a satellite. In one embodiment, the hosts may communicate with the data storage systems over an iSCSI or a Fibre Channel connection and the management system may communicate with the data storage systems over a separate network connection using TCP/IP. It should be noted that although  FIG. 1  illustrates communications between the hosts and data storage systems being over a first connection, and communications between the management system and the data storage systems being over a second different connection, an embodiment may also use the same connection. The particular type and number of connections may vary in accordance with particulars of each embodiment. 
     Each of the host computer systems may perform different types of data operations in accordance with different types of tasks. In the embodiment of  FIG. 1 , any one of the host computers  14   a - 14   n  may issue a data request to the data storage systems  12  to perform a data operation. For example, an application executing on one of the host computers  14   a - 14   n  may perform a read or write operation resulting in one or more data requests to the data storage systems  12 . 
     The management system  16  may be used in connection with management of the data storage systems  12 . The management system  16  may include hardware and/or software components. The management system  16  may include one or more computer processors connected to one or more I/O devices such as, for example, a display or other output device, and an input device such as, for example, a keyboard, mouse, and the like. A data storage system manager may, for example, view information about a current storage volume configuration on a display device of the management system  16 , provision data storage system resources, and the like. 
     In one embodiment, the one or more data storage systems  12  of  FIG. 1  may be an appliance with hardware and software for hosting the data storage of the one or more applications executing on the hosts  14   a - 14   n . As an example in connection with a medical office application server component that may executed on one or more of the hosts  14   a - 14   n , the data storage configuration tasks may include allocating or provisioning storage for storing patient medical data such as, for example, name, address, insurance information, office visit dates, vaccination records, payments, image files containing x-rays, and the like. Tasks performed in connection with provisioning storage to store patient medical data for the medical office application may include, for example, specifying the devices (logical and/or physical) used to store the data, configuring the data storage devices used such as specifying whether data replication is performed for disaster recovery, and the like. Techniques that may be used in connection with performing data storage provisioning and configuration are described in more detail in following paragraphs in order to provide ease of use to users of the data storage system(s)  12 . 
     In another embodiment, the data storage systems  12  may include one or more data storage systems such as one or more of the data storage systems offered by EMC Corporation of Hopkinton, Mass. Each of the data storage systems may include one or more data storage devices, such as disks. One or more data storage systems may be manufactured by one or more different vendors. Each of the data storage systems included in  12  may be inter-connected (not shown). Additionally, the data storage systems may also be connected to the host systems through any one or more communication connections that may vary with each particular embodiment and device in accordance with the different protocols used in a particular embodiment. The type of communication connection used may vary with certain system parameters and requirements, such as those related to bandwidth and throughput required in accordance with a rate of I/O requests as may be issued by the host computer systems, for example, to the data storage systems  12 . It should be noted that each of the data storage systems may operate stand-alone, or may also be included as part of a storage area network (SAN) that includes, for example, other components such as other data storage systems. Each of the data storage systems may include a plurality of disk devices or volumes. The particular data storage systems and examples as described herein for purposes of illustration should not be construed as a limitation. Other types of commercially available data storage systems, as well as processors and hardware controlling access to these particular devices, may also be included in an embodiment. 
     In such an embodiment in which element  12  of  FIG. 1  is implemented using one or more data storage systems, each of the data storage systems may include code thereon for performing the techniques as described herein for using application aware templates in data storage systems. 
     Servers or host systems, such as  14   a - 14   n , provide data and access control information through channels to the storage systems, and the storage systems may also provide data to the host systems also through the channels. The host systems may not address the disk drives of the storage systems directly, but rather access to data may be provided to one or more host systems from what the host systems view as a plurality of logical devices or logical volumes (LVs). The LVs may or may not correspond to the actual disk drives. For example, one or more LVs may reside on a single physical disk drive. Data in a single storage system may be accessed by multiple hosts allowing the hosts to share the data residing therein. An LV or LUN (logical unit number) may be used to refer to the foregoing logically defined devices or volumes. 
     In following paragraphs, reference may be made to a particular embodiment such as, for example, an embodiment in which element  12  of  FIG. 1  includes a single data storage system, multiple data storage systems, a data storage system having multiple storage processors, and the like. However, it will be appreciated by those skilled in the art that this is for purposes of illustration and should not be construed as a limitation of the techniques herein. As will be appreciated by those skilled in the art, the data storage system  12  may also include other components than as described for purposes of illustrating the techniques herein. 
     Described in following paragraphs are techniques that may be used to assist users of a data storage system in connection with performing data storage services such as related to data storage system configuration, provisioning of data storage, and the like. The techniques herein are adaptable to the particular knowledge level of the user. The techniques are flexible and allow for implementation of best practices and defaults in an automated fashion which are customized for the particular application, user or customer, and/or underlying data storage system and environment to meet specific customer needs. As will be described in more detail, depending on the level at which a user interacts with the data storage system, different levels or amounts of automation of the best practices may be performed. The user may elect to bypass the automation of best practices or limit the amount of automation performed by interacting with the system at various levels and instead choose to execute an application aware template based on best practices for provisioning storage for an application. Thus, in at least one embodiment of the current technique, even a novice user does not have to provide any input to a series of configuration questions posed to the user by a user interface for configuring storage for an application. 
     Referring to  FIG. 2 , shown is an example representing how data storage system best practices may be used to form storage pools. A storage pool may be a collection of disks, which may include disks of different types. Storage pools may further be subdivided into slices; for example a 1 GB slice may be the allocation element for a logical unit. As well, a pool may be use synonymously with a storage tier. That is, both a storage tier and a pool may have storage devices of different performance capabilities and costs. As well, both may contain slices (also referred to as “data slices”). A slice may be considered the smallest element that can be tracked and moved. 
     A disk may be a physical disk within the storage system. A LUN may be a logical unit number which is an identifier for a Logical Unit. Each slice of data may have a mapping on the location of the physical drive where it starts and ends; a slice may be sliced again. 
     In at least one embodiment of the current technique, the example  50  illustrates how storage pools may be constructed from groups of physical devices. For example, RAID Group 1  64   a  may be formed from physical devices  60   a . The data storage system best practices of a policy may specify the particular disks and configuration for the type of storage pool being formed. For example, for physical devices  60   a  on a first data storage system type when forming a storage pool, RAID-5 may be used in a 4+1 configuration (e.g., 4 data drives and 1 parity drive). The RAID Group 1  64   a  may provide a number of data storage LUNs  62   a . An embodiment may also utilize one or more additional logical device layers on top of the LUNs  62   a  to form one or more logical device volumes  61   a . The particular additional logical device layers used, if any, may vary with the data storage system. It should be noted that there may not be a 1-1 correspondence between the LUNs of  62   a  and the volumes of  61   a . In a similar manner, device volumes  61   b  may be formed or configured from physical devices  60   b . The storage pool  1  of the example  50  illustrates two RAID groups being used to define a single storage pool although, more generally, one or more RAID groups may be used for form a storage pool in an embodiment using RAID techniques. 
     The data storage system  12  may also include one or more thin devices  70 - 74 . A thin device presents a logical storage space to one or more applications running on a host where different portions of the logical storage space may or may not have corresponding physical storage space associated therewith. However, the thin device is not mapped directly to physical storage space. Instead, portions of the thin storage device for which physical storage space exists are mapped to data devices such as device volumes  61   a - 61   b , which are logical devices that map logical storage space of the data device to physical storage space on the physical devices  60   a - 60   b . Thus, an access of the logical storage space of the thin device results in either a null pointer (or equivalent) indicating that no corresponding physical storage space has yet been allocated, or results in a reference to a data device which in turn references the underlying physical storage space. 
     The data storage system best practices may define how to configure or form the generic storage pools, each storage pool having an associated generic storage pool type. Each underlying data storage system may have associated best practices specifying how to configure storage pools formed from physical devices in that particular data storage system. A storage extent may be formed or configured from one or more LUNs  62   a - b.    
     Referring to  FIG. 3 , shown is an example representation of the processing that may be performed in an embodiment in accordance with the techniques herein. The example  100  illustrates the processing that may be performed in connection with a request to provision storage of a data storage system for use by an application. For example, a provisioning request may be made to allocate storage for a number of mailboxes for use by an email application. The example  100  includes application provision requirements  102  which may be mapped or translated into generic storage resource requirements  104  in a first mapping or translation stage  120 . The generic storage resource requirements  104  may be mapped or translated into physical storage requirements  106  in a second mapping or translation stage  122 . The mapping stage  120  may be performed in accordance with application best practices. The steps comprising stage  120  may vary with each application. The mapping stage  122  may be performed in accordance with data storage specific best practices. The steps comprising stage  122  may vary with the particular underlying data storage system. 
     The data storage specific best practices implemented as part of  122  in an embodiment may be based on experience, know-how, testing, and the like, in connection with provisioning and configuring storage for a particular data storage system. To illustrate, the mapping performed in the first stage  120  may vary with a particular email application, database application, and the like. A different set of processing steps may be performed for each of the foregoing applications in accordance with the application best practices of each application. The mapping performed in the second stage  122  may vary with each data storage system provided by a same vendor or different vendor. For example, EMC Corporation provides the Symmetrix® data storage system and the CLARiiON® data storage system. A different set of processing steps may be performed for each of the foregoing data storage systems in accordance with data storage system specific best practices in connection with the second stage  122 . Both the application best practices and data storage system specific best practices may be included in an application aware template in accordance with techniques herein to provide for automatically provisioning data storage system resources. An embodiment utilizing the techniques herein may configure storage for an application based on application best practices and data storage system best practices by executing an application aware template  101  based on the application best practices. As will be described in more detail herein, the best practices may be included in an application aware template using any one of a variety of different techniques known in the art such as, for example, using a script language, rules, programming language, comma separated files, XML file and the like. Although reference may be made to particular ways in which the techniques herein may be implemented for purposes of example and illustration, such reference should not be construed as a limitation of the techniques herein. 
     Each of the different requirements  102 ,  104  and  106  and the two mapping stages  120  and  122  will now be described in more detail. 
     In at least one embodiment, the application provision requirements  102  may specify the one or more provisioning requirements for a request. The requirements may make reference to application-specific terminology. The application provision requirements  102  may be the user inputs for the provisioning request received via a user interface (UI) using any one of a variety of different supported interfaces and techniques. The application provision requirements  102  may vary with user level and/or particular application for which the provisioning request is issued. In at least one embodiment of the current technique, a user may select an application aware template  101  via a UI. The application aware template includes a set of configuration preferences based on application best practices. Further, application aware template  101  may include requirements that may make reference to application specific terminology. Moreover, application aware template  101  may also include requirements that may make reference to data storage specific terminology. 
     In at least one embodiment, the UI may provide for one or more different types of user interfaces and associated data. For example, the UI may provide support for a graphical user interface (GUI), command line interface (CLI), and the like. As also described herein, one or more different user levels may be provided in accordance with different levels of user proficiency. A user may interact with a system utilizing the techniques herein at any one of the user proficiency levels. The application provision requirements  102  may vary with each of the different user proficiency levels of interaction that may be provided in an embodiment. Each of the different user levels may provide a different logical view and level of abstraction with respect to a data storage task to be performed for an application executing on one of the hosts. Each of the different user levels may provide a different level of detail with respect to the underlying operations and tasks performed on the data storage system in accordance with different levels of user sophistication and knowledge. The language or terminology of the UI and application provision requirements  102 , UI data (e.g., content or data used to populate the UI menus), and UI presentation or structure (e.g., commands presented or particular hierarchical menu structure) may vary in accordance with the particular user level at which a user interacts with the data storage system as well as the application for which the provisioning request is being performed. Thus, a user may interact with the data storage system at a variety of different levels when issuing data storage configuration requests for the same application. The UI and application provision requirements may be customized for the particular level and application for which the request is performed. Further, the UI may include a mechanism for selecting an application aware template  101  for provisioning storage on data storage system  12 . 
     The application provision requirements  102  may be mapped in the first mapping or translation stage  120  to generic resource requirements in accordance with application best practices. Additionally, the first mapping or translation stage  120  may generate other output, such as application-specific information including application-specific attributes. The application-specific information may not be used in connection with the specifying generic storage resource requirements or otherwise involved in the second mapping or translation process. The application-specific information, and possible uses thereof, are described in more detail below. Conventionally, the application best practices may be a codified instance of  120  for each application. By contrast, in at least one embodiment of the current technique, users can create application aware templates  101  based on application best practices, thereby eliminating or reducing the need to codify the application best practices in a storage system software. 
     The generic storage resource requirements  104  may be characterized as an expression of the provisioning request in terms of application-neutral or application independent data elements and application independent data element properties. The generic storage requirements  104  refer to data elements that may be used as a common way of expressing the storage requirements for many different applications. In contrast, the application provision requirements  102  may make reference to data elements which are application-specific such as a number of mailboxes. The application-specific requirements of  102 , such as number of mailboxes, may be translated by  120  into application independent data elements that may be used as an intermediate expression of storage requirements for a provisioning request. As will be described in more detail in following paragraphs, generic storage requirements may refer to generic storage pools of storage volumes configured for use with servicing different application provisioning requests. For example, a storage pool of FAST storage may be defined. FAST storage may be defined as a general category of “fast” storage based on one or more different data storage system-specific properties which are used to characterize the storage pool and are used as part of the second mapping stage  122 . Such data storage specific properties may not be expressly or specifically included in the generic storage resource requirements  104 . Rather, the generic requirements of  104  may reference an abstract data storage element property of FAST based on one or more underlying data storage specific attributes. The particular properties and associated values used to define a FAST storage pool as well as other storage pools may vary with the underlying data storage system and associated data storage system best practices. A portion of storage from one of the storage pools, such as a volume or portion thereof, may be used in specifying generic data storage resource requirements  104 . As another example, an embodiment may define one or more CHEAP storage pools along with one or more FAST storage pools for use in connection with specifying generic resource requirements  104 . As with FAST storage pools, CHEAP may be an abstract data storage element property based on one or more data storage specific properties and values that vary with the underlying data storage system. The particular properties and values used to characterize and define a CHEAP storage pool may vary with data storage system and associated data storage system best practices. CHEAP may refer to a second type of data storage which may be characterized as inexpensive and not as fast in connection with servicing I/O requests relative to the storage pools of type FAST. In contrast to CHEAP storage pools, storage pools of type FAST may consist of faster device types and device configurations which may typically result in faster I/O request service times. Other embodiments may use a different number and different types or categories of storage pools other than FAST and CHEAP. In one embodiment as described herein, the generic storage resource requirements may be expressed in terms of generic data storage elements, such as storage pools and portions thereof, having one generic data storage element properties, such as FAST or CHEAP. 
     As described above, the first mapping or translation stage  120  may output generic storage resource requirements and also application-specific information or application specific attributes. The application-specific information may be characterized as additional attributes associated with the generic storage resource requirements but which are not used in connection with the second mapping stage  122 . The generic storage resource requirements are mapped in the second mapping stage  122 , but not the application-specific information is not utilized. The application-specific information may be used to provide additional information regarding the generic provisioned storage for other purposes. For example, the application-specific information may be used in connection with further annotating provisioned storage and presenting the information to a user. The application-specific information may be used in annotating other information maintained and used for other purposes than the second mapping stage  122  as described herein. For example, the application-specific information may include application-specific attributes associated with data objects of a data model used in presenting information on currently allocated and provisioned storage to the user. As such, the first mapping stage  120 , in addition to producing the generic storage resource requirements, may produce other types of outputs used in connection with other processing operations, tasks, and data models. 
     The generic storage resource requirements  104  may be mapped by the second mapping or translation stage  122  into physical data storage requirements  106 . The requirements  106  may vary with the particular type of data storage system (e.g., different data storage system by same or different vendor), customer&#39;s configuration and data storage environment (e.g., which data storage system types, number of each, vendor), number and type of devices on each data storage system (e.g., disks, disk or other device characteristics such as capacity, number of disks), and the like. The requirements  106  identify data storage system resources used in connection with implementing or fulfilling a request to provision storage for use by the application. Such resources may include the one or more physical devices from which storage is allocated for use in storing data and any parity information. In an embodiment in which the data storage system is a multiprocessor architecture, a designated processor of the data storage system may be assigned to service I/O requests for one or more portions of the allocated storage. The processing of stage  122  maps the generic requirements of  104  in accordance with the different data storage specific properties that may be associated with each storage pool to the physical resources of the data storage system. As an example, each storage pool may be formed from one or more different RAID groups of physical devices. A provision request for a volume of storage in a storage pool is mapped to a portion of physical storage in accordance with the data storage best practices codified in  122 . With reference to the generic storage requirements  104  that may refer to a volume in a FAST or CHEAP storage pool, data storage system best practices may determine how FAST and CHEAP are defined for each type of data storage system. 
     In connection with the techniques herein, an embodiment implementing application best practices does not have to have any knowledge regarding the underlying data storage system and data storage system best practices. In other words, the application best practices and the data storage best practices may be developed independently of one another in accordance with the techniques herein. As a result, an instance of an application best practice implemented as part of application aware templates  101  may be used with any one or more different implementations of data storage best practices of  122 . Similarly, an instance of data storage best practices  122  may be used with any one or more different implementations of application best practices of  101  for different applications. 
     To further illustrate with respect to  FIG. 2 , the application aware templates may have an application-specific focus and provide a level of abstraction customized for an application such as, for example, a particular email application, law office application or medical office application, as well as a class of related applications, such as a multiple email applications. The application aware templates may vary with the particular application as well as user level. For example, if the application is a law office application, the interface language, menu options, and the like, may be tailored to the law profession and particular law office application. As such, the first mapping or translation step  120  may use one set of rules, mappings, script, and the like, for each application to implement the application specific best practices for the one or more provided user levels. For example, a first script for the medical office application may be used to map the user input parameters using medical office terminology to the generic storage requirements  104 . A second script for the law office application may be used to map the user input parameters using law office terminology to generic storage resource requirements  104 . The user connecting to the data storage system may be provided with a UI in order to select an application aware template that is customized for the selected level and application to perform a requested data storage configuration. 
     The generic storage resource requirements  104  may not be tailored for any particular application. In other words, the generic storage resource requirements specifies a common terminology (e.g., data elements, model, properties, etc.) for expressing provision requests for multiple applications such as the medical application, law office application, email application, database application, and the like. The requirements  104  are mapped to physical data storage requirements  106  using second mapping or translation processing defined by data storage system best practices codified as part of  122 . The physical data storage system requirements  106  may be customized for the particular storage vendor and associated options. For example, the requirements  106  may be specified in terms of particular physical data storage devices and attributes, RAID levels and techniques, SCSI and iSCSI terminology, vendor-specific options, and the like. The best practices and the automation of the best practices as described in more detail in following paragraphs may be customized for a particular application and the particular data storage system and environment. 
     A policy may be defined in an embodiment in accordance with the best practices for applications and data storage systems. A policy may be characterized as an instantiation of the application practices and/or data storage system best practices in an embodiment. A policy including application best practices may specify defaults used in connection with the different user levels for one or more applications. For example, for an email application, the policy may specify a default amount of mailbox data storage capacity and log storage capacity for each mailbox or group of mailboxes, may indicate that mailbox data is stored on FAST storage and that log data is stored on CHEAP storage, and may also specify other application independent or application-neutral criteria that may be used in servicing the provisioning request. The other criteria may include whether the data storage for the application should be allowed to share a RAID group with a different application thus affecting I/O performance, whether the storage needs to be expandable for use with the application&#39;s future storage needs, an expansion factor or amount indicating a threshold minimum amount of available storage for use with future data storage needs of the application, and the like. 
     Referring to  FIG. 4 , shown is an example representation of components that may be included on the data storage system  12  for use in performing the techniques herein for data storage configuration. The example  107  includes a user interface  103 , application aware templates  101 , one or more levels of service providers  110 , and adapters  106 . In the example  107 , the element  110  includes three service provider layers or levels  105   a - 105   c . It should be noted that although 3 service provider levels are shown in  FIG. 4 , an embodiment may include any number of service provider levels. 
     The adapters  106  are used in connection with facilitating communications between the service providers, such as the level 3 service provider  105   c , and other components. The different service providers included in the example  107  may be able to communicate directly with one another. However, when one of the service providers at one of the levels communicates with another component other than one of the service providers, an adapter may be utilized. An adapter may be characterized as a layer of software between one of the service providers, such as service provider  105   c , and another component, such as a lower-level component invoked to implement data storage platform specific functionality. An adapter  106  may convert a service provider API to the API of another component. As an example, the service provider  105   c  may perform a call to an external component to create a file system. An adapter  106  may be used as an intervening layer between  105   c  and the external component in which the adapter  106  converts the API call from  105   c  to the API of the external component. The conversion may include, for example, mapping parameters between the API calls, performing multiple calls to the external component for the one API call from  105   c , and the like. It should be noted that an adapter  106  may not utilized if such conversion is not needed. 
     The user interface (UI)  103  provides for one or more different types of user interfaces and associated data, and an interface for selecting an application aware template. For example, the UI  103  may provide support for a graphical user interface (GUI), command line interface (CLI), and the like, to support interactions between the data storage system  12  and the hosts  14   a - 14   n  of  FIG. 1 . Each of the different service provider levels of  110  may provide a different logical view and level of abstraction with respect to a data storage configuration task to be performed for an application executing on one of the hosts. In connection with the techniques herein, a user may interact through the UI  103  with any one of the different levels of service providers  105   a - 105   c  when performing data storage configuration requests. Further, a user may interact through the UI  103  to select an application aware template from a list of application aware templates  101  registered on data storage system  12 . Each of the service providers of  110  may provide a different level of detail or abstraction with respect to the underlying operations and tasks performed on the data storage system in accordance with different levels of user sophistication and knowledge. As will be described in more detail below, the language or terminology, UI data (e.g., content or data used to populate the UI menus), and UI presentation or structure (e.g., commands presented or particular hierarchical menu structure) may vary in accordance with the particular level of service provider selected by the user. Thus, a user may interact with the data storage system at a variety of different levels when issuing data storage configuration requests for the same application. The UI may be customized for the particular level and application for which the request is performed. 
     In at least one embodiment, the UI  103  may be characterized a set of different user interfaces that may vary depending on the target user and associated user level at which the user interacts with the system. As described in more detail in following paragraphs, each level may provide a different user interface for a different level of user interaction and level of knowledge and sophistication. Each level may also be associated with a different level of automation of the best practices, for example, with users interacting at level 1 obtaining the greatest amount of automation of best practices and users interacting at level 3 obtaining none or minimal amount of automation. Conventionally, the UI  103  may provide multiple different user interfaces in accordance with the different levels allowing a user the option of connecting and interacting with the data storage system at any level. For example, in such a conventional case, a level 1 user may not have to issue a data storage configuration request to provision storage for storing patient data of medical office application executing on one of the hosts by specifying a minimal amount of information in connection with the request, but the user must interact with the UI  103  by providing a series of answers to questions posed to the user. By contrast, a user may simply select an application aware template for provisioning storage thereby eliminating or reducing the need to interact with the multiple user interfaces at different level of expertise. Thus, for example, in at least one embodiment of the current technique, a user may simply select an application aware template associated with medical office application which in turn is executed on data storage system  12  and provisions the storage by interacting with service provider layers. 
     In at least one embodiment, user interface  103  enables a user to select an application aware template. The user interface  103  then communicates information regarding the application aware template selected by the user to any one of the service providers (e.g., level 1  105   a , level 2  105   b , level 3  105   c ) based on different level at which the user interacts with the user interface  103 . In at least one embodiment, the user interface  103  may communicate with level 1 service provider  105   a  based on contents of an application aware template and a level of sophistication for the user. In at least another embodiment, the user interface  103  may communicate with level 2 service provider  105   b  based on contents of an application aware template and a level of sophistication for the user. Further, in at least another embodiment, the user interface  103  may communicate with level 3 service provider  105   c  based on contents of an application aware template and a level of sophistication for the user. Thus, an application aware template enables data storage system  12  to provide functionality for the user interface  103 , and service provider levels  105   a - 105   c  in such a way that the user interface  103  and service provider levels  105   a - 105   c  may be implemented independent of a type of an application because an application aware template includes information (such as best practices) of the application. For example with reference to the level 1 request for the medical application described above, the user interface  103  may provide information regarding the application aware template to the level 2 service provider  105   b . Provider  105   b  may then communicate with the level 3 service provider  105   c  to implement the request and allocate the requested storage along with specifying other defaults such as, for example, a default level of data protection. The service provider  105   c  may communicate with other data storage system hardware and/or software when implementing the configuration request. 
     As illustrated in the example  107 , a service provider at a level n may generally communicate, directly or indirectly, with one or more other service providers at levels lower than level n when processing a data storage configuration request. A user may select the level of interaction and the user&#39;s data configuration request is received at the data storage system by the UI  103 . The UI  103  in turn either communicates with the appropriate level service provider to initiate the request or execute an application aware template selected by the user. Furthermore, a request received at a first level can result in multiple requests to a lower level to perform an operation. For example, a user may select an application aware template  101 . In response, the more than one request may be issued to provider  105   b . In turn, each request to provider  105   b  may result in one or more requests to provider  105   c  which, in turn, communicates with adapters and other code modules to perform the requested operation. 
     In one embodiment, the service providers  105   a - 105   c  may be code modules which are included in the same appliance. Each of the service providers  104   a - 104   c  may provide a published interface or API (application programming interface). A first service provider at level n may issue a request of another lower level service provider by issuing an API call to the lower level service provider. The API may also be used to facilitate communications between the UI  103  and the different level service providers of  110 . As described in more detail in following paragraphs, an API call from a first service provider to a second service provide may use rules or mappings to map the data received by the first service provider to the appropriate API call with parameters and any defaults in accordance with the received data. Thus, the rules or mappings may be used to map between levels of abstractions of the different service providers. 
     Although an embodiment may have all service providers  110  located in the same appliance or other component, the service providers may be characterized as remotable. One or more of the service providers may be located on different components having connectivity so that the API calls between service providers may be remote API calls as well as local API calls (e.g., service providers on same component). As an example, an embodiment may have multiple data storage systems included in a network. Each of the service provider may be located on a different data storage system. 
     Referring to  FIG. 5 , shown is another example representation of components that may be included on the data storage system  12  for use in performing the techniques herein for using application aware templates. The example  200  is a more detailed illustration setting forth a particular instance of the different service providers and levels that may be included in an embodiment. Elements  202  and  206  are similar, respectively, to elements  103  and  106 . Element  210  includes 3 service providers: application service provider  204   a , intermediate or generic storage service provider  204   b  and physical storage service provider  204   c . With respect to a level hierarchy,  204   a  may correspond to level 1 service provider  105   a  of  FIG. 4, 204   b  may correspond to level 2 service provider  105   b  of  FIG. 4, and 204   c  may correspond to level 3 service provider  105   c  of  FIG. 4 . 
     The application service provider  204   a  and application aware templates  101  may have an application-specific focus and provide a level of abstraction customized for an application such as, for example, a particular email application, law office application or medical office application, as well as a class of related applications, such as a multiple email applications. The intermediate storage service provider  204   b  may be an intermediate or second level of user interaction. As illustrated, user interface  202  may enable a user to select an application aware template  101  and provide information regarding the application aware template selected by the user to service provider  204   b  when implementing a request for data storage provisioning. The physical storage service provider  204   c  provides the most detailed or greatest level of exposure of the underlying data storage system. The provider  204   c  may be customized for the particular storage vendor and associated options. 
     Further, the application service provider  204   a  may include information regarding application best practices. Thus, in at least one embodiment, data storage system  12  may further simplify a process of provisioning storage in the data storage system for a user by using information regarding application best practices that are implemented in the application server provider layer  204   a , and by using an application aware template that includes a set of rules indicating application best practices. As a result, in at least one embodiment, an application aware template enables a data storage system to include a component (e.g., software module such as a user interface, service provider layers) in the data storage system such that the component may be implemented independent of a type of an application. Further, in at least another embodiment, a data storage system may use an application aware template in conjunction with a component of the data storage system that includes application best practices and requirements in order to simplify a process of provisioning storage in the data storage system. 
     Providing different levels of application-specific user interaction as described above, where each level may vary with the knowledge required to perform a data storage configuration operation such as a provisioning request for a particular application, is further described, for example, in U.S. Pat. No. 7,523,231, Apr. 21, 2009, Gupta et al. APPLICATION AWARE STORAGE (the &#39;231 patent), which is incorporated by reference herein. The &#39;231 patent describes use of different application-specific user interactions with file systems and/or block storage in order to provide varying levels of automation in accordance with different levels of user knowledge for provisioning. As such, the &#39;231 patent describes an embodiment in which a user may be exposed to varying levels of detail regarding file systems and block storage device configuration, where the level of detail exposed varies with a selected level of user interaction and expected knowledge or skill. 
     Referring to  FIG. 6 , shown is detailed representation of components that may be included in an embodiment using the techniques herein. In at least one embodiment of the current technique, a host system connected to data storage system  12  may include one or more applications, and an API (application programming interface). The data storage system  12  may include a web server, disk storage  362 , and software executing thereon comprising a file system layer and a block storage layer. User interface  358  communicates with data storage system  12  and may include a GUI (graphical user interface) and/or a CLI (command line interface). Further, user interface  358  may either reside on the data storage system  12  or on a remote system coupled with data storage system  12 . The GUI interface may correspond to one type of UI represented by element  103  of  FIG. 4  and element  202  of  FIG. 5 . A user (e.g., a storage administrator)  360  may use user interface  358  for providing functionality as described herein such that the user may interact with the data storage system  12  in order to use application aware templates  356 . 
     The user interface  358  may communicate with the data storage system  12  in connection with a request such as to select and execute an application aware template for provisioning storage for a particular application. An application executing on the host may be, for example, an email application, a medical office application, a law office application, and the like. In at least one embodiment of the current technique, an application aware template may be created in a format such as XML text file which may include a set of configuration preferences such as rules (e.g., based on XML schema). It should be noted that an application aware template may be created in any one of the file formats such as but not limited to a text file, an XML file, a comma separated file, and a name value pair file). In at least one embodiment of the current technique, an application aware template may include configuration preferences such as storage configuration of LUNs, file systems and storage pools, and capabilities of storage pools. The configuration preferences describes best practices for a specific application for a set of operating system environments. For example, in at least one embodiment, a user may create and deploy application aware templates for each of the following use cases: 
     Microsoft® Exchange configuration for 50-500 users 
     Microsoft® Exchange configuration for 501-1,500 users 
     Microsoft® Exchange configuration for 1,501-5,000 users 
     In at least one embodiment of the current technique, in case a data storage system is upgraded to include an updated version of Microsoft® Exchange which requires a new set of best practices, a new set of application aware templates based on the new set of best practices may be created and used by users of the data storage system without having to upgrade a storage system software on the data storage system. In at least one embodiment of the current technique, user interface  358  includes a mechanism for uploading an application aware template  356  on data storage system  12 . The application aware template is then stored in a specific location within data storage system  12  such that the application aware template may not be edited or modified by the user. User  360  selects an application aware template from a set of application aware templates  356  and attempts to upload the application aware template by verifying whether configuration preferences included in the application aware template may be applied to data storage system  12  based on storage configuration policies of the data storage system  12 . Further, the data storage system  12  verifies whether sufficient amount of storage space is available in the data storage system  12  for provisioning storage space based on the configuration preferences of the application aware template. For example, if the maximum size of a file that may be created on the data storage system is 16 Terabytes (TB), an application aware template that includes a configuration preference indicating a request for provisioning storage space greater than 16 TB is found to be invalid. When an application aware template is validated by data storage system  12 , the application aware template is registered as available application aware template such that the application aware template is displayed via user interface  358  to user  360  for selection. Further, a set of application aware templates may be grouped together to create a package which may be provided via user interface  358  to data storage system  12 . Additionally, data storage system  12  may allow user  360  to modify configuration preferences of an application aware template by providing a set of parameters that are provided to the application aware template by the user. Further, it should be noted that a process that validates an application aware template may also include validation procedure associated with verifying checksums, and encrypting and/or decrypting the application aware template. 
     Thus, in at least one embodiment of the current technique, using application aware templates simplifies storage provisioning process for a user allowing the user to either upload existing application aware templates based on application best practices or create application aware templates based on application best practices used by the user that can be used repeatedly. Further, an application aware template may be created by any user such as storage vendors, storage administrators, and users of storage systems. Further, a user may respond quickly to new versions of applications by creating new application aware templates corresponding to the new versions of applications. 
     It should be noted that an application aware template may be provided to a user using any one of the known mechanism such as but not limited to an internet, an intranet, a website link, through ftp protocol, a HTTP protocol, and a flash drive. Further, a user may upload an application aware template by using a command line interface, a plug-in application, and/or a stand-alone application. Moreover, an application aware template may be uploaded using a remote system connected to data storage system  12  or using an user interface of data storage system  12 . 
     Referring to  FIG. 7 , shown is a flow diagram illustrating the method of using application aware templates in data storage systems. With reference also to  FIG. 6 , an application aware template describing best practices of an application is created (step  400 ). A user selects the application aware template for provisioning storage based on the best practices of the application (step  402 ). The application aware template is uploaded to data storage system  12  (step  404 ). The application aware template is executed by data storage system  12  such that storage space is configured based on configuration preferences (e.g., storage configuration rules) included in the application aware template (step  406 ). 
     Referring to  FIG. 8 , shown is an illustration of one of the many ways an application aware template may be selected by a user in data storage systems. Shown in  FIG. 8  is an example of snapshot  410  of a user interface of data storage system  12  indicating a list of available application aware templates that may be selected by a user. 
     Referring to  FIG. 9 , shown is an illustration of one of the many ways an application aware template may be provided to a user in data storage systems. Shown in  FIG. 9  is an example of snapshot  412  of a user interface of data storage system  12  indicating details of an application aware template selected by a user. 
     Referring to  FIG. 10 , shown is an illustration of one of the many ways an application aware template may be created in data storage systems. Shown in  FIG. 10  is an example of an application aware template  414  created for data storage system  12 . For example, the application aware template includes a set of rules, and a set of configuration preferences (such as hardware, software, storage) for Microsoft® Exchange 2003 application. 
     Referring to  FIG. 11 , shown is an illustration of one of the many ways an application aware template may be created in data storage systems. Shown in  FIG. 11  is an example of an application aware template  416  created for data storage system  12 . For example, the application aware template includes a set of configuration preferences (such as hardware, software, storage) for Microsoft® Exchange 2003 application that may support up to 500 users. 
     Referring to  FIG. 12 , shown is an illustration of one of the many ways an application aware template may be created in data storage systems. Shown in  FIG. 12  is an example of an application aware template  418  created for data storage system  12 . For example, the application aware template includes a set of configuration preferences (such as hardware, software, storage) for Microsoft® Exchange 2003 application. 
     While the invention has been disclosed in connection with preferred embodiments shown and described in detail, their modifications and improvements thereon will become readily apparent to those skilled in the art. Accordingly, the spirit and scope of the present invention should be limited only by the following claims.