<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Archiving and Interchange DTD v1.0 20120330//EN" "JATS-archivearticle1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink">
  <front>
    <journal-meta />
    <article-meta>
      <title-group>
        <article-title>Characterizing a Source Code Model with Energy Measurements</article-title>
      </title-group>
      <contrib-group>
        <aff id="aff0">
          <label>0</label>
          <institution>Thibault Be ́ziers la Fosse</institution>
          ,
          <addr-line>Jean-Marie Mottu, Massimo Tisi, Je ́r oˆme Rocheteau and Gerson Sunye ́ ICAM, IMT Atlantique, LS2N Nantes</addr-line>
        </aff>
      </contrib-group>
      <abstract>
        <p>-Energy consumption is a critical point when de- its syntax and semantic [9]. Such model is typically used veloping applications. Either for battery-saving purposes, for during the software development, as a specification model to lowering the cost of data-centers, or simply for the sake of generate a source code, or as a source code model, reverserhuanvinagsaonftwecaor-efrbieencodmlyepsrmogarnadma,torreyd. uMciondgetl-hDereivneenrgEynngeiendeeedrintgo engineered from the software in order to analyze or refactor has shown great results when it comes to program understanding it. and refactoring. Modeling the source code along with its energy consumption could be a powerful asset to programmers in order to develop greener code. For that purpose, this paper presents an approach for modeling energy consumption inside a source code model. Energy metrics are gathered at runtime, modeled using the standard Structured Metrics Meta-model, and associated to the source code model, enabling model-driven techniques for energy analysis and optimizations.</p>
      </abstract>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>I. INTRODUCTION</title>
      <p>
        Energy Consumption becomes a major concern when
developing software. The massive electricity needs of data-centers
represented 1.8% total U.S. consumption in 2016, and an
estimated account for about 2% of global greenhouse gas [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ]–
[
        <xref ref-type="bibr" rid="ref3">3</xref>
        ]. Furthermore, the expense to power and cool the
datacenters escalated to a significant cost factor: for every $1.00
spent on new hardware, an additional $0.50 is spent on power
and cooling [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ]. Those factors severely limits the expansion of
IT resources. Reducing the consumption of software systems
has thus become an important ecological, economical, and
technological challenge.
      </p>
      <p>
        Traditionally, such concerns tend to be addressed at the
lower levels (hardware or middleware), and several strategies
have been presented in the past years towards that
purpose [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ]. However, promising results have been introduced
using software-level energy management approaches [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ], which,
combined with lower level optimizations, can effectively
reduce the energy consumption of programs.
      </p>
      <p>
        Unlike hardware-level energy saving techniques,
softwarelevel approaches often need the implication of developers. In
fact, to develop a greener code, a certain level of
energyawareness is helpful to make relevant design choices. A
study showed that more than 80% of programmers did not
consider the energy consumption when developing softwares,
even if they know how important it can be, especially in the
realm of mobile application development [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ], [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ]. We believe
that a representation of a source code, along with energy
consumption would help developers making the right design
choices.
      </p>
      <p>
        In the realm of Model-Driven Engineering (MDE), this
representation is a model, conforming to a meta-model describing
This paper proposes a MDE approach for modeling the
source code of a software and characterizing it with energy
measurements. A first model of this software is generated
with the static reverse-engineering framework MoDisco [
        <xref ref-type="bibr" rid="ref10">10</xref>
        ].
In addition we propose a framework dynamically gathering
energy measurements, at runtime.
      </p>
      <p>Those measurements are persisted in a second model
conforming to the Structured Metrics Meta-model1 (SMM). In
order to characterize the source code with energy metrics, the
two models are associated: elements in the source code (e.g.,
Java methods) are linked to the energy measurements, enabling
the analysis of the source code energy consumption.</p>
      <p>This paper is organized as follows: Section II presents
related work, Section III presents our approach, Section IV
discusses the approach, Section V presents the threats to the
validity of our approach, and Section VI concludes the paper.</p>
    </sec>
    <sec id="sec-2">
      <title>II. RELATED WORK</title>
      <p>
        A large amount of research has been done around
softwarelevel energy monitoring, optimization, and management,
resulting in the production of several well-known tools. For
instance in the realm of software-based energy measurements,
JRAPL [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ] is a Java API for profiling Java programs running
on CPUs supporting Intel’s Running Average Power Limit
(RAPL). It can be used through a single line of Java code, and
provides the energy consumed by the CPU cores. However,
the energy it measures includes the energy consumed by the
system, and induces a considerable overhead [
        <xref ref-type="bibr" rid="ref11">11</xref>
        ], threatening
the validity of the measurements.
      </p>
      <p>
        The following applications also perform at the software
level. BITWATTS is a middleware extension of the POWERAPI
toolkit, able to monitor the power consumption at the
processlevel in VM-based systems [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ], [
        <xref ref-type="bibr" rid="ref13">13</xref>
        ]. It collects process
usages and estimates a fine-grained power consumption based on
a power model. JALEN uses statistical sampling for estimating
the energy consumption of software code [
        <xref ref-type="bibr" rid="ref14">14</xref>
        ]. Relying on
POWERAPI too, it isolates selected classes and methods and
1https://www.omg.org/spec/SMM/
monitors them through Java agents. PTOP proposes a process- 1 p a c k a g e mainPackage ;
level profiling tool, running at the kernel level and monitoring 2
the energy consumptions of all the application of the system, 3 p u b l i c c l a s s App f
at a small cost, and with no performance side effects on the 4
5
running applications. PTOP, BITWATTS and JALEN measure 6
powers at a fixed frequency, making challenging the energy 7 g
measurement of short-running programs. Nonetheless they 8
9
rely on power models and are not impacted by the system 10
consumption. On the contrary, JRAPL can be queried at any 11 g
time (e.g. comparing the energy consumed before and after 12
13 g
running a portion of code, in order to provide the energy it 14
consumed), but gives raw energy consumptions, includes the
system’s one, and has a major impact on the accuracy of the
measurements.
      </p>
      <p>Those approaches estimate power and energy consumption
using energy models based on system specifications and usage.</p>
      <p>However they do not make the measurements available for
Model-Driven analysis tools. Our approach does not aim at
improving the precision w.r.t. related work, but representing it
in an holistic model, enabling further model-driven analysis.</p>
    </sec>
    <sec id="sec-3">
      <title>III. APPROACH</title>
      <p>We detail in this section the several steps necessary to
characterize our source code model with energy
measurements. First, the source code model is statically built using the
MoDisco reverse-engineering framework. Second, the code is
instrumented, in order to add probes inside the program, which
is then executed to gather the energy measurements at runtime.
Third, the measurements are persisted in a model conforming
to the Structured Metrics Meta-model, and associated with the
MoDisco source code model. The Java program in Figure 1
is used to describe our approach. Our application is available
on GitHub2.</p>
      <sec id="sec-3-1">
        <title>A. Source Code Model</title>
        <p>
          The MoDisco framework [
          <xref ref-type="bibr" rid="ref10">10</xref>
          ] is designed to enable program
analysis, by creating a static model of a source code using
reverse-engineering. Considering a source code written in Java,
MoDisco generates the corresponding model conforming to a
Java meta-model. This model only represents static aspects of
the code, such as classes, methods, statements or expressions.
The energy measurements have to be dynamically gathered,
and are not available in the initial MoDisco model.
Nonetheless, a benefit of MDE is that such measurements can be
modeled and then associated with our source code model,
as presented in the next sections. Applying MoDisco on the
program in Figure 1 would produce a model containing all
the source-code elements of such program. An excerpt of this
model is available in Figure 2.
        </p>
      </sec>
      <sec id="sec-3-2">
        <title>B. Energy Measurements Computation</title>
        <p>Once the source code model is generated, the energy is
