* [pbs-devel] [PATCH proxmox-backup v2 0/3] docs: clarify and expand the description of the garbage collection
@ 2024-04-05 13:05 Hannes Duerr
2024-04-05 13:05 ` [pbs-devel] [PATCH proxmox-backup v2 1/3] docs: centralise and update garbage collection description Hannes Duerr
` (2 more replies)
0 siblings, 3 replies; 11+ messages in thread
From: Hannes Duerr @ 2024-04-05 13:05 UTC (permalink / raw)
To: pbs-devel
The description of the garbage collection process is currently split
between two different articles in two different chapters and causes to
confusion for users. This patch unifies the description and adds and
example to clarify the garbage collection
This patch build on this series:
https://lists.proxmox.com/pipermail/pbs-devel/2024-March/008282.html
Changes since v1:
- fix nits
- mention required build patches
proxmox-backup:
Hannes Duerr (3):
docs: centralise and update garbage collection description
docs: add custom class for svgs
docs: add garbage collection timing example
docs/_static/custom.css | 5 +
docs/backup-client.rst | 16 +-
docs/images/garbage-collection-timing.svg | 2513 +++++++++++++++++++++
docs/maintenance.rst | 82 +-
4 files changed, 2587 insertions(+), 29 deletions(-)
create mode 100644 docs/images/garbage-collection-timing.svg
Summary over all repositories:
4 files changed, 2587 insertions(+), 29 deletions(-)
--
Generated by git-murpp 0.6.0
^ permalink raw reply [flat|nested] 11+ messages in thread
* [pbs-devel] [PATCH proxmox-backup v2 1/3] docs: centralise and update garbage collection description
2024-04-05 13:05 [pbs-devel] [PATCH proxmox-backup v2 0/3] docs: clarify and expand the description of the garbage collection Hannes Duerr
@ 2024-04-05 13:05 ` Hannes Duerr
2024-04-08 9:20 ` Fabian Grünbichler
2024-04-05 13:05 ` [pbs-devel] [PATCH proxmox-backup v2 2/3] docs: add custom class for svgs Hannes Duerr
2024-04-05 13:05 ` [pbs-devel] [PATCH proxmox-backup v2 3/3] docs: add garbage collection timing example Hannes Duerr
2 siblings, 1 reply; 11+ messages in thread
From: Hannes Duerr @ 2024-04-05 13:05 UTC (permalink / raw)
To: pbs-devel
The "backup client usage" chapter describes a grace period that is 24
hours and 5 minutes long, and unconnected to this a cut-off time is
mentioned under "maintenance tasks", which leads to confusion. Therefore
we summarise the entire description of garbage collection under
"maintenance tasks" and link to it in the "backup client usage" chapter
Signed-off-by: Hannes Duerr <h.duerr@proxmox.com>
---
docs/backup-client.rst | 16 +++---------
docs/maintenance.rst | 57 ++++++++++++++++++++++++++++++------------
2 files changed, 44 insertions(+), 29 deletions(-)
diff --git a/docs/backup-client.rst b/docs/backup-client.rst
index 00a1abbb..d015b844 100644
--- a/docs/backup-client.rst
+++ b/docs/backup-client.rst
@@ -735,25 +735,15 @@ command. It is recommended to carry out garbage collection on a regular basis.
The garbage collection works in two phases. In the first phase, all
data blocks that are still in use are marked. In the second phase,
-unused data blocks are removed.
+unused data blocks are removed. A more detailed description of the GC
+can be found :ref:`here <maintenance_gc>`.
+
.. note:: This command needs to read all existing backup index files
and touches the complete chunk-store. This can take a long time
depending on the number of chunks and the speed of the underlying
disks.
-.. note:: The garbage collection will only remove chunks that haven't been used
- for at least one day (exactly 24h 5m). This grace period is necessary because
- chunks in use are marked by touching the chunk which updates the ``atime``
- (access time) property. Filesystems are mounted with the ``relatime`` option
- by default. This results in a better performance by only updating the
- ``atime`` property if the last access has been at least 24 hours ago. The
- downside is that touching a chunk within these 24 hours will not always
- update its ``atime`` property.
-
- Chunks in the grace period will be logged at the end of the garbage
- collection task as *Pending removals*.
-
.. code-block:: console
# proxmox-backup-client garbage-collect
diff --git a/docs/maintenance.rst b/docs/maintenance.rst
index 6dbb6941..e25c8f19 100644
--- a/docs/maintenance.rst
+++ b/docs/maintenance.rst
@@ -171,8 +171,8 @@ It's recommended to setup a schedule to ensure that unused space is cleaned up
periodically. For most setups a weekly schedule provides a good interval to
start.
-GC Background
-^^^^^^^^^^^^^
+Overview
+^^^^^^^^
In `Proxmox Backup`_ Server, backup data is not saved directly, but rather as
chunks that are referred to by the indexes of each backup snapshot. This
@@ -187,26 +187,51 @@ references to the same chunks on every snapshot deletion. Moreover, locking the
entire datastore is not feasible because new backups would be blocked until the deletion
process was complete.
-Therefore, Proxmox Backup Server uses a garbage collection (GC) process to
+Therefore, Proxmox Backup Server uses a `tracing garbage collection
+<https://en.wikipedia.org/wiki/Tracing_garbage_collection>`_ algorithm to
identify and remove the unused backup chunks that are no longer needed by any
-snapshot in the datastore. The GC process is designed to efficiently reclaim
+snapshot in the datastore. The GC algorithm is designed to efficiently reclaim
the space occupied by these chunks with low impact on the performance of the
datastore or interfering with other backups.
-The garbage collection (GC) process is performed per datastore and is split
-into two phases:
+The GC is performed per datastore and is split into two phases:
-- Phase one: Mark
- All index files are read, and the access time of the referred chunk files is
- updated.
+- Phase one - Mark:
+
+ Read all index files and update the ``atime`` (access time) of the relevant
+ chunk files.
+
+- Phase two - Sweep:
+
+ Iterate over all chunks and check the ``atime`` of the files. If
+ the ``atime`` is older than the cut-off time, the chunk was neither
+ referenced in a backup index nor is it part of a running backup that
+ does not yet have an index to search. As such, safely remove the chunk.
+
+
+Cut-off Time
+^^^^^^^^^^^^
+
+The GC only clears the chunks that were last accessed before the
+cut-off time. The cut-off time is determined by whichever is earlier:
+
+- 24 hours and 5 minutes before the start of the garbage collection
+ due to the mounting of the data storage with ``relatime``, or
+
+- the start time of the oldest active backup job that has been running
+ for longer than 24 hours and 5 minutes at the beginning of the
+ garbage collection. This is necessary because the newly created
+ backup could refer to blocks, but the GC would not notice this as
+ there is no index of the backup that could be searched.
+
+Chunks accessed after the cut-off time are marked as *Pending removals*
+by the GC as it cannot be certain whether they are still needed.
+
+.. Note:: Mounting a volume with ``relatime`` means that the ``atime``
+ of the chunk files is not updated every time, but only when the
+ data has changed or the ``atime`` was before a certain time,
+ which is 24 hours by default.
-- Phase two: Sweep
- The task iterates over all chunks, checks their file access time, and if it
- is older than the cutoff time (i.e., the time when GC started, plus some
- headroom for safety and Linux file system behavior), the task knows that the
- chunk was neither referred to in any backup index nor part of any currently
- running backup that has no index to scan for. As such, the chunk can be
- safely deleted.
Manually Starting GC
^^^^^^^^^^^^^^^^^^^^
--
2.39.2
^ permalink raw reply [flat|nested] 11+ messages in thread
* [pbs-devel] [PATCH proxmox-backup v2 2/3] docs: add custom class for svgs
2024-04-05 13:05 [pbs-devel] [PATCH proxmox-backup v2 0/3] docs: clarify and expand the description of the garbage collection Hannes Duerr
2024-04-05 13:05 ` [pbs-devel] [PATCH proxmox-backup v2 1/3] docs: centralise and update garbage collection description Hannes Duerr
@ 2024-04-05 13:05 ` Hannes Duerr
2024-04-08 9:23 ` Fabian Grünbichler
2024-04-05 13:05 ` [pbs-devel] [PATCH proxmox-backup v2 3/3] docs: add garbage collection timing example Hannes Duerr
2 siblings, 1 reply; 11+ messages in thread
From: Hannes Duerr @ 2024-04-05 13:05 UTC (permalink / raw)
To: pbs-devel
Unfortunately, the width attribute for svgs is ignored in sphinx version
5.3.0. Therefore we create a class which applies a width of 100% as we
want svgs
Signed-off-by: Hannes Duerr <h.duerr@proxmox.com>
---
docs/_static/custom.css | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/docs/_static/custom.css b/docs/_static/custom.css
index 7022b532..8c3c3e19 100644
--- a/docs/_static/custom.css
+++ b/docs/_static/custom.css
@@ -10,6 +10,11 @@ h1.logo-name {
div.body img {
width: 250px;
}
+
+div.body img.proxmox-svg {
+ width: 100%;
+}
+
pre {
padding: 5px 10px;
}
--
2.39.2
^ permalink raw reply [flat|nested] 11+ messages in thread
* [pbs-devel] [PATCH proxmox-backup v2 3/3] docs: add garbage collection timing example
2024-04-05 13:05 [pbs-devel] [PATCH proxmox-backup v2 0/3] docs: clarify and expand the description of the garbage collection Hannes Duerr
2024-04-05 13:05 ` [pbs-devel] [PATCH proxmox-backup v2 1/3] docs: centralise and update garbage collection description Hannes Duerr
2024-04-05 13:05 ` [pbs-devel] [PATCH proxmox-backup v2 2/3] docs: add custom class for svgs Hannes Duerr
@ 2024-04-05 13:05 ` Hannes Duerr
2024-04-08 9:35 ` Fabian Grünbichler
2 siblings, 1 reply; 11+ messages in thread
From: Hannes Duerr @ 2024-04-05 13:05 UTC (permalink / raw)
To: pbs-devel
To make the garbage collection process easier to understand, we add a
timing example with a graphic.
Signed-off-by: Hannes Duerr <h.duerr@proxmox.com>
---
docs/images/garbage-collection-timing.svg | 2513 +++++++++++++++++++++
docs/maintenance.rst | 25 +
2 files changed, 2538 insertions(+)
create mode 100644 docs/images/garbage-collection-timing.svg
diff --git a/docs/images/garbage-collection-timing.svg b/docs/images/garbage-collection-timing.svg
new file mode 100644
index 00000000..8108ee23
--- /dev/null
+++ b/docs/images/garbage-collection-timing.svg
@@ -0,0 +1,2513 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ width="251.35417mm"
+ height="115.45419mm"
+ viewBox="0 0 251.35415 115.4542"
+ version="1.1"
+ id="svg1434"
+ inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
+ sodipodi:docname="garbage-collection-timing_draft1.svg"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg">
+ <sodipodi:namedview
+ id="namedview1436"
+ pagecolor="#ffffff"
+ bordercolor="#111111"
+ borderopacity="1"
+ inkscape:showpageshadow="0"
+ inkscape:pageopacity="0"
+ inkscape:pagecheckerboard="true"
+ inkscape:deskcolor="#d1d1d1"
+ inkscape:document-units="px"
+ showgrid="false"
+ inkscape:zoom="2.2859308"
+ inkscape:cx="458.23784"
+ inkscape:cy="297.25309"
+ inkscape:window-width="3153"
+ inkscape:window-height="2071"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="layer1"
+ showguides="true" />
+ <defs
+ id="defs1431">
+ <marker
+ style="overflow:visible"
+ id="marker38726"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="RoundedArrow"
+ markerWidth="6.1347523"
+ markerHeight="5.9304953"
+ viewBox="0 0 6.1347524 5.9304951"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="m -0.21114562,-4.1055728 6.42229122,3.21114561 a 1,1 90 0 1 0,1.78885438 L -0.21114562,4.1055728 A 1.236068,1.236068 31.717474 0 1 -2,3 v -6 a 1.236068,1.236068 148.28253 0 1 1.78885438,-1.1055728 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="path38724" />
+ </marker>
+ <pattern
+ inkscape:collect="always"
+ xlink:href="#Strips1_1"
+ id="pattern5882"
+ patternTransform="matrix(27.715311,0,0,27.715311,-284.89209,683.76847)" />
+ <pattern
+ inkscape:collect="always"
+ patternUnits="userSpaceOnUse"
+ width="2"
+ height="1"
+ patternTransform="translate(0,0) scale(10,10)"
+ id="Strips1_1"
+ inkscape:stockid="Stripes 1:1"
+ inkscape:isstock="true">
+ <rect
+ style="fill:black;stroke:none"
+ x="0"
+ y="-0.5"
+ width="1"
+ height="2"
+ id="rect4328" />
+ </pattern>
+ <marker
+ style="overflow:visible"
+ id="RoundedArrow"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="RoundedArrow"
+ markerWidth="6.1347523"
+ markerHeight="5.9304953"
+ viewBox="0 0 6.1347524 5.9304951"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="m -0.21114562,-4.1055728 6.42229122,3.21114561 a 1,1 90 0 1 0,1.78885438 L -0.21114562,4.1055728 A 1.236068,1.236068 31.717474 0 1 -2,3 v -6 a 1.236068,1.236068 148.28253 0 1 1.78885438,-1.1055728 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="path1367" />
+ </marker>
+ <pattern
+ patternUnits="userSpaceOnUse"
+ width="34.999986"
+ height="34.999986"
+ patternTransform="translate(252.00641,162.3377)"
+ id="pattern5879">
+ <rect
+ style="display:inline;fill:url(#pattern5882);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.218;stroke-dasharray:none;stroke-opacity:1"
+ id="rect2735"
+ width="33.781986"
+ height="33.781986"
+ x="0.60900003"
+ y="-34.390987"
+ ry="8.5727673"
+ transform="rotate(90)"
+ rx="8.5727673"
+ inkscape:label="background" />
+ </pattern>
+ <pattern
+ patternUnits="userSpaceOnUse"
+ width="2.7946498"
+ height="2.7898082"
+ patternTransform="translate(39.823201,13.729677)"
+ id="pattern37177">
+ <g
+ id="g37133"
+ transform="matrix(0.52811702,0,0,0.52811702,-24.543455,-42.936124)"
+ inkscape:label="cross">
+ <path
+ style="fill:none;fill-opacity:1;stroke:#e57000;stroke-width:0.136693;stroke-linecap:butt;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 49.167708,81.348727 2.549177,2.549177"
+ id="path37129" />
+ <path
+ style="fill:none;fill-opacity:1;stroke:#e57000;stroke-width:0.134673;stroke-linecap:butt;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 51.717627,81.348013 -2.550633,2.550633"
+ id="path37131" />
+ </g>
+ <g
+ id="g37139"
+ transform="matrix(0.52811702,0,0,0.52811702,-25.94078,-42.936124)"
+ inkscape:label="cross">
+ <path
+ style="fill:none;fill-opacity:1;stroke:#e57000;stroke-width:0.136693;stroke-linecap:butt;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 49.167708,81.348727 2.549177,2.549177"
+ id="path37135" />
+ <path
+ style="fill:none;fill-opacity:1;stroke:#e57000;stroke-width:0.134673;stroke-linecap:butt;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 51.717627,81.348013 -2.550633,2.550633"
+ id="path37137" />
+ </g>
+ <g
+ id="g37145"
+ transform="matrix(0.52811702,0,0,0.52811702,-24.543455,-41.54364)"
+ inkscape:label="cross">
+ <path
+ style="fill:none;fill-opacity:1;stroke:#e57000;stroke-width:0.136693;stroke-linecap:butt;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 49.167708,81.348727 2.549177,2.549177"
+ id="path37141" />
+ <path
+ style="fill:none;fill-opacity:1;stroke:#e57000;stroke-width:0.134673;stroke-linecap:butt;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 51.717627,81.348013 -2.550633,2.550633"
+ id="path37143" />
+ </g>
+ <g
+ id="g37151"
+ transform="matrix(0.52811702,0,0,0.52811702,-25.94078,-41.54364)"
+ inkscape:label="cross">
+ <path
+ style="fill:none;fill-opacity:1;stroke:#e57000;stroke-width:0.136693;stroke-linecap:butt;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 49.167708,81.348727 2.549177,2.549177"
+ id="path37147" />
+ <path
+ style="fill:none;fill-opacity:1;stroke:#e57000;stroke-width:0.134673;stroke-linecap:butt;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 51.717627,81.348013 -2.550633,2.550633"
+ id="path37149" />
+ </g>
+ <g
+ id="g37157"
+ transform="matrix(0.52811702,0,0,0.52811702,-24.543455,-42.936124)"
+ inkscape:label="cross">
+ <path
+ style="fill:none;fill-opacity:1;stroke:#e57000;stroke-width:0.136693;stroke-linecap:butt;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 49.167708,81.348727 2.549177,2.549177"
+ id="path37153" />
+ <path
+ style="fill:none;fill-opacity:1;stroke:#e57000;stroke-width:0.134673;stroke-linecap:butt;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 51.717627,81.348013 -2.550633,2.550633"
+ id="path37155" />
+ </g>
+ <g
+ id="g37163"
+ transform="matrix(0.52811702,0,0,0.52811702,-25.94078,-42.936124)"
+ inkscape:label="cross">
+ <path
+ style="fill:none;fill-opacity:1;stroke:#e57000;stroke-width:0.136693;stroke-linecap:butt;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 49.167708,81.348727 2.549177,2.549177"
+ id="path37159" />
+ <path
+ style="fill:none;fill-opacity:1;stroke:#e57000;stroke-width:0.134673;stroke-linecap:butt;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 51.717627,81.348013 -2.550633,2.550633"
+ id="path37161" />
+ </g>
+ <g
+ id="g37169"
+ transform="matrix(0.52811702,0,0,0.52811702,-24.543455,-41.54364)"
+ inkscape:label="cross">
+ <path
+ style="fill:none;fill-opacity:1;stroke:#e57000;stroke-width:0.136693;stroke-linecap:butt;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 49.167708,81.348727 2.549177,2.549177"
+ id="path37165" />
+ <path
+ style="fill:none;fill-opacity:1;stroke:#e57000;stroke-width:0.134673;stroke-linecap:butt;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 51.717627,81.348013 -2.550633,2.550633"
+ id="path37167" />
+ </g>
+ <g
+ id="g37175"
+ transform="matrix(0.52811702,0,0,0.52811702,-25.94078,-41.54364)"
+ inkscape:label="cross">
+ <path
+ style="fill:none;fill-opacity:1;stroke:#e57000;stroke-width:0.136693;stroke-linecap:butt;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 49.167708,81.348727 2.549177,2.549177"
+ id="path37171" />
+ <path
+ style="fill:none;fill-opacity:1;stroke:#e57000;stroke-width:0.134673;stroke-linecap:butt;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 51.717627,81.348013 -2.550633,2.550633"
+ id="path37173" />
+ </g>
+ </pattern>
+ <pattern
+ patternUnits="userSpaceOnUse"
+ width="2.7946498"
+ height="2.7898082"
+ patternTransform="translate(35.849115,14.913625)"
+ id="pattern37287">
+ <g
+ id="g37285"
+ inkscape:label="pattern template"
+ transform="matrix(3.7795276,0,0,3.7795276,-183.63653,-306.51443)">
+ <g
+ id="g37241"
+ transform="matrix(0.13973096,0,0,0.13973096,42.093375,69.738426)"
+ inkscape:label="cross">
+ <path
+ style="fill:none;fill-opacity:1;stroke:#e57000;stroke-width:0.136693;stroke-linecap:butt;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 49.167708,81.348727 2.549177,2.549177"
+ id="path37237" />
+ <path
+ style="fill:none;fill-opacity:1;stroke:#e57000;stroke-width:0.134673;stroke-linecap:butt;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 51.717627,81.348013 -2.550633,2.550633"
+ id="path37239" />
+ </g>
+ <g
+ id="g37247"
+ transform="matrix(0.13973096,0,0,0.13973096,41.723666,69.738426)"
+ inkscape:label="cross">
+ <path
+ style="fill:none;fill-opacity:1;stroke:#e57000;stroke-width:0.136693;stroke-linecap:butt;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 49.167708,81.348727 2.549177,2.549177"
+ id="path37243" />
+ <path
+ style="fill:none;fill-opacity:1;stroke:#e57000;stroke-width:0.134673;stroke-linecap:butt;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 51.717627,81.348013 -2.550633,2.550633"
+ id="path37245" />
+ </g>
+ <g
+ id="g37253"
+ transform="matrix(0.13973096,0,0,0.13973096,42.093375,70.106854)"
+ inkscape:label="cross">
+ <path
+ style="fill:none;fill-opacity:1;stroke:#e57000;stroke-width:0.136693;stroke-linecap:butt;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 49.167708,81.348727 2.549177,2.549177"
+ id="path37249" />
+ <path
+ style="fill:none;fill-opacity:1;stroke:#e57000;stroke-width:0.134673;stroke-linecap:butt;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 51.717627,81.348013 -2.550633,2.550633"
+ id="path37251" />
+ </g>
+ <g
+ id="g37259"
+ transform="matrix(0.13973096,0,0,0.13973096,41.723666,70.106854)"
+ inkscape:label="cross">
+ <path
+ style="fill:none;fill-opacity:1;stroke:#e57000;stroke-width:0.136693;stroke-linecap:butt;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 49.167708,81.348727 2.549177,2.549177"
+ id="path37255" />
+ <path
+ style="fill:none;fill-opacity:1;stroke:#e57000;stroke-width:0.134673;stroke-linecap:butt;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 51.717627,81.348013 -2.550633,2.550633"
+ id="path37257" />
+ </g>
+ <g
+ id="g37265"
+ transform="matrix(0.13973096,0,0,0.13973096,42.093375,69.738426)"
+ inkscape:label="cross">
+ <path
+ style="fill:none;fill-opacity:1;stroke:#e57000;stroke-width:0.136693;stroke-linecap:butt;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 49.167708,81.348727 2.549177,2.549177"
+ id="path37261" />
+ <path
+ style="fill:none;fill-opacity:1;stroke:#e57000;stroke-width:0.134673;stroke-linecap:butt;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 51.717627,81.348013 -2.550633,2.550633"
+ id="path37263" />
+ </g>
+ <g
+ id="g37271"
+ transform="matrix(0.13973096,0,0,0.13973096,41.723666,69.738426)"
+ inkscape:label="cross">
+ <path
+ style="fill:none;fill-opacity:1;stroke:#e57000;stroke-width:0.136693;stroke-linecap:butt;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 49.167708,81.348727 2.549177,2.549177"
+ id="path37267" />
+ <path
+ style="fill:none;fill-opacity:1;stroke:#e57000;stroke-width:0.134673;stroke-linecap:butt;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 51.717627,81.348013 -2.550633,2.550633"
+ id="path37269" />
+ </g>
+ <g
+ id="g37277"
+ transform="matrix(0.13973096,0,0,0.13973096,42.093375,70.106854)"
+ inkscape:label="cross">
+ <path
+ style="fill:none;fill-opacity:1;stroke:#e57000;stroke-width:0.136693;stroke-linecap:butt;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 49.167708,81.348727 2.549177,2.549177"
+ id="path37273" />
+ <path
+ style="fill:none;fill-opacity:1;stroke:#e57000;stroke-width:0.134673;stroke-linecap:butt;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 51.717627,81.348013 -2.550633,2.550633"
+ id="path37275" />
+ </g>
+ <g
+ id="g37283"
+ transform="matrix(0.13973096,0,0,0.13973096,41.723666,70.106854)"
+ inkscape:label="cross">
+ <path
+ style="fill:none;fill-opacity:1;stroke:#e57000;stroke-width:0.136693;stroke-linecap:butt;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 49.167708,81.348727 2.549177,2.549177"
+ id="path37279" />
+ <path
+ style="fill:none;fill-opacity:1;stroke:#e57000;stroke-width:0.134673;stroke-linecap:butt;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 51.717627,81.348013 -2.550633,2.550633"
+ id="path37281" />
+ </g>
+ </g>
+ </pattern>
+ <pattern
+ patternUnits="userSpaceOnUse"
+ width="2.7946498"
+ height="2.7898082"
+ patternTransform="translate(38.788319,19.439012)"
+ id="pattern37450">
+ <g
+ id="g37448"
+ inkscape:label="pattern template"
+ transform="matrix(3.7795276,0,0,3.7795276,-183.63653,-306.51443)">
+ <g
+ id="g37404"
+ transform="matrix(0.13973096,0,0,0.13973096,42.093375,69.738426)"
+ inkscape:label="cross">
+ <path
+ style="fill:none;fill-opacity:1;stroke:#4f8eff;stroke-width:0.136693;stroke-linecap:butt;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 49.167708,81.348727 2.549177,2.549177"
+ id="path37400" />
+ <path
+ style="fill:none;fill-opacity:1;stroke:#4f8eff;stroke-width:0.134673;stroke-linecap:butt;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 51.717627,81.348013 -2.550633,2.550633"
+ id="path37402" />
+ </g>
+ <g
+ id="g37410"
+ transform="matrix(0.13973096,0,0,0.13973096,41.723666,69.738426)"
+ inkscape:label="cross">
+ <path
+ style="fill:none;fill-opacity:1;stroke:#4f8eff;stroke-width:0.136693;stroke-linecap:butt;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 49.167708,81.348727 2.549177,2.549177"
+ id="path37406" />
+ <path
+ style="fill:none;fill-opacity:1;stroke:#4f8eff;stroke-width:0.134673;stroke-linecap:butt;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 51.717627,81.348013 -2.550633,2.550633"
+ id="path37408" />
+ </g>
+ <g
+ id="g37416"
+ transform="matrix(0.13973096,0,0,0.13973096,42.093375,70.106854)"
+ inkscape:label="cross">
+ <path
+ style="fill:none;fill-opacity:1;stroke:#4f8eff;stroke-width:0.136693;stroke-linecap:butt;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 49.167708,81.348727 2.549177,2.549177"
+ id="path37412" />
+ <path
+ style="fill:none;fill-opacity:1;stroke:#4f8eff;stroke-width:0.134673;stroke-linecap:butt;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 51.717627,81.348013 -2.550633,2.550633"
+ id="path37414" />
+ </g>
+ <g
+ id="g37422"
+ transform="matrix(0.13973096,0,0,0.13973096,41.723666,70.106854)"
+ inkscape:label="cross">
+ <path
+ style="fill:none;fill-opacity:1;stroke:#4f8eff;stroke-width:0.136693;stroke-linecap:butt;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 49.167708,81.348727 2.549177,2.549177"
+ id="path37418" />
+ <path
+ style="fill:none;fill-opacity:1;stroke:#4f8eff;stroke-width:0.134673;stroke-linecap:butt;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 51.717627,81.348013 -2.550633,2.550633"
+ id="path37420" />
+ </g>
+ <g
+ id="g37428"
+ transform="matrix(0.13973096,0,0,0.13973096,42.093375,69.738426)"
+ inkscape:label="cross">
+ <path
+ style="fill:none;fill-opacity:1;stroke:#4f8eff;stroke-width:0.136693;stroke-linecap:butt;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 49.167708,81.348727 2.549177,2.549177"
+ id="path37424" />
+ <path
+ style="fill:none;fill-opacity:1;stroke:#4f8eff;stroke-width:0.134673;stroke-linecap:butt;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 51.717627,81.348013 -2.550633,2.550633"
+ id="path37426" />
+ </g>
+ <g
+ id="g37434"
+ transform="matrix(0.13973096,0,0,0.13973096,41.723666,69.738426)"
+ inkscape:label="cross">
+ <path
+ style="fill:none;fill-opacity:1;stroke:#4f8eff;stroke-width:0.136693;stroke-linecap:butt;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 49.167708,81.348727 2.549177,2.549177"
+ id="path37430" />
+ <path
+ style="fill:none;fill-opacity:1;stroke:#4f8eff;stroke-width:0.134673;stroke-linecap:butt;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 51.717627,81.348013 -2.550633,2.550633"
+ id="path37432" />
+ </g>
+ <g
+ id="g37440"
+ transform="matrix(0.13973096,0,0,0.13973096,42.093375,70.106854)"
+ inkscape:label="cross">
+ <path
+ style="fill:none;fill-opacity:1;stroke:#4f8eff;stroke-width:0.136693;stroke-linecap:butt;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 49.167708,81.348727 2.549177,2.549177"
+ id="path37436" />
+ <path
+ style="fill:none;fill-opacity:1;stroke:#4f8eff;stroke-width:0.134673;stroke-linecap:butt;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 51.717627,81.348013 -2.550633,2.550633"
+ id="path37438" />
+ </g>
+ <g
+ id="g37446"
+ transform="matrix(0.13973096,0,0,0.13973096,41.723666,70.106854)"
+ inkscape:label="cross">
+ <path
+ style="fill:none;fill-opacity:1;stroke:#4f8eff;stroke-width:0.136693;stroke-linecap:butt;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 49.167708,81.348727 2.549177,2.549177"
+ id="path37442" />
+ <path
+ style="fill:none;fill-opacity:1;stroke:#4f8eff;stroke-width:0.134673;stroke-linecap:butt;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 51.717627,81.348013 -2.550633,2.550633"
+ id="path37444" />
+ </g>
+ </g>
+ </pattern>
+ </defs>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-36.011852,-78.291046)"
+ style="display:inline">
+ <rect
+ style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.40734;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:0;stroke-dasharray:0.40734, 0.40734;stroke-dashoffset:0;stroke-opacity:1;stop-color:#000000"
+ id="rect21041"
+ width="251.35417"
+ height="115.45419"
+ x="36.011852"
+ y="78.291046"
+ inkscape:label="background"
+ sodipodi:insensitive="true" />
+ <g
+ id="g1345"
+ inkscape:label="coordinate-system"
+ transform="translate(-17.232756,-12.700002)">
+ <path
+ style="display:inline;fill:none;stroke:#4d4d4d;stroke-width:0.507156;stroke-linecap:round;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#RoundedArrow)"
+ d="M 94.004509,149.18061 H 289.33303"
+ id="path1061"
+ inkscape:label="x-axis" />
+ <path
+ style="display:inline;fill:none;stroke:#4d4d4d;stroke-width:0.646044;stroke-linecap:round;stroke-dasharray:0.646044, 1.29208;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 93.172187,149.18061 H 69.316251"
+ id="path1341"
+ inkscape:label="dotted" />
+ <path
+ style="fill:none;stroke:#4d4d4d;stroke-width:0.496091;stroke-linecap:round;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#marker38726)"
+ d="m 69.163663,104.38837 v 53.78366"
+ id="path2077"
+ inkscape:label="seperator1" />
+ <path
+ style="display:inline;fill:none;stroke:#4d4d4d;stroke-width:0.496091;stroke-linecap:round;stroke-dasharray:none;stroke-opacity:1"
+ d="m 93.872112,104.38837 v 53.78366"
+ id="path1300"
+ inkscape:label="seperator2" />
+ <path
+ style="fill:none;stroke:#4d4d4d;stroke-width:0.496091;stroke-linecap:round;stroke-dasharray:none;stroke-opacity:1"
+ d="m 142.76165,104.38837 v 53.78366"
+ id="path2079"
+ inkscape:label="seperator3" />
+ <path
+ style="fill:none;stroke:#4d4d4d;stroke-width:0.496091;stroke-linecap:round;stroke-dasharray:none;stroke-opacity:1"
+ d="m 191.65119,104.38837 v 53.78366"
+ id="path2083"
+ inkscape:label="seperator4" />
+ <path
+ style="fill:none;stroke:#4d4d4d;stroke-width:0.496091;stroke-linecap:round;stroke-dasharray:none;stroke-opacity:1"
+ d="m 240.54074,104.38837 v 53.78366"
+ id="path2085"
+ inkscape:label="seperator5" />
+ <g
+ id="g3306"
+ inkscape:label="description"
+ style="display:inline;fill:#ffffff;fill-opacity:1"
+ transform="translate(1.0583328,12.700001)">
+ <text
+ id="text3275"
+ y="152.90921"
+ x="91.06678"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.64444px;line-height:1.25;font-family:'Open Sans';-inkscape-font-specification:'Open Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#464d4d;fill-opacity:1;stroke:none;stroke-width:0.203197"
+ xml:space="preserve"
+ inkscape:label="t0"><tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93889px;font-family:'Open Sans';-inkscape-font-specification:'Open Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#464d4d;fill-opacity:1;stroke-width:0.203197"
+ y="152.90921"
+ x="91.06678"
+ id="tspan3273"
+ sodipodi:role="line">t<tspan
+ style="font-size:65%;baseline-shift:sub"
+ id="tspan4156">0</tspan></tspan></text>
+ <text
+ id="text3295"
+ y="152.90921"
+ x="140.23376"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.64444px;line-height:1.25;font-family:'Open Sans';-inkscape-font-specification:'Open Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#464d4d;fill-opacity:1;stroke:none;stroke-width:0.2032;stroke-dasharray:none"
+ xml:space="preserve"
+ inkscape:label="t1"><tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93889px;font-family:'Open Sans';-inkscape-font-specification:'Open Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#464d4d;fill-opacity:1;stroke-width:0.2032;stroke-dasharray:none"
+ y="152.90921"
+ x="140.23376"
+ id="tspan3293"
+ sodipodi:role="line">t<tspan
+ style="font-size:65%;baseline-shift:sub"
+ id="tspan4154">1</tspan></tspan></text>
+ <text
+ id="text3279"
+ y="152.90921"
+ x="188.85213"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.64444px;line-height:1.25;font-family:'Open Sans';-inkscape-font-specification:'Open Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#464d4d;fill-opacity:1;stroke:none;stroke-width:0.203197"
+ xml:space="preserve"
+ inkscape:label="t2"><tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93889px;font-family:'Open Sans';-inkscape-font-specification:'Open Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#464d4d;fill-opacity:1;stroke-width:0.203197"
+ y="152.90921"
+ x="188.85213"
+ id="tspan3277"
+ sodipodi:role="line">t<tspan
+ style="font-size:65%;baseline-shift:sub"
+ id="tspan4152">2</tspan></tspan></text>
+ <text
+ id="text3287"
+ y="152.90921"
+ x="237.74951"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.64444px;line-height:1.25;font-family:'Open Sans';-inkscape-font-specification:'Open Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#464d4d;fill-opacity:1;stroke:none;stroke-width:0.203197"
+ xml:space="preserve"
+ inkscape:label="t3"><tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93889px;font-family:'Open Sans';-inkscape-font-specification:'Open Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#464d4d;fill-opacity:1;stroke-width:0.203197"
+ y="152.90921"
+ x="237.74951"
+ id="tspan3285"
+ sodipodi:role="line">t<tspan
+ style="font-size:65%;baseline-shift:sub"
+ id="tspan4150">3</tspan></tspan></text>
+ <text
+ id="text706"
+ y="152.90921"
+ x="62.753822"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.64444px;line-height:1.25;font-family:'Open Sans';-inkscape-font-specification:'Open Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#464d4d;fill-opacity:1;stroke:none;stroke-width:0.203197"
+ xml:space="preserve"
+ inkscape:label="t0"><tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93889px;font-family:'Open Sans';-inkscape-font-specification:'Open Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#464d4d;fill-opacity:1;stroke-width:0.203197"
+ y="152.90921"
+ x="62.753822"
+ id="tspan704"
+ sodipodi:role="line">t<tspan
+ style="font-size:65%;baseline-shift:sub"
+ id="tspan4148">cutoff</tspan></tspan></text>
+ </g>
+ </g>
+ <g
+ id="g2861"
+ inkscape:label="grid1"
+ transform="translate(-4.38085,-2.0273229)">
+ <g
+ id="g2705"
+ inkscape:label="column1">
+ <g
+ id="g2675"
+ transform="matrix(0.28137732,0,0,0.28137732,70.125515,92.063045)"
+ inkscape:label="chunk"
+ style="display:inline">
+ <rect
+ style="display:inline;fill:#e57000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.439473;stroke-dasharray:none;stroke-opacity:1"
+ id="rect2663"
+ width="12.188926"
+ height="12.188926"
+ x="103.01205"
+ y="-259.12012"
+ ry="3.093152"
+ transform="matrix(0,2.6061124,-2.6061124,0,-576.13291,-241.96985)"
+ rx="3.093152"
+ inkscape:label="background" />
+ <g
+ id="g2673"
+ inkscape:label="text"
+ transform="translate(-1.1913705e-5)">
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.5369px;line-height:0%;font-family:'Open Sans';-inkscape-font-specification:'Open Sans';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.211408"
+ x="75.800545"
+ y="46.866966"
+ id="text2667"
+ inkscape:label="text_large"><tspan
+ sodipodi:role="line"
+ id="tspan2665"
+ x="75.800545"
+ y="46.866966"
+ style="font-size:15.2214px;line-height:1.25;fill:#000000;fill-opacity:1;stroke-width:0.211408">C</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:1.22862px;line-height:0%;font-family:'Open Sans';-inkscape-font-specification:'Open Sans';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.211408"
+ x="85.763794"
+ y="48.903133"
+ id="text2671"
+ inkscape:label="text_small"><tspan
+ sodipodi:role="line"
+ id="tspan2669"
+ x="85.763794"
+ y="48.903133"
+ style="font-size:7.37174px;line-height:1.25;fill:#000000;fill-opacity:1;stroke-width:0.211408">1</tspan></text>
+ </g>
+ </g>
+ <g
+ id="g2689"
+ transform="matrix(0.28137732,0,0,0.28137732,70.125515,103.9693)"
+ inkscape:label="chunk"
+ style="display:inline">
+ <rect
+ style="display:inline;fill:#e57000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.439473;stroke-dasharray:none;stroke-opacity:1"
+ id="rect2677"
+ width="12.188926"
+ height="12.188926"
+ x="103.01205"
+ y="-259.12012"
+ ry="3.093152"
+ transform="matrix(0,2.6061124,-2.6061124,0,-576.13291,-241.96985)"
+ rx="3.093152"
+ inkscape:label="background" />
+ <g
+ id="g2687"
+ inkscape:label="text"
+ transform="translate(-1.1913705e-5)">
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.5369px;line-height:0%;font-family:'Open Sans';-inkscape-font-specification:'Open Sans';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.211408"
+ x="75.800545"
+ y="46.866966"
+ id="text2681"
+ inkscape:label="text_large"><tspan
+ sodipodi:role="line"
+ id="tspan2679"
+ x="75.800545"
+ y="46.866966"
+ style="font-size:15.2214px;line-height:1.25;fill:#000000;fill-opacity:1;stroke-width:0.211408">C</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:1.22862px;line-height:0%;font-family:'Open Sans';-inkscape-font-specification:'Open Sans';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.211408"
+ x="85.763794"
+ y="48.903133"
+ id="text2685"
+ inkscape:label="text_small"><tspan
+ sodipodi:role="line"
+ id="tspan2683"
+ x="85.763794"
+ y="48.903133"
+ style="font-size:7.37174px;line-height:1.25;fill:#000000;fill-opacity:1;stroke-width:0.211408">4</tspan></text>
+ </g>
+ </g>
+ <g
+ id="g2703"
+ transform="matrix(0.28137732,0,0,0.28137732,70.125515,115.87555)"
+ inkscape:label="chunk"
+ style="display:inline">
+ <rect
+ style="display:inline;fill:#e57000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.439473;stroke-dasharray:none;stroke-opacity:1"
+ id="rect2691"
+ width="12.188926"
+ height="12.188926"
+ x="103.01205"
+ y="-259.12012"
+ ry="3.093152"
+ transform="matrix(0,2.6061124,-2.6061124,0,-576.13291,-241.96985)"
+ rx="3.093152"
+ inkscape:label="background" />
+ <g
+ id="g2701"
+ inkscape:label="text"
+ transform="translate(-1.1913705e-5)">
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.5369px;line-height:0%;font-family:'Open Sans';-inkscape-font-specification:'Open Sans';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.211408"
+ x="75.800545"
+ y="46.866966"
+ id="text2695"
+ inkscape:label="text_large"><tspan
+ sodipodi:role="line"
+ id="tspan2693"
+ x="75.800545"
+ y="46.866966"
+ style="font-size:15.2214px;line-height:1.25;fill:#000000;fill-opacity:1;stroke-width:0.211408">C</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:1.22862px;line-height:0%;font-family:'Open Sans';-inkscape-font-specification:'Open Sans';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.211408"
+ x="85.763794"
+ y="48.903133"
+ id="text2699"
+ inkscape:label="text_small"><tspan
+ sodipodi:role="line"
+ id="tspan2697"
+ x="85.763794"
+ y="48.903133"
+ style="font-size:7.37174px;line-height:1.25;fill:#000000;fill-opacity:1;stroke-width:0.211408">7</tspan></text>
+ </g>
+ </g>
+ </g>
+ <g
+ id="g2749"
+ inkscape:label="column2"
+ transform="translate(12.823771,-0.05452)">
+ <g
+ id="g2719"
+ transform="matrix(0.28137732,0,0,0.28137732,69.207994,115.93007)"
+ inkscape:label="chunk"
+ style="display:inline">
+ <rect
+ style="display:inline;fill:url(#pattern37287);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.439468;stroke-dasharray:none;stroke-opacity:1"
+ id="rect2707"
+ width="12.188926"
+ height="12.188926"
+ x="103.01205"
+ y="-259.12012"
+ ry="3.093152"
+ transform="matrix(0,2.6061124,-2.6061124,0,-576.13291,-241.96985)"
+ rx="3.093152"
+ inkscape:label="background" />
+ <g
+ id="g2717"
+ inkscape:label="text"
+ transform="translate(-1.1913705e-5)">
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.5369px;line-height:0%;font-family:'Open Sans';-inkscape-font-specification:'Open Sans';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.211408"
+ x="75.800545"
+ y="46.866966"
+ id="text2711"
+ inkscape:label="text_large"><tspan
+ sodipodi:role="line"
+ id="tspan2709"
+ x="75.800545"
+ y="46.866966"
+ style="font-size:15.2214px;line-height:1.25;fill:#000000;fill-opacity:1;stroke-width:0.211408">C</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:1.22862px;line-height:0%;font-family:'Open Sans';-inkscape-font-specification:'Open Sans';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.211408"
+ x="85.763794"
+ y="48.903133"
+ id="text2715"
+ inkscape:label="text_small"><tspan
+ sodipodi:role="line"
+ id="tspan2713"
+ x="85.763794"
+ y="48.903133"
+ style="font-size:7.37174px;line-height:1.25;fill:#000000;fill-opacity:1;stroke-width:0.211408">8</tspan></text>
+ </g>
+ </g>
+ <g
+ id="g2733"
+ transform="matrix(0.28137732,0,0,0.28137732,69.207994,104.02382)"
+ inkscape:label="chunk"
+ style="display:inline">
+ <rect
+ style="display:inline;fill:url(#pattern37287);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.439468;stroke-dasharray:none;stroke-opacity:1"
+ id="rect2721"
+ width="12.188926"
+ height="12.188926"
+ x="103.01205"
+ y="-259.12012"
+ ry="3.093152"
+ transform="matrix(0,2.6061124,-2.6061124,0,-576.13291,-241.96985)"
+ rx="3.093152"
+ inkscape:label="background" />
+ <g
+ id="g2731"
+ inkscape:label="text"
+ transform="translate(-1.1913705e-5)">
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.5369px;line-height:0%;font-family:'Open Sans';-inkscape-font-specification:'Open Sans';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.211408"
+ x="75.800545"
+ y="46.866966"
+ id="text2725"
+ inkscape:label="text_large"><tspan
+ sodipodi:role="line"
+ id="tspan2723"
+ x="75.800545"
+ y="46.866966"
+ style="font-size:15.2214px;line-height:1.25;fill:#000000;fill-opacity:1;stroke-width:0.211408">C</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:1.22862px;line-height:0%;font-family:'Open Sans';-inkscape-font-specification:'Open Sans';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.211408"
+ x="85.763794"
+ y="48.903133"
+ id="text2729"
+ inkscape:label="text_small"><tspan
+ sodipodi:role="line"
+ id="tspan2727"
+ x="85.763794"
+ y="48.903133"
+ style="font-size:7.37174px;line-height:1.25;fill:#000000;fill-opacity:1;stroke-width:0.211408">5</tspan></text>
+ </g>
+ </g>
+ <g
+ id="g37334"
+ transform="matrix(0.28137732,0,0,0.28137732,69.207994,92.117565)"
+ inkscape:label="chunk"
+ style="display:inline">
+ <rect
+ style="display:inline;fill:url(#pattern37287);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.439468;stroke-dasharray:none;stroke-opacity:1"
+ id="rect37322"
+ width="12.188926"
+ height="12.188926"
+ x="103.01205"
+ y="-259.12012"
+ ry="3.093152"
+ transform="matrix(0,2.6061124,-2.6061124,0,-576.13291,-241.96985)"
+ rx="3.093152"
+ inkscape:label="background" />
+ <g
+ id="g37332"
+ inkscape:label="text"
+ transform="translate(-1.1913705e-5)">
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.5369px;line-height:0%;font-family:'Open Sans';-inkscape-font-specification:'Open Sans';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.211408"
+ x="75.800545"
+ y="46.866966"
+ id="text37326"
+ inkscape:label="text_large"><tspan
+ sodipodi:role="line"
+ id="tspan37324"
+ x="75.800545"
+ y="46.866966"
+ style="font-size:15.2214px;line-height:1.25;fill:#000000;fill-opacity:1;stroke-width:0.211408">C</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:1.22862px;line-height:0%;font-family:'Open Sans';-inkscape-font-specification:'Open Sans';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.211408"
+ x="85.763794"
+ y="48.903133"
+ id="text37330"
+ inkscape:label="text_small"><tspan
+ sodipodi:role="line"
+ id="tspan37328"
+ x="85.763794"
+ y="48.903133"
+ style="font-size:7.37174px;line-height:1.25;fill:#000000;fill-opacity:1;stroke-width:0.211408">2</tspan></text>
+ </g>
+ </g>
+ </g>
+ <g
+ id="g2793"
+ inkscape:label="column3"
+ transform="translate(24.730021,-0.05452)">
+ <g
+ id="g2763"
+ transform="matrix(0.28137732,0,0,0.28137732,69.207994,92.117565)"
+ inkscape:label="chunk"
+ style="display:inline">
+ <rect
+ style="display:inline;fill:url(#pattern37287);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.439473;stroke-dasharray:none;stroke-opacity:1"
+ id="rect2751"
+ width="12.188926"
+ height="12.188926"
+ x="103.01205"
+ y="-259.12012"
+ ry="3.093152"
+ transform="matrix(0,2.6061124,-2.6061124,0,-576.13291,-241.96985)"
+ rx="3.093152"
+ inkscape:label="background" />
+ <g
+ id="g2761"
+ inkscape:label="text"
+ transform="translate(-1.1913705e-5)">
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.5369px;line-height:0%;font-family:'Open Sans';-inkscape-font-specification:'Open Sans';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.211408"
+ x="75.800545"
+ y="46.866966"
+ id="text2755"
+ inkscape:label="text_large"><tspan
+ sodipodi:role="line"
+ id="tspan2753"
+ x="75.800545"
+ y="46.866966"
+ style="font-size:15.2214px;line-height:1.25;fill:#000000;fill-opacity:1;stroke-width:0.211408">C</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:1.22862px;line-height:0%;font-family:'Open Sans';-inkscape-font-specification:'Open Sans';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.211408"
+ x="85.763794"
+ y="48.903133"
+ id="text2759"
+ inkscape:label="text_small"><tspan
+ sodipodi:role="line"
+ id="tspan2757"
+ x="85.763794"
+ y="48.903133"
+ style="font-size:7.37174px;line-height:1.25;fill:#000000;fill-opacity:1;stroke-width:0.211408">3</tspan></text>
+ </g>
+ </g>
+ <g
+ id="g2791"
+ transform="matrix(0.28137732,0,0,0.28137732,69.207994,115.93007)"
+ inkscape:label="chunk"
+ style="display:inline">
+ <rect
+ style="display:inline;fill:url(#pattern37287);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.439473;stroke-dasharray:none;stroke-opacity:1"
+ id="rect2779"
+ width="12.188926"
+ height="12.188926"
+ x="103.01205"
+ y="-259.12012"
+ ry="3.093152"
+ transform="matrix(0,2.6061124,-2.6061124,0,-576.13291,-241.96985)"
+ rx="3.093152"
+ inkscape:label="background" />
+ <g
+ id="g2789"
+ inkscape:label="text"
+ transform="translate(-1.1913705e-5)">
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.5369px;line-height:0%;font-family:'Open Sans';-inkscape-font-specification:'Open Sans';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.211408"
+ x="75.800545"
+ y="46.866966"
+ id="text2783"
+ inkscape:label="text_large"><tspan
+ sodipodi:role="line"
+ id="tspan2781"
+ x="75.800545"
+ y="46.866966"
+ style="font-size:15.2214px;line-height:1.25;fill:#000000;fill-opacity:1;stroke-width:0.211408">C</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:1.22862px;line-height:0%;font-family:'Open Sans';-inkscape-font-specification:'Open Sans';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.211408"
+ x="85.763794"
+ y="48.903133"
+ id="text2787"
+ inkscape:label="text_small"><tspan
+ sodipodi:role="line"
+ id="tspan2785"
+ x="85.763794"
+ y="48.903133"
+ style="font-size:7.37174px;line-height:1.25;fill:#000000;fill-opacity:1;stroke-width:0.211408">9</tspan></text>
+ </g>
+ </g>
+ <g
+ id="g10284"
+ transform="matrix(0.28137732,0,0,0.28137732,69.207994,104.02382)"
+ inkscape:label="chunk"
+ style="display:inline">
+ <rect
+ style="display:inline;fill:#e57000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.439473;stroke-dasharray:none;stroke-opacity:1"
+ id="rect10272"
+ width="12.188926"
+ height="12.188926"
+ x="103.01205"
+ y="-259.12012"
+ ry="3.093152"
+ transform="matrix(0,2.6061124,-2.6061124,0,-576.13291,-241.96985)"
+ rx="3.093152"
+ inkscape:label="background" />
+ <g
+ id="g10282"
+ inkscape:label="text"
+ transform="translate(-1.1913705e-5)">
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.5369px;line-height:0%;font-family:'Open Sans';-inkscape-font-specification:'Open Sans';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.211408"
+ x="75.800545"
+ y="46.866966"
+ id="text10276"
+ inkscape:label="text_large"><tspan
+ sodipodi:role="line"
+ id="tspan10274"
+ x="75.800545"
+ y="46.866966"
+ style="font-size:15.2214px;line-height:1.25;fill:#000000;fill-opacity:1;stroke-width:0.211408">C</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:1.22862px;line-height:0%;font-family:'Open Sans';-inkscape-font-specification:'Open Sans';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.211408"
+ x="85.763794"
+ y="48.903133"
+ id="text10280"
+ inkscape:label="text_small"><tspan
+ sodipodi:role="line"
+ id="tspan10278"
+ x="85.763794"
+ y="48.903133"
+ style="font-size:7.37174px;line-height:1.25;fill:#000000;fill-opacity:1;stroke-width:0.211408">6</tspan></text>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g
+ id="g2995"
+ inkscape:label="grid2"
+ transform="translate(44.508691,-2.0273229)">
+ <g
+ id="g2905"
+ inkscape:label="column1">
+ <g
+ id="g2875"
+ transform="matrix(0.28137732,0,0,0.28137732,70.125515,92.063045)"
+ inkscape:label="chunk"
+ style="display:inline">
+ <rect
+ style="display:inline;fill:#e57000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.439473;stroke-dasharray:none;stroke-opacity:1"
+ id="rect2863"
+ width="12.188926"
+ height="12.188926"
+ x="103.01205"
+ y="-259.12012"
+ ry="3.093152"
+ transform="matrix(0,2.6061124,-2.6061124,0,-576.13291,-241.96985)"
+ rx="3.093152"
+ inkscape:label="background" />
+ <g
+ id="g2873"
+ inkscape:label="text"
+ transform="translate(-1.1913705e-5)">
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.5369px;line-height:0%;font-family:'Open Sans';-inkscape-font-specification:'Open Sans';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.211408"
+ x="75.800545"
+ y="46.866966"
+ id="text2867"
+ inkscape:label="text_large"><tspan
+ sodipodi:role="line"
+ id="tspan2865"
+ x="75.800545"
+ y="46.866966"
+ style="font-size:15.2214px;line-height:1.25;fill:#000000;fill-opacity:1;stroke-width:0.211408">C</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:1.22862px;line-height:0%;font-family:'Open Sans';-inkscape-font-specification:'Open Sans';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.211408"
+ x="85.763794"
+ y="48.903133"
+ id="text2871"
+ inkscape:label="text_small"><tspan
+ sodipodi:role="line"
+ id="tspan2869"
+ x="85.763794"
+ y="48.903133"
+ style="font-size:7.37174px;line-height:1.25;fill:#000000;fill-opacity:1;stroke-width:0.211408">1</tspan></text>
+ </g>
+ </g>
+ <g
+ id="g2889"
+ transform="matrix(0.28137732,0,0,0.28137732,70.125515,103.9693)"
+ inkscape:label="chunk"
+ style="display:inline">
+ <rect
+ style="display:inline;fill:#e57000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.439473;stroke-dasharray:none;stroke-opacity:1"
+ id="rect2877"
+ width="12.188926"
+ height="12.188926"
+ x="103.01205"
+ y="-259.12012"
+ ry="3.093152"
+ transform="matrix(0,2.6061124,-2.6061124,0,-576.13291,-241.96985)"
+ rx="3.093152"
+ inkscape:label="background" />
+ <g
+ id="g2887"
+ inkscape:label="text"
+ transform="translate(-1.1913705e-5)">
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.5369px;line-height:0%;font-family:'Open Sans';-inkscape-font-specification:'Open Sans';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.211408"
+ x="75.800545"
+ y="46.866966"
+ id="text2881"
+ inkscape:label="text_large"><tspan
+ sodipodi:role="line"
+ id="tspan2879"
+ x="75.800545"
+ y="46.866966"
+ style="font-size:15.2214px;line-height:1.25;fill:#000000;fill-opacity:1;stroke-width:0.211408">C</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:1.22862px;line-height:0%;font-family:'Open Sans';-inkscape-font-specification:'Open Sans';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.211408"
+ x="85.763794"
+ y="48.903133"
+ id="text2885"
+ inkscape:label="text_small"><tspan
+ sodipodi:role="line"
+ id="tspan2883"
+ x="85.763794"
+ y="48.903133"
+ style="font-size:7.37174px;line-height:1.25;fill:#000000;fill-opacity:1;stroke-width:0.211408">4</tspan></text>
+ </g>
+ </g>
+ <g
+ id="g2903"
+ transform="matrix(0.28137732,0,0,0.28137732,70.125515,115.87555)"
+ inkscape:label="chunk"
+ style="display:inline">
+ <rect
+ style="display:inline;fill:#e57000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.439473;stroke-dasharray:none;stroke-opacity:1"
+ id="rect2891"
+ width="12.188926"
+ height="12.188926"
+ x="103.01205"
+ y="-259.12012"
+ ry="3.093152"
+ transform="matrix(0,2.6061124,-2.6061124,0,-576.13291,-241.96985)"
+ rx="3.093152"
+ inkscape:label="background" />
+ <g
+ id="g2901"
+ inkscape:label="text"
+ transform="translate(-1.1913705e-5)">
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.5369px;line-height:0%;font-family:'Open Sans';-inkscape-font-specification:'Open Sans';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.211408"
+ x="75.800545"
+ y="46.866966"
+ id="text2895"
+ inkscape:label="text_large"><tspan
+ sodipodi:role="line"
+ id="tspan2893"
+ x="75.800545"
+ y="46.866966"
+ style="font-size:15.2214px;line-height:1.25;fill:#000000;fill-opacity:1;stroke-width:0.211408">C</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:1.22862px;line-height:0%;font-family:'Open Sans';-inkscape-font-specification:'Open Sans';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.211408"
+ x="85.763794"
+ y="48.903133"
+ id="text2899"
+ inkscape:label="text_small"><tspan
+ sodipodi:role="line"
+ id="tspan2897"
+ x="85.763794"
+ y="48.903133"
+ style="font-size:7.37174px;line-height:1.25;fill:#000000;fill-opacity:1;stroke-width:0.211408">7</tspan></text>
+ </g>
+ </g>
+ </g>
+ <g
+ id="g2949"
+ inkscape:label="column2"
+ transform="translate(12.823771,-0.05452)">
+ <g
+ id="g2919"
+ transform="matrix(0.28137732,0,0,0.28137732,69.207994,92.117565)"
+ inkscape:label="chunk"
+ style="display:inline">
+ <rect
+ style="display:inline;fill:url(#pattern37287);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.439473;stroke-dasharray:none;stroke-opacity:1"
+ id="rect2907"
+ width="12.188926"
+ height="12.188926"
+ x="103.01205"
+ y="-259.12012"
+ ry="3.093152"
+ transform="matrix(0,2.6061124,-2.6061124,0,-576.13291,-241.96985)"
+ rx="3.093152"
+ inkscape:label="background" />
+ <g
+ id="g2917"
+ inkscape:label="text"
+ transform="translate(-1.1913705e-5)">
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.5369px;line-height:0%;font-family:'Open Sans';-inkscape-font-specification:'Open Sans';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.211408"
+ x="75.800545"
+ y="46.866966"
+ id="text2911"
+ inkscape:label="text_large"><tspan
+ sodipodi:role="line"
+ id="tspan2909"
+ x="75.800545"
+ y="46.866966"
+ style="font-size:15.2214px;line-height:1.25;fill:#000000;fill-opacity:1;stroke-width:0.211408">C</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:1.22862px;line-height:0%;font-family:'Open Sans';-inkscape-font-specification:'Open Sans';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.211408"
+ x="85.763794"
+ y="48.903133"
+ id="text2915"
+ inkscape:label="text_small"><tspan
+ sodipodi:role="line"
+ id="tspan2913"
+ x="85.763794"
+ y="48.903133"
+ style="font-size:7.37174px;line-height:1.25;fill:#000000;fill-opacity:1;stroke-width:0.211408">2</tspan></text>
+ </g>
+ </g>
+ <g
+ id="g2933"
+ transform="matrix(0.28137732,0,0,0.28137732,69.207994,104.02382)"
+ inkscape:label="chunk"
+ style="display:inline">
+ <rect
+ style="display:inline;fill:url(#pattern37287);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.439473;stroke-dasharray:none;stroke-opacity:1"
+ id="rect2921"
+ width="12.188926"
+ height="12.188926"
+ x="103.01205"
+ y="-259.12012"
+ ry="3.093152"
+ transform="matrix(0,2.6061124,-2.6061124,0,-576.13291,-241.96985)"
+ rx="3.093152"
+ inkscape:label="background" />
+ <g
+ id="g2931"
+ inkscape:label="text"
+ transform="translate(-1.1913705e-5)">
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.5369px;line-height:0%;font-family:'Open Sans';-inkscape-font-specification:'Open Sans';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.211408"
+ x="75.800545"
+ y="46.866966"
+ id="text2925"
+ inkscape:label="text_large"><tspan
+ sodipodi:role="line"
+ id="tspan2923"
+ x="75.800545"
+ y="46.866966"
+ style="font-size:15.2214px;line-height:1.25;fill:#000000;fill-opacity:1;stroke-width:0.211408">C</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:1.22862px;line-height:0%;font-family:'Open Sans';-inkscape-font-specification:'Open Sans';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.211408"
+ x="85.763794"
+ y="48.903133"
+ id="text2929"
+ inkscape:label="text_small"><tspan
+ sodipodi:role="line"
+ id="tspan2927"
+ x="85.763794"
+ y="48.903133"
+ style="font-size:7.37174px;line-height:1.25;fill:#000000;fill-opacity:1;stroke-width:0.211408">5</tspan></text>
+ </g>
+ </g>
+ <g
+ id="g38425"
+ transform="matrix(0.28137732,0,0,0.28137732,69.207994,115.93007)"
+ inkscape:label="chunk"
+ style="display:inline">
+ <rect
+ style="display:inline;fill:url(#pattern37450);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.439473;stroke-dasharray:none;stroke-opacity:1"
+ id="rect38413"
+ width="12.188926"
+ height="12.188926"
+ x="103.01205"
+ y="-259.12012"
+ ry="3.093152"
+ transform="matrix(0,2.6061124,-2.6061124,0,-576.13291,-241.96985)"
+ rx="3.093152"
+ inkscape:label="background" />
+ <g
+ id="g38423"
+ inkscape:label="text"
+ transform="translate(-1.1913705e-5)">
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.5369px;line-height:0%;font-family:'Open Sans';-inkscape-font-specification:'Open Sans';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.211408"
+ x="75.800545"
+ y="46.866966"
+ id="text38417"
+ inkscape:label="text_large"><tspan
+ sodipodi:role="line"
+ id="tspan38415"
+ x="75.800545"
+ y="46.866966"
+ style="font-size:15.2214px;line-height:1.25;fill:#000000;fill-opacity:1;stroke-width:0.211408">C</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:1.22862px;line-height:0%;font-family:'Open Sans';-inkscape-font-specification:'Open Sans';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.211408"
+ x="85.763794"
+ y="48.903133"
+ id="text38421"
+ inkscape:label="text_small"><tspan
+ sodipodi:role="line"
+ id="tspan38419"
+ x="85.763794"
+ y="48.903133"
+ style="font-size:7.37174px;line-height:1.25;fill:#000000;fill-opacity:1;stroke-width:0.211408">8</tspan></text>
+ </g>
+ </g>
+ </g>
+ <g
+ id="g2993"
+ inkscape:label="column3"
+ transform="translate(24.730021,-0.05452)">
+ <g
+ id="g2963"
+ transform="matrix(0.28137732,0,0,0.28137732,69.207994,92.117565)"
+ inkscape:label="chunk"
+ style="display:inline">
+ <rect
+ style="display:inline;fill:url(#pattern37450);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.439473;stroke-dasharray:none;stroke-opacity:1"
+ id="rect2951"
+ width="12.188926"
+ height="12.188926"
+ x="103.01205"
+ y="-259.12012"
+ ry="3.093152"
+ transform="matrix(0,2.6061124,-2.6061124,0,-576.13291,-241.96985)"
+ rx="3.093152"
+ inkscape:label="background" />
+ <g
+ id="g2961"
+ inkscape:label="text"
+ transform="translate(-1.1913705e-5)">
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.5369px;line-height:0%;font-family:'Open Sans';-inkscape-font-specification:'Open Sans';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.211408"
+ x="75.800545"
+ y="46.866966"
+ id="text2955"
+ inkscape:label="text_large"><tspan
+ sodipodi:role="line"
+ id="tspan2953"
+ x="75.800545"
+ y="46.866966"
+ style="font-size:15.2214px;line-height:1.25;fill:#000000;fill-opacity:1;stroke-width:0.211408">C</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:1.22862px;line-height:0%;font-family:'Open Sans';-inkscape-font-specification:'Open Sans';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.211408"
+ x="85.763794"
+ y="48.903133"
+ id="text2959"
+ inkscape:label="text_small"><tspan
+ sodipodi:role="line"
+ id="tspan2957"
+ x="85.763794"
+ y="48.903133"
+ style="font-size:7.37174px;line-height:1.25;fill:#000000;fill-opacity:1;stroke-width:0.211408">3</tspan></text>
+ </g>
+ </g>
+ <g
+ id="g2977"
+ transform="matrix(0.28137732,0,0,0.28137732,69.207994,104.02382)"
+ inkscape:label="chunk"
+ style="display:inline">
+ <rect
+ style="display:inline;fill:#4f8eff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.439473;stroke-dasharray:none;stroke-opacity:1"
+ id="rect2965"
+ width="12.188926"
+ height="12.188926"
+ x="103.01205"
+ y="-259.12012"
+ ry="3.093152"
+ transform="matrix(0,2.6061124,-2.6061124,0,-576.13291,-241.96985)"
+ rx="3.093152"
+ inkscape:label="background" />
+ <g
+ id="g2975"
+ inkscape:label="text"
+ transform="translate(-1.1913705e-5)">
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.5369px;line-height:0%;font-family:'Open Sans';-inkscape-font-specification:'Open Sans';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.211408"
+ x="75.800545"
+ y="46.866966"
+ id="text2969"
+ inkscape:label="text_large"><tspan
+ sodipodi:role="line"
+ id="tspan2967"
+ x="75.800545"
+ y="46.866966"
+ style="font-size:15.2214px;line-height:1.25;fill:#000000;fill-opacity:1;stroke-width:0.211408">C</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:1.22862px;line-height:0%;font-family:'Open Sans';-inkscape-font-specification:'Open Sans';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.211408"
+ x="85.763794"
+ y="48.903133"
+ id="text2973"
+ inkscape:label="text_small"><tspan
+ sodipodi:role="line"
+ id="tspan2971"
+ x="85.763794"
+ y="48.903133"
+ style="font-size:7.37174px;line-height:1.25;fill:#000000;fill-opacity:1;stroke-width:0.211408">6</tspan></text>
+ </g>
+ </g>
+ <g
+ id="g2991"
+ transform="matrix(0.28137732,0,0,0.28137732,69.207994,115.93007)"
+ inkscape:label="chunk"
+ style="display:inline">
+ <rect
+ style="display:inline;fill:url(#pattern37450);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.439473;stroke-dasharray:none;stroke-opacity:1"
+ id="rect2979"
+ width="12.188926"
+ height="12.188926"
+ x="103.01205"
+ y="-259.12012"
+ ry="3.093152"
+ transform="matrix(0,2.6061124,-2.6061124,0,-576.13291,-241.96985)"
+ rx="3.093152"
+ inkscape:label="background" />
+ <g
+ id="g2989"
+ inkscape:label="text"
+ transform="translate(-1.1913705e-5)">
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.5369px;line-height:0%;font-family:'Open Sans';-inkscape-font-specification:'Open Sans';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.211408"
+ x="75.800545"
+ y="46.866966"
+ id="text2983"
+ inkscape:label="text_large"><tspan
+ sodipodi:role="line"
+ id="tspan2981"
+ x="75.800545"
+ y="46.866966"
+ style="font-size:15.2214px;line-height:1.25;fill:#000000;fill-opacity:1;stroke-width:0.211408">C</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:1.22862px;line-height:0%;font-family:'Open Sans';-inkscape-font-specification:'Open Sans';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.211408"
+ x="85.763794"
+ y="48.903133"
+ id="text2987"
+ inkscape:label="text_small"><tspan
+ sodipodi:role="line"
+ id="tspan2985"
+ x="85.763794"
+ y="48.903133"
+ style="font-size:7.37174px;line-height:1.25;fill:#000000;fill-opacity:1;stroke-width:0.211408">9</tspan></text>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g
+ id="g3129"
+ inkscape:label="grid3"
+ transform="translate(93.398241,-2.0273229)">
+ <g
+ id="g3039"
+ inkscape:label="column1">
+ <g
+ id="g3009"
+ transform="matrix(0.28137732,0,0,0.28137732,70.125515,92.063045)"
+ inkscape:label="chunk"
+ style="display:inline">
+ <rect
+ style="display:inline;fill:#e57000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.439473;stroke-dasharray:none;stroke-opacity:1"
+ id="rect2997"
+ width="12.188926"
+ height="12.188926"
+ x="103.01205"
+ y="-259.12012"
+ ry="3.093152"
+ transform="matrix(0,2.6061124,-2.6061124,0,-576.13291,-241.96985)"
+ rx="3.093152"
+ inkscape:label="background" />
+ <g
+ id="g3007"
+ inkscape:label="text"
+ transform="translate(-1.1913705e-5)">
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.5369px;line-height:0%;font-family:'Open Sans';-inkscape-font-specification:'Open Sans';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.211408"
+ x="75.800545"
+ y="46.866966"
+ id="text3001"
+ inkscape:label="text_large"><tspan
+ sodipodi:role="line"
+ id="tspan2999"
+ x="75.800545"
+ y="46.866966"
+ style="font-size:15.2214px;line-height:1.25;fill:#000000;fill-opacity:1;stroke-width:0.211408">C</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:1.22862px;line-height:0%;font-family:'Open Sans';-inkscape-font-specification:'Open Sans';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.211408"
+ x="85.763794"
+ y="48.903133"
+ id="text3005"
+ inkscape:label="text_small"><tspan
+ sodipodi:role="line"
+ id="tspan3003"
+ x="85.763794"
+ y="48.903133"
+ style="font-size:7.37174px;line-height:1.25;fill:#000000;fill-opacity:1;stroke-width:0.211408">1</tspan></text>
+ </g>
+ </g>
+ <g
+ id="g3023"
+ transform="matrix(0.28137732,0,0,0.28137732,70.125515,103.9693)"
+ inkscape:label="chunk"
+ style="display:inline">
+ <rect
+ style="display:inline;fill:#e57000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.439473;stroke-dasharray:none;stroke-opacity:1"
+ id="rect3011"
+ width="12.188926"
+ height="12.188926"
+ x="103.01205"
+ y="-259.12012"
+ ry="3.093152"
+ transform="matrix(0,2.6061124,-2.6061124,0,-576.13291,-241.96985)"
+ rx="3.093152"
+ inkscape:label="background" />
+ <g
+ id="g3021"
+ inkscape:label="text"
+ transform="translate(-1.1913705e-5)">
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.5369px;line-height:0%;font-family:'Open Sans';-inkscape-font-specification:'Open Sans';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.211408"
+ x="75.800545"
+ y="46.866966"
+ id="text3015"
+ inkscape:label="text_large"><tspan
+ sodipodi:role="line"
+ id="tspan3013"
+ x="75.800545"
+ y="46.866966"
+ style="font-size:15.2214px;line-height:1.25;fill:#000000;fill-opacity:1;stroke-width:0.211408">C</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:1.22862px;line-height:0%;font-family:'Open Sans';-inkscape-font-specification:'Open Sans';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.211408"
+ x="85.763794"
+ y="48.903133"
+ id="text3019"
+ inkscape:label="text_small"><tspan
+ sodipodi:role="line"
+ id="tspan3017"
+ x="85.763794"
+ y="48.903133"
+ style="font-size:7.37174px;line-height:1.25;fill:#000000;fill-opacity:1;stroke-width:0.211408">4</tspan></text>
+ </g>
+ </g>
+ <g
+ id="g3037"
+ transform="matrix(0.28137732,0,0,0.28137732,70.125515,115.87555)"
+ inkscape:label="chunk"
+ style="display:inline">
+ <rect
+ style="display:inline;fill:#e57000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.439473;stroke-dasharray:none;stroke-opacity:1"
+ id="rect3025"
+ width="12.188926"
+ height="12.188926"
+ x="103.01205"
+ y="-259.12012"
+ ry="3.093152"
+ transform="matrix(0,2.6061124,-2.6061124,0,-576.13291,-241.96985)"
+ rx="3.093152"
+ inkscape:label="background" />
+ <g
+ id="g3035"
+ inkscape:label="text"
+ transform="translate(-1.1913705e-5)">
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.5369px;line-height:0%;font-family:'Open Sans';-inkscape-font-specification:'Open Sans';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.211408"
+ x="75.800545"
+ y="46.866966"
+ id="text3029"
+ inkscape:label="text_large"><tspan
+ sodipodi:role="line"
+ id="tspan3027"
+ x="75.800545"
+ y="46.866966"
+ style="font-size:15.2214px;line-height:1.25;fill:#000000;fill-opacity:1;stroke-width:0.211408">C</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:1.22862px;line-height:0%;font-family:'Open Sans';-inkscape-font-specification:'Open Sans';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.211408"
+ x="85.763794"
+ y="48.903133"
+ id="text3033"
+ inkscape:label="text_small"><tspan
+ sodipodi:role="line"
+ id="tspan3031"
+ x="85.763794"
+ y="48.903133"
+ style="font-size:7.37174px;line-height:1.25;fill:#000000;fill-opacity:1;stroke-width:0.211408">7</tspan></text>
+ </g>
+ </g>
+ </g>
+ <g
+ id="g3083"
+ inkscape:label="column2"
+ transform="translate(12.823771,-0.05452)">
+ <g
+ id="g3053"
+ transform="matrix(0.28137732,0,0,0.28137732,69.207994,92.117565)"
+ inkscape:label="chunk"
+ style="display:inline">
+ <rect
+ style="display:inline;fill:#e57000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.439473;stroke-dasharray:none;stroke-opacity:1"
+ id="rect3041"
+ width="12.188926"
+ height="12.188926"
+ x="103.01205"
+ y="-259.12012"
+ ry="3.093152"
+ transform="matrix(0,2.6061124,-2.6061124,0,-576.13291,-241.96985)"
+ rx="3.093152"
+ inkscape:label="background" />
+ <g
+ id="g3051"
+ inkscape:label="text"
+ transform="translate(-1.1913705e-5)">
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.5369px;line-height:0%;font-family:'Open Sans';-inkscape-font-specification:'Open Sans';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.211408"
+ x="75.800545"
+ y="46.866966"
+ id="text3045"
+ inkscape:label="text_large"><tspan
+ sodipodi:role="line"
+ id="tspan3043"
+ x="75.800545"
+ y="46.866966"
+ style="font-size:15.2214px;line-height:1.25;fill:#000000;fill-opacity:1;stroke-width:0.211408">C</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:1.22862px;line-height:0%;font-family:'Open Sans';-inkscape-font-specification:'Open Sans';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.211408"
+ x="85.763794"
+ y="48.903133"
+ id="text3049"
+ inkscape:label="text_small"><tspan
+ sodipodi:role="line"
+ id="tspan3047"
+ x="85.763794"
+ y="48.903133"
+ style="font-size:7.37174px;line-height:1.25;fill:#000000;fill-opacity:1;stroke-width:0.211408">2</tspan></text>
+ </g>
+ </g>
+ <g
+ id="g3067"
+ transform="matrix(0.28137732,0,0,0.28137732,69.207994,104.02382)"
+ inkscape:label="chunk"
+ style="display:inline">
+ <rect
+ style="display:inline;fill:#e57000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.439473;stroke-dasharray:none;stroke-opacity:1"
+ id="rect3055"
+ width="12.188926"
+ height="12.188926"
+ x="103.01205"
+ y="-259.12012"
+ ry="3.093152"
+ transform="matrix(0,2.6061124,-2.6061124,0,-576.13291,-241.96985)"
+ rx="3.093152"
+ inkscape:label="background" />
+ <g
+ id="g3065"
+ inkscape:label="text"
+ transform="translate(-1.1913705e-5)">
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.5369px;line-height:0%;font-family:'Open Sans';-inkscape-font-specification:'Open Sans';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.211408"
+ x="75.800545"
+ y="46.866966"
+ id="text3059"
+ inkscape:label="text_large"><tspan
+ sodipodi:role="line"
+ id="tspan3057"
+ x="75.800545"
+ y="46.866966"
+ style="font-size:15.2214px;line-height:1.25;fill:#000000;fill-opacity:1;stroke-width:0.211408">C</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:1.22862px;line-height:0%;font-family:'Open Sans';-inkscape-font-specification:'Open Sans';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.211408"
+ x="85.763794"
+ y="48.903133"
+ id="text3063"
+ inkscape:label="text_small"><tspan
+ sodipodi:role="line"
+ id="tspan3061"
+ x="85.763794"
+ y="48.903133"
+ style="font-size:7.37174px;line-height:1.25;fill:#000000;fill-opacity:1;stroke-width:0.211408">5</tspan></text>
+ </g>
+ </g>
+ <g
+ id="g3081"
+ transform="matrix(0.28137732,0,0,0.28137732,69.207994,115.93007)"
+ inkscape:label="chunk"
+ style="display:inline">
+ <rect
+ style="display:inline;fill:url(#pattern37450);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.439473;stroke-dasharray:none;stroke-opacity:1"
+ id="rect3069"
+ width="12.188926"
+ height="12.188926"
+ x="103.01205"
+ y="-259.12012"
+ ry="3.093152"
+ transform="matrix(0,2.6061124,-2.6061124,0,-576.13291,-241.96985)"
+ rx="3.093152"
+ inkscape:label="background" />
+ <g
+ id="g3079"
+ inkscape:label="text"
+ transform="translate(-1.1913705e-5)">
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.5369px;line-height:0%;font-family:'Open Sans';-inkscape-font-specification:'Open Sans';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.211408"
+ x="75.800545"
+ y="46.866966"
+ id="text3073"
+ inkscape:label="text_large"><tspan
+ sodipodi:role="line"
+ id="tspan3071"
+ x="75.800545"
+ y="46.866966"
+ style="font-size:15.2214px;line-height:1.25;fill:#000000;fill-opacity:1;stroke-width:0.211408">C</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:1.22862px;line-height:0%;font-family:'Open Sans';-inkscape-font-specification:'Open Sans';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.211408"
+ x="85.763794"
+ y="48.903133"
+ id="text3077"
+ inkscape:label="text_small"><tspan
+ sodipodi:role="line"
+ id="tspan3075"
+ x="85.763794"
+ y="48.903133"
+ style="font-size:7.37174px;line-height:1.25;fill:#000000;fill-opacity:1;stroke-width:0.211408">8</tspan></text>
+ </g>
+ </g>
+ </g>
+ <g
+ id="g3127"
+ inkscape:label="column3"
+ transform="translate(24.730021,-0.05452)">
+ <g
+ id="g3097"
+ transform="matrix(0.28137732,0,0,0.28137732,69.207994,92.117565)"
+ inkscape:label="chunk"
+ style="display:inline">
+ <rect
+ style="display:inline;fill:url(#pattern37450);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.439473;stroke-dasharray:none;stroke-opacity:1"
+ id="rect3085"
+ width="12.188926"
+ height="12.188926"
+ x="103.01205"
+ y="-259.12012"
+ ry="3.093152"
+ transform="matrix(0,2.6061124,-2.6061124,0,-576.13291,-241.96985)"
+ rx="3.093152"
+ inkscape:label="background" />
+ <g
+ id="g3095"
+ inkscape:label="text"
+ transform="translate(-1.1913705e-5)">
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.5369px;line-height:0%;font-family:'Open Sans';-inkscape-font-specification:'Open Sans';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.211408"
+ x="75.800545"
+ y="46.866966"
+ id="text3089"
+ inkscape:label="text_large"><tspan
+ sodipodi:role="line"
+ id="tspan3087"
+ x="75.800545"
+ y="46.866966"
+ style="font-size:15.2214px;line-height:1.25;fill:#000000;fill-opacity:1;stroke-width:0.211408">C</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:1.22862px;line-height:0%;font-family:'Open Sans';-inkscape-font-specification:'Open Sans';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.211408"
+ x="85.763794"
+ y="48.903133"
+ id="text3093"
+ inkscape:label="text_small"><tspan
+ sodipodi:role="line"
+ id="tspan3091"
+ x="85.763794"
+ y="48.903133"
+ style="font-size:7.37174px;line-height:1.25;fill:#000000;fill-opacity:1;stroke-width:0.211408">3</tspan></text>
+ </g>
+ </g>
+ <g
+ id="g3111"
+ transform="matrix(0.28137732,0,0,0.28137732,69.207994,104.02382)"
+ inkscape:label="chunk"
+ style="display:inline">
+ <rect
+ style="display:inline;fill:#4f8eff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.439473;stroke-dasharray:none;stroke-opacity:1"
+ id="rect3099"
+ width="12.188926"
+ height="12.188926"
+ x="103.01205"
+ y="-259.12012"
+ ry="3.093152"
+ transform="matrix(0,2.6061124,-2.6061124,0,-576.13291,-241.96985)"
+ rx="3.093152"
+ inkscape:label="background" />
+ <g
+ id="g3109"
+ inkscape:label="text"
+ transform="translate(-1.1913705e-5)">
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.5369px;line-height:0%;font-family:'Open Sans';-inkscape-font-specification:'Open Sans';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.211408"
+ x="75.800545"
+ y="46.866966"
+ id="text3103"
+ inkscape:label="text_large"><tspan
+ sodipodi:role="line"
+ id="tspan3101"
+ x="75.800545"
+ y="46.866966"
+ style="font-size:15.2214px;line-height:1.25;fill:#000000;fill-opacity:1;stroke-width:0.211408">C</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:1.22862px;line-height:0%;font-family:'Open Sans';-inkscape-font-specification:'Open Sans';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.211408"
+ x="85.763794"
+ y="48.903133"
+ id="text3107"
+ inkscape:label="text_small"><tspan
+ sodipodi:role="line"
+ id="tspan3105"
+ x="85.763794"
+ y="48.903133"
+ style="font-size:7.37174px;line-height:1.25;fill:#000000;fill-opacity:1;stroke-width:0.211408">6</tspan></text>
+ </g>
+ </g>
+ <g
+ id="g3125"
+ transform="matrix(0.28137732,0,0,0.28137732,69.207994,115.93007)"
+ inkscape:label="chunk"
+ style="display:inline">
+ <rect
+ style="display:inline;fill:url(#pattern37450);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.439473;stroke-dasharray:none;stroke-opacity:1"
+ id="rect3113"
+ width="12.188926"
+ height="12.188926"
+ x="103.01205"
+ y="-259.12012"
+ ry="3.093152"
+ transform="matrix(0,2.6061124,-2.6061124,0,-576.13291,-241.96985)"
+ rx="3.093152"
+ inkscape:label="background" />
+ <g
+ id="g3123"
+ inkscape:label="text"
+ transform="translate(-1.1913705e-5)">
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.5369px;line-height:0%;font-family:'Open Sans';-inkscape-font-specification:'Open Sans';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.211408"
+ x="75.800545"
+ y="46.866966"
+ id="text3117"
+ inkscape:label="text_large"><tspan
+ sodipodi:role="line"
+ id="tspan3115"
+ x="75.800545"
+ y="46.866966"
+ style="font-size:15.2214px;line-height:1.25;fill:#000000;fill-opacity:1;stroke-width:0.211408">C</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:1.22862px;line-height:0%;font-family:'Open Sans';-inkscape-font-specification:'Open Sans';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.211408"
+ x="85.763794"
+ y="48.903133"
+ id="text3121"
+ inkscape:label="text_small"><tspan
+ sodipodi:role="line"
+ id="tspan3119"
+ x="85.763794"
+ y="48.903133"
+ style="font-size:7.37174px;line-height:1.25;fill:#000000;fill-opacity:1;stroke-width:0.211408">9</tspan></text>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g
+ id="g3263"
+ inkscape:label="grid4"
+ transform="translate(142.12577,-2.0273229)">
+ <g
+ id="g3173"
+ inkscape:label="column1">
+ <g
+ id="g3143"
+ transform="matrix(0.28137732,0,0,0.28137732,70.125515,92.063045)"
+ inkscape:label="chunk"
+ style="display:inline">
+ <rect
+ style="display:inline;fill:#e57000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.439473;stroke-dasharray:none;stroke-opacity:1"
+ id="rect3131"
+ width="12.188926"
+ height="12.188926"
+ x="103.01205"
+ y="-259.12012"
+ ry="3.093152"
+ transform="matrix(0,2.6061124,-2.6061124,0,-576.13291,-241.96985)"
+ rx="3.093152"
+ inkscape:label="background" />
+ <g
+ id="g3141"
+ inkscape:label="text"
+ transform="translate(-1.1913705e-5)">
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.5369px;line-height:0%;font-family:'Open Sans';-inkscape-font-specification:'Open Sans';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.211408"
+ x="75.800545"
+ y="46.866966"
+ id="text3135"
+ inkscape:label="text_large"><tspan
+ sodipodi:role="line"
+ id="tspan3133"
+ x="75.800545"
+ y="46.866966"
+ style="font-size:15.2214px;line-height:1.25;fill:#000000;fill-opacity:1;stroke-width:0.211408">C</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:1.22862px;line-height:0%;font-family:'Open Sans';-inkscape-font-specification:'Open Sans';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.211408"
+ x="85.763794"
+ y="48.903133"
+ id="text3139"
+ inkscape:label="text_small"><tspan
+ sodipodi:role="line"
+ id="tspan3137"
+ x="85.763794"
+ y="48.903133"
+ style="font-size:7.37174px;line-height:1.25;fill:#000000;fill-opacity:1;stroke-width:0.211408">1</tspan></text>
+ </g>
+ </g>
+ <g
+ id="g3157"
+ transform="matrix(0.28137732,0,0,0.28137732,70.125515,103.9693)"
+ inkscape:label="chunk"
+ style="display:inline">
+ <rect
+ style="display:inline;fill:#e57000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.439473;stroke-dasharray:none;stroke-opacity:1"
+ id="rect3145"
+ width="12.188926"
+ height="12.188926"
+ x="103.01205"
+ y="-259.12012"
+ ry="3.093152"
+ transform="matrix(0,2.6061124,-2.6061124,0,-576.13291,-241.96985)"
+ rx="3.093152"
+ inkscape:label="background" />
+ <g
+ id="g3155"
+ inkscape:label="text"
+ transform="translate(-1.1913705e-5)">
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.5369px;line-height:0%;font-family:'Open Sans';-inkscape-font-specification:'Open Sans';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.211408"
+ x="75.800545"
+ y="46.866966"
+ id="text3149"
+ inkscape:label="text_large"><tspan
+ sodipodi:role="line"
+ id="tspan3147"
+ x="75.800545"
+ y="46.866966"
+ style="font-size:15.2214px;line-height:1.25;fill:#000000;fill-opacity:1;stroke-width:0.211408">C</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:1.22862px;line-height:0%;font-family:'Open Sans';-inkscape-font-specification:'Open Sans';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.211408"
+ x="85.763794"
+ y="48.903133"
+ id="text3153"
+ inkscape:label="text_small"><tspan
+ sodipodi:role="line"
+ id="tspan3151"
+ x="85.763794"
+ y="48.903133"
+ style="font-size:7.37174px;line-height:1.25;fill:#000000;fill-opacity:1;stroke-width:0.211408">4</tspan></text>
+ </g>
+ </g>
+ <g
+ id="g3171"
+ transform="matrix(0.28137732,0,0,0.28137732,70.125515,115.87555)"
+ inkscape:label="chunk"
+ style="display:inline">
+ <rect
+ style="display:inline;fill:#e57000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.439473;stroke-dasharray:none;stroke-opacity:1"
+ id="rect3159"
+ width="12.188926"
+ height="12.188926"
+ x="103.01205"
+ y="-259.12012"
+ ry="3.093152"
+ transform="matrix(0,2.6061124,-2.6061124,0,-576.13291,-241.96985)"
+ rx="3.093152"
+ inkscape:label="background" />
+ <g
+ id="g3169"
+ inkscape:label="text"
+ transform="translate(-1.1913705e-5)">
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.5369px;line-height:0%;font-family:'Open Sans';-inkscape-font-specification:'Open Sans';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.211408"
+ x="75.800545"
+ y="46.866966"
+ id="text3163"
+ inkscape:label="text_large"><tspan
+ sodipodi:role="line"
+ id="tspan3161"
+ x="75.800545"
+ y="46.866966"
+ style="font-size:15.2214px;line-height:1.25;fill:#000000;fill-opacity:1;stroke-width:0.211408">C</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:1.22862px;line-height:0%;font-family:'Open Sans';-inkscape-font-specification:'Open Sans';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.211408"
+ x="85.763794"
+ y="48.903133"
+ id="text3167"
+ inkscape:label="text_small"><tspan
+ sodipodi:role="line"
+ id="tspan3165"
+ x="85.763794"
+ y="48.903133"
+ style="font-size:7.37174px;line-height:1.25;fill:#000000;fill-opacity:1;stroke-width:0.211408">7</tspan></text>
+ </g>
+ </g>
+ </g>
+ <g
+ id="g3217"
+ inkscape:label="column2"
+ transform="translate(12.823771,-0.05452)">
+ <g
+ id="g3187"
+ transform="matrix(0.28137732,0,0,0.28137732,69.207994,92.117565)"
+ inkscape:label="chunk"
+ style="display:inline">
+ <rect
+ style="display:inline;fill:#e57000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.439473;stroke-dasharray:none;stroke-opacity:1"
+ id="rect3175"
+ width="12.188926"
+ height="12.188926"
+ x="103.01205"
+ y="-259.12012"
+ ry="3.093152"
+ transform="matrix(0,2.6061124,-2.6061124,0,-576.13291,-241.96985)"
+ rx="3.093152"
+ inkscape:label="background" />
+ <g
+ id="g3185"
+ inkscape:label="text"
+ transform="translate(-1.1913705e-5)">
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.5369px;line-height:0%;font-family:'Open Sans';-inkscape-font-specification:'Open Sans';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.211408"
+ x="75.800545"
+ y="46.866966"
+ id="text3179"
+ inkscape:label="text_large"><tspan
+ sodipodi:role="line"
+ id="tspan3177"
+ x="75.800545"
+ y="46.866966"
+ style="font-size:15.2214px;line-height:1.25;fill:#000000;fill-opacity:1;stroke-width:0.211408">C</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:1.22862px;line-height:0%;font-family:'Open Sans';-inkscape-font-specification:'Open Sans';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.211408"
+ x="85.763794"
+ y="48.903133"
+ id="text3183"
+ inkscape:label="text_small"><tspan
+ sodipodi:role="line"
+ id="tspan3181"
+ x="85.763794"
+ y="48.903133"
+ style="font-size:7.37174px;line-height:1.25;fill:#000000;fill-opacity:1;stroke-width:0.211408">2</tspan></text>
+ </g>
+ </g>
+ <g
+ id="g3201"
+ transform="matrix(0.28137732,0,0,0.28137732,69.207994,104.02382)"
+ inkscape:label="chunk"
+ style="display:inline">
+ <rect
+ style="display:inline;fill:#e57000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.439473;stroke-dasharray:none;stroke-opacity:1"
+ id="rect3189"
+ width="12.188926"
+ height="12.188926"
+ x="103.01205"
+ y="-259.12012"
+ ry="3.093152"
+ transform="matrix(0,2.6061124,-2.6061124,0,-576.13291,-241.96985)"
+ rx="3.093152"
+ inkscape:label="background" />
+ <g
+ id="g3199"
+ inkscape:label="text"
+ transform="translate(-1.1913705e-5)">
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.5369px;line-height:0%;font-family:'Open Sans';-inkscape-font-specification:'Open Sans';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.211408"
+ x="75.800545"
+ y="46.866966"
+ id="text3193"
+ inkscape:label="text_large"><tspan
+ sodipodi:role="line"
+ id="tspan3191"
+ x="75.800545"
+ y="46.866966"
+ style="font-size:15.2214px;line-height:1.25;fill:#000000;fill-opacity:1;stroke-width:0.211408">C</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:1.22862px;line-height:0%;font-family:'Open Sans';-inkscape-font-specification:'Open Sans';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.211408"
+ x="85.763794"
+ y="48.903133"
+ id="text3197"
+ inkscape:label="text_small"><tspan
+ sodipodi:role="line"
+ id="tspan3195"
+ x="85.763794"
+ y="48.903133"
+ style="font-size:7.37174px;line-height:1.25;fill:#000000;fill-opacity:1;stroke-width:0.211408">5</tspan></text>
+ </g>
+ </g>
+ <g
+ id="g3215"
+ transform="matrix(0.28137732,0,0,0.28137732,69.207994,115.93007)"
+ inkscape:label="chunk"
+ style="display:inline">
+ <rect
+ style="display:inline;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.439468;stroke-dasharray:0.439468, 0.878937;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect3203"
+ width="12.188926"
+ height="12.188926"
+ x="103.01205"
+ y="-259.12012"
+ ry="3.093152"
+ transform="matrix(0,2.6061124,-2.6061124,0,-576.13291,-241.96985)"
+ rx="3.093152"
+ inkscape:label="background" />
+ <g
+ id="g3213"
+ inkscape:label="text"
+ transform="translate(-1.1913705e-5)">
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.5369px;line-height:0%;font-family:'Open Sans';-inkscape-font-specification:'Open Sans';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.211408"
+ x="75.800545"
+ y="46.866966"
+ id="text3207"
+ inkscape:label="text_large"><tspan
+ sodipodi:role="line"
+ id="tspan3205"
+ x="75.800545"
+ y="46.866966"
+ style="font-size:15.2214px;line-height:1.25;fill:#000000;fill-opacity:1;stroke-width:0.211408">C</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:1.22862px;line-height:0%;font-family:'Open Sans';-inkscape-font-specification:'Open Sans';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.211408"
+ x="85.763794"
+ y="48.903133"
+ id="text3211"
+ inkscape:label="text_small"><tspan
+ sodipodi:role="line"
+ id="tspan3209"
+ x="85.763794"
+ y="48.903133"
+ style="font-size:7.37174px;line-height:1.25;fill:#000000;fill-opacity:1;stroke-width:0.211408">8</tspan></text>
+ </g>
+ </g>
+ </g>
+ <g
+ id="g3261"
+ inkscape:label="column3"
+ transform="translate(24.730021,-0.05452)">
+ <g
+ id="g3231"
+ transform="matrix(0.28137732,0,0,0.28137732,69.207994,92.117565)"
+ inkscape:label="chunk"
+ style="display:inline">
+ <rect
+ style="display:inline;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.439468;stroke-dasharray:0.439468, 0.878937;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect3219"
+ width="12.188926"
+ height="12.188926"
+ x="103.01205"
+ y="-259.12012"
+ ry="3.093152"
+ transform="matrix(0,2.6061124,-2.6061124,0,-576.13291,-241.96985)"
+ rx="3.093152"
+ inkscape:label="background" />
+ <g
+ id="g3229"
+ inkscape:label="text"
+ transform="translate(-1.1913705e-5)">
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.5369px;line-height:0%;font-family:'Open Sans';-inkscape-font-specification:'Open Sans';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.211408"
+ x="75.800545"
+ y="46.866966"
+ id="text3223"
+ inkscape:label="text_large"><tspan
+ sodipodi:role="line"
+ id="tspan3221"
+ x="75.800545"
+ y="46.866966"
+ style="font-size:15.2214px;line-height:1.25;fill:#000000;fill-opacity:1;stroke-width:0.211408">C</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:1.22862px;line-height:0%;font-family:'Open Sans';-inkscape-font-specification:'Open Sans';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.211408"
+ x="85.763794"
+ y="48.903133"
+ id="text3227"
+ inkscape:label="text_small"><tspan
+ sodipodi:role="line"
+ id="tspan3225"
+ x="85.763794"
+ y="48.903133"
+ style="font-size:7.37174px;line-height:1.25;fill:#000000;fill-opacity:1;stroke-width:0.211408">3</tspan></text>
+ </g>
+ </g>
+ <g
+ id="g3245"
+ transform="matrix(0.28137732,0,0,0.28137732,69.207994,104.02382)"
+ inkscape:label="chunk"
+ style="display:inline">
+ <rect
+ style="display:inline;fill:#ffdb6a;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.439473;stroke-dasharray:none;stroke-opacity:1"
+ id="rect3233"
+ width="12.188926"
+ height="12.188926"
+ x="103.01205"
+ y="-259.12012"
+ ry="3.093152"
+ transform="matrix(0,2.6061124,-2.6061124,0,-576.13291,-241.96985)"
+ rx="3.093152"
+ inkscape:label="background" />
+ <g
+ id="g3243"
+ inkscape:label="text"
+ transform="translate(-1.1913705e-5)">
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.5369px;line-height:0%;font-family:'Open Sans';-inkscape-font-specification:'Open Sans';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.211408"
+ x="75.800545"
+ y="46.866966"
+ id="text3237"
+ inkscape:label="text_large"><tspan
+ sodipodi:role="line"
+ id="tspan3235"
+ x="75.800545"
+ y="46.866966"
+ style="font-size:15.2214px;line-height:1.25;fill:#000000;fill-opacity:1;stroke-width:0.211408">C</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:1.22862px;line-height:0%;font-family:'Open Sans';-inkscape-font-specification:'Open Sans';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.211408"
+ x="85.763794"
+ y="48.903133"
+ id="text3241"
+ inkscape:label="text_small"><tspan
+ sodipodi:role="line"
+ id="tspan3239"
+ x="85.763794"
+ y="48.903133"
+ style="font-size:7.37174px;line-height:1.25;fill:#000000;fill-opacity:1;stroke-width:0.211408">6</tspan></text>
+ </g>
+ </g>
+ <g
+ id="g3259"
+ transform="matrix(0.28137732,0,0,0.28137732,69.207994,115.93007)"
+ inkscape:label="chunk"
+ style="display:inline">
+ <rect
+ style="display:inline;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.439468;stroke-dasharray:0.439468, 0.878937;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect3247"
+ width="12.188926"
+ height="12.188926"
+ x="103.01205"
+ y="-259.12012"
+ ry="3.093152"
+ transform="matrix(0,2.6061124,-2.6061124,0,-576.13291,-241.96985)"
+ rx="3.093152"
+ inkscape:label="background" />
+ <g
+ id="g3257"
+ inkscape:label="text"
+ transform="translate(-1.1913705e-5)">
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.5369px;line-height:0%;font-family:'Open Sans';-inkscape-font-specification:'Open Sans';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.211408"
+ x="75.800545"
+ y="46.866966"
+ id="text3251"
+ inkscape:label="text_large"><tspan
+ sodipodi:role="line"
+ id="tspan3249"
+ x="75.800545"
+ y="46.866966"
+ style="font-size:15.2214px;line-height:1.25;fill:#000000;fill-opacity:1;stroke-width:0.211408">C</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:1.22862px;line-height:0%;font-family:'Open Sans';-inkscape-font-specification:'Open Sans';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.211408"
+ x="85.763794"
+ y="48.903133"
+ id="text3255"
+ inkscape:label="text_small"><tspan
+ sodipodi:role="line"
+ id="tspan3253"
+ x="85.763794"
+ y="48.903133"
+ style="font-size:7.37174px;line-height:1.25;fill:#000000;fill-opacity:1;stroke-width:0.211408">9</tspan></text>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g
+ id="g38664"
+ inkscape:label="description"
+ transform="translate(-16.174423)">
+ <text
+ id="text3668"
+ y="176.27962"
+ x="69.464737"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.97569px;line-height:1.25;font-family:'Open Sans';-inkscape-font-specification:'Open Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#464d4d;fill-opacity:1;stroke:none;stroke-width:0.11765"
+ xml:space="preserve"
+ inkscape:label="used"><tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93889px;font-family:'Open Sans';-inkscape-font-specification:'Open Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#464d4d;fill-opacity:1;stroke-width:0.11765"
+ y="176.27962"
+ x="69.464737"
+ id="tspan3666"
+ sodipodi:role="line">used chunk (atime newer t<tspan
+ style="font-size:65%;baseline-shift:sub"
+ id="tspan4566">cutoff</tspan>)</tspan></text>
+ <text
+ id="text7464"
+ y="185.72391"
+ x="69.464737"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93889px;line-height:1.25;font-family:'Open Sans';-inkscape-font-specification:'Open Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#464d4d;fill-opacity:1;stroke:none;stroke-width:0.11765"
+ xml:space="preserve"
+ inkscape:label="unused"><tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93889px;font-family:'Open Sans';-inkscape-font-specification:'Open Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#464d4d;fill-opacity:1;stroke-width:0.11765"
+ y="185.72391"
+ x="69.464737"
+ id="tspan7462"
+ sodipodi:role="line">unused chunk (atime newer t<tspan
+ style="font-size:65%;baseline-shift:sub"
+ id="tspan4568">cutoff</tspan>)</tspan></text>
+ <g
+ id="g2777"
+ transform="matrix(0.22510186,0,0,0.22510186,46.46788,164.87529)"
+ inkscape:label="chunk"
+ style="display:inline">
+ <rect
+ style="display:inline;fill:#e57000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.14532;stroke-dasharray:none;stroke-opacity:1"
+ id="rect2765"
+ width="31.765711"
+ height="31.765711"
+ x="26.491123"
+ y="-94.946838"
+ ry="8.0611019"
+ transform="rotate(90)"
+ rx="8.0611019"
+ inkscape:label="background" />
+ </g>
+ <g
+ id="g10298"
+ transform="matrix(0.22510186,0,0,0.22510186,46.53104,174.31958)"
+ inkscape:label="chunk"
+ style="display:inline">
+ <rect
+ style="display:inline;fill:#4f8eff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.14532;stroke-dasharray:none;stroke-opacity:1"
+ id="rect10286"
+ width="31.765711"
+ height="31.765711"
+ x="26.491123"
+ y="-94.666252"
+ ry="8.0611019"
+ transform="rotate(90)"
+ rx="8.0611019"
+ inkscape:label="background" />
+ </g>
+ <text
+ id="text27060"
+ y="176.19287"
+ x="271.79565"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.97569px;line-height:1.25;font-family:'Open Sans';-inkscape-font-specification:'Open Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#464d4d;fill-opacity:1;stroke:none;stroke-width:0.11765"
+ xml:space="preserve"
+ inkscape:label="used"><tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93889px;font-family:'Open Sans';-inkscape-font-specification:'Open Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#464d4d;fill-opacity:1;stroke-width:0.11765"
+ y="176.19287"
+ x="271.79565"
+ sodipodi:role="line"
+ id="tspan27314">pending</tspan></text>
+ <text
+ id="text27064"
+ y="185.63716"
+ x="271.79565"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.97569px;line-height:1.25;font-family:'Open Sans';-inkscape-font-specification:'Open Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#464d4d;fill-opacity:1;stroke:none;stroke-width:0.11765"
+ xml:space="preserve"
+ inkscape:label="unused"><tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93889px;font-family:'Open Sans';-inkscape-font-specification:'Open Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#464d4d;fill-opacity:1;stroke-width:0.11765"
+ y="185.63716"
+ x="271.79565"
+ sodipodi:role="line"
+ id="tspan27318">deleted</tspan></text>
+ <g
+ id="g27068"
+ transform="matrix(0.22510186,0,0,0.22510186,248.79828,164.78854)"
+ inkscape:label="chunk"
+ style="display:inline">
+ <rect
+ style="display:inline;fill:#ffdb6a;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.14532;stroke-dasharray:none;stroke-opacity:1"
+ id="rect27066"
+ width="31.765711"
+ height="31.765711"
+ x="26.491123"
+ y="-94.946838"
+ ry="8.0611019"
+ transform="rotate(90)"
+ rx="8.0611019"
+ inkscape:label="background" />
+ </g>
+ <g
+ id="g27072"
+ transform="matrix(0.22510186,0,0,0.22510186,248.86144,174.23283)"
+ inkscape:label="chunk"
+ style="display:inline">
+ <rect
+ style="display:inline;fill:none;fill-opacity:0.6;fill-rule:evenodd;stroke:#000000;stroke-width:1.14483;stroke-dasharray:1.14483, 2.28967;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect27070"
+ width="31.765711"
+ height="31.765711"
+ x="26.491123"
+ y="-94.666252"
+ ry="8.0611019"
+ transform="rotate(90)"
+ rx="8.0611019"
+ inkscape:label="background" />
+ </g>
+ <text
+ id="text27044"
+ y="176.19287"
+ x="170.62993"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.97569px;line-height:1.25;font-family:'Open Sans';-inkscape-font-specification:'Open Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#464d4d;fill-opacity:1;stroke:none;stroke-width:0.11765"
+ xml:space="preserve"
+ inkscape:label="used"><tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93889px;font-family:'Open Sans';-inkscape-font-specification:'Open Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#464d4d;fill-opacity:1;stroke-width:0.11765"
+ y="176.19287"
+ x="170.62993"
+ id="tspan27042"
+ sodipodi:role="line">used chunk (atime older t<tspan
+ style="font-size:65%;baseline-shift:sub"
+ id="tspan4570">cutoff</tspan>)</tspan></text>
+ <text
+ id="text27048"
+ y="185.63716"
+ x="170.62993"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.97569px;line-height:1.25;font-family:'Open Sans';-inkscape-font-specification:'Open Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#464d4d;fill-opacity:1;stroke:none;stroke-width:0.11765"
+ xml:space="preserve"
+ inkscape:label="unused"><tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93889px;font-family:'Open Sans';-inkscape-font-specification:'Open Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#464d4d;fill-opacity:1;stroke-width:0.11765"
+ y="185.63716"
+ x="170.62993"
+ id="tspan27046"
+ sodipodi:role="line">unused chunk (atime older t<tspan
+ style="font-size:65%;baseline-shift:sub"
+ id="tspan4572">cutoff</tspan>)</tspan></text>
+ <g
+ id="g2947"
+ transform="matrix(0.22510186,0,0,0.22510186,146.68396,174.31959)"
+ inkscape:label="chunk"
+ style="display:inline">
+ <rect
+ style="display:inline;fill:url(#pattern37450);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.439473;stroke-dasharray:none;stroke-opacity:1"
+ id="rect2935"
+ width="12.188926"
+ height="12.188926"
+ x="103.01205"
+ y="-259.12012"
+ ry="3.093152"
+ transform="matrix(0,2.6061124,-2.6061124,0,-576.13291,-241.96985)"
+ rx="3.093152"
+ inkscape:label="background" />
+ </g>
+ <g
+ id="g38446"
+ transform="matrix(0.22510186,0,0,0.22510186,146.68396,164.87529)"
+ inkscape:label="chunk"
+ style="display:inline">
+ <rect
+ style="display:inline;fill:url(#pattern37287);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.439473;stroke-dasharray:none;stroke-opacity:1"
+ id="rect38434"
+ width="12.188926"
+ height="12.188926"
+ x="103.01205"
+ y="-259.12012"
+ ry="3.093152"
+ transform="matrix(0,2.6061124,-2.6061124,0,-576.13291,-241.96985)"
+ rx="3.093152"
+ inkscape:label="background" />
+ </g>
+ </g>
+ </g>
+</svg>
diff --git a/docs/maintenance.rst b/docs/maintenance.rst
index e25c8f19..a23e5c21 100644
--- a/docs/maintenance.rst
+++ b/docs/maintenance.rst
@@ -233,6 +233,31 @@ by the GC as it cannot be certain whether they are still needed.
which is 24 hours by default.
+Timing Example
+^^^^^^^^^^^^^^
+
+.. figure:: images/garbage-collection-timing.svg
+ :class: proxmox-svg
+ :alt: Garbage Collection timing
+
+t\ :sub:`0`\:
+All chunks are part of the backup indices. Some chunks have a newer
+``atime`` than the cut-off time, while others have not been accessed
+for a while (e.g. because they were only created by a new backup).
+
+t\ :sub:`1`\:
+A backup has been deleted and some chunks are no longer used
+
+t\ :sub:`2`\:
+The first phase of the GC begins and the ``atime`` of the chunks that
+are still being used by a backup are updated
+
+t\ :sub:`3`\:
+The second phase of the GC begins. Chunks that have not been used and
+whose ``atime`` is older than the cut-off time are deleted. Chunks that
+have not been used but whose ``atime`` is newer than the cut-off time
+are not yet deleted, but are marked as pending as a precaution.
+
Manually Starting GC
^^^^^^^^^^^^^^^^^^^^
--
2.39.2
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [pbs-devel] [PATCH proxmox-backup v2 1/3] docs: centralise and update garbage collection description
2024-04-05 13:05 ` [pbs-devel] [PATCH proxmox-backup v2 1/3] docs: centralise and update garbage collection description Hannes Duerr
@ 2024-04-08 9:20 ` Fabian Grünbichler
2024-04-10 13:38 ` Hannes Dürr
0 siblings, 1 reply; 11+ messages in thread
From: Fabian Grünbichler @ 2024-04-08 9:20 UTC (permalink / raw)
To: Proxmox Backup Server development discussion
On April 5, 2024 3:05 pm, Hannes Duerr wrote:
> The "backup client usage" chapter describes a grace period that is 24
> hours and 5 minutes long, and unconnected to this a cut-off time is
> mentioned under "maintenance tasks", which leads to confusion. Therefore
> we summarise the entire description of garbage collection under
> "maintenance tasks" and link to it in the "backup client usage" chapter
>
> Signed-off-by: Hannes Duerr <h.duerr@proxmox.com>
> ---
> docs/backup-client.rst | 16 +++---------
> docs/maintenance.rst | 57 ++++++++++++++++++++++++++++++------------
> 2 files changed, 44 insertions(+), 29 deletions(-)
>
> diff --git a/docs/backup-client.rst b/docs/backup-client.rst
> index 00a1abbb..d015b844 100644
> --- a/docs/backup-client.rst
> +++ b/docs/backup-client.rst
> @@ -735,25 +735,15 @@ command. It is recommended to carry out garbage collection on a regular basis.
>
> The garbage collection works in two phases. In the first phase, all
> data blocks that are still in use are marked. In the second phase,
> -unused data blocks are removed.
> +unused data blocks are removed. A more detailed description of the GC
> +can be found :ref:`here <maintenance_gc>`.
> +
>
> .. note:: This command needs to read all existing backup index files
> and touches the complete chunk-store. This can take a long time
> depending on the number of chunks and the speed of the underlying
> disks.
>
> -.. note:: The garbage collection will only remove chunks that haven't been used
> - for at least one day (exactly 24h 5m). This grace period is necessary because
> - chunks in use are marked by touching the chunk which updates the ``atime``
> - (access time) property. Filesystems are mounted with the ``relatime`` option
> - by default. This results in a better performance by only updating the
> - ``atime`` property if the last access has been at least 24 hours ago. The
> - downside is that touching a chunk within these 24 hours will not always
> - update its ``atime`` property.
> -
> - Chunks in the grace period will be logged at the end of the garbage
> - collection task as *Pending removals*.
> -
> .. code-block:: console
>
> # proxmox-backup-client garbage-collect
> diff --git a/docs/maintenance.rst b/docs/maintenance.rst
> index 6dbb6941..e25c8f19 100644
> --- a/docs/maintenance.rst
> +++ b/docs/maintenance.rst
> @@ -171,8 +171,8 @@ It's recommended to setup a schedule to ensure that unused space is cleaned up
> periodically. For most setups a weekly schedule provides a good interval to
> start.
>
> -GC Background
> -^^^^^^^^^^^^^
> +Overview
> +^^^^^^^^
>
> In `Proxmox Backup`_ Server, backup data is not saved directly, but rather as
> chunks that are referred to by the indexes of each backup snapshot. This
> @@ -187,26 +187,51 @@ references to the same chunks on every snapshot deletion. Moreover, locking the
> entire datastore is not feasible because new backups would be blocked until the deletion
> process was complete.
>
> -Therefore, Proxmox Backup Server uses a garbage collection (GC) process to
> +Therefore, Proxmox Backup Server uses a `tracing garbage collection
> +<https://en.wikipedia.org/wiki/Tracing_garbage_collection>`_ algorithm to
> identify and remove the unused backup chunks that are no longer needed by any
> -snapshot in the datastore. The GC process is designed to efficiently reclaim
> +snapshot in the datastore. The GC algorithm is designed to efficiently reclaim
> the space occupied by these chunks with low impact on the performance of the
> datastore or interfering with other backups.
>
> -The garbage collection (GC) process is performed per datastore and is split
> -into two phases:
> +The GC is performed per datastore and is split into two phases:
>
> -- Phase one: Mark
> - All index files are read, and the access time of the referred chunk files is
> - updated.
> +- Phase one - Mark:
> +
> + Read all index files and update the ``atime`` (access time) of the relevant
> + chunk files.
I'd replace "relevant" with "referenced" here, it is more concrete and
matches the terminology below
> +
> +- Phase two - Sweep:
> +
> + Iterate over all chunks and check the ``atime`` of the files. If
> + the ``atime`` is older than the cut-off time, the chunk was neither
> + referenced in a backup index nor is it part of a running backup that
> + does not yet have an index to search. As such, safely remove the chunk.
nor was it recently created as part of a running backup task, but is not
referenced yet by any finished index file. Such chunks can be safely
removed since they are no longer needed.
(Safely remove implies that we do some special removing that is safe ;))
> +
> +
> +Cut-off Time
> +^^^^^^^^^^^^
> +
> +The GC only clears the chunks that were last accessed before the
s/clears/removes/
> +cut-off time. The cut-off time is determined by whichever is earlier:
is determined *at the start of the GC task*
this is an important detail that helps understanding for more
technically inclined readers
> +
> +- 24 hours and 5 minutes before the start of the garbage collection
> + due to the mounting of the data storage with ``relatime``, or
"before the start of .. due to" is a bit confusing. maybe:
- 24 hours before the start of the garbage collection (to
account for the datastore potentially being mounted with ``relatime``).
> +
> +- the start time of the oldest active backup job that has been running
> + for longer than 24 hours and 5 minutes at the beginning of the
> + garbage collection. This is necessary because the newly created
> + backup could refer to blocks, but the GC would not notice this as
> + there is no index of the backup that could be searched.
the whole "that has been" can be dropped. the cut off is determined by
whichever is earlier:
- now - 24h
- start time of oldest backup writer
with an extra 5m of safety margin added in any case - not just the 24h
one!
- the start time of the oldest active backup job (to account for newly
written chunks that are not yet referenced by any finished snapshot)
is a bit shorter and IMHO conveys the same information
> +
> +Chunks accessed after the cut-off time are marked as *Pending removals*
> +by the GC as it cannot be certain whether they are still needed.
this is rather incomplete and a bit hard to parse as well. I'd replace
"accessed after" with "with an atime after".
pending is actually:
- chunks with atime between the cut-off and the oldest writer (if one
exists)
- chunks with atime between the cut-off and the start of GC (if no
writer exists at the start)
this normally means chunks of snapshots which have been recently
forgotten/pruned. it can also mean freshly uploaded chunks of recently
aborted backup tasks.
> +
> +.. Note:: Mounting a volume with ``relatime`` means that the ``atime``
> + of the chunk files is not updated every time, but only when the
> + data has changed or the ``atime`` was before a certain time,
> + which is 24 hours by default.
>
> -- Phase two: Sweep
> - The task iterates over all chunks, checks their file access time, and if it
> - is older than the cutoff time (i.e., the time when GC started, plus some
> - headroom for safety and Linux file system behavior), the task knows that the
> - chunk was neither referred to in any backup index nor part of any currently
> - running backup that has no index to scan for. As such, the chunk can be
> - safely deleted.
>
> Manually Starting GC
> ^^^^^^^^^^^^^^^^^^^^
> --
> 2.39.2
>
>
>
> _______________________________________________
> pbs-devel mailing list
> pbs-devel@lists.proxmox.com
> https://lists.proxmox.com/cgi-bin/mailman/listinfo/pbs-devel
>
>
>
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [pbs-devel] [PATCH proxmox-backup v2 2/3] docs: add custom class for svgs
2024-04-05 13:05 ` [pbs-devel] [PATCH proxmox-backup v2 2/3] docs: add custom class for svgs Hannes Duerr
@ 2024-04-08 9:23 ` Fabian Grünbichler
2024-04-08 10:57 ` Hannes Dürr
0 siblings, 1 reply; 11+ messages in thread
From: Fabian Grünbichler @ 2024-04-08 9:23 UTC (permalink / raw)
To: Proxmox Backup Server development discussion
On April 5, 2024 3:05 pm, Hannes Duerr wrote:
> Unfortunately, the width attribute for svgs is ignored in sphinx version
> 5.3.0. Therefore we create a class which applies a width of 100% as we
> want svgs
>
> Signed-off-by: Hannes Duerr <h.duerr@proxmox.com>
> ---
> docs/_static/custom.css | 5 +++++
> 1 file changed, 5 insertions(+)
>
> diff --git a/docs/_static/custom.css b/docs/_static/custom.css
> index 7022b532..8c3c3e19 100644
> --- a/docs/_static/custom.css
> +++ b/docs/_static/custom.css
wrong path ;) this is the copy in the generated part of the docs, the
source is ./docs/custom.css
> @@ -10,6 +10,11 @@ h1.logo-name {
> div.body img {
> width: 250px;
> }
> +
> +div.body img.proxmox-svg {
> + width: 100%;
> +}
> +
> pre {
> padding: 5px 10px;
> }
> --
> 2.39.2
>
>
>
> _______________________________________________
> pbs-devel mailing list
> pbs-devel@lists.proxmox.com
> https://lists.proxmox.com/cgi-bin/mailman/listinfo/pbs-devel
>
>
>
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [pbs-devel] [PATCH proxmox-backup v2 3/3] docs: add garbage collection timing example
2024-04-05 13:05 ` [pbs-devel] [PATCH proxmox-backup v2 3/3] docs: add garbage collection timing example Hannes Duerr
@ 2024-04-08 9:35 ` Fabian Grünbichler
2024-04-08 11:11 ` Hannes Dürr
0 siblings, 1 reply; 11+ messages in thread
From: Fabian Grünbichler @ 2024-04-08 9:35 UTC (permalink / raw)
To: Proxmox Backup Server development discussion
On April 5, 2024 3:05 pm, Hannes Duerr wrote:
> To make the garbage collection process easier to understand, we add a
> timing example with a graphic.
>
> Signed-off-by: Hannes Duerr <h.duerr@proxmox.com>
> ---
> docs/images/garbage-collection-timing.svg | 2513 +++++++++++++++++++++
> docs/maintenance.rst | 25 +
> 2 files changed, 2538 insertions(+)
> create mode 100644 docs/images/garbage-collection-timing.svg
>
> diff --git a/docs/images/garbage-collection-timing.svg b/docs/images/garbage-collection-timing.svg
> new file mode 100644
> index 00000000..8108ee23
> --- /dev/null
> +++ b/docs/images/garbage-collection-timing.svg
[snip]
> diff --git a/docs/maintenance.rst b/docs/maintenance.rst
> index e25c8f19..a23e5c21 100644
> --- a/docs/maintenance.rst
> +++ b/docs/maintenance.rst
> @@ -233,6 +233,31 @@ by the GC as it cannot be certain whether they are still needed.
> which is 24 hours by default.
>
>
> +Timing Example
> +^^^^^^^^^^^^^^
> +
> +.. figure:: images/garbage-collection-timing.svg
> + :class: proxmox-svg
> + :alt: Garbage Collection timing
> +
> +t\ :sub:`0`\:
> +All chunks are part of the backup indices. Some chunks have a newer
> +``atime`` than the cut-off time, while others have not been accessed
> +for a while (e.g. because they were only created by a new backup).
> +
> +t\ :sub:`1`\:
> +A backup has been deleted and some chunks are no longer used
> +
> +t\ :sub:`2`\:
> +The first phase of the GC begins and the ``atime`` of the chunks that
> +are still being used by a backup are updated
> +
> +t\ :sub:`3`\:
> +The second phase of the GC begins. Chunks that have not been used and
> +whose ``atime`` is older than the cut-off time are deleted. Chunks that
> +have not been used but whose ``atime`` is newer than the cut-off time
> +are not yet deleted, but are marked as pending as a precaution.
I think a visualization might help understand how GC, backup tasks and
pruning interact. I am not sure this one is "it", though ;)
Maybe changing the time to flow downwards would give more space in the
horizontal axis to display indices and chunks at a certain point in
time? At least for me, the arrangement of the chunks between the time
markers throws me off..
> +
> Manually Starting GC
> ^^^^^^^^^^^^^^^^^^^^
>
> --
> 2.39.2
>
>
>
> _______________________________________________
> pbs-devel mailing list
> pbs-devel@lists.proxmox.com
> https://lists.proxmox.com/cgi-bin/mailman/listinfo/pbs-devel
>
>
>
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [pbs-devel] [PATCH proxmox-backup v2 2/3] docs: add custom class for svgs
2024-04-08 9:23 ` Fabian Grünbichler
@ 2024-04-08 10:57 ` Hannes Dürr
0 siblings, 0 replies; 11+ messages in thread
From: Hannes Dürr @ 2024-04-08 10:57 UTC (permalink / raw)
To: Proxmox Backup Server development discussion, Fabian Grünbichler
On 4/8/24 11:23, Fabian Grünbichler wrote:
> On April 5, 2024 3:05 pm, Hannes Duerr wrote:
>> Unfortunately, the width attribute for svgs is ignored in sphinx version
>> 5.3.0. Therefore we create a class which applies a width of 100% as we
>> want svgs
>>
>> Signed-off-by: Hannes Duerr <h.duerr@proxmox.com>
>> ---
>> docs/_static/custom.css | 5 +++++
>> 1 file changed, 5 insertions(+)
>>
>> diff --git a/docs/_static/custom.css b/docs/_static/custom.css
>> index 7022b532..8c3c3e19 100644
>> --- a/docs/_static/custom.css
>> +++ b/docs/_static/custom.css
> wrong path ;) this is the copy in the generated part of the docs, the
> source is ./docs/custom.css
In Version two i added that the patch series builds on top of another
series,
where the source of the file was changed.
>> @@ -10,6 +10,11 @@ h1.logo-name {
>> div.body img {
>> width: 250px;
>> }
>> +
>> +div.body img.proxmox-svg {
>> + width: 100%;
>> +}
>> +
>> pre {
>> padding: 5px 10px;
>> }
>> --
>> 2.39.2
>>
>>
>>
>> _______________________________________________
>> pbs-devel mailing list
>> pbs-devel@lists.proxmox.com
>> https://lists.proxmox.com/cgi-bin/mailman/listinfo/pbs-devel
>>
>>
>>
>
> _______________________________________________
> pbs-devel mailing list
> pbs-devel@lists.proxmox.com
> https://lists.proxmox.com/cgi-bin/mailman/listinfo/pbs-devel
>
>
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [pbs-devel] [PATCH proxmox-backup v2 3/3] docs: add garbage collection timing example
2024-04-08 9:35 ` Fabian Grünbichler
@ 2024-04-08 11:11 ` Hannes Dürr
0 siblings, 0 replies; 11+ messages in thread
From: Hannes Dürr @ 2024-04-08 11:11 UTC (permalink / raw)
To: Proxmox Backup Server development discussion, Fabian Grünbichler
On 4/8/24 11:35, Fabian Grünbichler wrote:
> On April 5, 2024 3:05 pm, Hannes Duerr wrote:
>> To make the garbage collection process easier to understand, we add a
>> timing example with a graphic.
>>
>> Signed-off-by: Hannes Duerr <h.duerr@proxmox.com>
>> ---
>> docs/images/garbage-collection-timing.svg | 2513 +++++++++++++++++++++
>> docs/maintenance.rst | 25 +
>> 2 files changed, 2538 insertions(+)
>> create mode 100644 docs/images/garbage-collection-timing.svg
>>
>> diff --git a/docs/images/garbage-collection-timing.svg b/docs/images/garbage-collection-timing.svg
>> new file mode 100644
>> index 00000000..8108ee23
>> --- /dev/null
>> +++ b/docs/images/garbage-collection-timing.svg
> [snip]
>
>> diff --git a/docs/maintenance.rst b/docs/maintenance.rst
>> index e25c8f19..a23e5c21 100644
>> --- a/docs/maintenance.rst
>> +++ b/docs/maintenance.rst
>> @@ -233,6 +233,31 @@ by the GC as it cannot be certain whether they are still needed.
>> which is 24 hours by default.
>>
>>
>> +Timing Example
>> +^^^^^^^^^^^^^^
>> +
>> +.. figure:: images/garbage-collection-timing.svg
>> + :class: proxmox-svg
>> + :alt: Garbage Collection timing
>> +
>> +t\ :sub:`0`\:
>> +All chunks are part of the backup indices. Some chunks have a newer
>> +``atime`` than the cut-off time, while others have not been accessed
>> +for a while (e.g. because they were only created by a new backup).
>> +
>> +t\ :sub:`1`\:
>> +A backup has been deleted and some chunks are no longer used
>> +
>> +t\ :sub:`2`\:
>> +The first phase of the GC begins and the ``atime`` of the chunks that
>> +are still being used by a backup are updated
>> +
>> +t\ :sub:`3`\:
>> +The second phase of the GC begins. Chunks that have not been used and
>> +whose ``atime`` is older than the cut-off time are deleted. Chunks that
>> +have not been used but whose ``atime`` is newer than the cut-off time
>> +are not yet deleted, but are marked as pending as a precaution.
> I think a visualization might help understand how GC, backup tasks and
> pruning interact. I am not sure this one is "it", though ;)
>
> Maybe changing the time to flow downwards would give more space in the
> horizontal axis to display indices and chunks at a certain point in
> time? At least for me, the arrangement of the chunks between the time
> markers throws me off..
As discussed offlist, a possible compromise would be to split the
graphics into 3 with
descriptive text in between to make it clear that the graphics represent
a moment
during a phase.
>> +
>> Manually Starting GC
>> ^^^^^^^^^^^^^^^^^^^^
>>
>> --
>> 2.39.2
>>
>>
>>
>> _______________________________________________
>> pbs-devel mailing list
>> pbs-devel@lists.proxmox.com
>> https://lists.proxmox.com/cgi-bin/mailman/listinfo/pbs-devel
>>
>>
>>
>
> _______________________________________________
> pbs-devel mailing list
> pbs-devel@lists.proxmox.com
> https://lists.proxmox.com/cgi-bin/mailman/listinfo/pbs-devel
>
>
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [pbs-devel] [PATCH proxmox-backup v2 1/3] docs: centralise and update garbage collection description
2024-04-08 9:20 ` Fabian Grünbichler
@ 2024-04-10 13:38 ` Hannes Dürr
2024-04-11 7:22 ` Fabian Grünbichler
0 siblings, 1 reply; 11+ messages in thread
From: Hannes Dürr @ 2024-04-10 13:38 UTC (permalink / raw)
To: Proxmox Backup Server development discussion, Fabian Grünbichler
On 4/8/24 11:20, Fabian Grünbichler wrote:
> On April 5, 2024 3:05 pm, Hannes Duerr wrote:
>> The "backup client usage" chapter describes a grace period that is 24
>> hours and 5 minutes long, and unconnected to this a cut-off time is
>> mentioned under "maintenance tasks", which leads to confusion. Therefore
>> we summarise the entire description of garbage collection under
>> "maintenance tasks" and link to it in the "backup client usage" chapter
>>
>> Signed-off-by: Hannes Duerr <h.duerr@proxmox.com>
>> ---
>> docs/backup-client.rst | 16 +++---------
>> docs/maintenance.rst | 57 ++++++++++++++++++++++++++++++------------
>> 2 files changed, 44 insertions(+), 29 deletions(-)
>>
>> diff --git a/docs/backup-client.rst b/docs/backup-client.rst
>> index 00a1abbb..d015b844 100644
>> --- a/docs/backup-client.rst
>> +++ b/docs/backup-client.rst
>> @@ -735,25 +735,15 @@ command. It is recommended to carry out garbage collection on a regular basis.
>>
>> The garbage collection works in two phases. In the first phase, all
>> data blocks that are still in use are marked. In the second phase,
>> -unused data blocks are removed.
>> +unused data blocks are removed. A more detailed description of the GC
>> +can be found :ref:`here <maintenance_gc>`.
>> +
>>
>> .. note:: This command needs to read all existing backup index files
>> and touches the complete chunk-store. This can take a long time
>> depending on the number of chunks and the speed of the underlying
>> disks.
>>
>> -.. note:: The garbage collection will only remove chunks that haven't been used
>> - for at least one day (exactly 24h 5m). This grace period is necessary because
>> - chunks in use are marked by touching the chunk which updates the ``atime``
>> - (access time) property. Filesystems are mounted with the ``relatime`` option
>> - by default. This results in a better performance by only updating the
>> - ``atime`` property if the last access has been at least 24 hours ago. The
>> - downside is that touching a chunk within these 24 hours will not always
>> - update its ``atime`` property.
>> -
>> - Chunks in the grace period will be logged at the end of the garbage
>> - collection task as *Pending removals*.
>> -
>> .. code-block:: console
>>
>> # proxmox-backup-client garbage-collect
>> diff --git a/docs/maintenance.rst b/docs/maintenance.rst
>> index 6dbb6941..e25c8f19 100644
>> --- a/docs/maintenance.rst
>> +++ b/docs/maintenance.rst
>> @@ -171,8 +171,8 @@ It's recommended to setup a schedule to ensure that unused space is cleaned up
>> periodically. For most setups a weekly schedule provides a good interval to
>> start.
>>
>> -GC Background
>> -^^^^^^^^^^^^^
>> +Overview
>> +^^^^^^^^
>>
>> In `Proxmox Backup`_ Server, backup data is not saved directly, but rather as
>> chunks that are referred to by the indexes of each backup snapshot. This
>> @@ -187,26 +187,51 @@ references to the same chunks on every snapshot deletion. Moreover, locking the
>> entire datastore is not feasible because new backups would be blocked until the deletion
>> process was complete.
>>
>> -Therefore, Proxmox Backup Server uses a garbage collection (GC) process to
>> +Therefore, Proxmox Backup Server uses a `tracing garbage collection
>> +<https://en.wikipedia.org/wiki/Tracing_garbage_collection>`_ algorithm to
>> identify and remove the unused backup chunks that are no longer needed by any
>> -snapshot in the datastore. The GC process is designed to efficiently reclaim
>> +snapshot in the datastore. The GC algorithm is designed to efficiently reclaim
>> the space occupied by these chunks with low impact on the performance of the
>> datastore or interfering with other backups.
>>
>> -The garbage collection (GC) process is performed per datastore and is split
>> -into two phases:
>> +The GC is performed per datastore and is split into two phases:
>>
>> -- Phase one: Mark
>> - All index files are read, and the access time of the referred chunk files is
>> - updated.
>> +- Phase one - Mark:
>> +
>> + Read all index files and update the ``atime`` (access time) of the relevant
>> + chunk files.
> I'd replace "relevant" with "referenced" here, it is more concrete and
> matches the terminology below
>
>> +
>> +- Phase two - Sweep:
>> +
>> + Iterate over all chunks and check the ``atime`` of the files. If
>> + the ``atime`` is older than the cut-off time, the chunk was neither
>> + referenced in a backup index nor is it part of a running backup that
>> + does not yet have an index to search. As such, safely remove the chunk.
> nor was it recently created as part of a running backup task, but is not
> referenced yet by any finished index file. Such chunks can be safely
> removed since they are no longer needed.
>
> (Safely remove implies that we do some special removing that is safe ;))
>
>> +
>> +
>> +Cut-off Time
>> +^^^^^^^^^^^^
>> +
>> +The GC only clears the chunks that were last accessed before the
> s/clears/removes/
>
>> +cut-off time. The cut-off time is determined by whichever is earlier:
> is determined *at the start of the GC task*
>
> this is an important detail that helps understanding for more
> technically inclined readers
>
>> +
>> +- 24 hours and 5 minutes before the start of the garbage collection
>> + due to the mounting of the data storage with ``relatime``, or
> "before the start of .. due to" is a bit confusing. maybe:
>
> - 24 hours before the start of the garbage collection (to
> account for the datastore potentially being mounted with ``relatime``).
>
>> +
>> +- the start time of the oldest active backup job that has been running
>> + for longer than 24 hours and 5 minutes at the beginning of the
>> + garbage collection. This is necessary because the newly created
>> + backup could refer to blocks, but the GC would not notice this as
>> + there is no index of the backup that could be searched.
> the whole "that has been" can be dropped. the cut off is determined by
> whichever is earlier:
> - now - 24h
> - start time of oldest backup writer
*
>
> with an extra 5m of safety margin added in any case - not just the 24h
> one!
>
> - the start time of the oldest active backup job (to account for newly
> written chunks that are not yet referenced by any finished snapshot)
>
> is a bit shorter and IMHO conveys the same information
>
>> +
>> +Chunks accessed after the cut-off time are marked as *Pending removals*
>> +by the GC as it cannot be certain whether they are still needed.
> this is rather incomplete and a bit hard to parse as well. I'd replace
> "accessed after" with "with an atime after".
>
> pending is actually:
> - chunks with atime between the cut-off and the oldest writer (if one
> exists)
At this point i am slightly confused as we defined earlier:
the cut-off is the start of oldest backup writer* (if one exists)
Which would lead to the following:
- chunks with atime between the cut-off (which is the start of the
oldest existing writer) and the oldest writer (if one exists)
which does not make any sense, where is my mistake ?
> - chunks with atime between the cut-off and the start of GC (if no
> writer exists at the start)
>
> this normally means chunks of snapshots which have been recently
> forgotten/pruned. it can also mean freshly uploaded chunks of recently
> aborted backup tasks.
>
>> +
>> +.. Note:: Mounting a volume with ``relatime`` means that the ``atime``
>> + of the chunk files is not updated every time, but only when the
>> + data has changed or the ``atime`` was before a certain time,
>> + which is 24 hours by default.
>>
>> -- Phase two: Sweep
>> - The task iterates over all chunks, checks their file access time, and if it
>> - is older than the cutoff time (i.e., the time when GC started, plus some
>> - headroom for safety and Linux file system behavior), the task knows that the
>> - chunk was neither referred to in any backup index nor part of any currently
>> - running backup that has no index to scan for. As such, the chunk can be
>> - safely deleted.
>>
>> Manually Starting GC
>> ^^^^^^^^^^^^^^^^^^^^
>> --
>> 2.39.2
>>
>>
>>
>> _______________________________________________
>> pbs-devel mailing list
>> pbs-devel@lists.proxmox.com
>> https://lists.proxmox.com/cgi-bin/mailman/listinfo/pbs-devel
>>
>>
>>
>
> _______________________________________________
> pbs-devel mailing list
> pbs-devel@lists.proxmox.com
> https://lists.proxmox.com/cgi-bin/mailman/listinfo/pbs-devel
>
>
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [pbs-devel] [PATCH proxmox-backup v2 1/3] docs: centralise and update garbage collection description
2024-04-10 13:38 ` Hannes Dürr
@ 2024-04-11 7:22 ` Fabian Grünbichler
0 siblings, 0 replies; 11+ messages in thread
From: Fabian Grünbichler @ 2024-04-11 7:22 UTC (permalink / raw)
To: Hannes Dürr, Proxmox Backup Server development discussion
On April 10, 2024 3:38 pm, Hannes Dürr wrote:
>
> On 4/8/24 11:20, Fabian Grünbichler wrote:
>> On April 5, 2024 3:05 pm, Hannes Duerr wrote:
>>> +Chunks accessed after the cut-off time are marked as *Pending removals*
>>> +by the GC as it cannot be certain whether they are still needed.
>> this is rather incomplete and a bit hard to parse as well. I'd replace
>> "accessed after" with "with an atime after".
>>
>> pending is actually:
>> - chunks with atime between the cut-off and the oldest writer (if one
>> exists)
> At this point i am slightly confused as we defined earlier:
> the cut-off is the start of oldest backup writer* (if one exists)
the cut off is the minimum of (oldest worker start, now-24h) (minus 5
minutes). there can be an oldest worker that was started after the cut
off timestamp, in which case GC might find pending chunks (see below).
>
> Which would lead to the following:
>
> - chunks with atime between the cut-off (which is the start of the
> oldest existing writer) and the oldest writer (if one exists)
>
> which does not make any sense, where is my mistake ?
if the cut off is determined by a worker started more than 24h before
the start of the GC, then there cannot be any pending chunks - because
all the chunks which might be considered pending (otherwise) could have
been written by that worker, we can't tell.
pending chunks can only happen if there is
- no backup writer
- the olders writer was started less than 24h before the GC
then any chunks written in the time frame between cut-off and writer
start (or GC start, if no writer exists), which are not yet referenced
by any snapshot/index, are considered pending. because those chunks are
neither referenced nor can they have been written by any still going
writer, so they are most likely "garbage".
^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2024-04-11 7:22 UTC | newest]
Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-04-05 13:05 [pbs-devel] [PATCH proxmox-backup v2 0/3] docs: clarify and expand the description of the garbage collection Hannes Duerr
2024-04-05 13:05 ` [pbs-devel] [PATCH proxmox-backup v2 1/3] docs: centralise and update garbage collection description Hannes Duerr
2024-04-08 9:20 ` Fabian Grünbichler
2024-04-10 13:38 ` Hannes Dürr
2024-04-11 7:22 ` Fabian Grünbichler
2024-04-05 13:05 ` [pbs-devel] [PATCH proxmox-backup v2 2/3] docs: add custom class for svgs Hannes Duerr
2024-04-08 9:23 ` Fabian Grünbichler
2024-04-08 10:57 ` Hannes Dürr
2024-04-05 13:05 ` [pbs-devel] [PATCH proxmox-backup v2 3/3] docs: add garbage collection timing example Hannes Duerr
2024-04-08 9:35 ` Fabian Grünbichler
2024-04-08 11:11 ` Hannes Dürr
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox