You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@crail.apache.org by at...@apache.org on 2018/02/08 13:01:28 UTC

[14/15] incubator-crail-website git commit: Publishing from 2e861e0fcb149903d38182e89b6d6c286ea7cda7

http://git-wip-us.apache.org/repos/asf/incubator-crail-website/blob/5c23d221/content/blog/2017/03/sparksummit.html
----------------------------------------------------------------------
diff --git a/content/blog/2017/03/sparksummit.html b/content/blog/2017/03/sparksummit.html
deleted file mode 100644
index 91c5ecb..0000000
--- a/content/blog/2017/03/sparksummit.html
+++ /dev/null
@@ -1,86 +0,0 @@
-<!DOCTYPE html>
-<html>
-    <head>
-        <meta charset="utf-8">
-        <title>The Apache Crail (Incubating) Project: Sparksummit</title>
-        <meta name="viewport" content="width=device-width, initial-scale=1.0">
-        <link href="http://crail.incubator.apache.org/css/bootstrap.min.css" rel="stylesheet">
-        <link href="http://crail.incubator.apache.org/css/group.css" rel="stylesheet">
-        <link rel="alternate" type="application/atom+xml" title="Atom"
-            href="http://crail.incubator.apache.org/blog/blog.xml">
-        
-        <meta property="og:image" content="http://crail.incubator.apache.org/img/blog/preview/sparksummit-summary.png" />
-        <meta property="og:image:secure_url" content="http://crail.incubator.apache.org/img/blog/preview/sparksummit-summary.png" />
-    </head>
-
-    <body>
-        <div class="container">
-          <div class="header">
-            <ul class="nav nav-pills pull-right">
-              
-              
-                
-                <li >
-                  <a href="http://crail.incubator.apache.org/">
-                    Home
-                  </a>
-                </li>
-              
-                
-                <li >
-                  <a href="http://crail.incubator.apache.org/overview/">
-                    Overview
-                  </a>
-                </li>
-              
-                
-                <li >
-                  <a href="http://crail.incubator.apache.org/blog/">
-                    Blog
-                  </a>
-                </li>
-              
-                
-                <li >
-                  <a href="http://crail.incubator.apache.org/community/">
-                    Community
-                  </a>
-                </li>
-              
-                
-                <li >
-                  <a href="http://crail.incubator.apache.org/documentation/">
-                    Documentation
-                  </a>
-                </li>
-              
-            </ul>
-            <a href="http://crail.incubator.apache.org/">
-                <img src="http://crail.incubator.apache.org/img/crail_logo.png"
-                    srcset="http://crail.incubator.apache.org/img/crail_logo.png"
-                    alt="Crail" id="logo">
-            </a>
-          </div>
-
-          
-          
-          <h2>Sparksummit</h2>   
-          
-
-          <p>We are presenting Crail at the <a href="https://spark-summit.org/2017/events/running-apache-spark-on-a-high-performance-cluster-using-rdma-and-nvme-flash">Spark Summit</a> in San Francisco on June 6th</p>
-
-
-        <br>
-	<br> 
-          <div class="footer">
-            <p>Apache Crail is an effort undergoing <a href="https://incubator.apache.org/">incubation</a> at <a href="https://www.apache.org/">The Apache Software Foundation (ASF)</a>, sponsored by the Apache Incubator PMC. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF.
-            </p>
-          </div>
-
-        </div> <!-- /container -->
-
-        <!-- Support retina images. -->
-        <script type="text/javascript"
-            src="http://crail.incubator.apache.org/js/srcset-polyfill.js"></script>
-    </body>
-</html>

http://git-wip-us.apache.org/repos/asf/incubator-crail-website/blob/5c23d221/content/blog/2017/06/disni.html
----------------------------------------------------------------------
diff --git a/content/blog/2017/06/disni.html b/content/blog/2017/06/disni.html
deleted file mode 100644
index 1eb5df1..0000000
--- a/content/blog/2017/06/disni.html
+++ /dev/null
@@ -1,86 +0,0 @@
-<!DOCTYPE html>
-<html>
-    <head>
-        <meta charset="utf-8">
-        <title>The Apache Crail (Incubating) Project: Disni</title>
-        <meta name="viewport" content="width=device-width, initial-scale=1.0">
-        <link href="http://crail.incubator.apache.org/css/bootstrap.min.css" rel="stylesheet">
-        <link href="http://crail.incubator.apache.org/css/group.css" rel="stylesheet">
-        <link rel="alternate" type="application/atom+xml" title="Atom"
-            href="http://crail.incubator.apache.org/blog/blog.xml">
-        
-        <meta property="og:image" content="http://crail.incubator.apache.org/img/blog/preview/disni-summary.png" />
-        <meta property="og:image:secure_url" content="http://crail.incubator.apache.org/img/blog/preview/disni-summary.png" />
-    </head>
-
-    <body>
-        <div class="container">
-          <div class="header">
-            <ul class="nav nav-pills pull-right">
-              
-              
-                
-                <li >
-                  <a href="http://crail.incubator.apache.org/">
-                    Home
-                  </a>
-                </li>
-              
-                
-                <li >
-                  <a href="http://crail.incubator.apache.org/overview/">
-                    Overview
-                  </a>
-                </li>
-              
-                
-                <li >
-                  <a href="http://crail.incubator.apache.org/blog/">
-                    Blog
-                  </a>
-                </li>
-              
-                
-                <li >
-                  <a href="http://crail.incubator.apache.org/community/">
-                    Community
-                  </a>
-                </li>
-              
-                
-                <li >
-                  <a href="http://crail.incubator.apache.org/documentation/">
-                    Documentation
-                  </a>
-                </li>
-              
-            </ul>
-            <a href="http://crail.incubator.apache.org/">
-                <img src="http://crail.incubator.apache.org/img/crail_logo.png"
-                    srcset="http://crail.incubator.apache.org/img/crail_logo.png"
-                    alt="Crail" id="logo">
-            </a>
-          </div>
-
-          
-          
-          <h2>Disni</h2>   
-          
-
-          <p>DiSNI, the RDMA and NVMe user-level stack used in Crail is now available on <a href="https://search.maven.org/">Maven Central</a></p>
-
-
-        <br>
-	<br> 
-          <div class="footer">
-            <p>Apache Crail is an effort undergoing <a href="https://incubator.apache.org/">incubation</a> at <a href="https://www.apache.org/">The Apache Software Foundation (ASF)</a>, sponsored by the Apache Incubator PMC. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF.
-            </p>
-          </div>
-
-        </div> <!-- /container -->
-
-        <!-- Support retina images. -->
-        <script type="text/javascript"
-            src="http://crail.incubator.apache.org/js/srcset-polyfill.js"></script>
-    </body>
-</html>

http://git-wip-us.apache.org/repos/asf/incubator-crail-website/blob/5c23d221/content/blog/2017/08/crail-memory.html
----------------------------------------------------------------------
diff --git a/content/blog/2017/08/crail-memory.html b/content/blog/2017/08/crail-memory.html
deleted file mode 100644
index 0f50c2f..0000000
--- a/content/blog/2017/08/crail-memory.html
+++ /dev/null
@@ -1,269 +0,0 @@
-<!DOCTYPE html>
-<html>
-    <head>
-        <meta charset="utf-8">
-        <title>The Apache Crail (Incubating) Project: Crail Storage Performance -- Part I: DRAM</title>
-        <meta name="viewport" content="width=device-width, initial-scale=1.0">
-        <link href="http://crail.incubator.apache.org/css/bootstrap.min.css" rel="stylesheet">
-        <link href="http://crail.incubator.apache.org/css/group.css" rel="stylesheet">
-        <link rel="alternate" type="application/atom+xml" title="Atom"
-            href="http://crail.incubator.apache.org/blog/blog.xml">
-        
-        <meta property="og:image" content="http://crail.incubator.apache.org/img/blog/preview/crail-memory-summary.png" />
-        <meta property="og:image:secure_url" content="http://crail.incubator.apache.org/img/blog/preview/crail-memory-summary.png" />
-    </head>
-
-    <body>
-        <div class="container">
-          <div class="header">
-            <ul class="nav nav-pills pull-right">
-              
-              
-                
-                <li >
-                  <a href="http://crail.incubator.apache.org/">
-                    Home
-                  </a>
-                </li>
-              
-                
-                <li >
-                  <a href="http://crail.incubator.apache.org/overview/">
-                    Overview
-                  </a>
-                </li>
-              
-                
-                <li >
-                  <a href="http://crail.incubator.apache.org/blog/">
-                    Blog
-                  </a>
-                </li>
-              
-                
-                <li >
-                  <a href="http://crail.incubator.apache.org/community/">
-                    Community
-                  </a>
-                </li>
-              
-                
-                <li >
-                  <a href="http://crail.incubator.apache.org/documentation/">
-                    Documentation
-                  </a>
-                </li>
-              
-            </ul>
-            <a href="http://crail.incubator.apache.org/">
-                <img src="http://crail.incubator.apache.org/img/crail_logo.png"
-                    srcset="http://crail.incubator.apache.org/img/crail_logo.png"
-                    alt="Crail" id="logo">
-            </a>
-          </div>
-
-          
-          
-          <h2>Crail Storage Performance -- Part I: DRAM</h2>   
-          
-
-          <p class="meta">18 Aug 2017</p>
-
-<div class="post">
-<div style="text-align: justify"> 
-<p>
-It's summer and there is some time to blog about things. This blog post is the first in a series of three posts where we illustrate Crail's raw storage performance on our 100Gbps cluster. In part I we cover Crail's DRAM storage tier, part II will be about Crail's NVMe flash storage tier, and part III will be about Crail's metadata performance. 
-</p>
-<p>
-I recently read the <a href="https://www.usenix.org/conference/atc17/technical-sessions/presentation/lu">Octopus file system</a> Usenix'17 paper, where the authors show Crail performance numbers that do not match the performance we measure on our clusters. Like many other distributed systems, Crail also requires a careful system configuration and wrong or mismatching configuration settings can easily lead to poor performance. Therefore, in this blog we try to point out the key parameter settings that are necessary to obtain proper performance numbers with Crail. 
-</p>
-</div>
-
-<h3 id="hardware-configuration">Hardware Configuration</h3>
-
-<p>The specific cluster configuration used for the experiments in this blog:</p>
-
-<ul>
-  <li>Cluster
-    <ul>
-      <li>8 node OpenPower cluster (for Crail)</li>
-      <li>2 node X86 cluster (for RAMCloud)</li>
-    </ul>
-  </li>
-  <li>OpenPower Node configuration
-    <ul>
-      <li>CPU: 2x OpenPOWER Power8 10-core @2.9Ghz</li>
-      <li>DRAM: 512GB DDR4</li>
-      <li>Network: 1x100Gbit/s Ethernet Mellanox ConnectX-4 EN (Ethernet/RoCE)
-        <ul>
-          <li>RDMA send/recv latency, ib_send_lat (RTT): 3.1us</li>
-          <li>RDMA read latency, ib_read_lat (RTT): 2.3us</li>
-        </ul>
-      </li>
-    </ul>
-  </li>
-  <li>Software
-    <ul>
-      <li>RedHat 7.2 with Linux kernel version 4.10.13</li>
-      <li>Crail 1.0, internal version 2842</li>
-      <li>Alluxio 1.4</li>
-      <li>RAMCloud commit f53202398b4720f20b0cdc42732edf48b928b8d7</li>
-    </ul>
-  </li>
-</ul>
-
-<h3 id="anatomy-of-a-crail-data-operation">Anatomy of a Crail Data Operation</h3>
-
-<div style="text-align: justify"> 
-<p>
-Data operations in Crail -- such as the reading or writing of files -- are internally composed of metadata operations and actual data transfers. Let's look at a simple Crail application that opens a file and reads the file sequentially:
-</p>
-</div>
-<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>CrailConfiguration conf = new CrailConfiguration();
-CrailFS fs = CrailFS.newInstance(conf);
-CrailFile file = fs.lookup(filename).get().asFile();
-CrailInputStream stream = file.getDirectInputStream();
-while(stream.available() &gt; 0){
-    Future&lt;Buffer&gt; future = stream.read(buf);
-    //Do something useful
-    ...
-    //Await completion of operation
-    future.get();
-}
-</code></pre></div></div>
-<div style="text-align: justify"> 
-<p>
-One challenge with file read/write operations is to avoid blocking in case block metadata information is missing. Crail caches block metadata at the client, but caching is ineffective for both random reads and write-once read-once data. To avoid blocking for sequential read/write operations, Crail interleaves metadata operations and actual data transfers. Each read operation always triggers the lookup of block metadata for the next block immediately after issuing the RDMA read operation for the current block. The asynchronous and non-blocking nature of RDMA allows both operations to be executed in the process context of the application, without context switching or any additional background threads. The figure illustrates the case of one outstanding operation a time. The asynchronous Crail storage API, however, permits any number of outstanding operations. 
-</p>
-</div>
-<p><br /></p>
-<div style="text-align:center"><img src="http://crail.incubator.apache.org/img/blog/crail-memory/anatomy.png" width="420" /></div>
-<p><br /></p>
-<div style="text-align: justify"> 
-<p>
-As a side note, it's also worth mentioning that Crail does not actually use RPCs for the data transfers but uses RDMA one-sided read/write operations instead. Moreover, Crail is designed from ground up for byte-addressable storage and memory. For instance, files in Crail are essentially a sequence of virtual memory windows on different hosts which allows for a very effective handling of small data operations. As shown in the figure, during the last operation, with only a few bytes left to be read, the byte-granular nature of Crail's block access protocol makes sure that only the relevant bytes are transmitted over the network, as opposed to transmitting the entire block. 
-</p>
-<p>
-The basic read/write logic shown in the figure above is common to all storage tiers in Crail, including the NVMe flash tier. In the remainder of this post, we specificially look at the performance of Crail's DRAM storage tier though. 
-</p>
-</div>
-
-<h3 id="sequential-readwrite-throughput">Sequential Read/Write Throughput</h3>
-
-<div style="text-align: justify"> 
-<p>
-Let's start by looking at sequential read/write performance. These benchmarks can be run easily from the command line. Below  is an example for a sequential write experiment issuing 100M write operations of size 1K to produce a file of roughly 100GB size. The -w switch indicates that we are using 32 warmup operations. 
-</p>
-</div>
-<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>./bin/crail iobench -t write -s 1024 -k 100000000 -w 32 -f /tmp.dat
-</code></pre></div></div>
-<div style="text-align: justify"> 
-<p>
-Crail offers direct I/O streams as well as buffered streams. For sequential operations it is important to use the buffered streams. Even though the buffered streams impose one extra copy (from the Crail stream to the application buffer) they are typically more effective for sequential access as they make sure that at least one network operation is in-flight at any time. The buffer size in a Crail buffered stream and the number of oustanding operations can be controlled by setting the buffersize and the slicesize properties in crail-site.conf. For our experiments we used a 1MB buffer per stream sliced up into two slices of 512K each which eventually leads to two operations in flight. 
-</p>
-</div>
-
-<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>crail.buffersize     1048576
-crail.slicesize      524288
-</code></pre></div></div>
-
-<div style="text-align: justify"> 
-<p>
-The figure below illustrates the sequential write (top) and read (bottom) performance of Crail (DRAM tier) for different application buffer sizes (not to be mixed up with crail.buffersize used within streams) and shows a comparison to other systems. As of now, we only show a comparison with Alluxio, an in-memory file system for caching data in Spark or Hadoop applications. We are, however, working on including results for other storage systems such as Apache Ignite and GlusterFS and we plan to update the blog post accordingly soon. If there is a particular storage system that is not included but you would like to see included as a comparison, please write us. And <b>important</b>: if you find that the results we show for a particular storage system do not match your experience, please write to us too, we are happy to revisit the configuration.
-</p>
-</div>
-<p><br /></p>
-<div style="text-align:center"><img src="http://crail.incubator.apache.org/img/blog/crail-memory/write.svg" width="550" /></div>
-<div style="text-align:center"><img src="http://crail.incubator.apache.org/img/blog/crail-memory/read.svg" width="550" /></div>
-<p><br /><br /></p>
-<div style="text-align: justify"> 
-<p>
-One first observation from the figure is that there is almost no difference in performance for write and read operations. Second, at a buffer size of around 1K Crail reaches a bandwidth close to 95Gbit/s (for read), which is approaching the network hardware limit of 100Gbps. And third, Crail performs significantly faster than other in-memory storage systems, in this case Alluxio. This because Crail is built on of user-level networking and thereby avoids the overheads of both the Linux network stack (memory copies, context switches, etc.) and the Java runtime. 
-</p>
-<p>
-Note that both figures show single-client performance numbers. With Crail being a user-level storage system executing I/O operations directly within the application context this means the entire benchmark is truly runninig on one single core. Often, systems that perform poorly in single-client experiments are being defended saying that nobody cares about the single-client performance. Especially throughput problems can easily be fixed by adding more cores. This is, however, not at all cloudy to say the least. At the level hardware is multiplexed and priced in today's cloud computing data centers every core counts. The figure below shows a simple Spark group-by experiment on the same 8-node cluster. As can be seen, with Crail the benchmark executes faster using a single core per machine than with default Spark using 8 cores per machine, which is a direct consequence from Crail's superb single-core I/O performance. 
-</p>
-</div>
-
-<div style="text-align:center"><img src="http://crail.incubator.apache.org/img/blog/crail-memory/crail-groupby.svg" width="550" /></div>
-<div style="text-align:center"><img src="http://crail.incubator.apache.org/img/blog/crail-memory/spark-groupby.svg" width="550" /></div>
-
-<h3 id="random-read-latency">Random Read Latency</h3>
-
-<div style="text-align: justify"> 
-<p>
-Typically, distributed storage systems are either built for sequential access to large data sets (e.g., HDFS) or they are optimized for random access to small data sets (e.g., key/value stores). We have already shown that Crail performs well for large sequentially accessed data sets, let's now look at the latencies of small random read operations. For this, we mimic the behavior of a key/value store by storing key/value pairs in Crail files with the key being the filename. We then measure the time it takes to open the file and read its content. Again, the benchmark can easily be executed from the command line. The following example issues 1M get() operations on a small file filled with a 4 byte value. 
-</p>
-</div>
-<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>./bin/crail iobench -t getkey -s 4 -k 1000000 -f /tmp.dat -w 32
-</code></pre></div></div>
-<div style="text-align: justify"> 
-<p>
-The figure below illustrates the latencies of get() operations for different key/value sizes and compares them to the latencies we obtained with RAMCloud for the same type of operations (measured using RAMClouds C and Java APIs). RAMCloud is a low-latency key/value store implemented using RDMA. RAMCloud actually provides durable storage by asynchronously replicating data onto backup devices. However, at any point in time all the data is held in DRAM and read requests will be served from DRAM directly. Up to our knowledge, RAMCloud is the fastest key/value store that is (a) available open source and (b) can be deployed in practice as a storage platform for applications. Other similar RDMA-based storage systems we looked at, like FaRM or HERD, are either not open source or they do not provide a clean separation between storage system, API and clients. 
-</p>
-</div>
-<div style="text-align:center"><img src="http://crail.incubator.apache.org/img/blog/crail-memory/latency.svg" width="550" /></div>
-
-<div style="text-align: justify"> 
-<p>
-As can be seen from the figure, Crail's latencies for reading small files range from 10us to 20us for files smaller than 256K. The first observation is that these latency numbers are very close to the RAMCloud get() latencies obtained using the RAMCloud C API. Mainly, the latency difference between the two systems comes from the extra network roundtrip that is required in Crail to open the file, an operation which involves the Crail namenode. Once the file size reaches 64K, the cost for the extra roundtrip is amortized and the Crail latencies start to match the RAMCloud latencies. The second observation from the figure is that Crail offers lower latencies than the RAMCloud Java API for key/value sizes of 16K and bigger. This is because Crail, which is implemented in Java itself, integrates natively with the Java memory system. For instance, Crail's raw stream APIs permits clients to pass Java off-heap ByteBuffers which can be accessed by the network interface directly, avoiding data
  copies along the way. That being said we also understand that the Java API is not RAMCloud's primary API and could probably be optimized further.
