Abstract:
A multi-tier cloud-metering framework for metering cloud resources is presented. The proposed framework is capable of relating metering indicator of distributed resources contributing to the same application and located at different architectural levels. Metering data is collected from the front-end, the cloud nodes and VMs, and propagated through the middle-tier of the metering architecture to be processed and stored at the back-end. The design of the metering framework adopts a service-oriented architecture which allow the processing of cloud metering objects CMOs using service processing over open web transport protocol. To be able to build the middle and back-end tier, a SOA based on IPIoE and BOSML is presented which allow full consolidation of cloud resources achieving scalability and reducing the amount of wasted resources due to cloud resources de-fragmentation.

Description:
PRIORITY CLAIM 
       [0001]    This application claims the benefit of U.S. Provisional Application Ser. No. 62/187,607, filed Jul. 1, 2015, the disclosure of which is incorporated herein by reference in its entirety. 
     
    
     TECHNICAL FIELD 
       [0002]    The subject matter herein generally relates to cloud computing metering systems, and more particularly, to methods, systems, and computer readable media for metering cloud computing systems according to a cloud metering framework and building virtual machines that span physical boundaries. 
       BACKGROUND 
       [0003]    A cloud environment, in its most general form, is like a market place. A distributed application owned by a single user can share different resources owned by different service providers, which are assigned to the user by the cloud middleware based on the application needs. A cloud application can utilize different resources at different architectural layers such as the hardware layer, the virtualization layer, and the application layer. As used in this document, a resource can be any shareable computing entity. A resource can be primitive or composite, where composite resources are built on other primitive or composite resources. For example, a virtual machine is a composite resource that is built up of CPUs, RAM, virtual disks, etc. 
         [0004]    Cloud users are being charged back for their resource usage based on flat rate time plans. The market competition influences the need for an accurate metering standard, such that users can be charged accurately for their usage. A cloud resource is being shared between different applications through multiplexing, and consequently the proposed framework should be capable of correlating an application&#39;s resource usage, and providing different metering granularity levels. 
       SUMMARY 
       [0005]    Methods, systems, and computer readable media for metering a cloud computing system are disclosed. In some examples, a method includes collecting, by a cloud metering system built using a cloud metering framework and implemented at least partially on one or more processors of the cloud computing system, resource usage data for each of a plurality of cloud computing applications executing on the cloud computing system. The method includes packaging, by the cloud metering system, the resource usage data into cloud metering objects (CMOs), each cloud metering object comprising the resource usage data and one or more operations for processing the resource usage data. The method includes correlating, by the cloud metering system, the cloud metering objects by grouping related cloud metering objects and creating a plurality of correlated cloud metering objects. The method includes metering, by the cloud metering system, the cloud computing applications using the correlated cloud metering objects. 
         [0006]    Methods, systems, and computer readable media for an operating system instance to view one or more cloud resources as local to the operating system instance are disclosed. In some examples, a method includes building, by a cross hypervisor executing the operating system instance and implemented on a cloud computing system comprising a plurality of processors and memory operatively connected by a data communications network for executing a plurality of cloud computing applications for providing software services, a virtual machine that spans across at least one physical boundary between two physical cloud nodes over the data communications network. The method includes starting, by the cross hypervisor, a respective hypervisor on each of the two physical cloud nodes that runs an operating system that adopts a service oriented architecture. The method includes sending, by the cross hypervisor, inter-processor interrupts over the data communications network to the hypervisors for one or more local cores of the two physical cloud nodes. 
         [0007]    The cross-hypervisor described in this document can be based on BOSML and IPIoE and, in some examples, can cater on many service oriented applications, for example, cloud metering. Cloud metering systems can be built using the cross hypervisor and the cross hypervisor can be used to build other service oriented applications. Also the framework can be implemented, in some examples, using traditional software components running on traditional operating systems and service oriented engines. In general, the cross hypervisor can be used in various kinds of distributed applications, and the BOSML OS is practically a distributed operating system that can serve many purposes. CMML can be extended to BOSML and the cross hypervisor can be used as an alternative for the metering framework implementation, in addition to other applications. 
         [0008]    The subject matter described in this specification may be implemented in hardware, software, firmware, or combinations of hardware, software and/or firmware. In some examples, the subject matter described in this specification may be implemented using a non-transitory computer readable medium storing computer executable instructions that when executed by one or more processors of a computer cause the computer to perform operations. Computer readable media suitable for implementing the subject matter described in this specification include non-transitory computer-readable media, such as disk memory devices, chip memory devices, programmable logic devices, random access memory (RAM), read only memory (ROM), optical read/write memory, cache memory, magnetic read/write memory, flash memory, and application specific integrated circuits. In addition, a computer readable medium that implements the subject matter described in this specification may be located on a single device or computing platform or may be distributed across multiple devices or computing platforms. 
     
    
     
       BRIEF DESCRIPTION OF THE DRAWINGS 
         [0009]    The subject matter described herein will now be explained with reference to the accompanying drawings of which: 
           [0010]      FIG. 1  is a block diagram of an example cloud computing system; 
           [0011]      FIGS. 2A-C  are block diagrams of example cloud metering systems; 
           [0012]      FIG. 3  is a block diagram illustrating example cloud metering objects; 
           [0013]      FIG. 4  is a block diagram of an example collection process implemented using a proc filesystem; 
           [0014]      FIG. 5  is a block diagram illustrating an example process for transporting collected resource usage data using netfilter hooks; 
           [0015]      FIG. 6  is a block diagram of an example cloud metering environment; 
           [0016]      FIG. 7  is a block diagram of an example cloud computing node; 
           [0017]      FIG. 8  is a block diagram of an example application executing on a cloud computing system; 
           [0018]      FIG. 9  is an abstract overview of the problem of de-fragmentation of cores in a cloud environment; 
           [0019]      FIG. 10  is a block diagram of an example cross hypervisor and multiple cloud nodes; 
           [0020]      FIG. 11  is a message diagram illustrating example packets of an IPIoE protocol; and 
           [0021]      FIG. 12  is a block diagram illustrating example IPIoE data structures. 
       
    
    
     DETAILED DESCRIPTION 
       [0022]      FIG. 1  is a block diagram of an example cloud computing system. Cloud environments are like a market place. A single distributed application owned by a single user can share different resources owned by different service providers. A cloud application can utilize different resources at different architectural layers, namely hardware, virtualization, and application layer. A resource can be primitive or composite, e.g. a virtual machine is a composite resource that is built up of a number of primitive resources such as CPUs, RAM, virtual disks, etc. 
         [0023]    Cloud users are being charged for their usage based on flat rate time plans. The market competition urges for accurate metering standards for charging users. A cloud resource is shared through multiplexing mechanisms, and the proposed framework is capable of correlating resources usage across different architectural layers, where by different metering abstraction levels can be achieved. 
         [0024]    Moreover, a mechanism for monitoring cloud resources usage based on predefined threshold should be in place to make sure on one hand that the target cloud application is getting the resources it needs, and on the other hand does not overuse or abuse such resources. The guarded Service Level Agreements (SLA) should be monitored in a way that actions should be taken upon their violations. 
         [0025]    The proposed framework is based on a modeling extensible Cloud Metering Markup Language (CMML) coupled with a scalable multi-tier architecture. Metering Model shareablity, as well as low overhead execution of metering engines running on the cloud resources are key features. 
         [0026]    Overview 
         [0027]    Cloud environments consolidate computing resources located in different architectural layers as shown in  FIG. 1 . The complexity of accurate metering arises from multiplexing cloud resources among different applications. Virtualization is another dimension of complexity resulting from unsynchronized virtual clocks, leading to inaccurate metering results from within a virtual machine. Correlating metering data generated from distributed virtual resources is a complex challenging task by nature. 
         [0028]      FIGS. 2A-C  are block diagrams of example cloud metering systems.  FIG. 2A  shows a metering architecture template.  FIG. 2B  shows the metering architecture template annotated with example implementation details, including CMML and a distributed proc filesystem.  FIG. 2C  shows the metering architecture template annotated with different implementation details, including BOSML instead of CMML. 
         [0029]      FIG. 2A  shows a typical three-tier metering architecture. Log collection takes place in the front-tier, where metering data incompatibility is experienced and needs to be unified. Metering data collected from different sources are correlated in the middle-tier. Metering data storage, billing, and SLA monitoring are considered back-end metering services. Interaction with the target cloud management middleware is essential for the metering engines to be able to retrieve vital information about the cloud resources to be metered. 
         [0030]    The metering process phases are log collection, unification, transportation, correlation, and back-end processing. Collection engines running on cloud service nodes extract and parse logs, and hence are the main source for probe effect. Data transport between collection engines and the correlation tier need to be optimized to reduce the probe effect on the cloud network resources. 
         [0031]    Features of the Cloud Metering Framework 
         [0032]    The complexity of consolidating cloud resource pools reflects on cloud metering. A resource can be a physical one such as CPU, RAM, disk, etc. or complex virtual resource built on top of more primitive resources. A resource can be a whole environment built up of virtual resources, such as virtual machines, networks, disks, etc. The target metering framework being sought should be able to provide metering perspectives at different levels of abstractions. 
         [0033]    Normalization challenges, of hybrid metering data formats, increases with larger resource pools. Ability to correlate different resource usage with their different distributed running cloud applications is an even more insisting problem. Moreover, ability to collect metering data from cloud resources in a seamless and low overhead manner is another dimension of the problem, as it might affect the quality of the running cloud services. 
         [0034]    The following points summarize the set of features and requirements in the target cloud metering framework: 
         [0035]    1) Extensible Representation: Ease of interpretation and shareability between federated clouds. 
         [0036]    2) Autonomous Metering Data: Coupling metering data with their corresponding operations. 
         [0037]    3) Correlation Capabilities: Correlation of metering data extracted from different architectural layers. 
         [0038]    4) Programmability: Flexibility of defining metering constructs through writing code. 
         [0039]    5) Standard Metering Transport: Transporting metering data over simple standard APIs. 
         [0040]    6) Elastic Multi-Tier Architecture: Can scale with the metering needs. 
         [0041]    7) Metering Services Redundancy: The framework should allow the ease of executing redundant parallel metering tracks that can represent the needed infrastructure upon which fault tolerance mechanisms and solution can be constructed and implemented. 
         [0042]    8) Online Metering: The over all End-To-End metering process should adopts a bubble up accumulative processing approach that process the metering data in different metering stages (collection, correlation, storage, billing, SLA, etc.) and provide the final results in a responsive time very close to real time. 
         [0043]    9) Low Probe Effect: the running cloud services should be minimally affected in the worst case by the execution of the collection probes and the transport layer; hence low over head techniques of the collection engines as well as low overhead transport protocol and mechanisms should be adopted whenever the target cloud resources are involved; mainly between front and middle tiers. 
         [0044]    10) Ease of integration: The framework instances should be easily integrated with cloud middleware as well as third-party systems. Thus extensible web services running on top of standard communication and application protocols should be adopted (e.g. REST/HTTP on top of TCP). 
         [0045]    Metering Framework 
         [0046]    The metering framework is based on an extensible metering markup modeling language coupled with a multi-tier scalable architecture. This document describes a set of specifications for cloud metering that act as guidelines and standards to build different cloud metering systems based on the target cloud environment. 
         [0047]    The extensible object oriented Cloud Metering Markup Language (CMML) is proposed to represent metering data across the framework, through which the concept of autonomous Cloud Metering Objects (CMOs) can be realized. CMOs are autonomous, extensible objects that are self contained and mobile allowing for their migration smoothly and seamlessly. CMOs adopt object oriented representation and execute in a distributed object model that is based on service state migration where by serialization and deserialization mechanisms are adopted to move the objects over a cloud metering transport layer. Through the CMO concept, metering is performed via a modeling approach that not only models data but also models the operations to be executed on the data. In that sense CMOs are shareable objects that can be transferred between different environment and interpreted by different engines. 
         [0048]    The adopted object oriented model is super imposed over an extensible markup data representation for maximum shareability. Metering data, represented by OO class data members, are coupled with their operations represented by OO class methods. The OO model is further extended with built-in receptors encapsulating routing information within the CMO to enable it to navigate between different framework engines autonomously using self contained information. The concept of CMOs eliminated the usage of passive metering data through operation definition annotations. 
         [0049]      FIG. 3  is a block diagram illustrating example cloud metering objects. A three-tier architecture is adopted, where each tier can be decomposed into sub-tiers based on the target functionality of the metering.  FIG. 3  gives an overview of the whole metering framework architecture together with the main metering engines. The cloud environment is considered the metering framework front-end where the metering collection engines are deployed close to their target resources. The collection engines collect raw metering traces and convert them to collection CMOs. Correlation engines are deployed in the middle-tier where related CMOs are correlated and correlation CMOs are generated. The correlation CMOs are sent to the back-end services for further long term processing. All metering engines across the metering architecture should be able to interpret CMOs represented in CMML. Consequently, a CMML interpreter should be deployed to provide a vital living environment for CMOs. 
         [0050]    One of the main roles of a cloud middleware is to maintain a resource inventory, and hence a cloud metering extension plug-in is expected to be integrated with the cloud middleware to generate metering CMML scripts, based on resource types and relations, to be downloaded and executed by different engines. The Cloud Metering Engine (CME) is a centralized service, and a metering extension to the cloud middleware, used by all metering engines as shown in  FIG. 1 . 
         [0051]    CMML is a markup language with functional capabilities. A CMML tag is a construct that executes corresponding logic by a target CMML interpreter. Two mandatory tags need to exist in a CMML script, namely CMMLScript and CMMLMain. The CMMLScript tag encloses the whole script body, and the CMMLMain tag identifies the main entry point for the script execution. A CMML tag can be invoked by name via its “Name” sub-tag. The CMMLRoutine tag is used to defined routines to support modular programming. Concurrency is built at the core of the language. The “Thread” tag is used to activate tags execution as threads, and can define threads affinity configuration upon needs. 
         [0052]    Example Set Notation 
         [0053]    The following section sets forth an example set notation coupled with regular expressions to define syntactical aspects of the language. The example set notation can be used, for example, to guide a development team to build a CMML interpreter to be compliant with the syntax and the semantics of the language. 
         [0054]    Let us first define some primitive sets that we will use in our representation. 
         [0055]    Listing 5.21: Primitive Sets 
         [0056]    lc=[a z] The set of all lower case characters 
         [0057]    uc=[′A Z] The set of all upper case characters 
         [0058]    dig=[0 9] The set of all digits 
         [0059]    pascii=[′″˜′] The set of all printable ASCII character from ASCII(32) to ASCII (126) 
         [0060]    CMML has a basic set of predefined CMML tags, which are the minimum set of tags and tag values that need to be supported for a CMML script to be able to execute correctly. 
         [0061]    Listing 5.22: Predefined CMML Tags 
         [0062]    CMMLScriptTag={“CMMLScript”} 
         [0063]    CMMLMainTag={“CMMLMain”} 
         [0064]    CMMLReservedTags={“CMMLRoutine”,“CMMLInclude”,“CMMLRemotelnclude”, “CMMLClass”,“CMMLObject”, “Exec”} 
         [0065]    CMMLInternalTags={“Subject”,“Value”,“Name”} 
         [0066]    DataTypes={integer,boolean,double,float,long,string,CMMLObject,numeric} 
         [0067]    Visibility={Public,Private} 
         [0068]    Boolean={True, False} 
         [0069]    A CMML Script is defined based on CMML tags that enclose both data and operational logic. A CMML tag is a tag whose name should start with “CMML” and is a maximum of 80 characters. A CMML tag has the following formal definition. 
         [0070]    Listing 5.23: CMML Service Tag Name 
         [0071]    CSTN: CMML Service Tag Name 
         [0072]    CSTN={s|s is a string such that s ε“CMML”(lc|uc)n and n&gt;0 and n&lt;=76 and s ∉ CMMLScriptTag ∪ CMMLMainTag ∪ CMMLReservedTags} 
         [0073]    For the sake of simplicity and encapsulation, we will define a set of functions that return sets of entities that we will refer to in our subsequent definitions. 
         [0074]    Listing 5.24: Set Functions 
         [0075]    MethodNames(β)=The set of method names of the CMML Object β or CMML Class β based on the context 
         [0076]    MethodParameters(β,δ)=The set of parameter names of the method δ of the CMML Object β or CMML Class β based on the context 
         [0077]    DataMembers(β)=The set of data member names of the CMML Object β or CMML Class β based on the context 
         [0078]    We then define the sets of tags following common patterns and that we will refer to in the definition of more complex tags. 
         [0079]    Listing 5.25: CMML Different Tag Types Definitions 
         [0080]    GT: General Tag 
         [0081]    GT={s|s is a string such that s ε(lc|uc)n where n&gt;0 and n&lt;=80 } 
         [0082]    STR: Simple Tag Record 
         [0083]    STR={s|s is a string such that s ε“&lt;”β“&gt;”pascii + “&lt;/”β“&gt;” and 8 E GT} 
         [0084]    CTR: Composite Tag Record 
         [0085]    CTR={s|s is a string such that s ε“&lt;”β“&gt;&lt;Name&gt;”δ“&lt;/Name&gt;”(CTR|STR) + “&lt;/”β“&gt;” 
         [0086]    and β εGT and δ ∉ TagNames, and δ will be added to TagNames after successful declaration} 
         [0087]    CSR: CMML Service Record 
         [0088]    CSR={s|s is a string such that s ε“&lt;”β“&gt;”(STR|CTR) + “&lt;/”β“&gt;” and β εCSTN} 
         [0089]    The CMML language is an extendable language in the sense that it can be extended by adding new tags to it. Within our scope we will not be able to define each and every CMML tag currently in the language as they follow the operational definition behind the need of their functionality; a tag is added for a specific functionality whose need arises due to its absence. So a special set notation definition can be constructed as per CMML tag, but the most important matter is that it needs to be a subset of the general definition of the CSR tag defined above; CMML Service Record. For that, we will choose a set of complex fundamental CMML tags and present their set notation specification, and other CMML tag definitions can follow the same line of definition. 
         [0090]    The Exec Tag: 
         [0091]    The Exec tag is a special fundamental tag that is used to invoke any tag that is declared in the current CMML Script by name. 
         [0092]    Listing 5.26: CMML Exec Tag 
         [0093]    Exec={s|s is a string where 
         [0094]    s ε“&lt;Exec&gt;”(β|CSR)“&lt;/Exec&gt;” and β εTagNames} 
         [0095]    The CMMLMain Tag: The CMMLMain tag is located inside the CMMLScipt tag only once and it designates the starting point of execution of the script. 
         [0096]    Listing 5.27: CMML Main Record 
         [0097]    CMR: CMML Main Record 
         [0098]    CMR={s|s is a string such that s ε“&lt;”/β“&gt;”(CSR ∪ EXEC)* “&lt;/”β“&gt;”and β εCMMLMainTag} 
         [0099]    The CMMLScript Tag: The CMMLScript tag is the main tag that defines a CMML script and it encloses all the CMML tags in the CMML script. It essentially needs the CMMLMain tag to be defined some where to designate the starting point of the execution of the program. 
         [0100]    Listing 5.28: CMML Script Record 
         [0101]    CSCR: CMML Script Record CSCR={s|s is a string where s ε“&lt;”β“&gt;”(CSR|CMMLClass)* CMR “&lt;/”β“&gt;” and β εCMMLScriptTag } 
         [0102]    The CMMLCIass Tag: The CMMLCIass tag is the most complex tag in the language as it defines an object oriented class. The CMMLCIass tag encloses all the class definitions including data members, methods, and metering constructs. 
         [0103]    Listing 5.29: CMMLClass tag Definition 
         [0000]    
       
         
               
               
             
           
               
                   
                   
               
             
             
               
                   
                 CMMLClass = { s | s is a string such that 
               
               
                   
                 s ∈ “&lt;CMMLClass&gt; 
               
               
                   
                 &lt;Name&gt;“σ”&lt;/Name&gt;” 
               
               
                   
                 (ε |“&lt;FlattenedName&gt;“μ”&lt;/FlattenedName&gt;”) 
               
               
                   
                 “&lt;DataMembers&gt;” 
               
               
                   
                 (ε |“&lt;DataMember&gt;” 
               
               
                   
                 “&lt;Name&gt;“δ”&lt;/Name&gt;” 
               
               
                   
                 &lt;Visibility&gt;“β”&lt;/Visibility&gt;” 
               
               
                   
                 &lt;Type&gt;“κ”&lt;/Type&gt;” 
               
               
                   
                 “&lt;Exportable&gt;“λ”&lt;/Exportable&gt;” 
               
               
                   
                 “&lt;Sync&gt;“ζ”&lt;/Sync&gt;” 
               
               
                   
                 “&lt;Billing&gt;“ζ”&lt;/Billing&gt;” 
               
               
                   
                 “&lt;SLA&gt;“ζ”&lt;/SLA&gt;” 
               
               
                   
                 “&lt;Size&gt;“dig+”&lt;/Size&gt;” 
               
               
                   
                 (ε |“&lt;FetchScopes&gt;” 
               
               
                   
                 (“&lt;FetchScope&gt;“pascii + ”&lt;/FetchScope&gt;”) +   
               
               
                   
                 &lt;/FetchScopes&gt;”)*)* 
               
               
                   
                 “&lt;/DataMembers&gt;” 
               
               
                   
                 “&lt;Collect&gt;“(CSR ∪ Exec)*”&lt;/Collect&gt;” 
               
               
                   
                 “&lt;Correlate&gt;“(CSR ∪ Exec)*”&lt;/Correlate&gt;” 
               
               
                   
                 “&lt;Bill&gt;“(CSR ∪ Exec)*”&lt;/Bill&gt;” 
               
               
                   
                 “&lt;SLA&gt;“(CSR ∪ Exec)*”&lt;/SLA&gt;” 
               
               
                   
                 “&lt;Methods&gt;” 
               
               
                   
                 (“&lt;Method&gt;” 
               
               
                   
                 “&lt;Name&gt;“ω”&lt;/Name&gt;” 
               
               
                   
                 (ε | “&lt;Parameters&gt;” 
               
               
                   
                 (“&lt;Parameter&gt; 
               
               
                   
                 &lt;Name&gt;“φ”&lt;/Name&gt; 
               
               
                   
                 &lt;Type&gt;“ζ”&lt;/Type&gt; 
               
               
                   
                 &lt;/Parameter&gt;”) +   
               
               
                   
                 “&lt;/Parameters&gt;”) 
               
               
                   
                 “&lt;Body&gt;” 
               
               
                   
                 “&lt;CMML&gt;“(CSR ∪ Exec)*”&lt;/CMML&gt;” 
               
               
                   
                 “&lt;/Body&gt;” 
               
               
                   
                 “&lt;/Method&gt;”)* 
               
               
                   
                 “&lt;/Methods&gt;” 
               
               
                   
                 “&lt;/CMMLClass&gt;” 
               
               
                   
                 and σ ∈ pascii +  and σ ∉ TagNames 
               
               
                   
                 and μ ∈ pascii +  and μ ∉ TagNames ∪ {σ} 
               
               
                   
                 and δ ∈ pascii +  and δ ∉ DataMembers(σ) 
               
               
                   
                 and β ∈ Visibility and κ ∈ DataTypes 
               
               
                   
                 and λ ∈ Boolean and ζ ∈ Boolean 
               
               
                   
                 and δ ∈ pascii +  and δ ∉ DataMembers(σ) 
               
               
                   
                 and ω ∈ pascii +  and ω ∉ MethodNames(σ) 
               
               
                   
                 and φ ∈ pascii +  and φ ∉ MethodParameters(σ,ω) 
               
               
                   
                 and ζ ∈ DataTypes} 
               
               
                   
                   
               
             
          
         
       
     
         [0104]    The CMMLExecuteMethod Tag: The CMMLExecuteMethodTag is responsible for invoking a method from an instantiated object in the runtime environment of the current script. 
         [0105]    Listing 5.30: CMMLExecuteMethod Tag Definition 
         [0000]    
       
         
               
               
             
           
               
                   
                   
               
             
             
               
                   
                 CMMLExecuteMethod = { s | s is a string where 
               
               
                   
                 s ∈ “&lt;CMMLExecuteMethod&gt; 
               
               
                   
                 &lt;CMMLObject&gt;“pascii + ”&lt;/CMMLObject&gt; 
               
               
                   
                 &lt;CMMLObjectMethod&gt;“pascii + ”&lt;/CMMLObjectMethod&gt;” 
               
               
                   
                 ( ε | “&lt;Parameters&gt;” 
               
               
                   
                 (“&lt;Parameter&gt; 
               
               
                   
                 &lt;Name&gt;“pascii + ”&lt;/Name&gt; 
               
               
                   
                 &lt;Value&gt;“pascii + ”&lt;/Value&gt; 
               
               
                   
                 &lt;/Parameter&gt;”)* 
               
               
                   
                 “&lt;/Parameters&gt;”) 
               
               
                   
                 “&lt;/CMMLExecuteMethod&gt;” } 
               
               
                   
                   
               
             
          
         
       
     
         [0106]    The rest of the tags can be derived from using the same set notation scheme. 
         [0107]    The BOSML language can be derived from the set notation specifications by replacing the “CMML” prefix token in all the set derivation rules with the prefix token “BOSML”. This can be applied generically with any language other future extension language that preserve the same characteristics of the main CMML language to solve other problems than metering, for example, an extensible markup distributed object oriented executional language. Conventional programming languages lack the combination of all of these characteristics. 
         [0108]    Example Scripts 
         [0109]    Listing 1 presents a “Hello World” CMML Script that demonstrates the basic features of the language. This script should print “Hello World” twice, through invoking the CMMLRoutine and the CMMLOut tag by name. Notice that the two “Exec” calls will run in parallel as the routine thread tag has the “Thread” sub-tag enabled. 
         [0000]    
       
         
               
               
               
             
               
               
               
             
               
               
               
             
               
               
               
             
               
               
               
             
               
               
               
             
               
               
               
             
               
               
               
             
               
               
               
             
               
               
               
             
               
               
               
             
           
               
                   
                   
               
             
             
               
                   
                  1 
                 &lt;CMMLScript&gt; 
               
             
          
           
               
                   
                  2 
                 &lt;CMMLRoutine&gt; 
               
             
          
           
               
                   
                  3 
                 &lt;Name&gt;PRINT HELLO WORLD&lt;/Name&gt; 
               
               
                   
                  4 
                 &lt;Thread&gt;TRUE&lt;/Thread&gt; 
               
               
                   
                  5 
                 &lt;CMMLOut&gt; 
               
             
          
           
               
                   
                  6 
                 &lt;Name&gt;HELLO WORLD&lt;/Name&gt; 
               
               
                   
                  7 
                 &lt;Subject&gt;Hello World !!&lt;/Subject&gt; 
               
               
                   
                  8 
                 &lt;Target&gt; 
               
             
          
           
               
                   
                  9 
                 &lt;PipeTo&gt;STDOUT&lt;/PipeTo&gt; 
               
             
          
           
               
                   
                 10 
                 &lt;/Target&gt; 
               
             
          
           
               
                   
                 11 
                 &lt;/CMMLOut&gt; 
               
             
          
           
               
                   
                 12 
                 &lt;/CMMLRoutine&gt; 
               
               
                   
                 13 
                 &lt;CMMLMain&gt; 
               
             
          
           
               
                   
                 14 
                 &lt;Exec&gt;PRINT HELLO WORLD&lt;/Exec&gt; 
               
               
                   
                 15 
                 &lt;Exec&gt;HELLO WORLD&lt;/Exec&gt; 
               
             
          
           
               
                   
                 16 
                 &lt;/CMMLMain&gt; 
               
             
          
           
               
                   
                 17 
                 &lt;/CMMLScript&gt; 
               
               
                   
                   
               
             
          
         
       
     
       Listing 1: CMML Hello World Script 
       [0110]    The CMML language supports object oriented capabilities. Listing 2 shows a simplified CMML class definition for collecting VM CPU data. Each class has a name, set of data members, and set of methods. The CMML object model is extended to support metering constructs. A set of tags are defined in the class definition to hold CMML logic that can execute at different stages of the metering processing, namely “Collect”, “Correlate”, “Bill”, and “SLA”. Each tag is executed by a metering engine based on the location of the CMO at the time of execution. Each CMML object can be executed as a thread through invoking the built-in predefined implicit method “start” which invokes the CMML class “Collect” tag, implicitly. 
         [0000]    
       
         
               
               
             
               
               
             
               
               
             
               
               
             
               
               
             
               
               
             
               
               
             
               
               
             
               
               
             
               
               
             
               
               
             
               
               
             
               
               
             
               
               
             
               
               
             
               
               
             
               
               
             
               
               
             
               
               
             
               
               
             
               
               
             
           
               
                   
               
             
             
               
                  1 
                 &lt;CMMLClass&gt; 
               
             
          
           
               
                  2 
                 &lt;Name&gt;VMCPUStat&lt;/Name&gt; 
               
               
                  3 
                 &lt;DataMembers&gt; 
               
             
          
           
               
                  4 
                 &lt;DataMember&gt; 
               
             
          
           
               
                  5 
                 &lt;Name&gt;VMName&lt;/Name&gt; 
               
               
                  6 
                 &lt;Visibility&gt;PRIVATE&lt;/Visibility&gt; 
               
               
                  7 
                 &lt;Type&gt;string&lt;/Type&gt; 
               
               
                  8 
                 &lt;Exportable&gt;true&lt;/Exportable&gt; 
               
             
          
           
               
                  9 
                 &lt;/DataMember&gt; 
               
               
                 10 
                 &lt;DataMember&gt; 
               
             
          
           
               
                 11 
                 &lt;Name&gt;cpustat&lt;/Name&gt; 
               
               
                 12 
                 &lt;Visibility&gt;PRIVATE&lt;/Visibility&gt; 
               
               
                 13 
                 &lt;Type&gt;integer&lt;/Type&gt; 
               
               
                 14 
                 &lt;Exportable&gt;true&lt;/Exportable&gt; 
               
             
          
           
               
                 15 
                 &lt;/DataMember&gt; 
               
             
          
           
               
                 16 
                 &lt;DataMembers&gt; 
               
               
                 17 
                 &lt;Collect&gt; 
               
             
          
           
               
                 18 
                 &lt;NextCollectionDelay&gt;2&lt;/NextCollectionDelay&gt; &lt;!-- Sleep 
               
               
                   
                 2 Seconds --&gt; 
               
               
                 19 
                 &lt;Iterations&gt;0&lt;/Iterations&gt; &lt;!-- Runs for ever--&gt; 
               
               
                 20 
                 ....... 
               
               
                 21 
                 &lt;CMMLObjectXMLalize&gt; 
               
             
          
           
               
                 22 
                 &lt;CMMLObject&gt;this&lt;/CMMLObject&gt; 
               
               
                 23 
                 &lt;RedirectTo&gt; 
               
             
          
           
               
                 24 
                 &lt;PipeTo&gt;FILE&lt;/PipeTo&gt; 
               
               
                 25 
                 &lt;PipeName&gt;/dev/CloudMeterDev0&lt;/PipeName&gt; 
               
             
          
           
               
                 26 
                 &lt;/RedirectTo&gt; 
               
             
          
           
               
                 27 
                 &lt;/CMMLObjectXMLalize&gt; 
               
             
          
           
               
                 28 
                 &lt;/Collect&gt; 
               
               
                 29 
                 &lt;Correlate&gt; ..... &lt;/Correlate&gt; 
               
               
                 30 
                 &lt;Billing&gt; ..... &lt;/Billing&gt; 
               
               
                 31 
                 &lt;SLA&gt;.....&lt;/SLA&gt; 
               
               
                 32 
                 &lt;Methods&gt; 
               
             
          
           
               
                 33 
                 ..... 
               
               
                 34 
                 &lt;Method&gt; 
               
             
          
           
               
                 35 
                 &lt;Name&gt;GetCPUStats&lt;/Name&gt; 
               
               
                 36 
                 &lt;Body&gt; 
               
             
          
           
               
                 37 
                 &lt;CMML&gt;.....&lt;/CMML&gt; 
               
             
          
           
               
                 38 
                 &lt;/Body&gt; 
               
             
          
           
               
                 39 
                 &lt;/Method&gt; 
               
             
          
           
               
                 40 
                 &lt;/Methods&gt; 
               
             
          
           
               
                 41 
                 &lt;/CMMLClass&gt; 
               
               
                   
               
             
          
         
       
     
       Listing 2: VMCPUStat Class Definition 
       [0111]    The CMML Object Model is extended to a Distributed Object Model based on service state migration. Special CMML built-in serialization tags are supported, namely “CMMLObjectXMALalize” and “CMMLObjectCMMLalize”. The adopted mode of operation is that CMOs are suspended and serialized via the “CMMLObjectXMALalize” tag, as in listing 2, sent over the network to another metering engine, restarted into the destination CMML runtime environment via “CMMLObjectCMMLalize”, and resumed via the CMML tag corresponding to the destination. 
         [0112]    Transport Layer 
         [0113]    The framework specifications mandate that the communication between the collection engines and the middle-tier should be carried out over standard filesystem I/O operations. Collection engines runs on cloud nodes with diversified specifications and a simple and primitive data transfer mechanism available on most operating systems is needed. This will give the implementation freedom for the transport layer to range from a simple file transfer to a sophisticated distributed filesystem. 
         [0114]    A REST/HTTP web service protocol is adopted between the correlation engines and the back-end services, as well as between the framework engines and services deployed outside the framework. This allows for a standardized communication, and decouples the metering services execution from the communication operations. The REST protocol is a very primitive web service protocol that gives a lot of implementation flexibility and provides the freedom of superimposing more complex protocols like SOAP, or XMLRPC based on the needs. 
         [0115]    Metering Engines 
         [0116]    Collection engines instantiate objects of classes downloaded from the CME and represent resources to be metered. The “Collect” Tag enclosing the data collection logic is invoked in detached threads. As per listing 2, the The “NextCollectionDelay” represents the inter-collect-gap in seconds between every execution of the “Collect” tag body. The “Iterations” define the number of times the “Collect” tag body should be executed before the CMML object thread terminates, with zero indicating an endless run. The “Collect” tag logic should perform collection, preprocessing, CMO serialization, and injection into the transport layer. 
         [0117]    The CMML classes are downloaded from the CME and instantiated by the correlation server CML runtime environment. All resource classes are aggregated into wrapper objects that group related resources. The correlation engines read serialized CMOs via filesystem I/O operations. The receptors of each CMO is extracted and the target correlation engine CMML objects are identified. The CMO is then deserialized, started, and passed to the target correlation engine objects as a parameter upon invoking the “Correlate” tag. After correlating all CMOs, the resulting Correlation CMOs are sent to the back-end services over REST/HTTP. The correlation tier can be decomposed into hierarchical sub-tiers where by different processing stages can be defined and established to represent different correlation abstraction layers, and hence different metering perspectives. 
         [0118]    Correlation engines perform Data and time correlation. Based on the CMOs receptor definitions, related CMOs are grouped and data correlation is achieved. The time correlation is based on the existence of a virtual clock across the framework, and the mechanism for implementing it is left to be decided on at implementation time. The following are two time related correlation mechanisms adopted by the framework specifications. 
         [0119]    Adhoc Correlation: CMOs are considered related if they arrive at the correlation engine in the same time frame. This mode of operation is very light weight and does not need a lot of metering computing resources. This mode should only be used when commutative usage evaluation is needed, or when monitoring specific thresholds of the cloud services usage. 
         [0120]    Epoch-Based Correlation: CMOs are timestamped grouped in time epochs with preconfigured length. CMOs belonging to the same time epoch are correlated together and the resulting correlation CMOs are stamped by the start and end timestamps of the epoch. A crucial performance problem is encountered when the rate of collection CMOs is higher than the processing rate. This might hinder the stability and the responsiveness of the correlation environment, and consequently two runtime configurations are constructed to overcome this situation: 
         [0121]    1: Exact: The correlation process is terminated if it exceeds the duration of the corresponding epoch. This case can be used if the CMOs represent commutative metering and detailed break down of the metering indicators is not important, e.g. CPU time from the proc filesystem which represents the time of a process since it started. 
         [0122]    2: Adaptive: A feedback mechanism between the correlation engines and the CME should be in place for reporting the percentage of CMOs processed post the correlation duration. The CME should automatically change the inter-collect-gaps represented by the “NextCollectionDelay” at runtime to reduce the CMOs generation rate. This process should be performed iteratively until equilibrium is reached. 
         [0123]    The storage engines are back-end services deployed on storage servers. A storage server receives its corresponding storage engine definitions from the CME. The storage servers receive correlation CMOs and store them into corresponding storage engines based on the receptors definition. 
         [0124]    The billing engines are back-end services deployed on billing servers. A billing server receives correlation CMOs based on their receptors and execute the logic enclosed in their “Bill” tag. The billing operations generate billing CMOs that are stored in special billing storage engines. 
         [0125]    The SLA engines are back-end services deployed on SLA servers. A 
         [0126]    SLA server receives correlation CMOs based on their receptors and execute the logic enclosed in their “SLA” tag, which should contain actions that need to be executed based on usage threshold that are represented by the CMO data members. 
         [0127]    The back-end services illustrated are presented for purposes of illustration. The systems can include more or fewer back-end services based on the metering requirements of the system. The scalable power of the framework specifications allows adding special tags for each newly introduced back-end service to enclose the logic that will be executed on its corresponding engine. 
         [0128]    Example Metering Framework Prototype 
         [0129]    A prototype is presented in this section to demonstrate the applicability of the proposed framework. The presented prototype is just one possible implementation of the framework, and others can be achieved following the framework specifications. 
         [0130]    Prototype Components 
         [0131]    CMML Interpreter 
         [0132]    A CMML interpreter is built on top of an extendable C++ framework. The abstract class CMMLService needs to be inherited by each CMML tag class. The CMMLService encapsulates all the threading and common functionalities needed by a CMML tag, and the CMML tag implementation includes only the business logic. Each CMML tag is compiled into a dynamic shared loadable module which has specific interfaces to be invoked by the interpreter. 
         [0133]    Distributed Proc Filesystem The proposed transport layer is based mainly on extending the UNIX proc filesystem for communication between the front and middle tiers. The transport layer prototype is implemented under LINUX OS, yet the concept adopted can apply to any standard UNIX environment. The transport layer adopts a client/server communication model. Collection engines are at the server side and the correlation nodes are the clients. The cloud service nodes and the cloud virtual machines deploy a character device kernel module extension used as a filesystem interface for collection engines to inject their serialized CMOs. The character devices act as a kernel buffer queue for CMOs to be transported over the network. 
         [0134]    The cloud metering correlation nodes host the transport layer client side which is a proc filesystem kernel module extension. Two proc directories are created, one for physical nodes and the other for virtual machines. Character devices can register on one or more correlation nodes. Upon registering, the kernel extension creates a proc file entry under one of the two folders based on the type of the node. The proc file entry is named using the node network address. 
         [0135]    Upon reading a proc file entry the content of the corresponding character device is transferred over network. Both kernel modules have a netfilter hook activated which handles the communication which is based on packet reorder and group packets acknowledgement. This allows the correlation nodes to read metering data transparently through standard 
         [0136]    POSIX filesystem I/O operations. The whole communication transport layer resides inside the kernel space. Overheads are being avoided through intercepting the network packets at the IP network layer 3.  FIG. 4  illustrates the transport workflow. 
         [0137]    Netfilter hooks extension mechanism for the Linux Kernel built-in firewall, allows for adding custom code for packet interception, inspection, and manipulation.  FIG. 5  shows the five main available hooks that are located at different stages of packet processing for adding custom code. 
         [0138]    Request and reply packets will be intercepted based on the port numbers in the IN —  IP —  PRE —  ROUTING stage. There are no userland processes acquiring the interception ports, and hence such ports are considered pseudo ports for packet identification by the netfilter hooks. This will decrease the communication overhead, and will ease the network operation and packets manipulation within the kernel space. 
         [0139]    The biggest challenge in using netfilter hooks can be that the hooked code is invoked by an interrupt, during which network I/O operations are disallowed. Consequently, kernel work queues are used for deferred I/O task execution. Although this mechanism solves the problem, yet it imposes synchronization complexity where the main thread of execution will not be aware when the I/O operation is finished. 
         [0140]    Cloudsparc: Cloud Management Middleware 
         [0141]    Cloudsparc is an example laaS cloud management middleware built on top of an extendable C++ framework. Cloudsparc supports hybrid hypervisor technologies, namely QEMU/KVM, Oracle VirtualBox, and VMWare VMPlayer. Cloudsparc manages a cluster of physical nodes representing the cloud resources pool. Cloudsparc nodes are either master or slave. Master nodes are responsible of managing the cloud configuration, maintain resources inventory, manage slave nodes, and run cloud services in the form of virtual machines. Slave nodes are responsible only for running cloud services. 
         [0142]    A VM template manager is available allowing the creation of VM Profiles with different virtual machine specifications for streamlining the creation and the dispatching of VMs. Cloudsparc is designed to provide control over virtual machine dispatching, ranging from fully automated virtual machine scheduling to the ability of assigning specific virtual machines to specific physical nodes. Cloudsparc allows creating virtual architectures designed for building perspectives of the available resources. A virtual architecture is a grouping mechanism that allows grouping multiple VM profiles and all their dispatched virtual machines can be seen as one processing unit irrespective of their locations. 
         [0143]    Cloud Metering Extension 
         [0144]    Cloudsparc is extended to support metering through the integration of a CME plugin built up of three main extensions: 
         [0145]    Cloudsparc Inventory Extension: The resources inventory is extended for adding definitions of correlation, storage, billing, and SLA servers. Different resource usage price lists and threshold limits can be defined and linked to billing and SLA engines respectively. 
         [0146]    Cloudsparc Metering Plugins: The VM Profile is extended to include a metering plugin data structure. A metering plugin is designed to meter a specific cloud resource, e.g. CPU, Memory, I/O, Network usage, or even an application. Correlation engines responsible, are defined in the metering plugin, as well as storage engines responsible for storing raw CMOs, if needed. Metering plugins are designed to run on physical nodes as well as from within a virtual machine. 
         [0147]    Cloudsparc Correlation Plugins: A correlation plugin defines a correlation engine and the correlation server it should reside on. Storage, 
         [0148]    Billing, SLA severs, price lists, and SLA thresholds are defined for processing correlation CMOs. Redundant definition of back-end servers is adopted to achieve redundant metering processing paths, where by the needed infrastructure for fault tolerance is established. Two types of correlation plugins are available, namely metering domes and correlation plugins. Metering domes can group different correlation plugins which provides a second level aggregated metering perspective. Correlation plugins are designed to correlate metering data coming from virtual machines which belong to either a virtual architecture or a VM profile. 
         [0149]    As per the diagram in  FIG. 2  the CME is a centralized service maintained by the cloud middleware and having access to the cloud resources inventory, relation between different resources, and metering configurations to be applied. The CME is invoked by all metering engines upon their startup to download corresponding CMML metering scripts, and periodically during their execution to check for updates and changes in metering configuration. A set of CMML template classes designed to meter different resources are used by the CME to generate CMML scripts on the fly upon metering engine invocations. The CME is also responsible for providing time information via a modified version of Berkeley&#39;s Algorithm to establish a distributed common virtual clock. 
         [0150]    The collection engine starts with a seeder CMML script as in listing 3 to connect and download the metering CMML script from the CME. The powerful tag, CMMLRemotelnclude, is used to initiate a REST/HTTP request to the CME with parameters identifying the nature of the request. The CME identifies the invoking collection engine from the network connection parameters, and the “SECONDARY ACTION” parameter, and prepares the corresponding CMML script based on its inventory and the metering configuration. The generated CMML script is loaded instantly into the interpreter runtime environment. The generated CMML classes are responsible for metering the resources on the corresponding node, either physical or virtual. The downloaded CMML script contains CMML constructs to start the collection engine&#39;s character devices loadable module. The character device registers itself on one or more correlation server&#39;s distributed proc file system, based on the CMML script, for fault tolerance purposes. 
         [0000]    
       
         
               
               
             
               
               
             
               
               
             
               
               
             
               
               
             
               
               
             
               
               
             
               
               
             
               
               
             
               
               
             
               
               
             
           
               
                   
               
             
             
               
                  1 
                 &lt;CMMLRemoteInclude&gt; 
               
             
          
           
               
                  2 
                 &lt;Server&gt;[#CME_IP_ADDRESS#]&lt;/Server&gt; 
               
               
                  3 
                 &lt;Port&gt;9999&lt;/Port&gt; 
               
               
                  4 
                 &lt;Method&gt;POST&lt;/Method&gt; 
               
               
                  5 
                 &lt;ServiceName&gt;/FetchMeteringCMMLScript.cgi&lt;/ServiceName&gt; 
               
               
                  6 
                 &lt;Fields&gt; 
               
             
          
           
               
                  7 
                 &lt;xml_request&gt; 
               
             
          
           
               
                  8 
                 &lt;Cloud&gt; 
               
             
          
           
               
                  9 
                 &lt;FetchMeteringCMMLScript&gt; 
               
             
          
           
               
                 10 
                 &lt;Action&gt;CUSTOM&lt;/Action&gt; 
               
               
                 11 
                 &lt;SECONDARY_ACTION&gt;COLLECTION_ENGINE&lt;/SECONDARY_ACTION&gt; 
               
             
          
           
               
                 12 
                 &lt;/FetchMeteringCMMLScript&gt; 
               
             
          
           
               
                 13 
                 &lt;/Cloud&gt; 
               
             
          
           
               
                 14 
                 &lt;/xml_request&gt; 
               
               
                 15 
                 &lt;response_mode&gt;TransactionResponse&lt;/response_mode&gt; 
               
               
                 16 
                 &lt;UNAME&gt;metering&lt;/UNAME&gt; 
               
               
                 17 
                 &lt;PASS&gt;metering&lt;/PASS&gt; 
               
               
                 18 
                 &lt;LOGIN&gt;Login&lt;/LOGIN&gt; 
               
             
          
           
               
                 19 
                 &lt;/Fields&gt; 
               
             
          
           
               
                 20 
                 &lt;/CMMLRemoteInclude&gt; 
               
               
                   
               
             
          
         
       
     
       Listing. 3: CMML Collection Engine Seeder 
       [0151]    The collection engine instantiates one or more objects from each CMML class to run in detached threads. The CMML objects will continue to inject collected serialized CMOs to a synchronized managed shared buffer through executing the CMML code enclosed in the “Collect” tag. A special shared buffer manager is designed to watch the size of the buffer, and upon reaching a pre-configured size, referred to as the queue size, the buffer manager will add Time To Live (TTL) information to the buffer content and inject the CMOs into the distributed proc filesystem character device. The TTL information is used by the correlation engines to calculate the time of the next read. 
         [0152]    The correlation engines, started via seeder CMML scripts, invoke the CME to retrieve relationship information between different resources, and instantiate aggregate CMML objects accordingly. The correlation engines probe their proc filesystem periodically based on the TTL information returned in the CMML streams. Different CMML objects are deserialized, restarted, and undergo correlation processing, based on their receptors, and through invoking the “Correlate” tag. The resulting correlation CMOs are submitted to the back-end tier over web services. A typical correlation server deployed CMML interpreter would use the CMML presented in listing 4 for continuous correlation. 
         [0000]    
       
         
               
               
             
               
               
             
               
               
             
               
               
             
               
               
             
               
               
             
               
               
             
               
               
             
               
               
             
           
               
                   
               
             
             
               
                  1 
                 &lt;CMMLObjectCorrelate&gt; 
               
             
          
           
               
                  2 
                 &lt;Name&gt;CorrelationManager&lt;/Name&gt; 
               
               
                  3 
                 &lt;CreateAhead&gt;1&lt;/CreateAhead&gt; 
               
               
                  4 
                 &lt;Subject&gt; 
               
             
          
           
               
                  5 
                 &lt;CMMLFetchDirContent&gt; 
               
             
          
           
               
                  6 
                 &lt;Name&gt;metering_proc_fetcher&lt;/Name&gt; 
               
               
                  7 
                 &lt;Directory&gt;/proc/cloud/&lt;/Directory&gt; 
               
               
                  8 
                 &lt;Directory&gt;/proc/vcloud/&lt;/Directory&gt; 
               
               
                  9 
                 &lt;ReadSize&gt;204800&lt;/ReadSize&gt; 
               
               
                 10 
                 &lt;CreateAhead&gt;1&lt;/CreateAhead&gt; 
               
               
                 11 
                 &lt;HuffmanCompressed&gt;true&lt;/HuffmanCompressed&gt; 
               
               
                 12 
                 &lt;LogFile&gt;correlation&lt;/LogFile&gt; 
               
               
                 13 
                 &lt;CacheSize&gt;104857600&lt;/CacheSize&gt; 
               
               
                 14 
                 &lt;SleepInterval&gt;1&lt;/SleepInterval&gt; 
               
             
          
           
               
                 15 
                 &lt;/CMMLFetchDirContent&gt; 
               
             
          
           
               
                 16 
                 &lt;/Subject&gt; 
               
               
                 17 
                 &lt;GracePeriod&gt;2&lt;/GracePeriod&gt; 
               
               
                 18 
                 &lt;Slicing&gt; 
               
             
          
           
               
                 19 
                 &lt;Duration&gt;30&lt;/Duration&gt; 
               
               
                 20 
                 &lt;Slices&gt;5&lt;/Slices&gt; 
               
               
                 21 
                 &lt;Method&gt;Adaptive&lt;/Method&gt; 
               
               
                 22 
                 &lt;FeedbackIP&gt;192.168.1.20&lt;/FeedbackIP&gt; 
               
             
          
           
               
                 23 
                 &lt;/Slicing&gt; 
               
             
          
           
               
                 24 
                 &lt;/CMMLObjectCorrelate&gt; 
               
               
                   
               
             
          
         
       
     
       Listing 4: CMML Correlation Engine 
       [0153]    The CMMLFetchDirContent is a CMML tag designed to run in a detached thread. Upon first invocation of the tag the thread is created and detached, and continuously monitors the provided filesystem directories in the “Directory” tag for new data, which is stored in the tag internal buffer. TTL information is utilized for better utilization of the underlying filesystem. On subsequent invocations the tag returns its internal buffer to the invoker and flushes it. The CMMLObjectCorrelat tag is a CMML tag responsible for CMO correlation. The tag is designed to execute as a thread to continuously correlate incoming CMOs into its “Subject” tag. The Subject tag encloses the invocation of the CMMLFetchDirContent to fetch new CMOs. The 
         [0154]    GracePeriod tag defines a sleep duration in seconds between every correlation attempt. The correlation mode can be configured using the composite “Slicing” tag. 
         [0155]    Resulting Correlation CMOs are forwarded to the different back-end services based on their receptor configurations. The storage engines will store the correlation as well as the collection CMOs. The billing engine will execute the “Bill” method represented by the “Bill” tag enclosing the billing logic to generate and store bills. The same applies for the “SLA” tag with the capability to take actions upon SLA violations such as CPU capping and network bandwidth reduction. 
         [0156]    The model allows for dealing with autonomous CMOs that encapsulate data and operations, rather than collecting metering data and deciding on the metering operation in a later stage. Moreover, the framework is capable of metering cloud resources at various levels of abstractions with ease through the flexibility of writing code, which reflects on high levels of programmability and extensibility. 
         [0157]    Example Online Shop Application 
         [0158]    This section presents the metering of an online shop application as a case study to demonstrate the metering capabilities of the framework and the ease of integration with an already existing application. The application was designed and implemented without having cloud deployment and metering in its requirement specifications. A new requirement is introduced, which is charging the shop&#39;s customers for the computing resources they use while they are performing their purchase transactions. 
         [0159]    The online shop provides a categorized products menu. An online user needs to register on the website and provide personal details for verification in order to make purchases. A shopping cart engine is integrated into the system allowing users to select their products, add them to their shopping cart, and check out after reviewing the list of products in their shopping cart together with the price details and totals. 
         [0160]    The online shop web application is based on open source technology. The application is written in PHP and deployed on an Apache web server. The back-end database MySQL is used to store the online shop data, as well as the Content Management System (CMS) configuration. The application is designed with scalability in mind, where the application can be deployed on a horizontal cascaded Apache web server farm. The back-end database can be configured using MySQL Replication cluster to enhance performance through load distribution. 
         [0161]    The online shop is deployed on 5 virtual architectures, each representing a shop branch. Each shop branch environment has 4 virtual machines acting as an Apache web server farm, 1 virtual machine acting as a web traffic dispatcher to distribute the load over the Apache web servers, and 1 virtual machine acting as a back-end database. The 5 backend database machines of the 5 branches are configured using MySQL Master/Master Replication. The diagram in  FIG. 6  best describes the cloud deployment environment of the case study. 
         [0162]    Each virtual machine follows a VM Profile. Four physical metering plugins are defined to meter the virtual machine resources, and another four virtual metering plugins are defined for metering the different services based on the VM Profile type, namely Apache, HAProxy, and MySQL. A metering plugin for metering the usage of the online shop application is defined for the Apache VM profile. The metered resources are CPU, RAM, I/O, and network.  FIG. 6  is a block diagram of the example cloud metering environment. 
         [0163]    Five correlation plugins are defined to monitor the resources of the five shop branches, by assigning the correlation plugins to the shops&#39; virtual architectures. Another three correlation plugins are defined to monitor the different online shop services by assigning each correlation plugin to a VM Profile. Finally, a metering dome is defined to include and aggregate the usage of the 5 shop correlation plugins to provide the perspective of the overall online shop. 
         [0164]    The middle and the back-end tiers of the metering environment are deployed on dedicated virtual machines. The metering engines are distributed over two correlation, two storage, one billing, and one SLA servers.  FIG. 6  shows the redundant metering environment represented by the primary and the secondary set of resources to establish the prerequisite infrastructure for fault-tolerance. 
         [0165]    Online Shop Metering Extension 
         [0166]    Metering data needs to be presented in different perspectives and abstraction levels, namely data center, service provider, and online shop user usage. Consequently, new metering plugins need to be defined and limited amendments, to the online shop web application, need to be carried out. 
         [0167]    A metering plugin is defined in the Apache VM profile to collect metering data from the online web application as per user transaction. The diagram in  FIG. 7  shows the details of the Apache VM collection engine details. Four virtual metering plugins are deployed in each Apache virtual machine to collect CPU, Memory, I/O, and Network usage. The magnified web application metering plugin acts as a web server receiving usage indicators in white-space delimited format over REST/HTTP. The metering data is parsed and loaded into the internal state data members of the plugin CMML object. 
         [0168]    The web application CMOs are periodically serialized and injected into the collection engine shared buffer to be integrated with the over all metering model. The CMOs are also submitted to a special temporary billing storage engine for the shopping cart to present the user with the corresponding bill at checkout within the same session, avoiding the need to wait for the correlation process to finish. 
         [0169]    The web application needs to generate usage data and post it to the metering plugin web interface. The diagram in  FIG. 8  shows the different components of the web application, which are built using a web CMS that supports page templates and renders them through a page rendering engine. 
         [0170]    Code amendments are applied to the Database Interface Connection Manager (DBI), the page rendering engine, and the shopping cart checkout script. The DBI encapsulates all the database operations and MySQL profiling is enabled within the DBI to collect MySQL usage indicators with respect to CPU, Memory, and I/O. The PHP getrusage command is used in the page rendering engine to collect CPU usage of web transaction executions. The data bandwidth is calculated through measuring the size of the HTTP reply data stream. Finally, metering indicators as well as the corresponding logged in user information are encapsulated in a white-space delimited string and posted to the metering plugin web server through the PHP/CURL library. 
         [0171]    An XML/XSL engine is built to invoke the web application billing transactions storage engine from within the shopping cart checkout form. The list of web transactions, together with their usage and billing details, is presented to the user and the cost of the computing resources used in the shopping transaction is added to the total shopping cart bill. A generic discovery service and console are developed using standard web technologies, mainly XSL and AJAX. The discovery service is capable of parsing CMML records and discovering the embedded relation between different usage metering records without prior knowledge of the metered resources. The console is designed to present metering data at different abstraction levels, which acts as a demonstration example of the extensible and shareable nature of the CMML representation. 
         [0172]    Summary—Cloud Metering 
         [0173]    In this document, a unified cloud metering framework is presented. An extensible data representation is demonstrated through an object oriented extensible Cloud Metering Markup Language (CMML). Autonomous Cloud Metering Objects are realized through the distributed object oriented capabilities, as well as the receptors extensions of CMML. Mobility is achieved through the service state migration that allows CMOs to navigate through across the framework different engines. Data and time correlation are supported by the correlation engines through the CMO receptors and a virtual clock mechanism throughout the framework. Programmability is achieved through the generating of CMML code on the fly by the CME, which depends mainly on the extensible nature the CMML language. Shareablity is a key feature that is demonstrated through the integration with the discovery service and console based on generic standard web technologies. Multi-perspective online responsive metering results are generated through the distributed processing of data, and presented at different levels of abstraction. 
         [0174]    The distributed proc filesystem transparently encapsulates a network transport protocol within simple filesystem I/O operation wrappers. Moreover, standard REST/HTTP web service protocols are used for communication. A multi-tier architecture is adopted which supports scalability and elasticity through distributed processing of metering data. The framework supports the definition of redundant metering resources availing the metering data infrastructure necessary to apply fault tolerance mechanisms. 
         [0175]    Scaling Across Physical Boundaries 
         [0176]    To build the middle and back-end tiers, one issue to be overcome is the scalability of cloud environments and the waste of the resources resulting from the physical boundaries effect of the physical nodes building the target cloud.  FIG. 9  shows a simple illustration of this problem where virtual machine capacities are defined based on the needs, and which might result in wasted cores such as CPU  9  and CPU  12 . If there is no need for virtual machines with one core, those CPUs are considered a waste. In some examples, a cloud metering system or other cloud computing system can provide a mechanism through which operating systems running within a hypervisor can acquire and share resources outside its physical boundaries. 
         [0177]      FIG. 10  shows a high-level diagram of an example cross hypervisor which can build virtually a VM cross the physical boundaries of cloud nodes over network. The cross hypervisor can be built over a virtual hypervisor (built on top of physical hypervisors). The cross hypervisor is based on two building blocks, the BOSML and the IPIoE. In general, a traditional modern operating system schedule tasks in a multi-core environment by assigning tasks to different cores through a signaling mechanism that is called Inter-Processor Interrupts (IPI) which is a simple protocol that utilizes an internal bus between cores located on the same board. The tradition is that for nodes to communicate together, network messages are being sent between different nodes on the OS services level of more popularly on the middleware and application layers, where the core assignment to a task is not transparent. 
         [0178]    In the example system, a hypervisor is started on each cloud physical node on the subset resources of the node to be consolidated into the cross hypervisor virtual machine. Each hypervisor runs an operating system that is based on BOSML that adopts service oriented architecture. The BOSML specifications supports IPIoE which allows initiating inter-processor interrupts to remote cores transparently as if it is a local processor. At any point in time, a core will be handing one or more services execution. 
         [0179]    BOSML, which is an extended version of CMML, is a markup scripting language that is used to write services that runs on the bare metal without any intermediate dynamically linked libraries and allows all the features of service migration and portability features in addition to performance. A BOSML script can implement, for example, the HTTP protocol. 
         [0180]    The core synchronization between the different BOSML scripts running on different physical nodes within different hypervisors is achieved through the IPIoE protocol. The IPIoE protocol is designed in a Gossip fashion that is lightweight and extensively scalable. IPIoE is based on raw Ethernet packets which withdraws all the network size limitations imposed by the IP layer, and hence theoretically no functional or architectural limitations are imposed on the number of nodes, physical of virtual, communicating through IPIoE, except for the permutation of the hardware MAC addresses range of the network cards, either physical or virtual. Performance and security are other dimensions of measures that can be evaluated in lab experiments. 
         [0181]      FIG. 11  illustrates the details of the IPIoE protocol with different packet types.  FIG. 12  illustrates the building block structures of the different IPIoE packet types. An IPIoE packet can be a normal Ethernet packet where the IPIoE Protocol is encapsulated in the Ethernet packet payload. An IPIoE packet header is in place at the start of Ethernet payload which is composed of a type and the length of the IPIoE packet size. Consider the follow four example types of packets:
       1. IPIoE Announce: An Ethernet broadcast packet that the sender used to report current status of its cores. The benefit here is that this packet is sent once on the network and is being read by all the IPIoE member.   2. IPIoE Schedule: An Ethernet broadcast packet that the sender uses to send remote IPI to cores on other nodes. The BOSML based OS should be able to translate over the network interrupts seamlessly. The sender can send multiple schedule constructs within the same packet for different cross hypervisor nodes, and the packet being a broadcast one is an architectural design decision for that purpose. Moreover, nodes that are not subject to the packet-encapsulated interrupts will still benefit from reading the packet to know what is going on in the neighborhood.   3. IPIoE Service: This packet is a destination-based packet where the sender uses to instruct a remote core to perform a service oriented instructions.   4. IPIoE Acknowledge: An Ethernet broadcast packet that contains acknowledgments of packets from different sources. The broadcast awareness of the neighborhood is still valid as in 2.       
 
         [0186]    The cross-hypervisor can be thought of as a concept and is not bound by any means to the BOSML implementation. The cross-hypervisor can be based on the idea of enabling IPIs between different remote cores, and one possible implementation is the IPIoE Gossip protocol that relays IPIs between distributed cores over a network and encapsulates them within Ethernet frames. Consequently, there are at least two implementation approaches for the cross-hypervisor. 
         [0187]    The first approach is through BOSML where a number of distributed hypervisors deploy a BOSML enabled operating system that can run BOSML services and has an IPIoE implementation in its network stack. The other approach is through extending a specific hypervisor to support IPIoE where a group of distributed hypervisors can work together as a single cross-hypervisor. For example, if the KVM hypervisor kernel module is amended with the IPIoE protocol and is configured to send remote IPIs over Ethernet frames, a cross-hypervisor can be realized and built on top of a group of KVM hypervisors transparently irrespective of their location. In both cases, a cross-hypervisor is considered a virtual hypervisor constructed over a set of distributed physical hypervisors. 
         [0188]    Both approaches will achieve an important objective of the cross-hypervisor which is the ability to create a virtual machine that can cross the boundaries of cloud physical nodes. Yet there is a significant difference between the two approaches. In the first approach, the OS deployed on all the cross-hypervisor hypervisor members need to be running a BOSML OS, and the running applications on the cross-hypervisor will need to be written in BOSML. The contribution in this case is that hybrid hypervisors types (e.g. KVM, Virtual Box, Xen, etc.) can be combined in the same cross-hypervisor and even hardware nodes can be members in the target cross-hypervisor. On the other hand, in case of an IPIoE plug-in integrated into the hypervisor, restrictions about the types of the hypervisor used may rise up based on their support and compliance to the IPIoE protocol, yet a transparent deployment of an already existing operating system (e.g. Linux, FreeBSD, MS Windows, etc.) will be possible on top of the cross-hypervisor. 
         [0189]    Although the IPIoE protocol is designed to build a transparent backbone framework for IPI transport over Ethernet, it can also be used for other purposes, e.g., to build a cascaded memory model through IPIoE message passing mechanisms to emulate a transparent cascaded memory apace over distributed physical memory that can be perceived by all hypervisors as one contiguous memory space. This can useful for various applications, e.g., in the second approach as the hypervisor deployed operating system will need a memory perspective that virtualizes the operating system memory irrespective of the underlying physical distributed memory topology and architecture. 
         [0190]    It will be understood that various details of the presently disclosed subject matter may be changed without departing from the scope of the presently disclosed subject matter. Furthermore, the foregoing description is for the purpose of illustration only, and not for the purpose of limitation.