aboutsummaryrefslogtreecommitdiff
path: root/doc/memory.html
blob: 8041f6c073ba2d5884d20312b3b1543941129495 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Memory in skiboot &#8212; skiboot e32e57e
 documentation</title>
    <link rel="stylesheet" href="_static/classic.css" type="text/css" />
    <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
    
    <script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
    <script type="text/javascript" src="_static/jquery.js"></script>
    <script type="text/javascript" src="_static/underscore.js"></script>
    <script type="text/javascript" src="_static/doctools.js"></script>
    <script type="text/javascript" src="_static/language_data.js"></script>
    
    <link rel="index" title="Index" href="genindex.html" />
    <link rel="search" title="Search" href="search.html" />
    <link rel="next" title="OPAL/Skiboot Nvlink Interface Documentation" href="nvlink.html" />
    <link rel="prev" title="GCOV for skiboot" href="gcov.html" /> 
  </head><body>
    <div class="related" role="navigation" aria-label="related navigation">
      <h3>Navigation</h3>
      <ul>
        <li class="right" style="margin-right: 10px">
          <a href="genindex.html" title="General Index"
             accesskey="I">index</a></li>
        <li class="right" >
          <a href="nvlink.html" title="OPAL/Skiboot Nvlink Interface Documentation"
             accesskey="N">next</a> |</li>
        <li class="right" >
          <a href="gcov.html" title="GCOV for skiboot"
             accesskey="P">previous</a> |</li>
        <li class="nav-item nav-item-0"><a href="index.html">skiboot e32e57e
 documentation</a> &#187;</li> 
      </ul>
    </div>  

    <div class="document">
      <div class="documentwrapper">
        <div class="bodywrapper">
          <div class="body" role="main">
            
  <div class="section" id="memory-in-skiboot">
<h1>Memory in skiboot<a class="headerlink" href="#memory-in-skiboot" title="Permalink to this headline"></a></h1>
<p>There are regions of memory we statically allocate for firmware as well as
a HEAP region for boot and runtime allocations.</p>
<p>A design principle of skiboot is to attempt not to allocate memory at runtime,
or at least keep it to a minimum, and not do so in any critical code path
for the system to remain running.</p>
<p>At no point during runtime should a skiboot memory allocation failure cause
the system to stop functioning.</p>
<div class="section" id="heap">
<h2>HEAP<a class="headerlink" href="#heap" title="Permalink to this headline"></a></h2>
<p>Dynamic memory allocations go in a single heap. This is identified as
Region ibm,firmware-heap and appears as a reserved section in the device tree.</p>
<p>Originally, it was 12582912 bytes in size (declared in mem_map.h).
Now, it is 13631488 bytes after being bumped as part of the GCOV work.</p>
<p>We increased heap size as on larger systems, we were getting close to using
all the heap once skiboot became 2MB with GCOV.</p>
<p>Heap usage is printed before running the payload.</p>
<p>For example, as of writing, on a dual socket Tuleta:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="p">[</span><span class="mi">45215870591</span><span class="p">,</span><span class="mi">5</span><span class="p">]</span> <span class="n">SkiBoot</span> <span class="n">skiboot</span><span class="o">-</span><span class="mf">5.0</span><span class="o">.</span><span class="mi">1</span><span class="o">-</span><span class="mi">94</span><span class="o">-</span><span class="n">gb759ce2</span> <span class="n">starting</span><span class="o">...</span>
<span class="p">[</span><span class="mi">3680939340</span><span class="p">,</span><span class="mi">5</span><span class="p">]</span> <span class="n">CUPD</span><span class="p">:</span> <span class="n">T</span> <span class="n">side</span> <span class="n">MI</span> <span class="n">Keyword</span> <span class="o">=</span> <span class="n">SV830_027</span>
<span class="p">[</span><span class="mi">3680942658</span><span class="p">,</span><span class="mi">5</span><span class="p">]</span> <span class="n">CUPD</span><span class="p">:</span> <span class="n">T</span> <span class="n">side</span> <span class="n">ML</span> <span class="n">Keyword</span> <span class="o">=</span> <span class="n">FW830</span><span class="o">.</span><span class="mi">00</span>
<span class="p">[</span><span class="mi">15404383291</span><span class="p">,</span><span class="mi">5</span><span class="p">]</span> <span class="n">Region</span> <span class="n">ibm</span><span class="p">,</span><span class="n">firmware</span><span class="o">-</span><span class="n">heap</span> <span class="n">free</span><span class="p">:</span> <span class="mi">5378072</span>
</pre></div>
</div>
<p>and on a palmetto:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="p">[</span><span class="mi">24748502575</span><span class="p">,</span><span class="mi">5</span><span class="p">]</span> <span class="n">SkiBoot</span> <span class="n">skiboot</span><span class="o">-</span><span class="mf">5.0</span><span class="o">.</span><span class="mi">1</span><span class="o">-</span><span class="mi">94</span><span class="o">-</span><span class="n">gb759ce2</span> <span class="n">starting</span><span class="o">...</span>
<span class="p">[</span><span class="mi">9870429550</span><span class="p">,</span><span class="mi">5</span><span class="p">]</span> <span class="n">Region</span> <span class="n">ibm</span><span class="p">,</span><span class="n">firmware</span><span class="o">-</span><span class="n">heap</span> <span class="n">free</span><span class="p">:</span> <span class="mi">10814856</span>
</pre></div>
</div>
<p>Our memory allocator is simple, a use pattern of:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">A</span> <span class="o">=</span> <span class="n">malloc</span><span class="p">();</span>
<span class="n">B</span> <span class="o">=</span> <span class="n">malloc</span><span class="p">();</span>
<span class="n">free</span><span class="p">(</span><span class="n">A</span><span class="p">);</span>
</pre></div>
</div>
<p>is likely to generate fragmentation, so it should generally be avoided
where possible.</p>
</div>
</div>


          </div>
        </div>
      </div>
      <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
        <div class="sphinxsidebarwrapper">
  <h3><a href="index.html">Table of Contents</a></h3>
  <ul>
<li><a class="reference internal" href="#">Memory in skiboot</a><ul>
<li><a class="reference internal" href="#heap">HEAP</a></li>
</ul>
</li>
</ul>

  <h4>Previous topic</h4>
  <p class="topless"><a href="gcov.html"
                        title="previous chapter">GCOV for skiboot</a></p>
  <h4>Next topic</h4>
  <p class="topless"><a href="nvlink.html"
                        title="next chapter">OPAL/Skiboot Nvlink Interface Documentation</a></p>
  <div role="note" aria-label="source link">
    <h3>This Page</h3>
    <ul class="this-page-menu">
      <li><a href="_sources/memory.rst.txt"
            rel="nofollow">Show Source</a></li>
    </ul>
   </div>
<div id="searchbox" style="display: none" role="search">
  <h3>Quick search</h3>
    <div class="searchformwrapper">
    <form class="search" action="search.html" method="get">
      <input type="text" name="q" />
      <input type="submit" value="Go" />
      <input type="hidden" name="check_keywords" value="yes" />
      <input type="hidden" name="area" value="default" />
    </form>
    </div>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
        </div>
      </div>
      <div class="clearer"></div>
    </div>
    <div class="related" role="navigation" aria-label="related navigation">
      <h3>Navigation</h3>
      <ul>
        <li class="right" style="margin-right: 10px">
          <a href="genindex.html" title="General Index"
             >index</a></li>
        <li class="right" >
          <a href="nvlink.html" title="OPAL/Skiboot Nvlink Interface Documentation"
             >next</a> |</li>
        <li class="right" >
          <a href="gcov.html" title="GCOV for skiboot"
             >previous</a> |</li>
        <li class="nav-item nav-item-0"><a href="index.html">skiboot e32e57e
 documentation</a> &#187;</li> 
      </ul>
    </div>
    <div class="footer" role="contentinfo">
        &#169; Copyright 2016-2017, IBM, others.
      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
    </div>
  </body>
</html>