-</p>
-<p>
-All in all the main take away here is that -- despite Crail offering a fully hierchical storage namespace and high-performance operations on large data sets -- the latencies for looking up and reading small data sets are in the same ballpark as the get() latencies of some of the fastest key/value stores out there.
-</p>
-<p>
-The latency advantages of Crail are beneficial also at the application level. The figure below illustrates this in a Spark broadcast experiment. Broadcast objects in Spark are typically small read-only variables that are shared across the cluster. The Crail broadcast module for Spark uses Crail as a storage backend to make broadcast variables accessible by the different tasks. As can be seen, using Crail broadcast objects can be accessed in just a few microseconds, while the same operation in default Spark takes milliseconds.
-</p>
-</div>
-
-<div style="text-align:center"><img src="http://crail.incubator.apache.org/img/blog/crail-memory/cdf-broadcast-128-read.svg" width="550" /></div>
-
-<div style="text-align: justify"> 
-<p>
-To summarize, in this blog post we have shown that Crail's DRAM storage tier provides both throughput and latency close to the hardware limits. These performance benefits enable high-level data processing operations like shuffle or broadcast to be implemented faster and/or more efficient.
-</p>
-
-</div>
-
-</div>
-
-<!-- 
-
-<div id="disqus_thread"></div>
-<script>
-
-/**
-*  RECOMMENDED CONFIGURATION VARIABLES: EDIT AND UNCOMMENT THE SECTION BELOW TO INSERT DYNAMIC VALUES FROM YOUR PLATFORM OR CMS.
-*  LEARN WHY DEFINING THESE VARIABLES IS IMPORTANT: https://disqus.com/admin/universalcode/#configuration-variables*/
-/*
-var disqus_config = function () {
-this.page.url = PAGE_URL;  // Replace PAGE_URL with your page's canonical URL variable
-this.page.identifier = PAGE_IDENTIFIER; // Replace PAGE_IDENTIFIER with your page's unique identifier variable
-};
-*/
-(function() { // DON'T EDIT BELOW THIS LINE
-var d = document, s = d.createElement('script');
-s.src = '//crail-io.disqus.com/embed.js';
-s.setAttribute('data-timestamp', +new Date());
-(d.head || d.body).appendChild(s);
-})();
-</script>
-<noscript>Please enable JavaScript to view the <a href="https://disqus.com/?ref_noscript">comments powered by Disqus.</a></noscript>
-
--->
-
-
-        <br>
-	<br> 
-          <div class="footer">
-            <p>Apache Crail is an effort undergoing <a href="https://incubator.apache.org/">incubation</a> at <a href="https://www.apache.org/">The Apache Software Foundation (ASF)</a>, sponsored by the Apache Incubator PMC. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF.
-            </p>
-          </div>
-
-        </div> <!-- /container -->
-
-        <!-- Support retina images. -->
-        <script type="text/javascript"
-            src="http://crail.incubator.apache.org/js/srcset-polyfill.js"></script>
-    </body>
-</html>

http://git-wip-us.apache.org/repos/asf/incubator-crail-website/blob/5c23d221/content/blog/2017/08/crail-nvme-fabrics-v1.html
----------------------------------------------------------------------
diff --git a/content/blog/2017/08/crail-nvme-fabrics-v1.html b/content/blog/2017/08/crail-nvme-fabrics-v1.html
deleted file mode 100644
index b29c6a2..0000000
--- a/content/blog/2017/08/crail-nvme-fabrics-v1.html
+++ /dev/null
@@ -1,262 +0,0 @@
-<!DOCTYPE html>
-<html>
-    <head>
-        <meta charset="utf-8">
-        <title>The Apache Crail (Incubating) Project: Crail Storage Performance -- Part II: NVMf</title>
-        <meta name="viewport" content="width=device-width, initial-scale=1.0">
-        <link href="http://crail.incubator.apache.org/css/bootstrap.min.css" rel="stylesheet">
-        <link href="http://crail.incubator.apache.org/css/group.css" rel="stylesheet">
-        <link rel="alternate" type="application/atom+xml" title="Atom"
-            href="http://crail.incubator.apache.org/blog/blog.xml">
-        
-        <meta property="og:image" content="http://crail.incubator.apache.org/img/blog/preview/crail-nvme-fabrics-v1-summary.png" />
-        <meta property="og:image:secure_url" content="http://crail.incubator.apache.org/img/blog/preview/crail-nvme-fabrics-v1-summary.png" />
-    </head>
-
-    <body>
-        <div class="container">
-          <div class="header">
-            <ul class="nav nav-pills pull-right">
-              
-              
-                
-                <li >
-                  <a href="http://crail.incubator.apache.org/">
-                    Home
-                  </a>
-                </li>
-              
-                
-                <li >
-                  <a href="http://crail.incubator.apache.org/overview/">
-                    Overview
-                  </a>
-                </li>
-              
-                
-                <li >
-                  <a href="http://crail.incubator.apache.org/blog/">
-                    Blog
-                  </a>
-                </li>
-              
-                
-                <li >
-                  <a href="http://crail.incubator.apache.org/community/">
-                    Community
-                  </a>
-                </li>
-              
-                
-                <li >
-                  <a href="http://crail.incubator.apache.org/documentation/">
-                    Documentation
-                  </a>
-                </li>
-              
-            </ul>
-            <a href="http://crail.incubator.apache.org/">
-                <img src="http://crail.incubator.apache.org/img/crail_logo.png"
-                    srcset="http://crail.incubator.apache.org/img/crail_logo.png"
-                    alt="Crail" id="logo">
-            </a>
-          </div>
-
-          
-          
-          <h2>Crail Storage Performance -- Part II: NVMf</h2>   
-          
-
-          <p class="meta">22 Aug 2017</p>
-
-<div class="post">
-<div style="text-align: justify">
-<p>
-This is part II of our series of posts discussing Crail's raw storage performance. This part is about Crail's NVMe storage tier, a low-latency flash storage backend for Crail completely based on user-level storage access.
-</p>
-</div>
-
-<h3 id="hardware-configuration">Hardware Configuration</h3>
-
-<p>The specific cluster configuration used for the experiments in this blog:</p>
-
-<ul>
-  <li>Cluster
-    <ul>
-      <li>8 node OpenPower cluster</li>
-    </ul>
-  </li>
-  <li>Node configuration
-    <ul>
-      <li>CPU: 2x OpenPOWER Power8 10-core @2.9Ghz</li>
-      <li>DRAM: 512GB DDR4</li>
-      <li>4x 512 GB Samsung 960Pro NVMe SSDs (512Byte sector size, no metadata)</li>
-      <li>Network: 1x100Gbit/s Mellanox ConnectX-4 IB</li>
-    </ul>
-  </li>
-  <li>Software
-    <ul>
-      <li>RedHat 7.3 with Linux kernel version 3.10</li>
-      <li>Crail 1.0, internal version 2843</li>
-      <li>SPDK git commit 5109f56ea5e85b99207556c4ff1d48aa638e7ceb with patches for POWER support</li>
-      <li>DPDK git commit bb7927fd2179d7482de58d87352ecc50c69da427</li>
-    </ul>
-  </li>
-</ul>
-
-<h3 id="the-crail-nvmf-storage-tier">The Crail NVMf Storage Tier</h3>
-
-<div style="text-align: justify"> 
-<p>
-Crail is a framework that allows arbitrary storage backends to be added by implementing the Crail storage interface. A storage backend manages the point-to-point data transfers on a per block granularity between a Crail client and a set of storage servers. The Crail storage interface essentially consists of three virtual functions, which simplified look like this:
-</p>
-</div>
-<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>//Server-side interface: donate storage resources to Crail
-StorageResource allocateResource();
-//Client-side interface: read/write remote/local storage resources
-writeBlock(BlockInfo, ByteBuffer);
-readBlock(BlockInfo, ByteBuffer);
-</code></pre></div></div>
-<div style="text-align: justify"> 
-<p>
-A specific implementation of this interface provides an efficient mapping of Crail storage operations to the actual storage and network hardware the backend is exporting. Crail comes with two native storage backends, an RDMA-based DRAM backend and an RDMA-based NVMe backend, but other storage backends are available as well (e.g., Netty) and we plan to provide more custom backends in the future as new storage and network technologies are emerging. 
-</p>
-<p>
-The Crail NVMf storage backend we evaluate in this blog provides user-level access to local and remote flash through the NVMe over Fabrics protocol. Crail NVMf is implemented using <a href="https://github.com/zrlio/disni">DiSNI</a>, a user-level network and storage interface for Java offering both RDMA and NVMf APIs. DiSNI itself is based on <a href="http://www.spdk.io">SPDK</a> for its NVMf APIs. 
-</p>
-<p>
-The server side of the NVMf backend is designed in a way that each server process manages exactly one NVMe drive. On hosts with multiple NVMe drives one may start several Crail NVMf servers. A server is setting up an NVMf target through DiSNI and implements the allocateResource() storage interface by allocating storage regions from the NVMe drive (basically splits up the NVMe namespace into smaller segments). The Crail storage runtime makes information about storage regions available to the Crail namenode, from where regions are further broken down into smaller units called blocks that make up files in Crail.
-</p>
-<p>
-The Crail client runtime invokes the NVMf client interface during file read/write operations for all data transfers on NVMf blocks. Using the block information provided by the namenode, the NVMf storage client implementation is able to connect to the appropriate NVMf target and perform the data operations using DiSNI's NVMf API.
-</p>
-<p>
-One downside of the NVMe interface is that byte level access is prohibited. Instead data operations have to be issued for entire drive sectors which are typically 512Byte or 4KB large (we used 512Byte sector size in all the experiments shown in this blog). As we wanted to use the standard NVMf protocol (and Crail has a client driven philosophy) we needed to implement byte level access at the client side. For reads this can be achieved in a straight forward way by reading the whole sector and copying out the requested part. For writes that modify a certain subrange of a sector that has already been written before we need to do a read modify write operation.
-</p>
-</div>
-
-<h3 id="performance-comparison-to-native-spdk-nvmf">Performance comparison to native SPDK NVMf</h3>
-
-<div style="text-align: justify"> 
-<p>
-We perform latency and throughput measurement of our Crail NVMf storage tier against a native SPDK NVMf benchmark to determine how much overhead our implementation adds. The first plot shows random read latency on a single 512GB Samsung 960Pro accessed remotely through SPDK. For Crail we also show the time it takes to perform a metadata operations. You can run the Crail benchmark from the command line like this:
-</p>
-</div>
-<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>./bin/crail iobench -t readRandom -b false -s &lt;size&gt; -k &lt;iterations&gt; -w 32 -f /tmp.dat
-</code></pre></div></div>
-<p>and SPDK:</p>
-<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>./perf -q 1 -s &lt;size&gt; -w randread -r 'trtype:RDMA adrfam:IPv4 traddr:&lt;ip&gt; trsvcid:&lt;port&gt;' -t &lt;time in seconds&gt;
-</code></pre></div></div>
-<div style="text-align: justify"> 
-<p>
-The main take away from this plot is that the time it takes to perform a random read operation on a NVMe-backed file in Crail takes only about 7 microseconds more time than fetching the same amount of data over a point-to-point SPDK connection. This is impressive because it shows that using Crail a bunch of NVMe drives can be turned into a fully distributed storage space at almost no extra cost. The 7 microseconds are due to Crail having to look up the specific NVMe storage node that holdes the data -- an operation which requires one extra network roundtrip (client to namenode). The experiment represents an extreme case where no metadata is cached at the client. In practice, file blocks are often accessed multiple times in which case the read latency is further reduced. Also note that unlike SPDK which is a native library, Crail delivers data directly into Java off-heap memory. 
-</p>
-</div>
-
-<div style="text-align:center"><img src="http://crail.incubator.apache.org/img/blog/crail-nvmf/latency.svg" width="550" /></div>
-<p><br /></p>
-
-<div style="text-align: justify"> 
-<p>
-The second plot shows sequential read and write throughput with a transfer size of 64KB and 128 outstanding operations. The Crail throughput benchmark can be run like this:
-</p>
-</div>
-<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>./bin/crail iobench -t readAsync -s 65536 -k &lt;iterations&gt; -b 128 -w 32 -f /tmp.dat
-</code></pre></div></div>
-<p>and SPDK:</p>
-<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>./perf -q 128 -s 65536 -w read -r 'trtype:RDMA adrfam:IPv4 traddr:&lt;ip&gt; trsvcid:&lt;port&gt;' -t &lt;time in seconds&gt;
-</code></pre></div></div>
-<div style="text-align: justify"> 
-<p>
-For sequential operations in Crail, metadata fetching is inlined with data operations as described in the <a href="http://crail.incubator.apache.org/blog/2017/08/crail-memory.html">DRAM</a> blog. This is possible as long as the data transfer has a lower latency than the metadata RPC, which is typically the case. As a consequence, our NVMf storage tier reaches the same throughput as the native SPDK benchmark (device limit).
-</p>
-</div>
-<div style="text-align:center"><img src="http://crail.incubator.apache.org/img/blog/crail-nvmf/throughput.svg" width="550" /></div>
-
-<h3 id="sequential-throughput">Sequential Throughput</h3>
-
-<div style="text-align: justify"> 
-<p>
-Let us look at the sequential read and write throughput for buffered and direct streams and compare them to a buffered Crail stream on DRAM. All benchmarks are single thread/client performed against 8 storage nodes with 4 drives each, cf. configuration above. In this benchmark we use 32 outstanding operations for the NVMf storage tier buffered stream experiments by using a buffer size of 16MB and a slice size of 512KB, cf. <a href="http://crail.incubator.apache.org/blog/2017/07/crail-memory.html">part I</a>. The buffered stream reaches line speed at a transfer size of around 1KB and shows only slightly slower performance when compared to the DRAM tier buffered stream. However we are only using 2 outstanding operations with the DRAM tier to achieve these results. Basically for sizes smaller than 1KB the buffered stream is limited by the copy speed to fill the application buffer. The direct stream reaches line speed at around 128KB with 128 outstanding operations. Here no copy operati
 on is performed for transfer size greater than 512Byte (sector size). The command to run the Crail buffered stream benchmark:
-</p>
-</div>
-<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>./bin/crail iobench -t read -s &lt;size&gt; -k &lt;iterations&gt; -w 32 -f /tmp.dat
-</code></pre></div></div>
-<p>The direct stream benchmark:</p>
-<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>./bin/crail iobench -t readAsync -s &lt;size&gt; -k &lt;iterations&gt; -b 128 -w 32 -f /tmp.dat
-</code></pre></div></div>
-
-<div style="text-align:center"><img src="http://crail.incubator.apache.org/img/blog/crail-nvmf/throughput2.svg" width="550" /></div>
-
-<h3 id="random-read-latency">Random Read Latency</h3>
-
-<div style="text-align: justify"> 
-<p>
-Random read latency is limited by the flash technology and we currently see around 70us when performing sector size accesses to the device with the Crail NVMf backend. In comparison, remote DRAM latencies with Crail are about 7-8x faster. However, we believe that this will change in the near future with new technologies like PCM. Intel's Optane drives already can deliver random read latencies of around 10us. Considering that there is an overhead of around 10us to access a drive with Crail from anywhere in the cluster, using such a device would put random read latencies somewhere around 20us which is only half the performance of our DRAM tier.
-</p>
-</div>
-
-<div style="text-align:center"><img src="http://crail.incubator.apache.org/img/blog/crail-nvmf/latency2.svg" width="550" /></div>
-
-<h3 id="tiering-dram---nvmf">Tiering DRAM - NVMf</h3>
-
-<div style="text-align: justify"> 
-<p>
-In this paragraph we show how Crail can leverage flash memory when there is not sufficient DRAM available in the cluster to hold all the data. As described in the <a href="http://crail.incubator.apache.org/overview/">overview</a> section, if you have multiple storage tiers deployed in Crail, e.g. the DRAM tier and the NVMf tier, Crail by default first uses up all available resources of the faster tier. Basically a remote resource of a faster tier (e.g. remote DRAM) is preferred over a slower local resource (e.g., local flash), motivated by the fast network. This is what we call horizontal tiering.
-</p>
-</div>
-<div style="text-align:center"><img src="http://crail.incubator.apache.org/img/blog/crail-nvmf/crail_tiering.png" width="500" vspace="10" /></div>
-<p><br /></p>
-<div style="text-align: justify"> 
-<p>
-In the following 200G Terasort experiment we gradually limit the DRAM resources in Crail while adding more flash to the Crail NVMf storage tier. Note that here Crail is used for both input/output as well as shuffle data. The figure shows that by putting all the data in flash we only increase the sorting time by around 48% compared to the configuration where all the data resides in DRAM. Considering the cost of DRAM and the advances in technology described above we believe cheaper NVM storage can replace DRAM for most of the applications with only a minor performance decrease. Also, note that even with 100% of the data in NVMe, Spark/Crail is still faster than vanilla Spark with all the data in memory. The vanilla Spark experiment uses Alluxio for input/output and RamFS for the shuffle data.
-</p>
-</div>
-
-<div style="text-align:center"><img src="http://crail.incubator.apache.org/img/blog/crail-nvmf/tiering.svg" width="550" /></div>
-
-<p>To summarize, in this blog we have shown that the NVMf storage backend for Crail – due to its efficient user-level implementation – offers latencies and throughput very close to the hardware speed. The Crail NVMf storage tier can be used conveniently in combination with the Crail DRAM tier to either save cost or to handle situations where the available DRAM is not sufficient to store the working set of a data processing workload.</p>
-
-
-</div>
-
-<!-- 
-
-<div id="disqus_thread"></div>
-<script>
-
-/**
-*  RECOMMENDED CONFIGURATION VARIABLES: EDIT AND UNCOMMENT THE SECTION BELOW TO INSERT DYNAMIC VALUES FROM YOUR PLATFORM OR CMS.
-*  LEARN WHY DEFINING THESE VARIABLES IS IMPORTANT: https://disqus.com/admin/universalcode/#configuration-variables*/
-/*
-var disqus_config = function () {
-this.page.url = PAGE_URL;  // Replace PAGE_URL with your page's canonical URL variable
-this.page.identifier = PAGE_IDENTIFIER; // Replace PAGE_IDENTIFIER with your page's unique identifier variable
-};
-*/
-(function() { // DON'T EDIT BELOW THIS LINE
-var d = document, s = d.createElement('script');
-s.src = '//crail-io.disqus.com/embed.js';
-s.setAttribute('data-timestamp', +new Date());
-(d.head || d.body).appendChild(s);
-})();
-</script>
-<noscript>Please enable JavaScript to view the <a href="https://disqus.com/?ref_noscript">comments powered by Disqus.</a></noscript>
-
--->
-
-
-        <br>
-	<br> 
-          <div class="footer">
-            <p>Apache Crail is an effort undergoing <a href="https://incubator.apache.org/">incubation</a> at <a href="https://www.apache.org/">The Apache Software Foundation (ASF)</a>, sponsored by the Apache Incubator PMC. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF.
-            </p>
-          </div>
-
-        </div> <!-- /container -->
-
-        <!-- Support retina images. -->
-        <script type="text/javascript"
-            src="http://crail.incubator.apache.org/js/srcset-polyfill.js"></script>
-    </body>
-</html>

http://git-wip-us.apache.org/repos/asf/incubator-crail-website/blob/5c23d221/content/blog/2017/08/openpower.html
----------------------------------------------------------------------
diff --git a/content/blog/2017/08/openpower.html b/content/blog/2017/08/openpower.html
deleted file mode 100644
index 8778917..0000000
--- a/content/blog/2017/08/openpower.html
+++ /dev/null
@@ -1,86 +0,0 @@
-<!DOCTYPE html>
-<html>
-    <head>
-        <meta charset="utf-8">
-        <title>The Apache Crail (Incubating) Project: Openpower</title>
-        <meta name="viewport" content="width=device-width, initial-scale=1.0">
-        <link href="http://crail.incubator.apache.org/css/bootstrap.min.css" rel="stylesheet">
-        <link href="http://crail.incubator.apache.org/css/group.css" rel="stylesheet">
-        <link rel="alternate" type="application/atom+xml" title="Atom"
-            href="http://crail.incubator.apache.org/blog/blog.xml">
-        
-        <meta property="og:image" content="http://crail.incubator.apache.org/img/blog/preview/openpower-summary.png" />
-        <meta property="og:image:secure_url" content="http://crail.incubator.apache.org/img/blog/preview/openpower-summary.png" />
-    </head>
-
-    <body>
-        <div class="container">
-          <div class="header">
-            <ul class="nav nav-pills pull-right">
-              
-              
-                
-                <li >
-                  <a href="http://crail.incubator.apache.org/">
-                    Home
-                  </a>
-                </li>
-              
-                
-                <li >
-                  <a href="http://crail.incubator.apache.org/overview/">
-                    Overview
-                  </a>
-                </li>
-              
-                
-                <li >
-                  <a href="http://crail.incubator.apache.org/blog/">
-                    Blog
-                  </a>
-                </li>
-              
-                
-                <li >
-                  <a href="http://crail.incubator.apache.org/community/">
-                    Community
-                  </a>
-                </li>
-              
-                
-                <li >
-                  <a href="http://crail.incubator.apache.org/documentation/">
-                    Documentation
-                  </a>
-                </li>
-              
-            </ul>
-            <a href="http://crail.incubator.apache.org/">
-                <img src="http://crail.incubator.apache.org/img/crail_logo.png"
-                    srcset="http://crail.incubator.apache.org/img/crail_logo.png"
-                    alt="Crail" id="logo">
-            </a>
-          </div>
-
-          
-          
-          <h2>Openpower</h2>   
-          
-
-          <p>Crail on OpenPower discussed by Peter Hofstee on <a href="https://www.youtube.com/watch?v=f-pgMaEmqn4&amp;feature=youtu.be&amp;platform=hootsuite">Youtube</a></p>
-
-
-        <br>
-	<br> 
-          <div class="footer">
-            <p>Apache Crail is an effort undergoing <a href="https://incubator.apache.org/">incubation</a> at <a href="https://www.apache.org/">The Apache Software Foundation (ASF)</a>, sponsored by the Apache Incubator PMC. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF.
-            </p>
-          </div>
-
-        </div> <!-- /container -->
-
-        <!-- Support retina images. -->
-        <script type="text/javascript"
-            src="http://crail.incubator.apache.org/js/srcset-polyfill.js"></script>
-    </body>
-</html>

http://git-wip-us.apache.org/repos/asf/incubator-crail-website/blob/5c23d221/content/blog/2017/11/blog.html
----------------------------------------------------------------------
diff --git a/content/blog/2017/11/blog.html b/content/blog/2017/11/blog.html
deleted file mode 100644
index b40af85..0000000
--- a/content/blog/2017/11/blog.html
+++ /dev/null
@@ -1,86 +0,0 @@
-<!DOCTYPE html>
-<html>
-    <head>
-        <meta charset="utf-8">
-        <title>The Apache Crail (Incubating) Project: Blog</title>
-        <meta name="viewport" content="width=device-width, initial-scale=1.0">
-        <link href="http://crail.incubator.apache.org/css/bootstrap.min.css" rel="stylesheet">
-        <link href="http://crail.incubator.apache.org/css/group.css" rel="stylesheet">
-        <link rel="alternate" type="application/atom+xml" title="Atom"
-            href="http://crail.incubator.apache.org/blog/blog.xml">
-        
-        <meta property="og:image" content="http://crail.incubator.apache.org/img/blog/preview/blog-summary.png" />
-        <meta property="og:image:secure_url" content="http://crail.incubator.apache.org/img/blog/preview/blog-summary.png" />
-    </head>
-
-    <body>
-        <div class="container">
-          <div class="header">
-            <ul class="nav nav-pills pull-right">
-              
-              
-                
-                <li >
-                  <a href="http://crail.incubator.apache.org/">
-                    Home
-                  </a>
-                </li>
-              
-                
-                <li >
-                  <a href="http://crail.incubator.apache.org/overview/">
-                    Overview
-                  </a>
-                </li>
-              
-                
-                <li >
-                  <a href="http://crail.incubator.apache.org/blog/">
-                    Blog
-                  </a>
-                </li>
-              
-                
-                <li >
-                  <a href="http://crail.incubator.apache.org/community/">
-                    Community
-                  </a>
-                </li>
-              
-                
-                <li >
-                  <a href="http://crail.incubator.apache.org/documentation/">
-                    Documentation
-                  </a>
-                </li>
-              
-            </ul>
-            <a href="http://crail.incubator.apache.org/">
-                <img src="http://crail.incubator.apache.org/img/crail_logo.png"
-                    srcset="http://crail.incubator.apache.org/img/crail_logo.png"
-                    alt="Crail" id="logo">
-            </a>
-          </div>
-
-          
-          
-          <h2>Blog</h2>   
-          
-
-          <p>New blog <a href="http://crail.incubator.apache.org/blog/2017/11/rdmashuffle.html">post</a> about SparkRDMA and Crail shuffle plugins</p>
-
-
-        <br>
-	<br> 
-          <div class="footer">
-            <p>Apache Crail is an effort undergoing <a href="https://incubator.apache.org/">incubation</a> at <a href="https://www.apache.org/">The Apache Software Foundation (ASF)</a>, sponsored by the Apache Incubator PMC. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF.
-            </p>
-          </div>
-
-        </div> <!-- /container -->
-
-        <!-- Support retina images. -->
-        <script type="text/javascript"
-            src="http://crail.incubator.apache.org/js/srcset-polyfill.js"></script>
-    </body>
-</html>

http://git-wip-us.apache.org/repos/asf/incubator-crail-website/blob/5c23d221/content/blog/2017/11/crail-metadata.html
----------------------------------------------------------------------
diff --git a/content/blog/2017/11/crail-metadata.html b/content/blog/2017/11/crail-metadata.html
deleted file mode 100644
index beecf61..0000000
--- a/content/blog/2017/11/crail-metadata.html
+++ /dev/null
@@ -1,563 +0,0 @@
-<!DOCTYPE html>
-<html>
-    <head>
-        <meta charset="utf-8">
-        <title>The Apache Crail (Incubating) Project: Crail Storage Performance -- Part III: Metadata</title>
-        <meta name="viewport" content="width=device-width, initial-scale=1.0">
-        <link href="http://crail.incubator.apache.org/css/bootstrap.min.css" rel="stylesheet">
-        <link href="http://crail.incubator.apache.org/css/group.css" rel="stylesheet">
-        <link rel="alternate" type="application/atom+xml" title="Atom"
-            href="http://crail.incubator.apache.org/blog/blog.xml">
-        
-        <meta property="og:image" content="http://crail.incubator.apache.org/img/blog/preview/crail-metadata-summary.png" />
-        <meta property="og:image:secure_url" content="http://crail.incubator.apache.org/img/blog/preview/crail-metadata-summary.png" />
-    </head>
-
-    <body>
-        <div class="container">
-          <div class="header">
-            <ul class="nav nav-pills pull-right">
-              
-              
-                
-                <li >
-                  <a href="http://crail.incubator.apache.org/">
-                    Home
-                  </a>
-                </li>
-              
-                
-                <li >
-                  <a href="http://crail.incubator.apache.org/overview/">
-                    Overview
-                  </a>
-                </li>
-              
-                
-                <li >
-                  <a href="http://crail.incubator.apache.org/blog/">
-                    Blog
-                  </a>
-                </li>
-              
-                
-                <li >
-                  <a href="http://crail.incubator.apache.org/community/">
-                    Community
-                  </a>
-                </li>
-              
-                
-                <li >
-                  <a href="http://crail.incubator.apache.org/documentation/">
-                    Documentation
-                  </a>
-                </li>
-              
-            </ul>
-            <a href="http://crail.incubator.apache.org/">
-                <img src="http://crail.incubator.apache.org/img/crail_logo.png"
-                    srcset="http://crail.incubator.apache.org/img/crail_logo.png"
-                    alt="Crail" id="logo">
-            </a>
-          </div>
-
-          
-          
-          <h2>Crail Storage Performance -- Part III: Metadata</h2>   
-          
-
-          <p class="meta">21 Nov 2017</p>
-
-<div class="post">
-<div style="text-align: justify">
-<p>
-This is part III of our series of posts discussing Crail's raw storage performance. This part is about Crail's metadata performance and scalability.
-</p>
-</div>
-
-<h3 id="hardware-configuration">Hardware Configuration</h3>
-
-<p>The specific cluster configuration used for the experiments in this blog:</p>
-
-<ul>
-  <li>Cluster
-    <ul>
-      <li>8 node x86_64 cluster</li>
-    </ul>
-  </li>
-  <li>Node configuration
-    <ul>
-      <li>CPU: 2 x Intel(R) Xeon(R) CPU E5-2690 0 @ 2.90GHz</li>
-      <li>DRAM: 96GB DDR3</li>
-      <li>Network: 1x100Gbit/s Mellanox ConnectX-5</li>
-    </ul>
-  </li>
-  <li>Software
-    <ul>
-      <li>Ubuntu 16.04.3 LTS (Xenial Xerus) with Linux kernel version 4.10.0-33-generic</li>
-      <li>Crail 1.0, internal version 2993</li>
-    </ul>
-  </li>
-</ul>
-
-<h3 id="crail-metadata-operation-overview">Crail Metadata Operation Overview</h3>
-
-<div style="text-align: justify"> 
-<p>
-As described in <a href="http://crail.incubator.apache.org/blog/2017/08/crail-memory.html">part I</a>, Crail data operations are composed of actual data transfers and metadata operations. Examples of metadata operations are operations for creating or modifying the state of a file, or operations to lookup the storage server that stores a particular range (block) of a file. In Crail, all the metadata is managed by the namenode(s) (as opposed to the data which is managed by the storage nodes). Clients interact with Crail namenodes via Remote Procedure Calls (RPCs). Crail supports multiple RPC protocols for different types of networks and also offers a pluggable RPC interface so that new RPC bindings can be implemented easily. On RDMA networks, the default DaRPC (<a href="https://dl.acm.org/citation.cfm?id=2670994">DaRPC paper</a>, <a href="http://github.com/zrlio/darpc">DaRPC GitHub</a>) based RPC binding provides the best performance. The figure below gives an overview of the Crail me
 tadata processing in a DaRPC configuration. 
-</p>
-</div>
-
-<div style="text-align:center"><img src="http://crail.incubator.apache.org/img/blog/crail-metadata/rpc.png" width="480" /></div>
-<p><br /></p>
-
-<div style="text-align: justify"> 
-<p>
-Crail supports partitioning of metadata across several namenods. Thereby, metadata operations issued by clients are hashed to a particular namenode depending on the name of object the operation attempts to create or retrieve. With the DaRPC binding, RPC messages are exchanged using RDMA send/recv operations. At the server, RPC processing is parallelized across different cores. To minimize locking and cache contention, each core handles a disjoint set of client connections. Connections assigned to the same core share the same RDMA completion queue which is processed exclusively by that given core. All the network queues, including send-, recv- and completion queues are mapped into user-space and accessed directly from within the JVM process. Since Crail offers a hierarchical storage namespace, metadata operations to create, delete or rename new storage resources effectively result in modifications to a tree-like data structure at the namenode. These structural operations require a so
 mewhat more expensive locking than the more lightweight operations used to lookup the file status or to extend a file with a new storage block. Consequently, Crail namenodes use two separate data structures to manage metadata: (a) a basic tree data structure that requires directory-based locking, and (b) a fast lock-free map to lookup of storage resources that are currently being read or written.
-</p>
-</div>
-
-<h3 id="experimental-setup">Experimental Setup</h3>
-
-<div style="text-align: justify"> 
-<p>
-In two of the previous blogs (<a href="http://crail.incubator.apache.org/blog/2017/08/crail-memory.html">DRAM</a>, <a href="http://crail.incubator.apache.org/blog/2017/08/crail-nvme-fabrics-v1.html">NVMf</a>) we have already shown that Crail metadata operations are very low latency. Essentially a single metadata operation issued by a remote client takes 5-6 microseconds, which is only slightly more than the raw network latency of the RDMA network fabric. In this blog, we want to explore the scalability of Crail's metadata management, that is, the number of clients Crail can support, or how Crail scales as the cluster size increases. The level of scalability of Crail is mainly determined by the number of metadata operations Crail can process concurrently, a metric that is often referred to as IOPS. The higher the number of IOPS the system can handle, the more clients can concurrently use Crail without performance loss. 
-</p>
-<p>
-An important metadata operation is ''getFile()'', which is used by clients to lookup the status of a file (whether the file exists, what size it has, etc.). The ''getFile()'' operation is served by Crail's fast lock-free map and in spirit is very similar to the ''getBlock()'' metadata operation (used by clients to query which storage nodes holds a particular block). In a typical Crail use case, ''getFile()'' and ''getBlock()'' are responsible for the peak metadata load at a namenode. In this experiment, we measure the achievable IOPS on the server side in an artificial configuration with many clients distributed across the cluster issuing ''getFile()'' in a tight loop. Note that the client side RPC interface in Crail is asynchronous, thus, clients can issue multiple metadata operations without blocking while asynchronously waiting for the result. In the experiments below, each client may have a maximum of 128 ''getFile()'' operations outstanding at any point in time. In a practical 
 scenario, Crail clients may also have multiple metadata operations in flight either because clients are shared by different cores, or because Crail interleaves metadata and data operations (see <a href="http://crail.incubator.apache.org/blog/2017/08/crail-memory.html">DRAM</a>). What makes the benchmark artificial is that clients exclusively focus on generating load for the namenode and thereby are neither performing data operations nor are they doing any compute. The basic command of the benchmark as executed by each of the individual clients is given by the following command:
-</p>
-</div>
-<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>./bin/crail iobench -t getMultiFileAsync -f / -k 10000000 -b 128
-</code></pre></div></div>
-<div style="text-align: justify"> 
-<p>
-Where ''-t'' specifies the benchmark to run, ''-f'' specifies the path on the
-Crail file system to be used for the benchmark, ''-k'' specifies the number of
-iterations to be performed by the benchmark
-(how many times will the benchmark execute ''getFile()'') and
-''-b'' specifies the maximum number of requests in flight.
-</p>
-</div>
-
-<h3 id="single-namenode-scalability">Single Namenode Scalability</h3>
-
-<div style="text-align: justify"> 
-<p>
-In the first experiment, we measure the aggregated number of metadata operations a single Crail namenode can handle per second. The namenode runs on 8 physical cores with hyper-threading disabled. The result is shown in the first graph below, labeled ''Namenode IOPS''. The namenode only gets saturated with more than 16 clients. The graph shows that the namenode can handle close to 10 million ''getFile()'' operations per second. With significantly more clients, the overall number of IOPS drops slightly, as more resources are being allocated on the single RDMA card, which basically creates a contention on hardware resources.
-</p>
-<p> 
-As comparison, we measure the raw number of IOPS, which can be executed on the RDMA network. We measure the raw number using ib_send_bw. We configured ib_send_bw with the same parameters in terms of RDMA configuration as the namenode. This means, we instructed ib_send_bw not to do CQ moderation, and to use a receive queue and a send queue of length 32, which equals the length of the namenode queues. Note that the default configuration of ib_send_bw uses CQ moderation and does preposting of send operations, which can only be done, if the operation is known in advance. This is not the case in a real system, like crail's namenode. The basic ib_send_bw command is given below:
-</p>
-</div>
-<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>ib_send_bw -s 1 -Q 1 -r 32 -t 32 -n 10000000
-</code></pre></div></div>
-<div style="text-align: justify"> 
-<p>
-Where ''-s 1'' specifies to send packets with a payload of 1 (we don't want to
-measure the transmission time of data, just the number of I/O operations),
-''-Q 1'' specifies not to do CQ moderation, ''-r 32'' specifies the receive
-queue length to be 32, ''-t 32'' specifies the send queue length to be 32
-and ''-n'' specifies the number of
-iterations to be performed by ib_send_bw.
-</p>
-</div>
-<div style="text-align: justify"> 
-<p>
-The line of the raw number of IOPS, labeled ''ib send'' is shown in the same graph. With this measurement we show that Crail's namenode IOPS are similar to the raw ib_send_bw IOPS with the same configuration.
-</p>
-</div>
-<p><br /></p>
-<div style="text-align:center"><img src="http://crail.incubator.apache.org/img/blog/crail-metadata/namenode_ibsend_iops64.svg" width="550" /></div>
-<p><br /></p>
-<div style="text-align: justify"> 
-<p>
-If one starts ib_send_bw without specifying the queue sizes or whether or not to use CQ moderation, the raw number of IOPS might be higher. This is due to the fact, that the default values of ib_send_bw use a receive queue of 512, a send queue of 128 and CQ moderation of 100, meaning that a new completion is generated only after 100 sends. As comparison, we did this
-measurement too and show the result, labeled 'ib_send CQ mod', in the same graph. Fine tuning of receive and send queue sizes, CQ moderation size, postlists etc might lead to a higher number of IOPS. 
-</p>
-</div>
-
-<h3 id="multiple-namenode-scalability">Multiple Namenode Scalability</h3>
-
-<div style="text-align: justify"> 
-<p>
-To increase the number of IOPS the overall system can handle, we allow starting multiple namenode instances. Hot metadata operations, such as ''getFile()'', are distributed over all running instances of the namenode. ''getFile()'' is implemented such that no synchronization among the namenodes is required. As such, we expect good scalability. The graph below compares the overall IOPS of a system with one namenode to a system with two namenodes and four namenodes.
-</p>
-</div>
-<p><br /></p>
-<div style="text-align:center"><img src="http://crail.incubator.apache.org/img/blog/crail-metadata/namenode_multi64.svg" width="550" /></div>
-<p><br /></p>
-
-<div style="text-align: justify"> 
-<p>
-We show in this graph that the system can handle around 17Mio IOPS with two namenodes and 28Mio IOPS with four namenodes (with more than 64 clients we measured the number of IOPS to be slightly higher than 30Mio IOPS). Having multiple namenode instances matters especially with a higher number of clients. In the graph we see that the more clients we have the more we can benefit from a second namenode instance or even more instances.
-</p>
-</div>
-
-<div style="text-align: justify"> 
-<p>
-We only have 7 physical nodes available to run the client processes. This
-means, after 7 client processes, processes start sharing a physical machine.
-With 64 client processes, each machine runs 9 (10 in one case) client
-instances, which share the cores and the resources of the RDMA hardware.
-We believe this is the reason, why the graphs appear not to scale linearly.
-The number of total IOPS is client-bound, not namenode-bound.
-With more physical machines, we believe that scalability could be shown
-much better. Again, there is absolutely no communication among the
-namenodes happening, which should lead to linear scalability.
-</p>
-</div>
-
-<h3 id="cluster-sizes">Cluster sizes</h3>
-
-<div style="text-align: justify"> 
-<p>
-Let us look at a concrete application, which ideally runs on a large cluster:
-TeraSort. In a previous blog, <a href="http://crail.incubator.apache.org/blog/2017/01/sorting.html">sorting</a>,
-we analyze performance characteristics of TeraSort on Crail on a big cluster
-of 128 nodes, where we run 384 executors in total. This already proves that
-Crail can at least handle 384 clients. Now we analyze the theoretical number
-of clients without performance loss at the namenode. Still this theoretical
-number is not a hard limit on the number of clients. Just adding more
-clients would start dropping the number of IOPS per client (not at the
-namenode).
-</p>
-</div>
-
-<div style="text-align: justify"> 
-<p>
-In contrast to the benchmarks above, a real-world application, like TeraSort,
-does not issue RPC requests in a tight loop. It rather does sorting
-(computation), file reading and writing and and of course a certain amount of
-RPCs to manage the files.
-</p>
-</div>
-
-<div style="text-align: justify"> 
-<p>
-We would like to know how many RPCs a run of TeraSort generates and therefore
-how big the load in terms of number of IOPS is at the namenode for a
-real-world application.
-We run TeraSort on a data set of 200GB and measured the
-number of IOPS at the namenode with 4 executors, 8 executors and 12 executors.
-Every executor runs 12 cores. For this experiment, we use a single namenode
-instance. We plot the distribution of the number of IOPS measured at the
-namenode over the elapsed runtime of the TeraSort application.
-</p>
-</div>
-
-<p><br /></p>
-<div style="text-align:center"><img src="http://crail.incubator.apache.org/img/blog/crail-metadata/terasort_iops.svg" width="550" /></div>
-<p><br /></p>
-
-<div style="text-align: justify"> 
-<p>
-From the graph we pick the peak number of IOPS measured
-throughout the execution time for all three cases. The following table
-shows the three peak IOPS numbers:
-</p>
-</div>
-
-<p><br /></p>
-<center>
-<table>
-  <thead>
-    <tr>
-      <th>#Executor nodes</th>
-      <th>Measured IOPS</th>
-      <th>% of single namenode</th>
-    </tr>
-  </thead>
-  <tbody>
-    <tr>
-      <td align="right">4</td>
-      <td align="right">32k</td>
-      <td align="right">0.32%</td>
-    </tr>
-    <tr>
-      <td align="right">8</td>
-      <td align="right">67k</td>
-      <td align="right">0.67%</td>
-    </tr>
-    <tr>
-      <td align="right">12</td>
-      <td align="right">107k</td>
-      <td align="right">1.07%</td>
-    </tr>
-  </tbody>
-</table>
-</center>
-<p><br /></p>
-
-<div style="text-align: justify"> 
-<p>
-From this table we see that it scales linearly. Even more important,
-we notice that with 12 nodes we still use only around 1% of the
-number of IOPS a single namenode can handle.
-If we extrapolate this to a
-100%, we can handle a cluster size of almost 1200 nodes (1121 clients being just
-below 10Mio IOPS at the namenode). The
-extrapolated numbers would look like this:
-</p>
-</div>
-
-<p><br /></p>
-<center>
-<table>
-  <thead>
-    <tr>
-      <th>#Namenodes</th>
-      <th>Max IOPS by  namenodes</th>
-      <th>#Executor nodes</th>
-      <th>Extrapolated IOPS</th>
-      <th>% of all namenodes</th>
-    </tr>
-  </thead>
-  <tbody>
-    <tr>
-      <td align="right">1</td>
-      <td align="right">10000k</td>
-      <td align="right">1121</td>
-      <td align="right">9996k</td>
-      <td align="right">99.96%</td>
-    </tr>
-    <tr>
-      <td align="right">1</td>
-      <td align="right">10000k</td>
-      <td align="right">1200</td>
-      <td align="right">10730k</td>
-      <td align="right">107.3%</td>
-    </tr>
-    <tr>
-      <td align="right">2</td>
-      <td align="right">17000k</td>
-      <td align="right">1906</td>
-      <td align="right">16995k</td>
-      <td align="right">99.97%</td>
-    </tr>
-    <tr>
-      <td align="right">4</td>
-      <td align="right">30000k</td>
-      <td align="right">3364</td>
-      <td align="right">29995k</td>
-      <td align="right">99.98%</td>
-    </tr>
-</tbody>
-</table>
-</center>
-<p><br /></p>
-
-<div style="text-align: justify"> 
-<p>
-Of course we know that there is no system with perfect linear scalability.
-But even if we would loose 50% of the number of IOPS (compared to the
-theoretical maximum) on a big cluster, Crail could still handle a cluster size
-of 600 nodes and a single namenode without any performance loss at the
-namenode.
-Should we still want to run an application like TeraSort on a bigger cluster,
-we can add a second namenode or have even more instances of namenodes
-to ensure that clients do not suffer from contention in terms of IOPS at
-the namenode.
-</p>
-</div>
-
-<div style="text-align: justify">
-<p>
-We believe that the combination of benchmarks above, the scalability
-experiments and the real-world
-application of TeraSort shows clearly that Crail and Crail's namenode can handle
-a big cluster of at least several hundreds of nodes, theoretically up to
-1200 nodes with a single namenode and even more with multiple namenodes.
-</p>
-</div>
-
-<h3 id="system-comparison">System comparison</h3>
-<div style="text-align: justify">
-<p>
-In this section we compare the number of IOPS Crail can handle to
-two other systems:
-<a href="http://hadoop.apache.org/">Hadoop's HDFS namenode</a> and
-<a href="https://ramcloud.atlassian.net/wiki/spaces/RAM/overview">RAMCloud</a>.
-</p>
-</div>
-
-<div style="text-align: justify">
-<p>
-HDFS is a well known distributed file system. Like Crail, HDFS runs
-a namenode and several datanodes. The namenode implements similar functionality
-as Crail's namenode, while HDFS's datanodes provide additional functionality,
-like replication, for example. We are interested in the
-number of IOPS the namenode can handle. As such, the datanode's functionality
-is not relevant for this experiment. HDFS is implemented in Java like Crail.
-Due to this high similarity in terms of functionality and language used to
-implement the system, HDFS is a good candidate to compare Crail to.
-</p>
-</div>
-
-<div style="text-align: justify">
-<p>
-HDFS does not use RDMA to send RPCs. Instead, RPCs are sent over a regular
-IP network. In our case, it is the same 100Gbit/s ethernet-based RoCE network.
-</p>
-</div>
-
-<div style="text-align: justify">
-<p>
-To measure the number of IOPS HDFS's namenode can handle, we run the same
-experiment as for Crail. The clients issue a ''getFile()'' RPC to the
-namenode and we vary the number of clients from 1 to 64. The following
-plot shows the number of IOPS relative to the number of clients.
-</p>
-</div>
-
-<p><br /></p>
-<div style="text-align:center"><img src="http://crail.incubator.apache.org/img/blog/crail-metadata/namenode_hdfs_iops.svg" width="550" /></div>
-<p><br /></p>
-
-<div style="text-align: justify">
-<p>
-The graph shows that the namenode can handle around 200000 IOPS. One reason
-for the difference to the number of IOPS of Crail is surely that HDFS does not
-use the capabilities offered by the RDMA network, while Crail does. However
-this cannot be the only reason, why the namenode cannot handle more than
-200000 IOPS. We would need to analyze more deeply where the bottleneck is
-to find an answer. We believe that the amount of code which
-gets executed at probably various layers of the software stack
-is too big to achieve high performance in terms of IOPS.
-</p>
-</div>
-
-<div style="text-align: justify">
-<p>
-RAMCloud is a fast key-value store, which makes use of the RDMA network
-to reach low latency and high throughput. It runs one master coordinator and
-and optionally several slave coordinators, which can take over, if the master
-coordinator fails. Coordinator persistence can be achieved
-by external persistent storage, like Zookeeper or LogCabin.
-RAMCloud runs several storage servers, which
-store key-value pairs in RAM. Optionally, replicas can be stored on secondary
-storage, which provides persistence. RAMCloud is implemented in C++. Therefore
-it is natively compiled code.
-</p>
-</div>
-
-<div style="text-align: justify">
-<p>
-We are interested in the number of IOPS RAMCloud can handle. We decided
-to run the readThroughput benchmark of RAMCloud's ClusterPerf program, which
-measures the number of object reads per second. This is probably the closest
-benchmark to the RPC benchmark of Crail and HDFS.
-</p>
-</div>
-
-<div style="text-align: justify">
-<p>
-For a fair comparison, we run RAMCloud without any persistence, so without
-Zookeeper and without replicas to secondary storage. We run one coordinator
-and one storage server, which is somewhat similar to running one namenode
-in the Crail and HDFS cases. Also, we wanted to vary the number of clients
-from 1 to 64. At the moment we can only get results for up to 16 clients.
-We asked the RAMCloud developers for possible reasons and got to know that the
-reason is a starvation bug in the benchmark (not in the RAMCloud system
-itself). The RAMCloud developers are looking into this issue. We will update
-the blog with the latest numbers as soon as the bug is fixed.
-</p>
-</div>
-
-<p><br /></p>
-<div style="text-align:center"><img src="http://crail.incubator.apache.org/img/blog/crail-metadata/ramcloud_iops.svg" width="550" /></div>
-<p><br /></p>
-
-<div style="text-align: justify">
-<p>
-RAMCloud reaches a peak of 1.12Mio IOPS with 14 clients. The utilization of the
-dispatcher thread is at 100% already with 10 clients. Even with more clients,
-the number of IOPS won't get higher than 1.12Mio, because the
-dispatcher thread is the bottleneck, as can be seen in the graph.
-In addition, we got a confirmation from the developers that more than
-10 clients will not increase the number of IOPS.
-So we think that the measurements are not unfair, even if we do not have
-results for more than 16 clients. Again, we we will update the blog
-with a higher number of clients, as soon as the bug is fixed.
-</p>
-</div>
-
-<div style="text-align: justify">
-<p>
-Let us now summarize the number of IOPS of all three systems in one plot
-below. For a fair comparison, Crail runs only one namenode for this
-experiments and we compare the results to RAMCloud with one coordinator and
-one storage server (without replication as described above) and the one
-namenode instance of HDFS. We see that Crail's single namenode can handle
-a much bigger number of RPCs compared to the other two systems (remember
-that Crail can run multiple namenodes and we measured a number of IOPS
-of 30Mio/s with 4 namenodes).
-</p>
-</div>
-
-<p><br /></p>
-<div style="text-align:center"><img src="http://crail.incubator.apache.org/img/blog/crail-metadata/max_iops_crail_hdfs_ramcloud.svg" width="550" /></div>
-<p><br /></p>
-
-<div style="text-align: justify">
-<p>
-HDFS is deployed on production clusters and handles real workloads
-with roughly 200000 IOPS. We believe that Crail, which can handle a much
-bigger number of IOPS, is able to run real workloads on very large
-clusters. A common assumption is that Java-based implementations suffer from
-performance loss. We show that a Java-based system can handle a high amount
-of operations even compared to a C++-based system like RAMCloud.
-</p>
-</div>
-
-<h3 id="summary">Summary</h3>
-
-<div style="text-align: justify"> 
-<p>
-In this blog we show three key points of Crail: First, Crail's namenode performs the same as ib_send_bw with realistic parameters in terms of IOPS. This shows that the actual processing of the RPC is implemented efficiently. Second, with only one namenode, Crail performs 10x to 50x better than RAMCloud and HDFS, two popular systems, where RAMCloud is RDMA-based and implemented natively. Third, Crail's metadata service can be scaled out to serve large number of clients. We have shown that Crail offers near linear scaling with up to 4 namenodes, offering a performance that is sufficient to serve several 1000s of clients. 
-</p>
-</div>
-
-
-</div>
-
-<!-- 
-
-<div id="disqus_thread"></div>
-<script>
-
-/**
-*  RECOMMENDED CONFIGURATION VARIABLES: EDIT AND UNCOMMENT THE SECTION BELOW TO INSERT DYNAMIC VALUES FROM YOUR PLATFORM OR CMS.
-*  LEARN WHY DEFINING THESE VARIABLES IS IMPORTANT: https://disqus.com/admin/universalcode/#configuration-variables*/
-/*
-var disqus_config = function () {
-this.page.url = PAGE_URL;  // Replace PAGE_URL with your page's canonical URL variable
-this.page.identifier = PAGE_IDENTIFIER; // Replace PAGE_IDENTIFIER with your page's unique identifier variable
-};
-*/
-(function() { // DON'T EDIT BELOW THIS LINE
-var d = document, s = d.createElement('script');
-s.src = '//crail-io.disqus.com/embed.js';
-s.setAttribute('data-timestamp', +new Date());
-(d.head || d.body).appendChild(s);
-})();
-</script>
-<noscript>Please enable JavaScript to view the <a href="https://disqus.com/?ref_noscript">comments powered by Disqus.</a></noscript>
-
--->
-
-
-        <br>
-	<br> 
-          <div class="footer">
-            <p>Apache Crail is an effort undergoing <a href="https://incubator.apache.org/">incubation</a> at <a href="https://www.apache.org/">The Apache Software Foundation (ASF)</a>, sponsored by the Apache Incubator PMC. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF.
-            </p>
-          </div>
-
-        </div> <!-- /container -->
-
-        <!-- Support retina images. -->
-        <script type="text/javascript"
-            src="http://crail.incubator.apache.org/js/srcset-polyfill.js"></script>
-    </body>
-</html>

http://git-wip-us.apache.org/repos/asf/incubator-crail-website/blob/5c23d221/content/blog/2017/11/floss.html
----------------------------------------------------------------------
diff --git a/content/blog/2017/11/floss.html b/content/blog/2017/11/floss.html
deleted file mode 100644
index c429c1a..0000000
--- a/content/blog/2017/11/floss.html
+++ /dev/null
@@ -1,86 +0,0 @@
-<!DOCTYPE html>
-<html>
-    <head>
-        <meta charset="utf-8">
-        <title>The Apache Crail (Incubating) Project: Floss</title>
-        <meta name="viewport" content="width=device-width, initial-scale=1.0">
-        <link href="http://crail.incubator.apache.org/css/bootstrap.min.css" rel="stylesheet">
-        <link href="http://crail.incubator.apache.org/css/group.css" rel="stylesheet">
-        <link rel="alternate" type="application/atom+xml" title="Atom"
-            href="http://crail.incubator.apache.org/blog/blog.xml">
-        
-        <meta property="og:image" content="http://crail.incubator.apache.org/img/blog/preview/floss-summary.png" />
-        <meta property="og:image:secure_url" content="http://crail.incubator.apache.org/img/blog/preview/floss-summary.png" />
-    </head>
-
-    <body>
-        <div class="container">
-          <div class="header">
-            <ul class="nav nav-pills pull-right">
-              
-              
-                
-                <li >
-                  <a href="http://crail.incubator.apache.org/">
-                    Home
-                  </a>
-                </li>
-              
-                
-                <li >
-                  <a href="http://crail.incubator.apache.org/overview/">
-                    Overview
-                  </a>
-                </li>
-              
-                
-                <li >
-                  <a href="http://crail.incubator.apache.org/blog/">
-                    Blog
-                  </a>
-                </li>
-              
-                
-                <li >
-                  <a href="http://crail.incubator.apache.org/community/">
-                    Community
-                  </a>
-                </li>
-              
-                
-                <li >
-                  <a href="http://crail.incubator.apache.org/documentation/">
-                    Documentation
-                  </a>
-                </li>
-              
-            </ul>
-            <a href="http://crail.incubator.apache.org/">
-                <img src="http://crail.incubator.apache.org/img/crail_logo.png"
-                    srcset="http://crail.incubator.apache.org/img/crail_logo.png"
-                    alt="Crail" id="logo">
-            </a>
-          </div>
-
-          
-          
-          <h2>Floss</h2>   
-          
-
-          <p>Crail features in the <a href="https://twit.tv/shows/floss-weekly/episodes/458?autostart=false">FLOSS weekly podcast</a></p>
-
-
-        <br>
-	<br> 
-          <div class="footer">
-            <p>Apache Crail is an effort undergoing <a href="https://incubator.apache.org/">incubation</a> at <a href="https://www.apache.org/">The Apache Software Foundation (ASF)</a>, sponsored by the Apache Incubator PMC. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF.
-            </p>
-          </div>
-
-        </div> <!-- /container -->
-
-        <!-- Support retina images. -->
-        <script type="text/javascript"
-            src="http://crail.incubator.apache.org/js/srcset-polyfill.js"></script>
-    </body>
-</html>

http://git-wip-us.apache.org/repos/asf/incubator-crail-website/blob/5c23d221/content/blog/2017/11/iops.html
----------------------------------------------------------------------
diff --git a/content/blog/2017/11/iops.html b/content/blog/2017/11/iops.html
deleted file mode 100644
index 19cc49e..0000000
--- a/content/blog/2017/11/iops.html
+++ /dev/null
@@ -1,86 +0,0 @@
-<!DOCTYPE html>
-<html>
-    <head>
-        <meta charset="utf-8">
-        <title>The Apache Crail (Incubating) Project: Iops</title>
-        <meta name="viewport" content="width=device-width, initial-scale=1.0">
-        <link href="http://crail.incubator.apache.org/css/bootstrap.min.css" rel="stylesheet">
-        <link href="http://crail.incubator.apache.org/css/group.css" rel="stylesheet">
-        <link rel="alternate" type="application/atom+xml" title="Atom"
-            href="http://crail.incubator.apache.org/blog/blog.xml">
-        
-        <meta property="og:image" content="http://crail.incubator.apache.org/img/blog/preview/iops-summary.png" />
-        <meta property="og:image:secure_url" content="http://crail.incubator.apache.org/img/blog/preview/iops-summary.png" />
-    </head>
-
-    <body>
-        <div class="container">
-          <div class="header">
-            <ul class="nav nav-pills pull-right">
-              
-              
-                
-                <li >
-                  <a href="http://crail.incubator.apache.org/">
-                    Home
-                  </a>
-                </li>
-              
-                
-                <li >
-                  <a href="http://crail.incubator.apache.org/overview/">
-                    Overview
-                  </a>
-                </li>
-              
-                
-                <li >
-                  <a href="http://crail.incubator.apache.org/blog/">
-                    Blog
-                  </a>
-                </li>
-              
-                
-                <li >
-                  <a href="http://crail.incubator.apache.org/community/">
-                    Community
-                  </a>
-                </li>
-              
-                
-                <li >
-                  <a href="http://crail.incubator.apache.org/documentation/">
-                    Documentation
-                  </a>
-                </li>
-              
-            </ul>
-            <a href="http://crail.incubator.apache.org/">
-                <img src="http://crail.incubator.apache.org/img/crail_logo.png"
-                    srcset="http://crail.incubator.apache.org/img/crail_logo.png"
-                    alt="Crail" id="logo">
-            </a>
-          </div>
-
-          
-          
-          <h2>Iops</h2>   
-          
-
-          <p>New blog <a href="http://crail.incubator.apache.org/blog/2017/11/crail-metadata.html">post</a> about Crail’s metadata performance and scalability</p>
-
-
-        <br>
-	<br> 
-          <div class="footer">
-            <p>Apache Crail is an effort undergoing <a href="https://incubator.apache.org/">incubation</a> at <a href="https://www.apache.org/">The Apache Software Foundation (ASF)</a>, sponsored by the Apache Incubator PMC. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF.
-            </p>
-          </div>
-
-        </div> <!-- /container -->
-
-        <!-- Support retina images. -->
-        <script type="text/javascript"
-            src="http://crail.incubator.apache.org/js/srcset-polyfill.js"></script>
-    </body>
-</html>