measured. In order to get such measurements for each method
in the program, it has to be instrumented. We use the ASM
:MethodDeclaration
instrumentation library3 for that purpose. The JVM byte-code
is visited, and probes are added in the byte-code of every
method of the program. A first probe is added in every method
entry point, traces down the method call, gets the system
time, and finally gets the energy consumed by the CPU at
the specific moment, in microjoule.</p>
        <p>
          Another probe is added at every method exit point. This
second probe computes the duration of this method execution,
and the energy it has consumed. To do so, the energy
consumed by the CPU is fetched a second time, and subtracted to
the value obtained in the first probe. Our energy measurements
are performed using the same approach as jRAPL [
          <xref ref-type="bibr" rid="ref6">6</xref>
          ].
        </p>
        <p>As an example, considering the Java source-code available
in Figure 1, the byte-code generated, and its instrumented
version would be the ones in Figure 3 and Figure 4. Figure 3
contains the byte-code of the main as method described in
Figure 1. This byte-code simply embeds a static invocation of
the foo method. Figure 4 also embeds this static invocation of
the foo method, however, probes have been added at the entry
and exit points of the method. The probe located at the entry
point of the method is called by instantiating a class named
Probe. The constructor of this class takes as a parameter the
qualified name of the method it located in, and computes the
energy consumed before the execution. Once the exit point of
the method is reached, the exit method of the probe is called.
This method gets the energy consumed, compares it with the
value obtained at the entry point, and traces that value.</p>
        <p>Note that if a second method is called inside a first method,
then the energy consumed by this first method includes the
2https://github.com/atlanmod/EnergyModel
3https://asm.ow2.io/
energy consumed by the second one. For instance, if we
consider the code in Figure 1, the energy consumed by the
main() method will include the energy consumed by the
foo() method. Hence it could be possible to approximate the
energy consumed only by main() by subtracting the energy
foo() consumed, thanks to the available energy model.</p>
        <p>Running the instrumented code triggers the probes to gather
measurements. For each method, the following metrics are
obtained:
1) Its timestamp
2) The energy it consumed
3) The methods that have been called inside.</p>
        <p>Running the code can be done either by executing the
main method of a program, or through test cases. During the
execution, the measurements are published on a messaging
queue, in order to be analyzed after the execution. Indeed,
analyzing the traces is an expensive operation, and performing
it after the execution limits the overhead induced by the
execution of the instrumented statements.</p>
        <p>
          Furthermore, our approach is relying on existing energy
measurement tools, and do not aim at improving their
accuracy. Performing the measures causes an important workload,
limiting the accuracy of the energy measurements [
          <xref ref-type="bibr" rid="ref15">15</xref>
          ]. For
that reason, we can only provide the energy consumed at the
method level, or at coarser granularities.
        </p>
      </sec>
      <sec id="sec-3-3">
        <title>C. Energy Measurements Modeling</title>
        <p>In this main step of our approach, we persist the energy
measurements into a model conforming to SMM and associate
it to the source code model that MoDisco generates. This is
performed by reading the measurements sent in the messaging
queue one by one. Energy consumed, timestamps and internal
method calls are persisted as elements in the model. Finally
the measurements are linked to the methods from the
sourcecode level, hence characterizing those.</p>
        <p>In Figure 5, the energy consumed is contained in the
Measurement elements, as values. The method calls are
represented using the MeasurementRelationship. The
”before” and ”after” links point towards the Measurement
elements, describing in which order the methods have been
called. Here for instance, main() calls foo().</p>
        <p>Furthermore, the timestamps of the methods invocations are
available in the ObservedMeasure elements. Finally the
source code model elements (e.g. MethodDeclaration)
are associated to the Measurement using the link labeled
as measurand.</p>
      </sec>
    </sec>
    <sec id="sec-4">
      <title>IV. DISCUSSION</title>
      <p>This source code model characterized with energy
measurements offers developers a better energy-awareness than
standard software engineering techniques: First, an holistic
model of the program is created. The association between
MoDisco’s Java meta-model and SMM offers a representation
of the source code characterized with several dynamic
information, available for analysis purposes. Second, the program
can be refactored and optimized only by working at the model
level.</p>
      <p>
        Programmers can specify transformation rules for
