<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Publishing DTD v1.1 20151215//EN" "http://jats.nlm.nih.gov/publishing/1.1/JATS-journalpublishing1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" article-type="research-article" dtd-version="1.1">
<front>
<journal-meta>
<journal-id journal-id-type="pmc">CMES</journal-id>
<journal-id journal-id-type="nlm-ta">CMES</journal-id>
<journal-id journal-id-type="publisher-id">CMES</journal-id>
<journal-title-group>
<journal-title>Computer Modeling in Engineering &#x0026; Sciences</journal-title>
</journal-title-group>
<issn pub-type="epub">1526-1506</issn>
<issn pub-type="ppub">1526-1492</issn>
<publisher>
<publisher-name>Tech Science Press</publisher-name>
<publisher-loc>USA</publisher-loc>
</publisher>
</journal-meta>
<article-meta>
<article-id pub-id-type="publisher-id">21795</article-id>
<article-id pub-id-type="doi">10.32604/cmes.2022.021795</article-id>
<article-categories>
<subj-group subj-group-type="heading">
<subject>Article</subject>
</subj-group>
</article-categories>
<title-group>
<article-title>Health Data Availability Protection: Delta-XOR-Relay Data Update in Erasure-Coded Cloud Storage Systems</article-title>
<alt-title alt-title-type="left-running-head">Health Data Availability Protection: Delta-XOR-Relay Data Update in Erasure-Coded Cloud Storage Systems</alt-title>
<alt-title alt-title-type="right-running-head">Health Data Availability Protection: Delta-XOR-Relay Data Update in Erasure-Coded Cloud Storage Systems</alt-title>
</title-group>
<contrib-group content-type="authors">
<contrib id="author-1" contrib-type="author">
<name name-style="western"><surname>Xiao</surname><given-names>Yifei</given-names></name></contrib>
<contrib id="author-2" contrib-type="author" corresp="yes">
<name name-style="western"><surname>Zhou</surname><given-names>Shijie</given-names></name><email>sjzhou@uestc.edu.cn</email></contrib>
<aff id="aff-1"><institution>School of Information and Software Engineering, University of Electronic Science and Technology of China</institution>, <addr-line>Chengdu, 610054</addr-line>, <country>China</country></aff>
</contrib-group>
<author-notes>
<corresp id="cor1"><label>&#x002A;</label>Corresponding Author: Shijie Zhou. Email: <email>sjzhou@uestc.edu.cn</email></corresp>
</author-notes>
<pub-date pub-type="epub" date-type="pub" iso-8601-date="2022-09-27">
<day>27</day>
<month>09</month>
<year>2022</year></pub-date>
<volume>135</volume>
<issue>1</issue>
<fpage>169</fpage>
<lpage>185</lpage>
<history>
<date date-type="received"><day>05</day><month>2</month><year>2022</year></date>
<date date-type="accepted"><day>19</day><month>5</month><year>2022</year></date>
</history>
<permissions>
<copyright-statement>&#x00A9; 2023 Xiao and Zhou</copyright-statement>
<copyright-year>2023</copyright-year>
<copyright-holder>Xiao and Zhou</copyright-holder>
<license xlink:href="https://creativecommons.org/licenses/by/4.0/">
<license-p>This work is licensed under a <ext-link ext-link-type="uri" xlink:type="simple" xlink:href="https://creativecommons.org/licenses/by/4.0/">Creative Commons Attribution 4.0 International License</ext-link>, which permits unrestricted use, distribution, and reproduction in any medium, provided the original work is properly cited.</license-p>
</license>
</permissions>
<self-uri content-type="pdf" xlink:href="TSP_CMES_21795.pdf"></self-uri>
<abstract>
<p>To achieve the high availability of health data in erasure-coded cloud storage systems, the data update performance in erasure coding should be continuously optimized. However, the data update performance is often bottlenecked by the constrained cross-rack bandwidth. Various techniques have been proposed in the literature to improve network bandwidth efficiency, including delta transmission, relay, and batch update. These techniques were largely proposed individually previously, and in this work, we seek to use them jointly. To mitigate the cross-rack update traffic, we propose DXR-DU which builds on four valuable techniques: (i) delta transmission, (ii) XOR-based data update, (iii) relay, and (iv) batch update. Meanwhile, we offer two selective update approaches: 1) data-delta-based update, and 2) parity-delta-based update. The proposed DXR-DU is evaluated via trace-driven local testbed experiments. Comprehensive experiments show that DXR-DU can significantly improve data update throughput while mitigating the cross-rack update traffic.</p>
</abstract>
<kwd-group kwd-group-type="author">
<kwd>Data availability</kwd>
<kwd>health data</kwd>
<kwd>data update</kwd>
<kwd>cloud storage</kwd>
<kwd>IoT</kwd>
</kwd-group>
</article-meta>
</front>
<body>
<sec id="s1"><label>1</label><title>Introduction</title>
<p>With growing of the ageing population and the related rise in chronic illness (e.g., diabetes [<xref ref-type="bibr" rid="ref-1">1</xref>] or Parkinson&#x2019;s disease [<xref ref-type="bibr" rid="ref-2">2</xref>]), the Internet of Things (IoT) has been widely identified as a potential solution to alleviate the pressures on healthcare systems [<xref ref-type="bibr" rid="ref-3">3</xref>]. For instance, Health Care Assistants (HCA) [<xref ref-type="bibr" rid="ref-4">4</xref>] (e.g., Remote Patients Monitoring) are generating a huge amount of data (called &#x201C;health data&#x201D; for brevity) in real time using IoT medical sensors and ambient sensors (<xref ref-type="fig" rid="fig-1">Fig. 1</xref>). These massive amounts of health data are usually stored in Cloud Storage Systems (CSS) to enable applying different analytical techniques to extract the medical knowledge, such as detecting patients&#x2019; health status, innovating methods for the diagnosis of different diseases, and how to treat them [<xref ref-type="bibr" rid="ref-5">5</xref>]. For example, medical images are usually used to assist the healthcare provider to predict diseases and make clinical decisions accurately [<xref ref-type="bibr" rid="ref-6">6</xref>]. However, with the explosively increasing of health data in CSS, the conventional storage techniques which poses many needs and challenges [<xref ref-type="bibr" rid="ref-3">3</xref>], such as</p>
<list list-type="order">
<list-item><p>The need to develop infrastructures that are capable of processing data in parallel.</p></list-item>
<list-item><p>The need to provide safe data transmission [<xref ref-type="bibr" rid="ref-7">7</xref>,<xref ref-type="bibr" rid="ref-8">8</xref>] and data storage for the huge amount of unstructured data sets.</p></list-item>
<list-item><p>The need to provide a fault-tolerant mechanism with high availability.</p></list-item>
</list>
<fig id="fig-1"><label>Figure 1</label><caption><title>This figure shows a typical architecture of Remote Patients Monitoring [<xref ref-type="bibr" rid="ref-5">5</xref>], where the wearable sensors can measure the patients&#x2019; vital signs-respiratory rate, pulse, and body temperature. In addition, some special-purpose sensors can be used for fall detection, gait detection, etc. These massive amounts of health data collected by IoT wearable devices are required to be safely transferred and stored in CSS [<xref ref-type="bibr" rid="ref-7">7</xref>,<xref ref-type="bibr" rid="ref-8">8</xref>]. Thus, it can allow the authorized relevant parties (such as caretakers or doctors) to safely access these sensitive and privacy data [<xref ref-type="bibr" rid="ref-14">14</xref>,<xref ref-type="bibr" rid="ref-15">15</xref>] and apply different analytical techniques</title></caption><graphic mimetype="image" mime-subtype="png" xlink:href="CMES_21795-fig-1.png"/></fig>
<p>In this paper, we focus on the third one: provide a fault-tolerant mechanism with high availability.</p>
<p>Erasure codes (EC) are a leading technology to achieve strong fault-tolerance in CSS [<xref ref-type="bibr" rid="ref-9">9</xref>]. Roughly speaking, as all the files in CSS are usually split into fixed-size data blocks, EC encode these data blocks to generate a small number of redundant blocks (also called parity blocks), such that a subset of data and parity blocks still suffices to recover the original data blocks. Compared to conventional replication (e.g., 3-replication), EC can assuredly maintain the same degree of fault tolerance with much less storage overhead and hence is preferable in practical storage systems. For example, the erasure-coded Quantcast File System saves 50&#x0025; of storage space over the original HDFS, which uses 3-replication. Besides, EC have been widely used in CSS, such as Microsoft Azure [<xref ref-type="bibr" rid="ref-10">10</xref>], Google Cloud [<xref ref-type="bibr" rid="ref-11">11</xref>], Facebook Cluster [<xref ref-type="bibr" rid="ref-12">12</xref>] and Alibaba Cloud [<xref ref-type="bibr" rid="ref-13">13</xref>].</p>
<p>However, EC bring two new problems, namely <italic>data repair (DR)</italic> and <italic>data update (DU)</italic>. In DU, since each parity block is a linear combination of multiple data blocks, once the data block is updated, the relevant parity blocks must also be updated to achieve data consistency. Otherwise, it may cause permanent data loss (especially for the precious health data) in the face of node failures. Obviously, the health data in CSS is &#x201C;hot data&#x201D;, which means it will be frequently generated or updated by various IoT devices. Thus, it will cause considerable network traffic for DU, especially for the cross-rack traffic, which is often oversubscribed and much more scarce than the inner-rack bandwidth [<xref ref-type="bibr" rid="ref-16">16</xref>]. To provide a fault-tolerant mechanism with high availability, it is necessary to provide an efficient and reliable DU scheme to solve the problem of data transmission in DU, especially for the cross-rack data transmission.</p>
<p>In order to alleviate the impact of network traffic, many works concentrate on network tier, as shown in <xref ref-type="fig" rid="fig-2">Fig. 2</xref>. We re-examine and group them into two classes: &#x2460; improve bandwidth utilization (e.g., PUM-P, PDN-P [<xref ref-type="bibr" rid="ref-17">17</xref>], and T-Update [<xref ref-type="bibr" rid="ref-18">18</xref>]) and &#x2461; reduce network traffic (e.g., XORInc [<xref ref-type="bibr" rid="ref-19">19</xref>] and CAU [<xref ref-type="bibr" rid="ref-16">16</xref>]). Specifically, to improve bandwidth utilization, PUM-P [<xref ref-type="bibr" rid="ref-17">17</xref>] used a dedicated node called Update Manager (UM) to collect the update info and the old parity value of the relevant parity nodes for DU. T-Update [<xref ref-type="bibr" rid="ref-18">18</xref>] found that the traditional data transmission path is a star structure, which is detrimental to fully use the network bandwidth. What is worse, it is easy to cause a single-point bottleneck. Hence, T-Update modified the transmission path to a tree structure, which is great to leverage network traffic to other unused links and increase the network parallelism. To reduce network traffic, XORInc [<xref ref-type="bibr" rid="ref-19">19</xref>] offloads computation operations onto the programming network devices (i.e., modern switches with XOR computation capability and sufficient buffers). Thus, it can help data nodes forward the delta info to the relevant parity nodes. In order to mitigate the cross-rack traffic, Shen&#x00A0;et&#x00A0;al.&#x00A0;[<xref ref-type="bibr" rid="ref-16">16</xref>] proposed CAU, which grouped the storage nodes into racks, and offered two optional update methods (data-delta-based update and parity-delta-based update) based on <italic>batch update</italic> and <italic>relay</italic>. However, despite the fruitful achievements of these great works, we found there is still massive room for network optimization, especially for the XOR-based DU.</p>
<fig id="fig-2"><label>Figure 2</label><caption><title>The different schemes are divided into five tiers (<italic>Coding Tier, Scheduling Tier, Network Tier, IO Tier, and Hardware Tier</italic>). The main goals (CPU, network, IO, and others) of these schemes are with different colors [<xref ref-type="bibr" rid="ref-20">20</xref>]</title></caption><graphic mimetype="image" mime-subtype="png" xlink:href="CMES_21795-fig-2.png"/></fig>
<p>By carefully summarizing the previous works, we found four valuable techniques for network optimization: <italic>delta transmission, XOR, relay</italic> and <italic>batch update</italic>. The delta transmission means that we only transmit the delta info, since the DU size is generally smaller than the whole block size [<xref ref-type="bibr" rid="ref-21">21</xref>]. XOR means our scheme is based on XOR, as XOR-based DU can lead better throughput than RS-based DU. Relay means we exploit the relay nodes to forward data, which can fully use the unused links to mitigate the update traffic. In a word, we propose a simple and efficient mechanism Delta-XOR-Relay DU (DXR-DU) by using them jointly. To summarize, our work mainly makes the following contributions:
<list list-type="bullet">
<list-item><p>We summarized the previous works on network optimization and found four valuable techniques: <italic>delta transmission, relay, XOR</italic> and <italic>batch update</italic>.</p></list-item>
<list-item><p>Based on the four techniques, we proposed a novel data update scheme called DXR-DU, which can significantly improve throughput for DU. In other words, it can help CSS to build a fault-tolerant mechanism with high data availability.</p></list-item>
<list-item><p>We implemented the DXR-DU prototype in Go programming language and analyzed that it can achieve the optimal cross-rack data update.</p></list-item>
<list-item><p>We conducted numerous local testbed experiments based on our prototype. <xref ref-type="fn" rid="fn1"><sup>1</sup></xref><fn id="fn1"><label>1</label><p>The source code of DXR-DU is available for download at: <uri>http://git@gitee.com:xyf1989/cau.git</uri>.</p></fn>Experiments on a local testbed show that DXR-DU can significantly reduce the cross-rack traffic and improve the update throughput.</p></list-item>
</list></p>
</sec>
<sec id="s2"><label>2</label><title>Background</title>
<sec id="s2_1"><label>2.1</label><title>Cloud Storage Systems</title>
<p>It is well-known that modern DC deploy thousands of storage nodes in one or multiple geographic regions to provide large-scale storage services. These storage nodes are grouped into racks and further interconnected via the network core-an abstraction of aggregation switches and core routers [<xref ref-type="bibr" rid="ref-22">22</xref>]. <xref ref-type="fig" rid="fig-3">Fig. 3</xref> shows a typical CSS with three racks and each rack comprises four nodes.</p>
<fig id="fig-3"><label>Figure 3</label><caption><title>A typical RS (5, 3) CSS, here <italic>n</italic>&#x2009;&#x003D;&#x2009;5, <italic>k</italic>&#x2009;&#x003D;&#x2009;3, <italic>m</italic>&#x2009;&#x003D;&#x2009;2</title></caption><graphic mimetype="image" mime-subtype="png" xlink:href="CMES_21795-fig-3.png"/></fig>
</sec>
<sec id="s2_2"><label>2.2</label><title>Erasure Codes and RS Codes</title>
<p>A leading technique to achieve strong fault-tolerance in CSS is to utilize EC. As stated above, EC use the original data to generate more encoded data, thus they allow a fixed number of component failures in the overall system. EC are usually configured by two parameters: the number of data symbols <italic>k</italic> to be encoded, and the number of coded symbols <italic>n</italic> to be produced [<xref ref-type="bibr" rid="ref-9">9</xref>]. The data symbols and the coded symbols are usually assumed to be in finite field <inline-formula id="ieqn-2"><mml:math id="mml-ieqn-2"><mml:mi>G</mml:mi><mml:mi>F</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:msup><mml:mn>2</mml:mn><mml:mi>w</mml:mi></mml:msup></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:math></inline-formula> in computer systems.</p>
<p>RS codes [<xref ref-type="bibr" rid="ref-23">23</xref>] are a well-known erasure code construction and have been widely deployed in production [<xref ref-type="bibr" rid="ref-24">24</xref>&#x2013;<xref ref-type="bibr" rid="ref-26">26</xref>]. RS codes are usually referred to as RS (n, k). For instance, <xref ref-type="fig" rid="fig-3">Fig. 3</xref> depicts a typical CSS with RS (5, 3), which encodes <inline-formula id="ieqn-3"><mml:math id="mml-ieqn-3"><mml:mi>k</mml:mi><mml:mo>=</mml:mo><mml:mn>3</mml:mn></mml:math></inline-formula> data blocks into <inline-formula id="ieqn-4"><mml:math id="mml-ieqn-4"><mml:mi>m</mml:mi><mml:mo>=</mml:mo><mml:mn>2</mml:mn></mml:math></inline-formula> parity blocks. These <inline-formula id="ieqn-5"><mml:math id="mml-ieqn-5"><mml:mi>n</mml:mi><mml:mo>=</mml:mo><mml:mi>k</mml:mi><mml:mo>+</mml:mo><mml:mi>m</mml:mi></mml:math></inline-formula> blocks group into a <italic>stripe</italic>, scattering in different nodes.</p>
</sec>
<sec id="s2_3"><label>2.3</label><title>Data Update</title>
<p>It is known that EC can be divided into two classes: RS-based codes and XOR-based codes [<xref ref-type="bibr" rid="ref-13">13</xref>]. Accordingly, we can classify DU into two types: <italic>RS-based DU</italic> and <italic>XOR-based DU</italic>.</p>
<sec id="s2_3_1"><label>2.3.1</label><title>RS-Based DU</title>
<p><xref ref-type="fig" rid="fig-4">Fig. 4</xref> shows the typical encoding process of RS (5, 3), where the leftmost matrix (called <italic>generator matrix</italic>) encodes the data blocks (<inline-formula id="ieqn-6"><mml:math id="mml-ieqn-6"><mml:mrow><mml:msub><mml:mi>d</mml:mi><mml:mn>0</mml:mn></mml:msub></mml:mrow><mml:mo>,</mml:mo><mml:mrow><mml:msub><mml:mi>d</mml:mi><mml:mn>1</mml:mn></mml:msub></mml:mrow><mml:mo>,</mml:mo><mml:mrow><mml:msub><mml:mi>d</mml:mi><mml:mn>2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula>) into a <italic>codeword</italic> (<inline-formula id="ieqn-7"><mml:math id="mml-ieqn-7"><mml:mrow><mml:msub><mml:mi>d</mml:mi><mml:mn>0</mml:mn></mml:msub></mml:mrow><mml:mo>,</mml:mo><mml:mrow><mml:msub><mml:mi>d</mml:mi><mml:mn>1</mml:mn></mml:msub></mml:mrow><mml:mo>,</mml:mo><mml:mrow><mml:msub><mml:mi>d</mml:mi><mml:mn>2</mml:mn></mml:msub></mml:mrow><mml:mo>,</mml:mo><mml:mrow><mml:msub><mml:mi>p</mml:mi><mml:mn>0</mml:mn></mml:msub></mml:mrow><mml:mo>,</mml:mo><mml:mrow><mml:msub><mml:mi>p</mml:mi><mml:mn>1</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula>). After encoding, the data blocks (<inline-formula id="ieqn-8"><mml:math id="mml-ieqn-8"><mml:mrow><mml:msub><mml:mi>d</mml:mi><mml:mn>0</mml:mn></mml:msub></mml:mrow><mml:mo>,</mml:mo><mml:mrow><mml:msub><mml:mi>d</mml:mi><mml:mn>1</mml:mn></mml:msub></mml:mrow><mml:mo>,</mml:mo><mml:mrow><mml:msub><mml:mi>d</mml:mi><mml:mn>2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula>) will be sent to the corresponding data nodes and the parity blocks (<inline-formula id="ieqn-9"><mml:math id="mml-ieqn-9"><mml:mrow><mml:msub><mml:mi>p</mml:mi><mml:mn>0</mml:mn></mml:msub></mml:mrow><mml:mo>,</mml:mo><mml:mrow><mml:msub><mml:mi>p</mml:mi><mml:mn>1</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula>) will be sent to the corresponding parity nodes. From <xref ref-type="fig" rid="fig-4">Fig. 4</xref> we can infer that, in a <inline-formula id="ieqn-10"><mml:math id="mml-ieqn-10"><mml:mo stretchy="false">(</mml:mo><mml:mi>n</mml:mi><mml:mo>,</mml:mo><mml:mi>k</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:math></inline-formula> RS-based CSS, each parity block could be represented by a linear combination of the <italic>k</italic> data blocks with the following equation:
<disp-formula id="eqn-1"><label>(1)</label><mml:math id="mml-eqn-1" display="block"><mml:mrow><mml:msub><mml:mi>p</mml:mi><mml:mi>i</mml:mi></mml:msub></mml:mrow><mml:mo>=</mml:mo><mml:munderover><mml:mo movablelimits="false">&#x2211;</mml:mo><mml:mrow><mml:mi>j</mml:mi><mml:mo>=</mml:mo><mml:mn>0</mml:mn></mml:mrow><mml:mrow><mml:mi>k</mml:mi><mml:mo>&#x2212;</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:munderover><mml:mrow><mml:mrow><mml:msub><mml:mi>&#x03B1;</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mo>,</mml:mo><mml:mi>j</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mrow><mml:msub><mml:mi>d</mml:mi><mml:mi>j</mml:mi></mml:msub></mml:mrow></mml:mrow><mml:mo>,</mml:mo><mml:mi>i</mml:mi><mml:mo>&#x2208;</mml:mo><mml:mo stretchy="false">[</mml:mo><mml:mn>0</mml:mn><mml:mo>,</mml:mo><mml:mi>m</mml:mi><mml:mo>&#x2212;</mml:mo><mml:mn>1</mml:mn><mml:mo stretchy="false">]</mml:mo><mml:mrow></mml:mrow></mml:math></disp-formula>where <inline-formula id="ieqn-11"><mml:math id="mml-ieqn-11"><mml:mi>m</mml:mi><mml:mo>=</mml:mo><mml:mi>n</mml:mi><mml:mo>&#x2212;</mml:mo><mml:mi>k</mml:mi></mml:math></inline-formula> and all elements are numbers in GF(<inline-formula id="ieqn-12"><mml:math id="mml-ieqn-12"><mml:mrow><mml:msup><mml:mn>2</mml:mn><mml:mi>w</mml:mi></mml:msup></mml:mrow></mml:math></inline-formula>) for some value of <italic>w</italic>. Suppose that <inline-formula id="ieqn-13"><mml:math id="mml-ieqn-13"><mml:mrow><mml:msub><mml:mi>d</mml:mi><mml:mi>h</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> is updated to <inline-formula id="ieqn-14"><mml:math id="mml-ieqn-14"><mml:msubsup><mml:mi>d</mml:mi><mml:mi>h</mml:mi><mml:mrow><mml:mo>&#x0027;</mml:mo></mml:mrow></mml:msubsup></mml:math></inline-formula>(<inline-formula id="ieqn-15"><mml:math id="mml-ieqn-15"><mml:mn>0</mml:mn><mml:mo>&#x2264;</mml:mo><mml:mi>h</mml:mi><mml:mo>&#x2264;</mml:mo><mml:mi>k</mml:mi><mml:mo>&#x2212;</mml:mo><mml:mn>1</mml:mn></mml:math></inline-formula>), <xref ref-type="disp-formula" rid="eqn-1">Eq. (1)</xref> can be called for DU.</p>
<fig id="fig-4"><label>Figure 4</label><caption><title>The encoding process of RS (5, 3). The leftmost matrix is called <italic>generator matrix</italic>, which encodes data blocks (<italic>d</italic><sub>0</sub>; <italic>d</italic><sub>1</sub>; <italic>d</italic><sub>2</sub>) into codeword (<italic>d</italic><sub>0</sub>; <italic>d</italic><sub>1</sub>; <italic>d</italic><sub>2</sub>; <italic>p</italic><sub>0</sub>; <italic>p</italic><sub>1</sub>)</title></caption><graphic mimetype="image" mime-subtype="png" xlink:href="CMES_21795-fig-4.png"/></fig>
<p><bold>RS-delta-based:</bold> On the other hand, we can simply utilize the delta info (<inline-formula id="ieqn-16"><mml:math id="mml-ieqn-16"><mml:msubsup><mml:mi>d</mml:mi><mml:mi>h</mml:mi><mml:mrow><mml:mo>&#x0027;</mml:mo></mml:mrow></mml:msubsup><mml:mo>&#x2212;</mml:mo><mml:mrow><mml:msub><mml:mi>d</mml:mi><mml:mi>h</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>) to renew the parity block with the following equation:
<disp-formula id="eqn-2"><label>(2)</label><mml:math id="mml-eqn-2" display="block"><mml:msubsup><mml:mi>p</mml:mi><mml:mi>i</mml:mi><mml:mrow><mml:mo>&#x0027;</mml:mo></mml:mrow></mml:msubsup><mml:mo>=</mml:mo><mml:munder><mml:mo movablelimits="false">&#x2211;</mml:mo><mml:mrow><mml:mi>j</mml:mi><mml:mo>&#x2208;</mml:mo><mml:mo stretchy="false">[</mml:mo><mml:mn>0</mml:mn><mml:mo>,</mml:mo><mml:mi>k</mml:mi><mml:mo>&#x2212;</mml:mo><mml:mn>1</mml:mn><mml:mo stretchy="false">]</mml:mo><mml:mo>,</mml:mo><mml:mi>j</mml:mi><mml:mo>&#x2260;</mml:mo><mml:mi>h</mml:mi></mml:mrow></mml:munder><mml:mrow><mml:mrow><mml:msub><mml:mi>&#x03B1;</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mo>,</mml:mo><mml:mi>j</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mrow><mml:msub><mml:mi>d</mml:mi><mml:mi>j</mml:mi></mml:msub></mml:mrow></mml:mrow><mml:mo>+</mml:mo><mml:mrow><mml:msub><mml:mi>&#x03B1;</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mo>,</mml:mo><mml:mi>h</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:msubsup><mml:mi>d</mml:mi><mml:mi>h</mml:mi><mml:mrow><mml:mo>&#x0027;</mml:mo></mml:mrow></mml:msubsup><mml:mo>=</mml:mo><mml:mrow><mml:msub><mml:mi>p</mml:mi><mml:mi>i</mml:mi></mml:msub></mml:mrow><mml:mo>+</mml:mo><mml:mrow><mml:msub><mml:mi>&#x03B1;</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mo>,</mml:mo><mml:mi>h</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:msubsup><mml:mi>d</mml:mi><mml:mi>h</mml:mi><mml:mrow><mml:mo>&#x0027;</mml:mo></mml:mrow></mml:msubsup><mml:mo>&#x2212;</mml:mo><mml:mrow><mml:msub><mml:mi>d</mml:mi><mml:mi>h</mml:mi></mml:msub></mml:mrow><mml:mo stretchy="false">)</mml:mo><mml:mo>,</mml:mo><mml:mi>i</mml:mi><mml:mo>&#x2208;</mml:mo><mml:mo stretchy="false">[</mml:mo><mml:mn>0</mml:mn><mml:mo>,</mml:mo><mml:mi>m</mml:mi><mml:mo>&#x2212;</mml:mo><mml:mn>1</mml:mn><mml:mo stretchy="false">]</mml:mo></mml:math></disp-formula>where <inline-formula id="ieqn-17"><mml:math id="mml-ieqn-17"><mml:mrow><mml:msub><mml:mi>p</mml:mi><mml:mi>i</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> denotes the old value. In this way, we can simply transfer the delta of <inline-formula id="ieqn-18"><mml:math id="mml-ieqn-18"><mml:mrow><mml:msub><mml:mi>d</mml:mi><mml:mi>h</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> (also called <inline-formula id="ieqn-19"><mml:math id="mml-ieqn-19"><mml:mi mathvariant="normal">&#x0394;</mml:mi><mml:mrow><mml:msub><mml:mi>d</mml:mi><mml:mi>h</mml:mi></mml:msub></mml:mrow><mml:mo>=</mml:mo><mml:msubsup><mml:mi>d</mml:mi><mml:mi>h</mml:mi><mml:mrow><mml:mo>&#x0027;</mml:mo></mml:mrow></mml:msubsup><mml:mo>&#x2212;</mml:mo><mml:mrow><mml:msub><mml:mi>d</mml:mi><mml:mi>h</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>) to the parity node <italic>i</italic>.</p>
</sec>
<sec id="s2_3_2"><label>2.3.2</label><title>XOR-Based DU</title>
<p>No matter <xref ref-type="disp-formula" rid="eqn-1">Eq. (1)</xref> or <xref ref-type="disp-formula" rid="eqn-2">Eq. (2)</xref> is selected for DU, a considerable number of multiplications are generated, which will significantly impede the performance of DU. To end this, as shown in <xref ref-type="fig" rid="fig-5">Fig. 5</xref>, XOR-based encoding is proposed via <italic>Binary Distribution Matrix (BDM)</italic>, where each element e in GF(<inline-formula id="ieqn-20"><mml:math id="mml-ieqn-20"><mml:mrow><mml:msup><mml:mn>2</mml:mn><mml:mi>w</mml:mi></mml:msup></mml:mrow></mml:math></inline-formula>) can be denoted by a matrix M(e) of <inline-formula id="ieqn-21"><mml:math id="mml-ieqn-21"><mml:mi>w</mml:mi><mml:mo>&#x00D7;</mml:mo><mml:mi>w</mml:mi></mml:math></inline-formula> or a vector V(e) of <inline-formula id="ieqn-22"><mml:math id="mml-ieqn-22"><mml:mn>1</mml:mn><mml:mo>&#x00D7;</mml:mo><mml:mi>w</mml:mi></mml:math></inline-formula>, thus, the generator matrix of size <inline-formula id="ieqn-23"><mml:math id="mml-ieqn-23"><mml:mi>k</mml:mi><mml:mo>&#x00D7;</mml:mo><mml:mi>m</mml:mi></mml:math></inline-formula> can be converted to a new  generator matrix of size <inline-formula id="ieqn-24"><mml:math id="mml-ieqn-24"><mml:mi>w</mml:mi><mml:mi>k</mml:mi><mml:mo>&#x00D7;</mml:mo><mml:mi>w</mml:mi><mml:mi>m</mml:mi></mml:math></inline-formula> in GF(2) [<xref ref-type="bibr" rid="ref-9">9</xref>]. In this light, we can use the smaller element (<inline-formula id="ieqn-25"><mml:math id="mml-ieqn-25"><mml:mi>w</mml:mi></mml:math></inline-formula> bits) to encode. According to <xref ref-type="fig" rid="fig-5">Fig. 5</xref>, the parity blocks can be computed by the following equations:
<disp-formula id="eqn-3"><label>(3)</label><mml:math id="mml-eqn-3" display="block"><mml:mtable columnalign="left" rowspacing="4pt" columnspacing="1em"><mml:mtr><mml:mtd><mml:mrow><mml:mrow><mml:msub><mml:mi>p</mml:mi><mml:mrow><mml:mn>0</mml:mn><mml:mo>,</mml:mo><mml:mn>0</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mrow></mml:mtd><mml:mtd><mml:mrow><mml:mo>=</mml:mo><mml:mrow><mml:msub><mml:mi>d</mml:mi><mml:mrow><mml:mn>0</mml:mn><mml:mo>,</mml:mo><mml:mn>0</mml:mn></mml:mrow></mml:msub></mml:mrow><mml:mo>&#x2295;</mml:mo><mml:mrow><mml:msub><mml:mi>d</mml:mi><mml:mrow><mml:mn>1</mml:mn><mml:mo>,</mml:mo><mml:mn>0</mml:mn></mml:mrow></mml:msub></mml:mrow><mml:mo>&#x2295;</mml:mo><mml:mrow><mml:msub><mml:mi>d</mml:mi><mml:mrow><mml:mn>2</mml:mn><mml:mo>,</mml:mo><mml:mn>0</mml:mn></mml:mrow></mml:msub></mml:mrow><mml:mo>&#x2295;</mml:mo><mml:mrow><mml:msub><mml:mi>d</mml:mi><mml:mrow><mml:mn>2</mml:mn><mml:mo>,</mml:mo><mml:mn>2</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula>
<disp-formula id="eqn-4"><label>(4)</label><mml:math id="mml-eqn-4" display="block"><mml:mtable columnalign="left" rowspacing="4pt" columnspacing="1em"><mml:mtr><mml:mtd><mml:mrow><mml:mrow><mml:msub><mml:mi>p</mml:mi><mml:mrow><mml:mn>0</mml:mn><mml:mo>,</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mrow></mml:mtd><mml:mtd><mml:mrow><mml:mo>=</mml:mo><mml:mrow><mml:msub><mml:mi>d</mml:mi><mml:mrow><mml:mn>0</mml:mn><mml:mo>,</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:mrow><mml:mo>&#x2295;</mml:mo><mml:mrow><mml:msub><mml:mi>d</mml:mi><mml:mrow><mml:mn>1</mml:mn><mml:mo>,</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:mrow><mml:mo>&#x2295;</mml:mo><mml:mrow><mml:msub><mml:mi>d</mml:mi><mml:mrow><mml:mn>2</mml:mn><mml:mo>,</mml:mo><mml:mn>0</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula>
<disp-formula id="eqn-5"><label>(5)</label><mml:math id="mml-eqn-5" display="block"><mml:mtable columnalign="left" rowspacing="4pt" columnspacing="1em"><mml:mtr><mml:mtd><mml:mrow><mml:mrow><mml:msub><mml:mi>p</mml:mi><mml:mrow><mml:mn>0</mml:mn><mml:mo>,</mml:mo><mml:mn>2</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mrow></mml:mtd><mml:mtd><mml:mrow><mml:mo>=</mml:mo><mml:mrow><mml:msub><mml:mi>d</mml:mi><mml:mrow><mml:mn>0</mml:mn><mml:mo>,</mml:mo><mml:mn>2</mml:mn></mml:mrow></mml:msub></mml:mrow><mml:mo>&#x2295;</mml:mo><mml:mrow><mml:msub><mml:mi>d</mml:mi><mml:mrow><mml:mn>1</mml:mn><mml:mo>,</mml:mo><mml:mn>2</mml:mn></mml:mrow></mml:msub></mml:mrow><mml:mo>&#x2295;</mml:mo><mml:mrow><mml:msub><mml:mi>d</mml:mi><mml:mrow><mml:mn>2</mml:mn><mml:mo>,</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula>
<disp-formula id="eqn-6"><label>(6)</label><mml:math id="mml-eqn-6" display="block"><mml:mtable columnalign="left" rowspacing="4pt" columnspacing="1em"><mml:mtr><mml:mtd><mml:mrow><mml:mrow><mml:msub><mml:mi>p</mml:mi><mml:mrow><mml:mn>1</mml:mn><mml:mo>,</mml:mo><mml:mn>0</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mrow></mml:mtd><mml:mtd><mml:mrow><mml:mo>=</mml:mo><mml:mrow><mml:msub><mml:mi>d</mml:mi><mml:mrow><mml:mn>0</mml:mn><mml:mo>,</mml:mo><mml:mn>0</mml:mn></mml:mrow></mml:msub></mml:mrow><mml:mo>&#x2295;</mml:mo><mml:mrow><mml:msub><mml:mi>d</mml:mi><mml:mrow><mml:mn>1</mml:mn><mml:mo>,</mml:mo><mml:mn>0</mml:mn></mml:mrow></mml:msub></mml:mrow><mml:mo>&#x2295;</mml:mo><mml:mrow><mml:msub><mml:mi>d</mml:mi><mml:mrow><mml:mn>1</mml:mn><mml:mo>,</mml:mo><mml:mn>2</mml:mn></mml:mrow></mml:msub></mml:mrow><mml:mo>&#x2295;</mml:mo><mml:mrow><mml:msub><mml:mi>d</mml:mi><mml:mrow><mml:mn>2</mml:mn><mml:mo>,</mml:mo><mml:mn>0</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula>
<disp-formula id="eqn-7"><label>(7)</label><mml:math id="mml-eqn-7" display="block"><mml:mtable columnalign="left" rowspacing="4pt" columnspacing="1em"><mml:mtr><mml:mtd><mml:mrow><mml:mrow><mml:msub><mml:mi>p</mml:mi><mml:mrow><mml:mn>1</mml:mn><mml:mo>,</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mrow></mml:mtd><mml:mtd><mml:mrow><mml:mo>=</mml:mo><mml:mrow><mml:msub><mml:mi>d</mml:mi><mml:mrow><mml:mn>0</mml:mn><mml:mo>,</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:mrow><mml:mo>&#x2295;</mml:mo><mml:mrow><mml:msub><mml:mi>d</mml:mi><mml:mrow><mml:mn>1</mml:mn><mml:mo>,</mml:mo><mml:mn>0</mml:mn></mml:mrow></mml:msub></mml:mrow><mml:mo>&#x2295;</mml:mo><mml:mrow><mml:msub><mml:mi>d</mml:mi><mml:mrow><mml:mn>2</mml:mn><mml:mo>,</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula>
<disp-formula id="eqn-8"><label>(8)</label><mml:math id="mml-eqn-8" display="block"><mml:mtable columnalign="left" rowspacing="4pt" columnspacing="1em"><mml:mtr><mml:mtd><mml:mrow><mml:mrow><mml:msub><mml:mi>p</mml:mi><mml:mrow><mml:mn>1</mml:mn><mml:mo>,</mml:mo><mml:mn>2</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mrow></mml:mtd><mml:mtd><mml:mrow><mml:mo>=</mml:mo><mml:mrow><mml:msub><mml:mi>d</mml:mi><mml:mrow><mml:mn>0</mml:mn><mml:mo>,</mml:mo><mml:mn>2</mml:mn></mml:mrow></mml:msub></mml:mrow><mml:mo>&#x2295;</mml:mo><mml:mrow><mml:msub><mml:mi>d</mml:mi><mml:mrow><mml:mn>1</mml:mn><mml:mo>,</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:mrow><mml:mo>&#x2295;</mml:mo><mml:mrow><mml:msub><mml:mi>d</mml:mi><mml:mrow><mml:mn>2</mml:mn><mml:mo>,</mml:mo><mml:mn>2</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula>where the matrix multiplications are now converted to XORs of data bits corresponding to the ones in BDM. Zhou&#x00A0;et&#x00A0;al.&#x00A0;[<xref ref-type="bibr" rid="ref-9">9</xref>] proved it is more efficient to use XOR operation to encode instead of directly using RS-based encoding. In other words, XOR-based DU can significantly reduce the computation overhead than RS-based DU.</p>
<fig id="fig-5"><label>Figure 5</label><caption><title>Encoding with BDM: the Cauchy matrix is converted to BDM, where the blue block denotes bit 1 and the white block denotes bit 0, identically, <italic>k</italic>&#x2009;&#x003D;&#x2009;3, <italic>m</italic>&#x2009;&#x003D;&#x2009;2, <italic>w</italic>&#x2009;&#x003D;&#x2009;3</title></caption><graphic mimetype="image" mime-subtype="png" xlink:href="CMES_21795-fig-5.png"/></fig>
</sec>
<sec id="s2_3_3"><label>2.3.3</label><title>Parity Update in CSS</title>
<p>As mentioned earlier, nodes are grouped into racks. We assume data racks are dedicated to data nodes and parity racks are dedicated to parity nodes. Without loss of generality, suppose that there are <inline-formula id="ieqn-26"><mml:math id="mml-ieqn-26"><mml:mrow><mml:msub><mml:mi>U</mml:mi><mml:mi>d</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> blocks denoted by <inline-formula id="ieqn-27"><mml:math id="mml-ieqn-27"><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:msub><mml:mi>d</mml:mi><mml:mn>0</mml:mn></mml:msub></mml:mrow><mml:mo>,</mml:mo><mml:mrow><mml:msub><mml:mi>d</mml:mi><mml:mn>1</mml:mn></mml:msub></mml:mrow><mml:mo>,</mml:mo><mml:mo>&#x2026;</mml:mo><mml:mo>,</mml:mo><mml:mrow><mml:msub><mml:mi>d</mml:mi><mml:mrow><mml:mrow><mml:msub><mml:mi>U</mml:mi><mml:mi>d</mml:mi></mml:msub></mml:mrow><mml:mo>&#x2212;</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:math></inline-formula> that are updated to <inline-formula id="ieqn-28"><mml:math id="mml-ieqn-28"><mml:mo stretchy="false">(</mml:mo><mml:msubsup><mml:mi>d</mml:mi><mml:mn>0</mml:mn><mml:mrow><mml:mo>&#x0027;</mml:mo></mml:mrow></mml:msubsup><mml:mo>,</mml:mo><mml:msubsup><mml:mi>d</mml:mi><mml:mn>1</mml:mn><mml:mrow><mml:mo>&#x0027;</mml:mo></mml:mrow></mml:msubsup><mml:mo>,</mml:mo><mml:mo>&#x2026;</mml:mo><mml:mo>,</mml:mo><mml:msubsup><mml:mi>d</mml:mi><mml:mrow><mml:mrow><mml:msub><mml:mi>U</mml:mi><mml:mi>d</mml:mi></mml:msub></mml:mrow><mml:mo>&#x2212;</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mo>&#x0027;</mml:mo></mml:mrow></mml:msubsup><mml:mo stretchy="false">)</mml:mo></mml:math></inline-formula> in the data rack <inline-formula id="ieqn-29"><mml:math id="mml-ieqn-29"><mml:mrow><mml:msub><mml:mi>R</mml:mi><mml:mi>d</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>, based on <xref ref-type="disp-formula" rid="eqn-2">Eq. (2)</xref>, we can calculate the parity block <inline-formula id="ieqn-30"><mml:math id="mml-ieqn-30"><mml:msubsup><mml:mi>p</mml:mi><mml:mi>i</mml:mi><mml:mrow><mml:mo>&#x0027;</mml:mo></mml:mrow></mml:msubsup></mml:math></inline-formula> (<inline-formula id="ieqn-31"><mml:math id="mml-ieqn-31"><mml:mi>i</mml:mi><mml:mo>&#x2208;</mml:mo><mml:mo stretchy="false">[</mml:mo><mml:mn>0</mml:mn><mml:mo>,</mml:mo><mml:mi>m</mml:mi><mml:mo>&#x2212;</mml:mo><mml:mn>1</mml:mn><mml:mo stretchy="false">]</mml:mo></mml:math></inline-formula>) with the following equation:
<disp-formula id="eqn-9"><label>(9)</label><mml:math id="mml-eqn-9" display="block"><mml:msubsup><mml:mi>p</mml:mi><mml:mi>i</mml:mi><mml:mrow><mml:mo>&#x0027;</mml:mo></mml:mrow></mml:msubsup><mml:mo>=</mml:mo><mml:munderover><mml:mo movablelimits="false">&#x2211;</mml:mo><mml:mrow><mml:mi>j</mml:mi><mml:mo>=</mml:mo><mml:mn>0</mml:mn></mml:mrow><mml:mrow><mml:mrow><mml:msub><mml:mi>U</mml:mi><mml:mi>d</mml:mi></mml:msub></mml:mrow><mml:mo>&#x2212;</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:munderover><mml:mrow><mml:mrow><mml:msub><mml:mi>&#x03B1;</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mo>,</mml:mo><mml:mi>j</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:mrow><mml:mi mathvariant="normal">&#x0394;</mml:mi><mml:mrow><mml:msub><mml:mi>d</mml:mi><mml:mi>j</mml:mi></mml:msub></mml:mrow><mml:mo>+</mml:mo><mml:mrow><mml:msub><mml:mi>p</mml:mi><mml:mi>i</mml:mi></mml:msub></mml:mrow><mml:mo>=</mml:mo><mml:mi mathvariant="normal">&#x0394;</mml:mi><mml:mrow><mml:msub><mml:mi>p</mml:mi><mml:mi>i</mml:mi></mml:msub></mml:mrow><mml:mo>+</mml:mo><mml:mrow><mml:msub><mml:mi>p</mml:mi><mml:mi>i</mml:mi></mml:msub></mml:mrow></mml:math></disp-formula>where <inline-formula id="ieqn-32"><mml:math id="mml-ieqn-32"><mml:mi mathvariant="normal">&#x0394;</mml:mi><mml:mrow><mml:msub><mml:mi>p</mml:mi><mml:mi>i</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> is the delta of parity block <italic>i</italic>. Suppose that parity block <italic>i</italic> (<inline-formula id="ieqn-33"><mml:math id="mml-ieqn-33"><mml:mi>i</mml:mi><mml:mo>&#x2208;</mml:mo><mml:mo stretchy="false">[</mml:mo><mml:mn>0</mml:mn><mml:mo>,</mml:mo><mml:mi>m</mml:mi><mml:mo>&#x2212;</mml:mo><mml:mn>1</mml:mn><mml:mo stretchy="false">]</mml:mo></mml:math></inline-formula>) are located in the parity rack <inline-formula id="ieqn-34"><mml:math id="mml-ieqn-34"><mml:mrow><mml:msub><mml:mi>R</mml:mi><mml:mi>p</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>, and there are <inline-formula id="ieqn-35"><mml:math id="mml-ieqn-35"><mml:mrow><mml:msub><mml:mi>U</mml:mi><mml:mi>p</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> parity blocks to update. As illustrated in <xref ref-type="fig" rid="fig-6">Fig. 6</xref>, there are two options to renew the parity block: &#x2460; data-delta-based update, and &#x2461; parity-delta-based update [<xref ref-type="bibr" rid="ref-16">16</xref>].</p>
<fig id="fig-6"><label>Figure 6</label><caption><title>Examples of the data-delta-based update and parity-delta-based update: (a) <italic>Ud</italic>&#x2009;&#x003D;&#x2009;2 and <italic>Up</italic>&#x2009;&#x003D;&#x2009;3; (b) <italic>Ud</italic>&#x2009;&#x003D;&#x2009;3 and <italic>Up</italic>&#x2009;&#x003D;&#x2009;2</title></caption><graphic mimetype="image" mime-subtype="png" xlink:href="CMES_21795-fig-6.png"/></fig>
<p><bold>Data-delta-based update:</bold> which updates the parity blocks of a rack in batch via transmitting data delta blocks directly [<xref ref-type="bibr" rid="ref-22">22</xref>]. As shown in <xref ref-type="fig" rid="fig-6">Fig. 6a</xref>, the number of data updates in <inline-formula id="ieqn-36"><mml:math id="mml-ieqn-36"><mml:mrow><mml:msub><mml:mi>R</mml:mi><mml:mi>d</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> is less than the number of parity updates in <inline-formula id="ieqn-37"><mml:math id="mml-ieqn-37"><mml:mrow><mml:msub><mml:mi>R</mml:mi><mml:mi>p</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> (i.e., <inline-formula id="ieqn-38"><mml:math id="mml-ieqn-38"><mml:mrow><mml:msub><mml:mi>U</mml:mi><mml:mi>d</mml:mi></mml:msub></mml:mrow><mml:mo>&#x003C;</mml:mo><mml:mrow><mml:msub><mml:mi>U</mml:mi><mml:mi>p</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>). Thus, we separately send the delta info (<inline-formula id="ieqn-39"><mml:math id="mml-ieqn-39"><mml:mi mathvariant="normal">&#x0394;</mml:mi><mml:mrow><mml:msub><mml:mi>d</mml:mi><mml:mn>0</mml:mn></mml:msub></mml:mrow><mml:mo>,</mml:mo><mml:mi mathvariant="normal">&#x0394;</mml:mi><mml:mrow><mml:msub><mml:mi>d</mml:mi><mml:mn>1</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula>) to the relay node <inline-formula id="ieqn-40"><mml:math id="mml-ieqn-40"><mml:mrow><mml:msub><mml:mi>P</mml:mi><mml:mn>0</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula>, when <inline-formula id="ieqn-41"><mml:math id="mml-ieqn-41"><mml:mrow><mml:msub><mml:mi>P</mml:mi><mml:mn>0</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> receives all the deltas, it calculates and forwards the new values for <inline-formula id="ieqn-42"><mml:math id="mml-ieqn-42"><mml:mrow><mml:msub><mml:mi>P</mml:mi><mml:mn>1</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> and <inline-formula id="ieqn-43"><mml:math id="mml-ieqn-43"><mml:mrow><mml:msub><mml:mi>P</mml:mi><mml:mn>2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> via <xref ref-type="disp-formula" rid="eqn-9">Eq. (9)</xref>.</p>
<p><bold>Parity-delta-based update:</bold> as shown in <xref ref-type="fig" rid="fig-6">Fig. 6b</xref>, <inline-formula id="ieqn-44"><mml:math id="mml-ieqn-44"><mml:mrow><mml:msub><mml:mi>U</mml:mi><mml:mi>d</mml:mi></mml:msub></mml:mrow><mml:mo>&#x003E;</mml:mo><mml:mrow><mml:msub><mml:mi>U</mml:mi><mml:mi>p</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>, to mitigate the cross-rack traffic, parity-delta-based update is selected, where we select a data node as the relay node to collect the deltas in the same rack. Similarly, the relay node is responsible for regenerating the parity blocks via <xref ref-type="disp-formula" rid="eqn-9">Eq. (9)</xref> and transferring the deltas to the relevant parity nodes.</p>
</sec>
</sec>
</sec>
<sec id="s3"><label>3</label><title>Delta-XOR-Relay Data Update</title>
<p>In this section, we elaborate the design overview of Delta-XOR-Relay Data Update (DXR-DU).</p>
<sec id="s3_1"><label>3.1</label><title>Design Overview</title>
<p>Our study of previous works on network optimization found four valuable techniques for network optimization: <italic>delta transmission, XOR, relay</italic>, and <italic>batch update</italic>.</p>
<p>Recall that the existing two classes of network optimization: &#x2460; improve bandwidth utilization, and &#x2461; reduce network traffic. We found that the key technique to improve bandwidth utilization is using <italic>relay</italic>. For example, PUM-P [<xref ref-type="bibr" rid="ref-17">17</xref>] used a dedicated node called update manager (UM) as a relay node to compute the deltas of the relevant parity blocks, while PDN-P discarded it. CAU [<xref ref-type="bibr" rid="ref-16">16</xref>] selected a data node or a parity node as a relay node, and RackCU [<xref ref-type="bibr" rid="ref-22">22</xref>] selected a data rack or a parity rack as a relay rack. It sounds like the triangle principle: If the sum (network overhead) of the two sides (using relay node) is greater than the third side (directly sending data), it is unnecessary to use the relay; Otherwise, we should use the relay to fully exploit the unused links. Besides, the relay can be used for updating one block (e.g., T-Update [<xref ref-type="bibr" rid="ref-18">18</xref>]) or a group of blocks (e.g., CAU [<xref ref-type="bibr" rid="ref-16">16</xref>] and RackCU [<xref ref-type="bibr" rid="ref-22">22</xref>]), and the latter should consider <italic>node grouping</italic>. For example, CAU groups nodes into racks and selects a relay node for each rack.</p>
<p>To reduce network traffic, we found two key factors: <italic>delta transmission</italic> and <italic>batch update</italic>. The block size in CSS normally ranges from 1 MB to 64 MB [<xref ref-type="bibr" rid="ref-16">16</xref>,<xref ref-type="bibr" rid="ref-24">24</xref>]. But it is unnecessary to update the whole block, since DU is small (60&#x0025; of them are less than 4 KB [<xref ref-type="bibr" rid="ref-21">21</xref>]). Thus, the better way is to transfer the delta of the updated block. Another key point is <italic>batch update</italic>. For instance, CAU proved the batch update is powerful for saving network traffic via setting the threshold at 100 (i.e., when 100 data requests arrive). However, the batch update has the disadvantage that will slightly sacrifice the system reliability. Fortunately, we can utilize the interim replication to maintain the system reliability and data availability at the same level as the baseline EC approach [<xref ref-type="bibr" rid="ref-16">16</xref>].</p>
<p>As mentioned above, the fourth valuable technique is XOR. The experimental results in <xref ref-type="sec" rid="s4">Section 4</xref> reinforce our determination to use XOR. In the next section, we will discuss how to use <italic>delta, relay</italic> and <italic>batch update</italic> jointly based on XOR-based DU.</p>
</sec>
<sec id="s3_2"><label>3.2</label><title>Transmission Path</title>
<p>As far as we known, the transmission path is either a star structure (e.g., the baseline method) or a tree structure (e.g., T-Update, CAU, XORInc and RackCU). As mentioned earlier, the conventional star-structured path can easily cause single point bottleneck or even single point failure. Obviously, the tree-structured path is better. To build a tree-structured path, T-Update relies on the network distance (i.e., the hops) between nodes. While CAU groups nodes based on racks, and selects a relay node for each rack. Comparely, we believe CAU is more simple and easy for implementation. Besides, T-Update builds a tree only for one block, while CAU builds a tree for a group of related blocks. For example, in parity-delta-based update (<xref ref-type="fig" rid="fig-6">Fig. 6b</xref>), CAU collects the deltas of a rack and directly transfers the merging result of parity block <italic>i</italic> (<inline-formula id="ieqn-45"><mml:math id="mml-ieqn-45"><mml:mi mathvariant="normal">&#x0394;</mml:mi><mml:mrow><mml:msub><mml:mi>p</mml:mi><mml:mi>i</mml:mi></mml:msub></mml:mrow><mml:mo>=</mml:mo><mml:munderover><mml:mo movablelimits="false">&#x2211;</mml:mo><mml:mrow><mml:mi>j</mml:mi><mml:mo>=</mml:mo><mml:mn>0</mml:mn></mml:mrow><mml:mrow><mml:mrow><mml:msub><mml:mi>U</mml:mi><mml:mi>d</mml:mi></mml:msub></mml:mrow><mml:mo>&#x2212;</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:munderover><mml:mrow><mml:mrow><mml:msub><mml:mi>&#x03B1;</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mo>,</mml:mo><mml:mi>j</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:mrow><mml:mi mathvariant="normal">&#x0394;</mml:mi><mml:mrow><mml:msub><mml:mi>d</mml:mi><mml:mi>j</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>) to related parity nodes. We argue that transferring the parity deltas is better than transferring the data deltas one by one. Therefore, we build the transmission path based on CAU.</p>
<sec id="s3_2_1"><label>3.2.1</label><title>Delta Transmission</title>
<p>It has long been recognized that transferring the data block in delta style will substantially save network load than transferring the whole data block. However, few works indeed transfer the delta in implementation. Although it is just a implementation issue, we proved that it is significant performance differentiator in evaluation. Thus, in this section, we elaborate our way to transfer the delta.</p>
<p><bold>Block merging for batch update:</bold> It is well-known that a dirty (updated) data block may be modified in different places within a batch time (as shown in <xref ref-type="fig" rid="fig-7">Fig. 7</xref>), which means the delta info (the gray parts) is scattered. To end this, we employ a very straightforward way: we label the leftmost offset as <italic>rangeL</italic> and the rightmost offset as <italic>rangeR</italic>. Thus, we only transfer the [<italic>rangeL, rangeR</italic>] of the whole block. As mentioned earlier, DU is small (most updates are less than 4 KB), even though we pack these small and scattered blocks into a large piece, the optimization space is still huge.</p>
<fig id="fig-7"><label>Figure 7</label><caption><title>An example of a dirty block, which size is 1 MB. We label the leftmost offset as <italic>rangeL</italic> and the rightmost offset as <italic>rangeR</italic></title></caption><graphic mimetype="image" mime-subtype="png" xlink:href="CMES_21795-fig-7.png"/></fig>
<p><bold>Delta Alignment:</bold> As mentioned above, we label the delta of an updated block as [<italic>rangeL, rangeR</italic>], but the ranges of distinct data blocks within a stripe are probably different, which prevents us from calculating the parity blocks. Therefore, before renewing the parity node in a relay node, we have to perform the delta alignment.</p>
<p>A typical example is depicted in <xref ref-type="fig" rid="fig-8">Fig. 8</xref>, where there are four updated blocks within a stripe, and the ranges are <inline-formula id="ieqn-46"><mml:math id="mml-ieqn-46"><mml:mrow><mml:msub><mml:mi>D</mml:mi><mml:mn>0</mml:mn></mml:msub></mml:mrow><mml:mo stretchy="false">[</mml:mo><mml:mn>28</mml:mn><mml:mo>,</mml:mo><mml:mn>1557</mml:mn><mml:mo stretchy="false">]</mml:mo><mml:mo>,</mml:mo><mml:mrow><mml:msub><mml:mi>D</mml:mi><mml:mn>1</mml:mn></mml:msub></mml:mrow><mml:mo stretchy="false">[</mml:mo><mml:mn>1024</mml:mn><mml:mo>,</mml:mo><mml:mn>8096</mml:mn><mml:mo stretchy="false">]</mml:mo><mml:mo>,</mml:mo><mml:mrow><mml:msub><mml:mi>D</mml:mi><mml:mn>2</mml:mn></mml:msub></mml:mrow><mml:mo stretchy="false">[</mml:mo><mml:mn>356</mml:mn><mml:mo>,</mml:mo><mml:mn>768</mml:mn><mml:mo stretchy="false">]</mml:mo><mml:mo>,</mml:mo><mml:mrow><mml:msub><mml:mi>D</mml:mi><mml:mn>3</mml:mn></mml:msub></mml:mrow><mml:mo stretchy="false">[</mml:mo><mml:mn>4096</mml:mn><mml:mo>,</mml:mo><mml:mn>14400</mml:mn><mml:mo stretchy="false">]</mml:mo></mml:math></inline-formula>, respectively. To compute the new value of the parity node, we use a dedicated node called <italic>central controller</italic> to align these four deltas based on the maximum range. Thus, <inline-formula id="ieqn-47"><mml:math id="mml-ieqn-47"><mml:mrow><mml:msub><mml:mi>D</mml:mi><mml:mn>0</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> can receive three deltas with identical range, and easily renew the parity node.</p>
<fig id="fig-8"><label>Figure 8</label><caption><title>Delta alignment for batch update in DXR-DU</title></caption><graphic mimetype="image" mime-subtype="png" xlink:href="CMES_21795-fig-8.png"/></fig>
</sec>
</sec>
<sec id="s3_3"><label>3.3</label><title>Design of DXR-DU</title>
<p>As mentioned above, we design DXR-DU based on the four valuable techniques: delta transmission, XOR, batch update and relay. As shown in <xref ref-type="fig" rid="fig-9">Fig. 9</xref>, we first build the transmission path based on CAU, which offers two selective methods (data-delta-based update and parity-delta-based update). When the number of the updated data blocks in data rack is smaller than the number of updated parity nodes in parity rack (i.e., <inline-formula id="ieqn-48"><mml:math id="mml-ieqn-48"><mml:mrow><mml:msub><mml:mi>U</mml:mi><mml:mi>d</mml:mi></mml:msub></mml:mrow><mml:mo>&#x003C;</mml:mo><mml:mrow><mml:msub><mml:mi>U</mml:mi><mml:mi>p</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>), as shown in <xref ref-type="fig" rid="fig-9">Fig. 9a</xref>, data-delta-based update is selected, which means we choose a parity node as the relay node to collect deltas and compute the new values for parity nodes. On the contrary, parity-delta-based update is selected, where we choose a data node as the relay node to collect the deltas and compute the parity deltas for the parity nodes.</p>
<fig id="fig-9"><label>Figure 9</label><caption><title>The design of DXR-DU is based on CAU, which offers two update methods: data-delta-based update and parity-delta-based update. But we have two extra techniques: &#x2460; XOR and &#x2461; delta transmission. In coding tier, we choose XOR-based DU. Meanwhile, we utilize the delta transmission to send data</title></caption><graphic mimetype="image" mime-subtype="png" xlink:href="CMES_21795-fig-9.png"/></fig>
<p>Based on CAU, we have two extra techniques: &#x2460; We choose XOR-based DU to improve the update throughput in coding tier, unlike CAU, which relies on RS-based DU. &#x2461; We employ the delta transmission to mitigate the network traffic, especially for the cross-rack traffic.</p>
<p><bold>Algorithm details:</bold> Algorithm 1 elaborates the main procedure to schedule the update requests in a batch. We first collect the data blocks (getting from user requests) in a batch, and perform block merging (Line 1). Then, we group these blocks into stripes (Line 2). For each stripe, according to the number of the updated data blocks in a data rack, we handle the data blocks of a stripe in this rack:&#x00A0;1) as mentioned above, if <inline-formula id="ieqn-49"><mml:math id="mml-ieqn-49"><mml:mrow><mml:msub><mml:mi>U</mml:mi><mml:mi>d</mml:mi></mml:msub></mml:mrow><mml:mo>&#x003E;</mml:mo><mml:mrow><mml:msub><mml:mi>U</mml:mi><mml:mi>p</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>, we use parity-xor-based update (Line 6). 2) Otherwise, we use data-xor-based update (Line 7).</p>
</sec>
<sec id="s3_4"><label>3.4</label><title>Parity Update in XOR-Based DU</title>
<p>Similar to RS-based DU, in this section, we discuss the optimal cross-rack parity update in XOR-based DU. For ease of presentation, we take an example of a CSS, where there are <inline-formula id="ieqn-50"><mml:math id="mml-ieqn-50"><mml:mi>k</mml:mi><mml:mo>=</mml:mo><mml:mn>4</mml:mn></mml:math></inline-formula> data nodes and <inline-formula id="ieqn-51"><mml:math id="mml-ieqn-51"><mml:mi>m</mml:mi><mml:mo>=</mml:mo><mml:mn>4</mml:mn></mml:math></inline-formula> parity nodes. We set <inline-formula id="ieqn-52"><mml:math id="mml-ieqn-52"><mml:mi>w</mml:mi><mml:mo>=</mml:mo><mml:mn>3</mml:mn></mml:math></inline-formula> and only show the blocks in one stripe (as shown in <xref ref-type="fig" rid="fig-10">Fig. 10</xref>). Besides, we suppose the parity update equations are as follows:
<disp-formula id="eqn-10"><label>(10)</label><mml:math id="mml-eqn-10" display="block"><mml:mrow><mml:msub><mml:mi>p</mml:mi><mml:mn>0</mml:mn></mml:msub></mml:mrow><mml:mo>=</mml:mo><mml:mrow><mml:msub><mml:mi>d</mml:mi><mml:mn>0</mml:mn></mml:msub></mml:mrow><mml:mo>&#x2295;</mml:mo><mml:mrow><mml:msub><mml:mi>d</mml:mi><mml:mn>2</mml:mn></mml:msub></mml:mrow><mml:mo>&#x2295;</mml:mo><mml:mrow><mml:msub><mml:mi>d</mml:mi><mml:mn>3</mml:mn></mml:msub></mml:mrow><mml:mo>&#x2295;</mml:mo><mml:mrow><mml:msub><mml:mi>d</mml:mi><mml:mn>4</mml:mn></mml:msub></mml:mrow><mml:mo>&#x2295;</mml:mo><mml:mrow><mml:msub><mml:mi>d</mml:mi><mml:mn>5</mml:mn></mml:msub></mml:mrow><mml:mo>&#x2295;</mml:mo><mml:mrow><mml:msub><mml:mi>d</mml:mi><mml:mn>8</mml:mn></mml:msub></mml:mrow><mml:mo>&#x2295;</mml:mo><mml:mrow><mml:msub><mml:mi>d</mml:mi><mml:mrow><mml:mn>10</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:math></disp-formula>
<disp-formula id="eqn-11"><label>(11)</label><mml:math id="mml-eqn-11" display="block"><mml:mrow><mml:msub><mml:mi>p</mml:mi><mml:mn>1</mml:mn></mml:msub></mml:mrow><mml:mo>=</mml:mo><mml:mrow><mml:msub><mml:mi>d</mml:mi><mml:mn>0</mml:mn></mml:msub></mml:mrow><mml:mo>&#x2295;</mml:mo><mml:mrow><mml:msub><mml:mi>d</mml:mi><mml:mn>1</mml:mn></mml:msub></mml:mrow><mml:mo>&#x2295;</mml:mo><mml:mrow><mml:msub><mml:mi>d</mml:mi><mml:mn>3</mml:mn></mml:msub></mml:mrow><mml:mo>&#x2295;</mml:mo><mml:mrow><mml:msub><mml:mi>d</mml:mi><mml:mn>4</mml:mn></mml:msub></mml:mrow><mml:mo>&#x2295;</mml:mo><mml:mrow><mml:msub><mml:mi>d</mml:mi><mml:mn>5</mml:mn></mml:msub></mml:mrow><mml:mo>&#x2295;</mml:mo><mml:mrow><mml:msub><mml:mi>d</mml:mi><mml:mn>6</mml:mn></mml:msub></mml:mrow><mml:mo>&#x2295;</mml:mo><mml:mrow><mml:msub><mml:mi>d</mml:mi><mml:mn>9</mml:mn></mml:msub></mml:mrow><mml:mo>&#x2295;</mml:mo><mml:mrow><mml:msub><mml:mi>d</mml:mi><mml:mrow><mml:mn>11</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:math></disp-formula>
<disp-formula id="eqn-12"><label>(12)</label><mml:math id="mml-eqn-12" display="block"><mml:mrow><mml:msub><mml:mi>p</mml:mi><mml:mn>2</mml:mn></mml:msub></mml:mrow><mml:mo>=</mml:mo><mml:mrow><mml:msub><mml:mi>d</mml:mi><mml:mn>0</mml:mn></mml:msub></mml:mrow><mml:mo>&#x2295;</mml:mo><mml:mrow><mml:msub><mml:mi>d</mml:mi><mml:mn>1</mml:mn></mml:msub></mml:mrow><mml:mo>&#x2295;</mml:mo><mml:mrow><mml:msub><mml:mi>d</mml:mi><mml:mn>3</mml:mn></mml:msub></mml:mrow><mml:mo>&#x2295;</mml:mo><mml:mrow><mml:msub><mml:mi>d</mml:mi><mml:mn>5</mml:mn></mml:msub></mml:mrow><mml:mo>&#x2295;</mml:mo><mml:mrow><mml:msub><mml:mi>d</mml:mi><mml:mn>7</mml:mn></mml:msub></mml:mrow><mml:mo>&#x2295;</mml:mo><mml:mrow><mml:msub><mml:mi>d</mml:mi><mml:mn>8</mml:mn></mml:msub></mml:mrow></mml:math></disp-formula>
<disp-formula id="eqn-13"><label>(13)</label><mml:math id="mml-eqn-13" display="block"><mml:mrow><mml:msub><mml:mi>p</mml:mi><mml:mn>3</mml:mn></mml:msub></mml:mrow><mml:mo>=</mml:mo><mml:mrow><mml:msub><mml:mi>d</mml:mi><mml:mn>0</mml:mn></mml:msub></mml:mrow><mml:mo>&#x2295;</mml:mo><mml:mrow><mml:msub><mml:mi>d</mml:mi><mml:mn>1</mml:mn></mml:msub></mml:mrow><mml:mo>&#x2295;</mml:mo><mml:mrow><mml:msub><mml:mi>d</mml:mi><mml:mn>3</mml:mn></mml:msub></mml:mrow><mml:mo>&#x2295;</mml:mo><mml:mrow><mml:msub><mml:mi>d</mml:mi><mml:mn>5</mml:mn></mml:msub></mml:mrow><mml:mo>&#x2295;</mml:mo><mml:mrow><mml:msub><mml:mi>d</mml:mi><mml:mn>7</mml:mn></mml:msub></mml:mrow><mml:mo>&#x2295;</mml:mo><mml:mrow><mml:msub><mml:mi>d</mml:mi><mml:mrow><mml:mn>11</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:math></disp-formula>
<disp-formula id="eqn-14"><label>(14)</label><mml:math id="mml-eqn-14" display="block"><mml:mrow><mml:msub><mml:mi>p</mml:mi><mml:mi>i</mml:mi></mml:msub></mml:mrow><mml:mo>=</mml:mo><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:msub><mml:mi>p</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mo>,</mml:mo><mml:mn>0</mml:mn></mml:mrow></mml:msub></mml:mrow><mml:mo>,</mml:mo><mml:mrow><mml:msub><mml:mi>p</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mo>,</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:mrow><mml:mo>,</mml:mo><mml:mrow><mml:msub><mml:mi>p</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mo>,</mml:mo><mml:mn>2</mml:mn></mml:mrow></mml:msub></mml:mrow><mml:mo stretchy="false">)</mml:mo><mml:mo>,</mml:mo><mml:mi>i</mml:mi><mml:mo>&#x2208;</mml:mo><mml:mo stretchy="false">[</mml:mo><mml:mn>0</mml:mn><mml:mo>,</mml:mo><mml:mn>3</mml:mn><mml:mo stretchy="false">]</mml:mo></mml:math></disp-formula></p>
<fig id="fig-10"><label>Figure 10</label><caption><title>Examples of the data-delta-based update and parity-delta-based update: (a) <italic>Ud</italic>&#x2009;&#x003D;&#x2009;3 and <italic>Up</italic>&#x2009;&#x003D;&#x2009;2; (b) <italic>Ud</italic>&#x2009;&#x003D;&#x2009;2 and <italic>Up</italic>&#x2009;&#x003D;&#x2009;3</title></caption><graphic mimetype="image" mime-subtype="png" xlink:href="CMES_21795-fig-10.png"/></fig>
<p>As we focus on network optimization, it is unnecessary to know the exact equations of <inline-formula id="ieqn-53"><mml:math id="mml-ieqn-53"><mml:mrow><mml:msub><mml:mi>p</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mo>,</mml:mo><mml:mi>j</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula>, we just need to make sure that all parity could receive what they want, thus we label <inline-formula id="ieqn-54"><mml:math id="mml-ieqn-54"><mml:mrow><mml:msub><mml:mi>p</mml:mi><mml:mi>i</mml:mi></mml:msub></mml:mrow><mml:mo>=</mml:mo><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:msub><mml:mi>p</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mo>,</mml:mo><mml:mn>0</mml:mn></mml:mrow></mml:msub></mml:mrow><mml:mo>,</mml:mo><mml:mrow><mml:msub><mml:mi>p</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mo>,</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:mrow><mml:mo>,</mml:mo><mml:mrow><mml:msub><mml:mi>p</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mo>,</mml:mo><mml:mn>2</mml:mn></mml:mrow></mml:msub></mml:mrow><mml:mo stretchy="false">)</mml:mo><mml:mo>,</mml:mo><mml:mi>i</mml:mi><mml:mo>&#x2208;</mml:mo><mml:mo stretchy="false">[</mml:mo><mml:mn>0</mml:mn><mml:mo>,</mml:mo><mml:mn>3</mml:mn><mml:mo stretchy="false">]</mml:mo></mml:math></inline-formula> as the all the data of node <inline-formula id="ieqn-55"><mml:math id="mml-ieqn-55"><mml:mrow><mml:msub><mml:mi>P</mml:mi><mml:mi>i</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> needed. The key question is: how to update <inline-formula id="ieqn-56"><mml:math id="mml-ieqn-56"><mml:mrow><mml:msub><mml:mi>p</mml:mi><mml:mi>i</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> to minimize the cross-rack network load? For example, as shown in <xref ref-type="fig" rid="fig-10">Fig. 10a</xref>, if <inline-formula id="ieqn-57"><mml:math id="mml-ieqn-57"><mml:mrow><mml:msub><mml:mi>d</mml:mi><mml:mn>0</mml:mn></mml:msub></mml:mrow><mml:mo>,</mml:mo><mml:mrow><mml:msub><mml:mi>d</mml:mi><mml:mn>1</mml:mn></mml:msub></mml:mrow><mml:mo>,</mml:mo><mml:mrow><mml:msub><mml:mi>d</mml:mi><mml:mn>6</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> are changed in batch, according to <xref ref-type="disp-formula" rid="eqn-1">Eq. (10)</xref> to <xref ref-type="disp-formula" rid="eqn-5">Eq. (14)</xref>, we need to update all parity blocks (<inline-formula id="ieqn-58"><mml:math id="mml-ieqn-58"><mml:mrow><mml:msub><mml:mi>p</mml:mi><mml:mn>0</mml:mn></mml:msub></mml:mrow><mml:mo>,</mml:mo><mml:mrow><mml:msub><mml:mi>p</mml:mi><mml:mn>1</mml:mn></mml:msub></mml:mrow><mml:mo>,</mml:mo><mml:mrow><mml:msub><mml:mi>p</mml:mi><mml:mn>2</mml:mn></mml:msub></mml:mrow><mml:mo>,</mml:mo><mml:mrow><mml:msub><mml:mi>p</mml:mi><mml:mn>3</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula>).</p>
<p>In this case, where the number of updated data blocks in the data rack is smaller than the number of updated parity nodes in the parity rack (<inline-formula id="ieqn-59"><mml:math id="mml-ieqn-59"><mml:mrow><mml:msub><mml:mi>U</mml:mi><mml:mi>d</mml:mi></mml:msub></mml:mrow><mml:mo>&#x003C;</mml:mo><mml:mrow><mml:msub><mml:mi>U</mml:mi><mml:mi>p</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>). Unlike the data-delta-based update in CAU, where there is only one updated block belonging to a node in a stripe. Here we should consider multiple updated blocks (<inline-formula id="ieqn-60"><mml:math id="mml-ieqn-60"><mml:mrow><mml:mo>&#x2264;</mml:mo></mml:mrow><mml:mi>w</mml:mi></mml:math></inline-formula>) in a data node. To save cross-rack traffic, we should consider whether to transfer the xor result of multiple updated blocks or not. But we found we can not do that, because 1) every delta info may have different update range, 2) if we transmit the xor result (<inline-formula id="ieqn-61"><mml:math id="mml-ieqn-61"><mml:mrow><mml:msub><mml:mi>d</mml:mi><mml:mn>0</mml:mn></mml:msub></mml:mrow><mml:mo>&#x2295;</mml:mo><mml:mrow><mml:msub><mml:mi>d</mml:mi><mml:mn>1</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula>) of <inline-formula id="ieqn-62"><mml:math id="mml-ieqn-62"><mml:mrow><mml:msub><mml:mi>d</mml:mi><mml:mn>0</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> and <inline-formula id="ieqn-63"><mml:math id="mml-ieqn-63"><mml:mrow><mml:msub><mml:mi>d</mml:mi><mml:mn>1</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> to <inline-formula id="ieqn-64"><mml:math id="mml-ieqn-64"><mml:mrow><mml:msub><mml:mi>P</mml:mi><mml:mn>0</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula>, while <inline-formula id="ieqn-65"><mml:math id="mml-ieqn-65"><mml:mrow><mml:msub><mml:mi>P</mml:mi><mml:mn>0</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> only needs <inline-formula id="ieqn-66"><mml:math id="mml-ieqn-66"><mml:mrow><mml:msub><mml:mi>d</mml:mi><mml:mn>0</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> <xref ref-type="disp-formula" rid="eqn-1">(Eq. (1)</xref>), we can not extract <inline-formula id="ieqn-67"><mml:math id="mml-ieqn-67"><mml:mrow><mml:msub><mml:mi>d</mml:mi><mml:mn>0</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> from the xor result without transferring <inline-formula id="ieqn-68"><mml:math id="mml-ieqn-68"><mml:mrow><mml:msub><mml:mi>d</mml:mi><mml:mn>1</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula>. Therefore, we can only transfer them one by one (i.e., <inline-formula id="ieqn-69"><mml:math id="mml-ieqn-69"><mml:mi mathvariant="normal">&#x0394;</mml:mi><mml:mn>0</mml:mn><mml:mo>,</mml:mo><mml:mi mathvariant="normal">&#x0394;</mml:mi><mml:mn>1</mml:mn><mml:mo>,</mml:mo><mml:mi mathvariant="normal">&#x0394;</mml:mi><mml:mn>6</mml:mn></mml:math></inline-formula>).</p>
<p>In data-delta-based update, where the number of updated data blocks (denoted by <inline-formula id="ieqn-70"><mml:math id="mml-ieqn-70"><mml:mrow><mml:msub><mml:mi>U</mml:mi><mml:mi>d</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>) is smaller than the number of updated nodes in the parity rack (denoted by <inline-formula id="ieqn-71"><mml:math id="mml-ieqn-71"><mml:mrow><mml:msub><mml:mi>U</mml:mi><mml:mi>p</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>), we should select a relay node for the parity rack. A small question is: how to select the relay node in the parity rack? We tested 2 options: 1) Random select, and 2) consider load balance, which means every round we select a different relay node for forwarding data. However, we test it and found it is unnecessary to do that. Thus, we choose the frist option.</p>
<p>On the other hand, if <inline-formula id="ieqn-72"><mml:math id="mml-ieqn-72"><mml:mrow><mml:msub><mml:mi>U</mml:mi><mml:mi>d</mml:mi></mml:msub></mml:mrow><mml:mo>&#x003E;</mml:mo><mml:mrow><mml:msub><mml:mi>U</mml:mi><mml:mi>p</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>, in parity-delta-based update, where we will select a relay node for the data rack, similar to <italic>parity-delta-based update</italic>, we will utilize the relay node to compute and transfer the deltas of the corresponding parity node. As illustrated in <xref ref-type="fig" rid="fig-10">Fig. 10b</xref>, there are three updated data blocks (<inline-formula id="ieqn-73"><mml:math id="mml-ieqn-73"><mml:mrow><mml:msub><mml:mi>d</mml:mi><mml:mn>2</mml:mn></mml:msub></mml:mrow><mml:mo>,</mml:mo><mml:mrow><mml:msub><mml:mi>d</mml:mi><mml:mn>8</mml:mn></mml:msub></mml:mrow><mml:mo>,</mml:mo><mml:mrow><mml:msub><mml:mi>d</mml:mi><mml:mrow><mml:mn>10</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula>) and 2 parity node to be updated (<inline-formula id="ieqn-74"><mml:math id="mml-ieqn-74"><mml:mrow><mml:msub><mml:mi>P</mml:mi><mml:mn>0</mml:mn></mml:msub></mml:mrow><mml:mo>,</mml:mo><mml:mrow><mml:msub><mml:mi>P</mml:mi><mml:mn>2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula>), namely <inline-formula id="ieqn-75"><mml:math id="mml-ieqn-75"><mml:mrow><mml:msub><mml:mi>U</mml:mi><mml:mi>d</mml:mi></mml:msub></mml:mrow><mml:mo>=</mml:mo><mml:mn>3</mml:mn><mml:mo>&#x003E;</mml:mo><mml:mrow><mml:msub><mml:mi>U</mml:mi><mml:mi>p</mml:mi></mml:msub></mml:mrow><mml:mo>=</mml:mo><mml:mn>2</mml:mn></mml:math></inline-formula>, thus we randomly select <inline-formula id="ieqn-76"><mml:math id="mml-ieqn-76"><mml:mrow><mml:msub><mml:mi>D</mml:mi><mml:mn>0</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> as the relay node to compute and forward the deltas of <inline-formula id="ieqn-77"><mml:math id="mml-ieqn-77"><mml:mrow><mml:msub><mml:mi>P</mml:mi><mml:mn>0</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> and <inline-formula id="ieqn-78"><mml:math id="mml-ieqn-78"><mml:mrow><mml:msub><mml:mi>P</mml:mi><mml:mn>2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula>.</p>
<p><inline-graphic xlink:href="CMES_21795-inline-1.png"/></p>
<p>In a nutshell, <italic>data-delta-based update</italic> and <italic>parity-delta-based update</italic> are two methods to minimize the cross-rack network traffic. Compare to CAU, we proved it has advantages on update time, throughput and cross-rack traffic in experiments.</p>
</sec>
</sec>
<sec id="s4"><label>4</label><title>Performance Evaluation</title>
<p>In this section, we conduct extensive performance evaluation via local testbed experiments between the proposed approach DXR-DU and two well-known Counterparts: PDN-P and CAU. We summarize our major findings below: compared to the state-of-the-art schemes, &#x2460; DXR-DU saves more than 44.9&#x0025; of cross-rack traffic in most cases (<xref ref-type="sec" rid="s4_3">Section 4.3</xref>); &#x2461; DXR-DU increases 53.6&#x0025; of update throughput (<xref ref-type="sec" rid="s4_4">Section 4.4</xref>).</p>
<sec id="s4_1"><label>4.1</label><title>Preliminaries</title>
<p><bold>Traces:</bold> We assess the update performance via trace-driven evaluation. We utilize MSR Cambridge Traces (MSR) [<xref ref-type="bibr" rid="ref-16">16</xref>], which record the I/O patterns from 13 core servers of a data center. Every trace consists of successive read/write requests, each of which records the request type (read or write), the start position of the requested data, and the request size, etc. According to the ranking results of the average update size of MSR Cambridge Traces in [<xref ref-type="bibr" rid="ref-16">16</xref>], we select 4 traces with dramatically distinct update sizes (sorted from small size to big size): <italic>rsrch_2, hm_0, hm_1, proj_0</italic>.</p>
<p><bold>Counterparts:</bold> We compare DXR-DU to another 2 state-of-the-art schemes: (i) PDN-P [<xref ref-type="bibr" rid="ref-17">17</xref>] and (ii) cross-rack-aware update (CAU) [<xref ref-type="bibr" rid="ref-16">16</xref>]. We summarize these two schemes as below:</p>
<p><bold>PDN-P:</bold> When a data block is updated, PDN-P directly send the delta to the relevant parity nodes, which means it builds a star-structured transmission path for each update.</p>
<p><bold>CAU:</bold> As shown in <xref ref-type="fig" rid="fig-6">Fig. 6</xref>, CAU updates parity blocks simply through the selective parity update: 1) if the updated data blocks of a data rack are more than the parity blocks of a parity rack, CAU updates the parity blocks via transferring parity delta blocks; Otherwise, it updates them through transferring the data delta blocks.</p>
</sec>
<sec id="s4_2"><label>4.2</label><title>Implementation</title>
<p>Since open source implementations for PDN-P and CAU are not available, we design and implement the prototype of DXR-DU and its two counterparts (PDN-P and CAU) with Go programming language on Ubuntu 18.04. These schemes rely on Cauchy RS code implementations. Hence, we utilize the <italic>reedsolomon</italic> library which is the Go version of Jerasure library 2.0.</p>
<p>The system architecture of our prototype is illustrated in <xref ref-type="fig" rid="fig-11">Fig. 11</xref>, where we choose RS(12, 4) (deployed in Windows Azure Storage [<xref ref-type="bibr" rid="ref-27">27</xref>]), where there exists <inline-formula id="ieqn-79"><mml:math id="mml-ieqn-79"><mml:mi>k</mml:mi><mml:mo>=</mml:mo><mml:mn>8</mml:mn></mml:math></inline-formula> data nodes and <inline-formula id="ieqn-80"><mml:math id="mml-ieqn-80"><mml:mi>m</mml:mi><mml:mo>=</mml:mo><mml:mn>4</mml:mn></mml:math></inline-formula> parity nodes. We utilize Linux tool <italic>tc</italic> [<xref ref-type="bibr" rid="ref-28">28</xref>] to group them into three racks via vitual Top-of-Rack switches (ToR) and set the cross-rack/inner-rack at 40/200 Mbps. Such a configuration can tolerate any four nodes failure as well as any single rack failure. Besides, we have another node called metadata server, which is used for metadata management. The metadata server also includes two components: the <italic>client</italic>, which is to generate user requests, and the <italic>central controller</italic>, which is responsible for sending commands to the storage nodes and receiving ACKs from them. In addition, the <italic>agent</italic> in storage nodes is responsible for performing the tasks (e.g., computing and forwarding data) according to the received commands. When the task is finished, it returns an ACK to the command sender. All the nodes are virtual machines (VM) which are generated from 3 Huawei H12M-03 servers via Proxmox VE [<xref ref-type="bibr" rid="ref-29">29</xref>]. Each VM is equipped with a dual core CPU, 2 GB memory and 32 GB disk.</p>
<fig id="fig-11"><label>Figure 11</label><caption><title>The figure depicts the system architecture of our prototype, where there are 3 racks and 13 nodes. The metadata server includes a central controller and a client. The client is to generate user requests and the central controller is to send commands to the storage nodes and receive ACKs from them. The agent in storage nodes is responsible for performing the tasks according to the received commands</title></caption><graphic mimetype="image" mime-subtype="png" xlink:href="CMES_21795-fig-11.png"/></fig>
</sec>
<sec id="s4_3"><label>4.3</label><title>Cross-Rack Traffic</title>
<p>As mentioned above, we believe that our proposed scheme has advantages on cross-rack traffic, thus we first keep eyes on the amount of induced cross-rack traffic.</p>
<p><bold>Experiment A.1 (Impact of update size):</bold> We first study the impact of the update size by selected four traces with distinct update sizes: <italic>rsrch_2, hm_0, hm_1, proj_0</italic>. We configure the block size as 1&#x00A0;MB. <xref ref-type="table" rid="table-1">Table 1</xref> shows the cross-rack traffic for each update. Compared to PDN-P and CAU, DXR-DU reduces the cross-rack traffic by up to 98.0&#x0025; and 71.6&#x0025;, respectively. The result is actually out of our expectations but still consistent with the fact that DU is small.</p>
<table-wrap id="table-1"><label>Table 1</label><caption><title>Comparison on cross-rack traffic with distinct update sizes</title></caption>
<table frame="hsides">
<colgroup>
<col align="left"/>
<col align="left"/>
<col align="left"/>
<col align="left"/>
<col align="left"/>
<col align="left"/>
<col align="left"/>
</colgroup>
<thead>
<tr>
<th align="left">Schemes</th>
<th align="center" colspan="6">Traces</th>
</tr>
<tr>
<td/>
<th align="left">rsrch_2</th>
<th align="left">hm_0</th>
<th align="left">hm_1</th>
<th align="left">proj_0</th>
<th align="left">Average</th>
<th align="left">Improvement</th>
</tr>
</thead>
<tbody>
<tr>
<td align="left">PDN-P</td>
<td align="left">4</td>
<td align="left">4</td>
<td align="left">4</td>
<td align="left">4</td>
<td align="left">4</td>
<td align="left">98&#x0025;</td>
</tr>
<tr>
<td align="left">CAU</td>
<td align="left">0.155</td>
<td align="left">0.395</td>
<td align="left">0.325</td>
<td align="left">0.280</td>
<td align="left">0.289</td>
<td align="left">71.6&#x0025;</td>
</tr>
<tr>
<td align="left"><bold>DXR-DU</bold></td>
<td align="left"><bold>0.060</bold></td>
<td align="left"><bold>0.030</bold></td>
<td align="left"><bold>0.171</bold></td>
<td align="left"><bold>0.065</bold></td>
<td align="left"><bold>0.082</bold></td>
<td align="left">-</td>
</tr>
</tbody>
</table>
</table-wrap>
<p><bold>Experiment A.2 (Impact of block size):</bold> To assess the impact of block size, we set the block size as 0.25/1/4 MB, respectively. <xref ref-type="table" rid="table-3">Table 3</xref> exhibits that DXR-DU keeps efficiency on saving the cross-rack traffic with different block sizes. DXR-DU can reduce 98.4&#x0025;, 68.2&#x0025; of the cross-rack update traffic on average compared to PDN-P and CAU, respectively. The rationale is that DXR-DU utilizes delta transmission.</p>
<p>In a nutshell, with the help of delta transmission, DXR-DU can significantly mitigate the cross-rack update traffic by up to 44.9&#x0025;--99.1&#x0025;.</p>
</sec>
<sec id="s4_4"><label>4.4</label><title>Throughput</title>
<p>As the health data is &#x201C;hot data&#x201D;, it is significant to achieve an excellent DU throughput to maintain the data availability at a high level. In this paper, to compare various schemes fair, we assess the DU throughput of the schemes by changing the update size and block size.</p>
<p><bold>Experiment B.1 (Impact of update size):</bold> We first evaluate the update time of a single block on average by changing th update size: <italic>rsrch_2, hm_0, hm_1, proj_0</italic>. Similarly, the default block size is 1MB. <xref ref-type="table" rid="table-2">Table 2</xref> shows the result that DXR-DU keeps efficiency on DU throughput. For DXR-DU, the update time of single block on average only needs 0.021&#x2005;s. Compared to PDN-P and CAU, DXR-DU can save update time of single block on average by up to 89.9&#x0025; and 53.6&#x0025;, respectively.</p>
<table-wrap id="table-2"><label>Table 2</label><caption><title>Comparison on update time for single block with distinct update sizes</title></caption>
<table frame="hsides">
<colgroup>
<col align="left"/>
<col align="left"/>
<col align="left"/>
<col align="left"/>
<col align="left"/>
<col align="left"/>
<col align="left"/>
</colgroup>
<thead>
<tr>
<th align="left">Schemes</th>
<th align="center" colspan="6">Traces</th>
</tr>
<tr>
<td/>
<th align="left">rsrch_2</th>
<th align="left">hm_0</th>
<th align="left">hm_1</th>
<th align="left">proj_0</th>
<th align="left">Average</th>
<th align="left">Improvement</th>
</tr>
</thead>
<tbody>
<tr>
<td align="left">PDN-P</td>
<td align="left">0.183</td>
<td align="left">0.361</td>
<td align="left">0.133</td>
<td align="left">0.159</td>
<td align="left">0.209</td>
<td align="left">89.9&#x0025;</td>
</tr>
<tr>
<td align="left">CAU</td>
<td align="left">0.024</td>
<td align="left">0.100</td>
<td align="left">0.028</td>
<td align="left">0.029</td>
<td align="left">0.045</td>
<td align="left">53.6&#x0025;</td>
</tr>
<tr>
<td align="left"><bold>DXR-DU</bold></td>
<td align="left"><bold>0.021</bold></td>
<td align="left"><bold>0.021</bold></td>
<td align="left"><bold>0.023</bold></td>
<td align="left"><bold>0.020</bold></td>
<td align="left"><bold>0.021</bold></td>
<td align="left">-</td>
</tr>
</tbody>
</table>
</table-wrap>
<table-wrap id="table-3"><label>Table 3</label><caption><title>Comparison on the traces with different block sizes</title></caption>
<table frame="hsides">
<colgroup>
<col align="left"/>
<col align="left"/>
<col align="left"/>
<col align="left"/>
<col align="left"/>
<col align="left"/>
<col align="left"/>
</colgroup>
<thead>
<tr>
<th align="left">Scheme</th>
<th align="center" colspan="3">rsrch_2</th>
<th align="center" colspan="3">hm_0</th>
</tr>
<tr>
<td/>
<th align="left">0.25 MB</th>
<th align="left">1 MB</th>
<th align="left">4 MB</th>
<th align="left">0.25 MB</th>
<th align="left">1 MB</th>
<th align="left">4 MB</th>
</tr>
</thead>
<tbody>
<tr>
<td align="left">PDN-P</td>
<td align="left">1.00</td>
<td align="left">4.00</td>
<td align="left">16.00</td>
<td align="left">1.00</td>
<td align="left">4.00</td>
<td align="left">16.00</td>
</tr>
<tr>
<td align="left">CAU</td>
<td align="left">0.06</td>
<td align="left">0.16</td>
<td align="left">0.44</td>
<td align="left">0.12</td>
<td align="left">0.40</td>
<td align="left">1.54</td>
</tr>
<tr>
<td align="left"><bold>DXR-DU</bold></td>
<td align="left"><bold>0.02</bold></td>
<td align="left"><bold>0.06</bold></td>
<td align="left"><bold>0.18</bold></td>
<td align="left"><bold>0.01</bold></td>
<td align="left"><bold>0.03</bold></td>
<td align="left"><bold>0.15</bold></td>
</tr>
<tr>
<td align="left" rowspan="2">Scheme</td>
<td align="center" colspan="3">hm_1</td>
<td align="center" colspan="3">proj_0</td>
</tr>
<tr>
<td align="left">0.25 MB</td>
<td align="left">1 MB</td>
<td align="left">4 MB</td>
<td align="left">0.25 MB</td>
<td align="left">1 MB</td>
<td align="left">4 MB</td>
</tr>
<tr>
<td align="left">PDN-P</td>
<td align="left">1.00</td>
<td align="left">4.00</td>
<td align="left">16.00</td>
<td align="left">1.00</td>
<td align="left">4.00</td>
<td align="left">16.00</td>
</tr>
<tr>
<td align="left">CAU</td>
<td align="left">0.14</td>
<td align="left">0.33</td>
<td align="left">0.66</td>
<td align="left">0.08</td>
<td align="left">0.28</td>
<td align="left">0.98</td>
</tr>
<tr>
<td align="left"><bold>DXR-DU</bold></td>
<td align="left"><bold>0.05</bold></td>
<td align="left"><bold>0.17</bold></td>
<td align="left"><bold>0.40</bold></td>
<td align="left"><bold>0.01</bold></td>
<td align="left"><bold>0.06</bold></td>
<td align="left"><bold>0.24</bold></td>
</tr>
</tbody>
</table>
</table-wrap>
<p><bold>Experiment B.2 (Impact of block size):</bold> We further assess the DU throughput under different block sizes (0.25/1/4 MB), from <xref ref-type="fig" rid="fig-12">Fig. 12</xref> we observe that DXR-DU improves the update throughput by up to 13.8&#x0025; and 88.8&#x0025; when compared to PDP-P and CAU, respectively. Unsurprisingly, as DXR-DU wins the game in the comparison on cross-rack traffic, it also has significant advantages on throughput.</p>
<fig id="fig-12"><label>Figure 12</label><caption><title>Comparison on the traces with different block sizes</title></caption>
<graphic mimetype="image" mime-subtype="png" xlink:href="CMES_21795-fig-12a.png"/>
<graphic mimetype="image" mime-subtype="png" xlink:href="CMES_21795-fig-12b.png"/></fig>
<p>According to our experiments, DXR-DU can reduce 44.9&#x0025;--99.1&#x0025; of the cross-rack update traffic on average compared to PDN-P and CAU in most cases. Meanwhile, it can dramatically improve the DU throughput by up to 53.6&#x0025; when compared to CAU.</p>
</sec>
</sec>
<sec id="s5"><label>5</label><title>Conclusion</title>
<p>To achieve the high availability of health and medical big data in erasure-coded cloud storage systems, the data update performance in erasure coding should be continuously optimized. We perform DU performance optimization via mitigating the update traffic, especially the cross-rack traffic. Thus, we propose a rack-aware update scheme called Delta-XOR-Relay Data Update (DXR-DU) based on four valuable techniques: delta transmission, XOR, relay, and batch update. Our proposed scheme offers two selective update options: (i) data-delta-based update, when the number of updated data blocks in data rack is less than the number of parity blocks to update in parity rack, we select a parity node as a relay node for collecting the data deltas and renewing the parity blocks, and (ii) parity-delta-based update for the opposite case, where we select a relay node for each data rack to collect the local data deltas and send the parity deltas to the relevant parity nodes. Experiments on a local testbed show that DXR-DU can significantly reduce the cross-rack update traffic and improve the update throughput.</p>
</sec>
</body>
<back>
<fn-group>
<fn fn-type="other"><p><bold>Funding Statement:</bold> We thank the anonymous reviewers for their insightful feedback. We also appreciate Wenhan Zhan for his sincere help. This work is supported by Major Special Project of Sichuan Science and Technology Department (2020YFG0460), Central University Project of China (ZYGX2020ZB020, ZYGX2020ZB019).</p></fn>
<fn fn-type="other"><p><bold>Conflicts of Interest:</bold> We declare that we have no conflicts of interest to report regarding the present study.</p></fn>
</fn-group>
<fn-group content-type="">
<fn id="fn3"><label>3</label><p>The source code of DXR-DU is available for download at: http://git@gitee.com:xyf1989/cau.git.</p></fn>
</fn-group>
<ref-list content-type="authoryear">
<title>References</title>
<ref id="ref-1"><label>1.</label><mixed-citation publication-type="journal"><person-group person-group-type="author"><string-name><surname>Chang</surname>, <given-names>S. H.</given-names></string-name>, <string-name><surname>Chiang</surname>, <given-names>R. D.</given-names></string-name>, <string-name><surname>Wu</surname>, <given-names>S. J.</given-names></string-name>, <string-name><surname>Chang</surname>, <given-names>W. T.</given-names></string-name></person-group> (<year>2016</year>). <article-title>A context-aware, interactive m-health system for diabetics</article-title>. <source>IT Professional</source><italic>,</italic> <volume>18</volume><issue>(3)</issue><italic>,</italic> <fpage>14</fpage>&#x2013;<lpage>22</lpage>. DOI <pub-id pub-id-type="doi">10.1109/MITP.2016.48</pub-id>.</mixed-citation></ref>
<ref id="ref-2"><label>2.</label><mixed-citation publication-type="journal"><person-group person-group-type="author"><string-name><surname>Pasluosta</surname>, <given-names>C. F.</given-names></string-name>, <string-name><surname>Gassner</surname>, <given-names>H.</given-names></string-name>, <string-name><surname>Winkler</surname>, <given-names>J.</given-names></string-name>, <string-name><surname>Klucken</surname>, <given-names>J.</given-names></string-name>, <string-name><surname>Eskofier</surname>, <given-names>B. M.</given-names></string-name></person-group> (<year>2015</year>). <article-title>An emerging era in the management of Parkinson&#x2019;s disease: Wearable technologies and the Internet of Things</article-title>. <source>IEEE Journal of Biomedical and Health Informatics</source><italic>,</italic> <volume>19</volume><issue>(6)</issue><italic>,</italic> <fpage>1873</fpage>&#x2013;<lpage>1881</lpage>. DOI <pub-id pub-id-type="doi">10.1109/JBHI.2015.2461555</pub-id>.</mixed-citation></ref>
<ref id="ref-3"><label>3.</label><mixed-citation publication-type="book"><person-group person-group-type="author"><string-name><surname>Hassan</surname>, <given-names>M. K.</given-names></string-name>, <string-name><surname>El Desouky</surname>, <given-names>A. I.</given-names></string-name>, <string-name><surname>Elghamrawy</surname>, <given-names>S. M.</given-names></string-name>, <string-name><surname>Sarhan</surname>, <given-names>A. M.</given-names></string-name></person-group> (<year>2019</year>). Big data challenges and opportunities in healthcare informatics and smart hospitals. In: <source>Security in smart cities: models, applications, and challenges</source>, pp. <fpage>3</fpage>&#x2013;<lpage>26</lpage>. <publisher-name>Cham: Springer</publisher-name>.</mixed-citation></ref>
<ref id="ref-4"><label>4.</label><mixed-citation publication-type="journal"><person-group person-group-type="author"><string-name><surname>Granato</surname>, <given-names>D.</given-names></string-name>, <string-name><surname>Santos</surname>, <given-names>J. S.</given-names></string-name>, <string-name><surname>Escher</surname>, <given-names>G. B.</given-names></string-name>, <string-name><surname>Ferreira</surname>, <given-names>B. L.</given-names></string-name>, <string-name><surname>Maggio</surname>, <given-names>R. M.</given-names></string-name></person-group> (<year>2018</year>). <article-title>Use of principal component analysis (PCA) and hierarchical cluster analysis (HCA) for multivariate association between bioactive compounds and functional properties in foods: A critical perspective</article-title>. <source>Trends in Food Science &#x0026; Technology</source><italic>,</italic> <volume>72</volume><italic>,</italic> <fpage>83</fpage>&#x2013;<lpage>90</lpage>. DOI <pub-id pub-id-type="doi">10.1016/j.tifs.2017.12.006</pub-id>.</mixed-citation></ref>
<ref id="ref-5"><label>5.</label><mixed-citation publication-type="journal"><person-group person-group-type="author"><string-name><surname>Baker</surname>, <given-names>S. B.</given-names></string-name>, <string-name><surname>Xiang</surname>, <given-names>W.</given-names></string-name>, <string-name><surname>Atkinson</surname>, <given-names>I.</given-names></string-name></person-group> (<year>2017</year>). <article-title>Internet of things for smart healthcare: Technologies, challenges, and opportunities</article-title>. <source>IEEE Access</source><italic>,</italic> <volume>5</volume><italic>,</italic> <fpage>26521</fpage>&#x2013;<lpage>26544</lpage>. DOI <pub-id pub-id-type="doi">10.1109/ACCESS.2017.2775180</pub-id>.</mixed-citation></ref>
<ref id="ref-6"><label>6.</label><mixed-citation publication-type="journal"><person-group person-group-type="author"><string-name>Liu, H., Guo, Q., Wang, G. L., Gupta, B. B., Zhang, C. M.</string-name></person-group> (<year>2020</year>). <article-title>Medical image resolution enhancement for healthcare using nonlocal self-similarity and low-rank prior</article-title>. <source>Multimedia Tools and Applications</source><italic>,</italic> <volume>78</volume><issue>(7)</issue><italic>,</italic> <fpage>9033</fpage>&#x2013;<lpage>9050</lpage>.</mixed-citation></ref>
<ref id="ref-7"><label>7.</label><mixed-citation publication-type="journal"><person-group person-group-type="author"><string-name><surname>Nguyen</surname>, <given-names>G. N.</given-names></string-name>, <string-name><surname>Viet</surname>, <given-names>N. H. L.</given-names></string-name>, <string-name><surname>Elhoseny</surname>, <given-names>M.</given-names></string-name>, <string-name><surname>Shankar</surname>, <given-names>K.</given-names></string-name>, <string-name><surname>Gupta</surname>, <given-names>B.</given-names></string-name> <etal>et al.</etal></person-group> (<year>2021</year>). <article-title>Secure blockchain enabled cyber-physical systems in healthcare using deep belief network with resnet model</article-title>. <source>Journal of Parallel and Distributed Computing</source><italic>,</italic> <volume>153</volume><italic>,</italic> <fpage>150</fpage>&#x2013;<lpage>160</lpage>. DOI <pub-id pub-id-type="doi">10.1016/j.jpdc.2021.03.011</pub-id>.</mixed-citation></ref>
<ref id="ref-8"><label>8.</label><mixed-citation publication-type="journal"><person-group person-group-type="author"><string-name><surname>Kaur</surname>, <given-names>M.</given-names></string-name>, <string-name><surname>Singh</surname>, <given-names>D.</given-names></string-name>, <string-name><surname>Kumar</surname>, <given-names>V.</given-names></string-name>, <string-name><surname>Gupta</surname>, <given-names>B.</given-names></string-name>, <string-name><surname>Abd El-Latif</surname>, <given-names>A. A.</given-names></string-name></person-group> (<year>2021</year>). <article-title>Secure and energy efficient-based e-health care framework for green internet of things</article-title>. <source>IEEE Transactions on Green Communications and Networking</source><italic>,</italic> <volume>5</volume><issue>(3)</issue><italic>,</italic> <fpage>1223</fpage>&#x2013;<lpage>1231</lpage>. DOI <pub-id pub-id-type="doi">10.1109/TGCN.2021.3081616</pub-id>.</mixed-citation></ref>
<ref id="ref-9"><label>9.</label><mixed-citation publication-type="journal"><person-group person-group-type="author"><string-name><surname>Zhou</surname>, <given-names>T.</given-names></string-name>, <string-name><surname>Tian</surname>, <given-names>C.</given-names></string-name></person-group> (<year>2020</year>). <article-title>Fast erasure coding for data storage: A comprehensive study of the acceleration techniques</article-title>. <source>ACM Transactions on Storage</source><italic>,</italic> <volume>16</volume><issue>(1)</issue><italic>,</italic> <fpage>1</fpage>&#x2013;<lpage>24</lpage>. DOI <pub-id pub-id-type="doi">10.1145/3375554</pub-id>.</mixed-citation></ref>
<ref id="ref-10"><label>10.</label><mixed-citation publication-type="book"><person-group person-group-type="author"><string-name><surname>Copeland</surname>, <given-names>M.</given-names></string-name>, <string-name><surname>Soh</surname>, <given-names>J.</given-names></string-name>, <string-name><surname>Puca</surname>, <given-names>A.</given-names></string-name>, <string-name><surname>Manning</surname>, <given-names>M.</given-names></string-name>, <string-name><surname>Gollob</surname>, <given-names>D.</given-names></string-name></person-group> (<year>2015</year>). <source>Microsoft azure</source>. <publisher-loc>New York, NY, USA</publisher-loc>: <publisher-name>Apress</publisher-name>.</mixed-citation></ref>
<ref id="ref-11"><label>11.</label><mixed-citation publication-type="conf-proc"><person-group person-group-type="author"><string-name><surname>Verma</surname>, <given-names>C.</given-names></string-name>, <string-name><surname>Pandey</surname>, <given-names>R.</given-names></string-name></person-group> (<year>2018</year>). <article-title>Comparative analysis of GFS and HDFS: Technology and architectural landscape</article-title>. <conf-name>2018 10th International Conference on Computational Intelligence and Communication Networks (CICN)</conf-name>, Denmark, <publisher-name>IEEE</publisher-name>.</mixed-citation></ref>
<ref id="ref-12"><label>12.</label><mixed-citation publication-type="conf-proc"><person-group person-group-type="author"><string-name><surname>Muralidhar</surname>, <given-names>S.</given-names></string-name>, <string-name><surname>Lloyd</surname>, <given-names>W.</given-names></string-name>, <string-name><surname>Roy</surname>, <given-names>S.</given-names></string-name>, <string-name><surname>Hill</surname>, <given-names>C.</given-names></string-name>, <string-name><surname>Lin</surname>, <given-names>E.</given-names></string-name> <etal>et al.</etal></person-group> (<year>2014</year>). <article-title>f4: Facebook&#x2019;s warm &#x007B;BLOB&#x007D; storage system</article-title>. <conf-name>11th USENIX Symposium on Operating Systems Design and Implementation</conf-name>, Broomfield, CO.</mixed-citation></ref>
<ref id="ref-13"><label>13.</label><mixed-citation publication-type="conf-proc"><person-group person-group-type="author"><string-name><surname>Xie</surname>, <given-names>X.</given-names></string-name>, <string-name><surname>Wu</surname>, <given-names>C.</given-names></string-name>, <string-name><surname>Gu</surname>, <given-names>J.</given-names></string-name>, <string-name><surname>Qiu</surname>, <given-names>H.</given-names></string-name>, <string-name><surname>Li</surname>, <given-names>J.</given-names></string-name> <etal>et al.</etal></person-group> (<year>2019</year>). <article-title>AZ-code: An efficient availability zone level erasure code to provide high fault tolerance in cloud storage systems</article-title>. <conf-name>2019 35th Symposium on Mass Storage Systems and Technologies (MSST)</conf-name>, Santa Clara, CA.</mixed-citation></ref>
<ref id="ref-14"><label>14.</label><mixed-citation publication-type="journal"><person-group person-group-type="author"><string-name><surname>Xiong</surname>, <given-names>H.</given-names></string-name>, <string-name><surname>Yang</surname>, <given-names>M.</given-names></string-name>, <string-name><surname>Yao</surname>, <given-names>T.</given-names></string-name>, <string-name><surname>Chen</surname>, <given-names>J.</given-names></string-name>, <string-name><surname>Kumari</surname>, <given-names>S.</given-names></string-name></person-group> (<year>2021</year>). <article-title>Efficient unbounded fully attribute hiding inner product encryption in cloud-aided WBANs</article-title>. <source>IEEE Systems Journal</source><italic>,</italic> <fpage>1</fpage>&#x2013;<lpage>9</lpage>. DOI <pub-id pub-id-type="doi">10.1109/JSYST.2021.3125455</pub-id>.</mixed-citation></ref>
<ref id="ref-15"><label>15.</label><mixed-citation publication-type="journal"><person-group person-group-type="author"><string-name><surname>Xiong</surname>, <given-names>H.</given-names></string-name>, <string-name><surname>Chen</surname>, <given-names>J.</given-names></string-name>, <string-name><surname>Mei</surname>, <given-names>Q.</given-names></string-name>, <string-name><surname>Zhao</surname>, <given-names>Y.</given-names></string-name></person-group> (<year>2020</year>). <article-title>Conditional privacy-preserving authentication protocol with dynamic membership updating for vanets</article-title>. <source>IEEE Transactions on Dependable and Secure Computing</source><italic>,</italic> <volume>19</volume><issue>(3)</issue><italic>,</italic> <fpage>2089&#x2013;2104</fpage>.</mixed-citation></ref>
<ref id="ref-16"><label>16.</label><mixed-citation publication-type="other"><person-group person-group-type="author"><string-name><surname>Shen</surname>, <given-names>Z.</given-names></string-name>, <string-name><surname>Lee</surname>, <given-names>P. P. C.</given-names></string-name></person-group> (<year>2018</year>). <article-title>Cross-rack-aware updates in erasure-coded data centers</article-title>. <source>ICPP 2018: Proceedings of the 47th International Conference on Parallel Processing</source>, pp. 1--10. DOI <pub-id pub-id-type="doi">10.1145/3225058.3225065</pub-id>.</mixed-citation></ref>
<ref id="ref-17"><label>17.</label><mixed-citation publication-type="conf-proc"><person-group person-group-type="author"><string-name><surname>Zhang</surname>, <given-names>F.</given-names></string-name>, <string-name><surname>Huang</surname>, <given-names>J.</given-names></string-name>, <string-name><surname>Xie</surname>, <given-names>C.</given-names></string-name></person-group> (<year>2012</year>). <article-title>Two efficient partial-updating schemes for erasure-coded storage clusters</article-title>. <conf-name>2012 IEEE Seventh International Conference on Networking, Architecture, and Storage</conf-name>, Xiamen, China, <publisher-name>IEEE</publisher-name>.</mixed-citation></ref>
<ref id="ref-18"><label>18.</label><mixed-citation publication-type="conf-proc"><person-group person-group-type="author"><string-name><surname>Pei</surname>, <given-names>X.</given-names></string-name>, <string-name><surname>Wang</surname>, <given-names>Y.</given-names></string-name>, <string-name><surname>Ma</surname>, <given-names>X.</given-names></string-name>, <string-name><surname>Xu</surname>, <given-names>F.</given-names></string-name></person-group> (<year>2016</year>). <article-title>T-Update: A tree-structured update scheme with top-down transmission in erasure-coded systems</article-title>. <conf-name>35th Annual IEEE International Conference on Computer Communications</conf-name>, San Francisco, CA, <publisher-name>IEEE</publisher-name>.</mixed-citation></ref>
<ref id="ref-19"><label>19.</label><mixed-citation publication-type="conf-proc"><person-group person-group-type="author"><string-name><surname>Wang</surname>, <given-names>F.</given-names></string-name>, <string-name><surname>Tang</surname>, <given-names>Y.</given-names></string-name>, <string-name><surname>Xie</surname>, <given-names>Y.</given-names></string-name>, <string-name><surname>Tang</surname>, <given-names>X.</given-names></string-name></person-group> (<year>2019</year>). <article-title>Xorinc: Optimizing data repair and update for erasure-coded systems with xor-based in-network computation</article-title>. <conf-name>2019 35th Symposium on Mass Storage Systems and Technologies (MSST)</conf-name>, Santa Clara, CA, <publisher-name>IEEE</publisher-name>.</mixed-citation></ref>
<ref id="ref-20"><label>20.</label><mixed-citation publication-type="journal"><person-group person-group-type="author"><string-name><surname>Xiao</surname>, <given-names>Y.</given-names></string-name>, <string-name><surname>Zhou</surname>, <given-names>S.</given-names></string-name>, <string-name><surname>Zhong</surname>, <given-names>L.</given-names></string-name></person-group> (<year>2020</year>). <article-title>Erasure coding-oriented data update for cloud storage: A survey</article-title>. <source>IEEE Access</source><italic>,</italic> <volume>8</volume><italic>,</italic> <fpage>227982</fpage>&#x2013;<lpage>227998</lpage>. DOI <pub-id pub-id-type="doi">10.1109/Access.6287639</pub-id>.</mixed-citation></ref>
<ref id="ref-21"><label>21.</label><mixed-citation publication-type="conf-proc"><person-group person-group-type="author"><string-name><surname>Chan</surname>, <given-names>J. C.</given-names></string-name>, <string-name><surname>Ding</surname>, <given-names>Q.</given-names></string-name>, <string-name><surname>Lee</surname>, <given-names>P. P.</given-names></string-name>, <string-name><surname>Chan</surname>, <given-names>H. H.</given-names></string-name></person-group> (<year>2014</year>). <article-title>Parity logging with reserved space: Towards efficient updates and recovery in erasure-coded clustered storage</article-title>. <conf-name>12th USENIX Conference on File and Storage Technologies</conf-name>, Santa Clara, CA.</mixed-citation></ref>
<ref id="ref-22"><label>22.</label><mixed-citation publication-type="conf-proc"><person-group person-group-type="author"><string-name><surname>Gong</surname>, <given-names>G.</given-names></string-name>, <string-name><surname>Shen</surname>, <given-names>Z.</given-names></string-name>, <string-name><surname>Wu</surname>, <given-names>S.</given-names></string-name>, <string-name><surname>Li</surname>, <given-names>X.</given-names></string-name>, <string-name><surname>Lee</surname>, <given-names>P. P.</given-names></string-name></person-group> (<year>2021</year>). <article-title>Optimal rack-coordinated updates in erasure-coded data centers</article-title>. <conf-name>IEEE Conference on Computer Communications</conf-name>, <italic>Virtual Conference,</italic> <publisher-name>IEEE</publisher-name>.</mixed-citation></ref>
<ref id="ref-23"><label>23.</label><mixed-citation publication-type="journal"><person-group person-group-type="author"><string-name><surname>Reed</surname>, <given-names>I. S.</given-names></string-name>, <string-name><surname>Solomon</surname>, <given-names>G.</given-names></string-name></person-group> (<year>1960</year>). <article-title>Polynomial codes over certain finite fields</article-title>. <source>Journal of the Society for Industrial and Applied Mathematics</source><italic>,</italic> <volume>8</volume><issue>(2)</issue><italic>,</italic> <fpage>300</fpage>&#x2013;<lpage>304</lpage>. DOI <pub-id pub-id-type="doi">10.1137/0108018</pub-id>.</mixed-citation></ref>
<ref id="ref-24"><label>24.</label><mixed-citation publication-type="web"><person-group person-group-type="author"><collab>Apache hadoop 3.0.0</collab></person-group> (<year>2017</year>). <uri xlink:href="https://hadoop.apache.org/docs/r3.0.0/hadoop-project-dist/hadoop-hdfs/HDFSErasureCoding.html">https://hadoop.apache.org/docs/r3.0.0/hadoop-project-dist/hadoop-hdfs/HDFSErasureCoding.html</uri>.</mixed-citation></ref>
<ref id="ref-25"><label>25.</label><mixed-citation publication-type="journal"><person-group person-group-type="author"><string-name><surname>Chen</surname>, <given-names>H.</given-names></string-name>, <string-name><surname>Zhang</surname>, <given-names>H.</given-names></string-name>, <string-name><surname>Dong</surname>, <given-names>M.</given-names></string-name>, <string-name><surname>Wang</surname>, <given-names>Z.</given-names></string-name>, <string-name><surname>Xia</surname>, <given-names>Y.</given-names></string-name> <etal>et al.</etal></person-group> (<year>2017</year>). <article-title>Efficient and available in-memory kv-store with hybrid erasure coding and replication</article-title>. <source>ACM Transactions on Storage</source><italic>,</italic> <volume>13</volume><issue>(3)</issue><italic>,</italic> <fpage>1</fpage>&#x2013;<lpage>30</lpage>.</mixed-citation></ref>
<ref id="ref-26"><label>26.</label><mixed-citation publication-type="conf-proc"><person-group person-group-type="author"><string-name><surname>Vajha</surname>, <given-names>M.</given-names></string-name>, <string-name><surname>Ramkumar</surname>, <given-names>V.</given-names></string-name>, <string-name><surname>Puranik</surname>, <given-names>B.</given-names></string-name>, <string-name><surname>Kini</surname>, <given-names>G.</given-names></string-name>, <string-name><surname>Lobo</surname>, <given-names>E.</given-names></string-name> <etal>et al.</etal></person-group> (<year>2018</year>). <article-title>Clay codes: Moulding MDS codes to yield an MSR code</article-title>. <conf-name>16th USENIX Conference on File and Storage Technologies (FAST 18)</conf-name>, <conf-loc>Oakland, CA</conf-loc>, <publisher-name>USENIX Association</publisher-name>. <uri xlink:href="https://www.usenix.org/conference/fast18/presentation/vajha">https://www.usenix.org/conference/fast18/presentation/vajha</uri>.</mixed-citation></ref>
<ref id="ref-27"><label>27.</label><mixed-citation publication-type="other"><person-group person-group-type="author"><string-name><surname>Huang</surname>, <given-names>C.</given-names></string-name>, <string-name><surname>Simitci</surname>, <given-names>H.</given-names></string-name>, <string-name><surname>Xu</surname>, <given-names>Y.</given-names></string-name>, <string-name><surname>Ogus</surname>, <given-names>A. W.</given-names></string-name>, <string-name><surname>Calder</surname>, <given-names>B.</given-names></string-name> <etal>et al.</etal></person-group> (<year>2012</year>). <article-title>Erasure coding in windows azure storage</article-title>. <conf-name>2012 USENIX Annual Technical Conference (USENIX ATC 12)</conf-name>, Boston, MA, USENIX. <uri xlink:href="https://www.usenix.org/conference/atc12/technical-sessions/presentation/huang">https://www.usenix.org/conference/atc12/technical-sessions/presentation/huang</uri>.</mixed-citation></ref>
<ref id="ref-28"><label>28.</label><mixed-citation publication-type="web"><person-group person-group-type="author"><collab>Linux traffic control</collab></person-group> (2001). <uri xlink:href="https://man7.org/linux/man-pages/man8/tc.8.html">https://man7.org/linux/man-pages/man8/tc.8.html</uri>.</mixed-citation></ref>
<ref id="ref-29"><label>29.</label><mixed-citation publication-type="web"><person-group person-group-type="author"><collab>Proxmox</collab></person-group> (<year>2021</year>). <uri xlink:href="https://www.proxmox.com/en/proxmox-ve">https://www.proxmox.com/en/proxmox-ve</uri>.</mixed-citation></ref>
</ref-list>
</back>
</article>