refactoring [
        <xref ref-type="bibr" rid="ref16">16</xref>
        ], without having to go back to the source code
level, in order to optimize the energy consumption using
existing energy-efficient practices [
        <xref ref-type="bibr" rid="ref17">17</xref>
        ]–[
        <xref ref-type="bibr" rid="ref20">20</xref>
        ]. As stated by G.
Pinto et al., refactoring approaches focusing on improving
the energy consumption of programs are lacking [
        <xref ref-type="bibr" rid="ref21">21</xref>
        ]. Our
model could help programmers refactoring their applications
towards that purpose, by specifying a model transformation to
apply to the source-code model, and generating the program
optimized [
        <xref ref-type="bibr" rid="ref22">22</xref>
        ]. The energy measurements present in the model
can be used as predicates for the transformation. For instance,
a model transformation could be specified, only targeting
the methods that consume more than a specified energy.
This transformation would change all the existing Doubles to
Floats, as it has been shown that it can reduce the energy
consumption [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ]. The modified source code of the program
can then be generated again, using MoDisco code generator,
and be used to consume less energy.
      </p>
      <p>
        Furthermore, our model can easily be used by external
model-driven tools. The fact that this model is persisted with
the Eclipse Modeling Framework’s XMI standard enables an
important re-usability, especially within the Eclipse
environment [
        <xref ref-type="bibr" rid="ref23">23</xref>
        ]. As an example, the Sirius Framework is built on top
of the Graphical Modeling Framework (GMF), and enables the
editing, manipulation and creation of models through custom
:ObservedMeasure
graphical interfaces [
        <xref ref-type="bibr" rid="ref24">24</xref>
        ]. In order to help developers locating
energy consuming method, we used Sirius to build a simple
graphical representation of the source code, highlighting the
methods that consume more than a specified threshold. A
screen-shot of such application is available in Section IV.
This figure shows the energy consumed by the main and foo
methods, as presented in Figure 5, and the energy consumed
by a test case launching the main method. An energy limit
has been set to 2822 J, hence highlighting all the methods
consuming more than that threshold. This example shows
that this model can be used in order to provide developers
feedbacks about the energy consumption of their programs,
and hence help them doing the right design choices, and
improving their energy awareness.
      </p>
    </sec>
    <sec id="sec-5">
      <title>V. THREAT TO VALIDITY</title>
      <p>Several points have to be considered, in regard to the
validity of our approach. First of all, our current model
does not aim at containing the precise energy consumption
measurement for each method. It stores in a standard model
the information we gather from our measuring tools. In our
implementation we used RAPL to measure the energy consumed
by the program. RAPL induces an overhead, that has not
been quantified here, and which threatens the accuracy of the
measurements. Furthermore, RAPL also includes the energy
that the exploitation system is consuming. For that reason, the
energy measurements we are able to gather with our current
tooling might not be accurate. Finer energy estimations will
be done later over this model.</p>
      <p>
        Furthermore, MDE suffers from some well-known
scalability issues. Our model is persisted using the XMI standard,
however, as explained by Javier Espinazo-Paga´n et al., XMI
files cannot be partially loaded [
        <xref ref-type="bibr" rid="ref25">25</xref>
        ]. For that reason the XMI
persistence layer tends to scale badly when the models are too
large: in order to be used, the entire model have to fit entirely
in memory. We encountered this issue when generating the
MoDisco model of Java projects having more than 10,000
classes. This well-known scalability issue can be resolved
using scalable persistence layers for EMF models, such as
CDO4 or NeoEMF [
        <xref ref-type="bibr" rid="ref26">26</xref>
        ]. Our current prototype does not rely
on those scalable persistence layers yet.
      </p>
    </sec>
    <sec id="sec-6">
      <title>VI. CONCLUSION AND FUTURE WORK</title>
      <p>This paper presents an approach for modeling the source
code of an application and decorating it with energy
measurements. Those measurements are dynamically gathered,
modeled using SMM, and associated with a source code
model statically generated by MoDisco. This model can be
used by programmers as a basis for analyzing and optimizing
programs, and offers a better energy-awareness, useful for
implementing greener applications.</p>
      <p>In our future work, we plan to refine the energy
measurements gathered in our approach. In fact, measuring the
energy consumed by the program using RAPL induces an
overhead and includes the entire system energy consumption.
Furthermore, instead of using XMI for persisting our models,
a more scalable persistence layer, such as NeoEMF, will be
used.
4https://www.eclipse.org/cdo/</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          [1]
          <string-name>
            <given-names>G.</given-names>
            <surname>Cook</surname>
          </string-name>
          , “
          <article-title>How clean is your cloud,” Catalysing an energy revolution</article-title>
          , p.
          <fpage>11</fpage>
          ,
          <year>2012</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          [2]
          <string-name>
            <given-names>M.</given-names>
            <surname>Webb</surname>
          </string-name>
          et al.,
          <source>“Smart</source>
          <year>2020</year>
          :
          <article-title>Enabling the low carbon economy in the information age</article-title>
          ,” The Climate Group. London, vol.
          <volume>1</volume>
          , no.
          <issue>1</issue>
          , pp.
          <fpage>1</fpage>
          -
          <lpage>1</lpage>
          ,
          <year>2008</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          [3]
          <string-name>
            <given-names>A.</given-names>
            <surname>Shehabi</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Smith</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            <surname>Sartor</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Brown</surname>
          </string-name>
          , M. Herrlin,
          <string-name>
            <given-names>J.</given-names>
            <surname>Koomey</surname>
          </string-name>
          ,
          <string-name>
            <given-names>E.</given-names>
            <surname>Masanet</surname>
          </string-name>
          ,
          <string-name>
            <given-names>N.</given-names>
            <surname>Horner</surname>
          </string-name>
          ,
          <string-name>
            <surname>I. Azevedo</surname>
          </string-name>
          , and W. Lintner, “
          <article-title>United states data center energy usage report</article-title>
          ,”
          <year>2016</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          [4]
          <string-name>
            <given-names>M. J.</given-names>
            <surname>Scaramella</surname>
          </string-name>
          and
          <string-name>
            <given-names>M.</given-names>
            <surname>Eastwood</surname>
          </string-name>
          , “
          <article-title>Solutions for the datacenter's thermal challenges</article-title>
          ,” IDC,
          <string-name>
            <surname>January</surname>
          </string-name>
          ,
          <year>2007</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          [5]
          <string-name>
            <given-names>S.</given-names>
            <surname>Mittal</surname>
          </string-name>
          , “
          <article-title>A survey of techniques for improving energy efficiency in embedded computing systems</article-title>
          ,”
          <source>International Journal of Computer Aided Engineering and Technology</source>
          , vol.
          <volume>6</volume>
          , no.
          <issue>4</issue>
          , pp.
          <fpage>440</fpage>
          -
          <lpage>459</lpage>
          ,
          <year>2014</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          [6]
          <string-name>
            <given-names>K.</given-names>
            <surname>Liu</surname>
          </string-name>
          , G. Pinto, and Y. D. Liu, “
          <article-title>Data-oriented characterization of application-level energy optimization</article-title>
          ,” in International Conference FASE'
          <fpage>15</fpage>
          . Springer.
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          [7]
          <string-name>
            <given-names>I.</given-names>
            <surname>Manotas</surname>
          </string-name>
          ,
          <string-name>
            <given-names>L.</given-names>
            <surname>Pollock</surname>
          </string-name>
          , and
          <string-name>
            <given-names>J.</given-names>
            <surname>Clause</surname>
          </string-name>
          , “
          <article-title>Seeds: a software engineer's energy-optimization decision support framework,”</article-title>
          <source>in Proceedings of the 36th International Conference on Software Engineering. ACM</source>
          ,
          <year>2014</year>
          , pp.
          <fpage>503</fpage>
          -
          <lpage>514</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          [8]
          <string-name>
            <given-names>C.</given-names>
            <surname>Pang</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Hindle</surname>
          </string-name>
          ,
          <string-name>
            <given-names>B.</given-names>
            <surname>Adams</surname>
          </string-name>
          ,
          <article-title>and</article-title>
          <string-name>
            <given-names>A. E.</given-names>
            <surname>Hassan</surname>
          </string-name>
          , “
          <article-title>What do programmers know about software energy consumption?” IEEE Software</article-title>
          , vol.
          <volume>33</volume>
          , no.
          <issue>3</issue>
          , pp.
          <fpage>83</fpage>
          -
          <lpage>89</lpage>
          ,
          <year>2016</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          [9]
          <string-name>
            <given-names>J.</given-names>
            <surname>Be</surname>
          </string-name>
          ´zivin, “
          <article-title>On the unification power of models,”</article-title>
          <source>Software &amp; Systems Modeling</source>
          , vol.
          <volume>4</volume>
          , no.
          <issue>2</issue>
          , pp.
          <fpage>171</fpage>
          -
          <lpage>188</lpage>
          ,
          <year>2005</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          [10]
          <string-name>
            <given-names>H.</given-names>
            <surname>Bruneliere</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Cabot</surname>
          </string-name>
          ,
          <string-name>
            <given-names>F.</given-names>
            <surname>Jouault</surname>
          </string-name>
          , and
          <string-name>
            <given-names>F.</given-names>
            <surname>Madiot</surname>
          </string-name>
          , “
          <article-title>Modisco: a generic and extensible framework for model driven reverse engineering</article-title>
          ,”
          <source>in Proceedings of the IEEE/ACM International Conference ASE'10</source>
          . ACM.
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          [11]
          <string-name>
            <given-names>H.</given-names>
            <surname>Zhang</surname>
          </string-name>
          and H. Hoffman, “
          <article-title>A quantitative evaluation of the rapl power control system</article-title>
          ,
          <source>” Feedback Computing</source>
          ,
          <year>2015</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          [12]
          <string-name>
            <given-names>A.</given-names>
            <surname>Bourdon</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Noureddine</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Rouvoy</surname>
          </string-name>
          , and L. Seinturier, “
          <article-title>Powerapi: A software library to monitor the energy consumed at the process-level,” ERCIM News</article-title>
          , vol.
          <year>2013</year>
          , no.
          <issue>92</issue>
          ,
          <year>2013</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          [13]
          <string-name>
            <given-names>M.</given-names>
            <surname>Colmant</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Kurpicz</surname>
          </string-name>
          ,
          <string-name>
            <given-names>P.</given-names>
            <surname>Felber</surname>
          </string-name>
          ,
          <string-name>
            <given-names>L.</given-names>
            <surname>Huertas</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Rouvoy</surname>
          </string-name>
          ,
          <article-title>and</article-title>
          <string-name>
            <given-names>A.</given-names>
            <surname>Sobe</surname>
          </string-name>
          , “
          <article-title>Process-level power estimation in vm-based systems</article-title>
          ,”
          <source>in Proceedings of EuroSys'15</source>
          . ACM.
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          [14]
          <string-name>
            <given-names>A.</given-names>
            <surname>Noureddine</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Rouvoy</surname>
          </string-name>
          , and L. Seinturier, “
          <article-title>Unit testing of energy consumption of software libraries</article-title>
          ,”
          <source>in Proceedings of the 29th Annual ACM Symposium on Applied Computing. ACM</source>
          ,
          <year>2014</year>
          , pp.
          <fpage>1200</fpage>
          -
          <lpage>1205</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          [15]
          <string-name>
            <given-names>S. a.</given-names>
            <surname>Rivoire</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M. A.</given-names>
            <surname>Shah</surname>
          </string-name>
          ,
          <string-name>
            <given-names>P.</given-names>
            <surname>Ranganathan</surname>
          </string-name>
          , and
          <string-name>
            <given-names>C.</given-names>
            <surname>Kozyrakis</surname>
          </string-name>
          , “
          <article-title>Joulesort: a balanced energy-efficiency benchmark</article-title>
          ,”
          <source>in Proceedings of the 2007 ACM SIGMOD international conference on Management of data. ACM</source>
          ,
          <year>2007</year>
          , pp.
          <fpage>365</fpage>
          -
          <lpage>376</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          [16]
          <string-name>
            <given-names>M.</given-names>
            <surname>Fowler</surname>
          </string-name>
          ,
          <string-name>
            <given-names>K.</given-names>
            <surname>Beck</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Brant</surname>
          </string-name>
          ,
          <string-name>
            <given-names>W.</given-names>
            <surname>Opdyke</surname>
          </string-name>
          , and
          <string-name>
            <given-names>D.</given-names>
            <surname>Roberts</surname>
          </string-name>
          ,
          <article-title>Refactoring: improving the design of existing code</article-title>
          .
          <source>Addison-Wesley Professional</source>
          ,
          <year>1999</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>
          [17]
          <string-name>
            <given-names>R.</given-names>
            <surname>Pereira</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Couto</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Saraiva</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Cunha</surname>
          </string-name>
          , and
          <string-name>
            <given-names>J. P.</given-names>
            <surname>Fernandes</surname>
          </string-name>
          , “
          <article-title>The influence of the java collection framework on overall energy consumption</article-title>
          ,”
          <source>in GREENS'16. ACM</source>
          ,
          <year>2016</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref18">
        <mixed-citation>
          [18]
          <string-name>
            <given-names>G.</given-names>
            <surname>Procaccianti</surname>
          </string-name>
          , H. Ferna´ndez, and P. Lago, “
          <article-title>Empirical evaluation of two best practices for energy-efficient software development</article-title>
          ,
          <source>” Journal of Systems and Software</source>
          , vol.
          <volume>117</volume>
          , pp.
          <fpage>185</fpage>
          -
          <lpage>198</lpage>
          ,
          <year>2016</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref19">
        <mixed-citation>
          [19]
          <string-name>
            <given-names>A.</given-names>
            <surname>Sampson</surname>
          </string-name>
          ,
          <string-name>
            <given-names>W.</given-names>
            <surname>Dietl</surname>
          </string-name>
          ,
          <string-name>
            <given-names>E.</given-names>
            <surname>Fortuna</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            <surname>Gnanapragasam</surname>
          </string-name>
          ,
          <string-name>
            <given-names>L.</given-names>
            <surname>Ceze</surname>
          </string-name>
          , and
          <string-name>
            <given-names>D.</given-names>
            <surname>Grossman</surname>
          </string-name>
          , “Enerj:
          <article-title>Approximate data types for safe and general lowpower computation,” in ACM SIGPLAN Notices</article-title>
          , vol.
          <volume>46</volume>
          , no. 6. ACM,
          <year>2011</year>
          , pp.
          <fpage>164</fpage>
          -
          <lpage>174</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref20">
        <mixed-citation>
          [20]
          <string-name>
            <given-names>W. G.</given-names>
            <surname>da Silva</surname>
          </string-name>
          , L. Brisolara, U. B.
          <string-name>
            <surname>Correa</surname>
          </string-name>
          , and L. Carro, “
          <article-title>Evaluation of the impact of code refactoring on embedded software efficiency</article-title>
          ,”
          <source>in Proceedings of the 1st Workshop de Sistemas Embarcados</source>
          ,
          <year>2010</year>
          , pp.
          <fpage>145</fpage>
          -
          <lpage>150</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref21">
        <mixed-citation>
          [21]
          <string-name>
            <given-names>G.</given-names>
            <surname>Pinto</surname>
          </string-name>
          ,
          <string-name>
            <given-names>F.</given-names>
            <surname>Soares-Neto</surname>
          </string-name>
          , and
          <string-name>
            <given-names>F.</given-names>
            <surname>Castor</surname>
          </string-name>
          , “
          <article-title>Refactoring for energy efficiency: a reflection on the state of the art</article-title>
          ,”
          <source>in Proceedings of the Fourth International Workshop on Green and Sustainable Software</source>
          . IEEE Press,
          <year>2015</year>
          , pp.
          <fpage>29</fpage>
          -
          <lpage>35</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref22">
        <mixed-citation>
          [22]
          <string-name>
            <given-names>F.</given-names>
            <surname>Jouault</surname>
          </string-name>
          ,
          <string-name>
            <given-names>F.</given-names>
            <surname>Allilaire</surname>
          </string-name>
          , J. Be´zivin, and I. Kurtev, “
          <article-title>Atl: A model transformation tool,” Science of computer programming</article-title>
          , vol.
          <volume>72</volume>
          , no.
          <issue>1-2</issue>
          , pp.
          <fpage>31</fpage>
          -
          <lpage>39</lpage>
          ,
          <year>2008</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref23">
        <mixed-citation>
          [23]
          <string-name>
            <given-names>D.</given-names>
            <surname>Steinberg</surname>
          </string-name>
          ,
          <string-name>
            <given-names>F.</given-names>
            <surname>Budinsky</surname>
          </string-name>
          , E. Merks, and
          <string-name>
            <given-names>M.</given-names>
            <surname>Paternostro</surname>
          </string-name>
          ,
          <article-title>EMF: eclipse modeling framework</article-title>
          .
          <source>Pearson Education</source>
          ,
          <year>2008</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref24">
        <mixed-citation>
          [24]
          <string-name>
            <given-names>V.</given-names>
            <surname>Viyovic</surname>
          </string-name>
          ´, M. Maksimovic´, and
          <string-name>
            <given-names>B.</given-names>
            <surname>Perisic</surname>
          </string-name>
          ´, “
          <article-title>Sirius: A rapid development of dsm graphical editor</article-title>
          ,
          <source>” in Intelligent Engineering Systems (INES)</source>
          ,
          <year>2014</year>
          18th International Conference on. IEEE,
          <year>2014</year>
          , pp.
          <fpage>233</fpage>
          -
          <lpage>238</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref25">
        <mixed-citation>
          [25]
          <string-name>
            <given-names>J. E.</given-names>
            <surname>Paga</surname>
          </string-name>
          <article-title>´n</article-title>
          ,
          <string-name>
            <given-names>J. S.</given-names>
            <surname>Cuadrado</surname>
          </string-name>
          , and
          <string-name>
            <given-names>J. G.</given-names>
            <surname>Molina</surname>
          </string-name>
          , “
          <article-title>Morsa: A scalable approach for persisting and accessing large models</article-title>
          ,
          <source>” in International Conference on Model Driven Engineering Languages and Systems</source>
          . Springer,
          <year>2011</year>
          , pp.
          <fpage>77</fpage>
          -
          <lpage>92</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref26">
        <mixed-citation>
          [26]
          <string-name>
            <given-names>G.</given-names>
            <surname>Daniel</surname>
          </string-name>
          , G. Sunye´,
          <string-name>
            <given-names>A.</given-names>
            <surname>Benelallam</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Tisi</surname>
          </string-name>
          ,
          <string-name>
            <given-names>Y.</given-names>
            <surname>Vernageau</surname>
          </string-name>
          ,
          <string-name>
            <surname>A.</surname>
          </string-name>
          <article-title>G o´mez, and</article-title>
          <string-name>
            <given-names>J.</given-names>
            <surname>Cabot</surname>
          </string-name>
          , “
          <article-title>Neoemf: a multi-database model persistence framework for very large models</article-title>
          ,”
          <source>Science of Computer Programming</source>
          , vol.
          <volume>149</volume>
          , pp.
          <fpage>9</fpage>
          -
          <lpage>14</lpage>
          ,
          <year>2017</year>
          .
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>