Repository: incubator-crail-website Updated Branches: refs/heads/asf-site 66f77a586 -> c782b73ad
http://git-wip-us.apache.org/repos/asf/incubator-crail-website/blob/c782b73a/content/img/blog/sort/net_vanilla.svg ---------------------------------------------------------------------- diff --git a/content/img/blog/sort/net_vanilla.svg b/content/img/blog/sort/net_vanilla.svg deleted file mode 100644 index cc9583c..0000000 --- a/content/img/blog/sort/net_vanilla.svg +++ /dev/null @@ -1,208 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="no"?> -<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" - "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> -<svg - width="600" height="200" - viewBox="0 0 600 200" - xmlns="http://www.w3.org/2000/svg" - xmlns:xlink="http://www.w3.org/1999/xlink" -> - -<title>Gnuplot</title> -<desc>Produced by GNUPLOT 4.6 patchlevel 4 </desc> - -<g id="gnuplot_canvas"> - -<rect x="0" y="0" width="600" height="200" fill="none"/> -<defs> - - <circle id='gpDot' r='0.5' stroke-width='0.5'/> - <path id='gpPt0' stroke-width='0.222' stroke='currentColor' d='M-1,0 h2 M0,-1 v2'/> - <path id='gpPt1' stroke-width='0.222' stroke='currentColor' d='M-1,-1 L1,1 M1,-1 L-1,1'/> - <path id='gpPt2' stroke-width='0.222' stroke='currentColor' d='M-1,0 L1,0 M0,-1 L0,1 M-1,-1 L1,1 M-1,1 L1,-1'/> - <rect id='gpPt3' stroke-width='0.222' stroke='currentColor' x='-1' y='-1' width='2' height='2'/> - <rect id='gpPt4' stroke-width='0.222' stroke='currentColor' fill='currentColor' x='-1' y='-1' width='2' height='2'/> - <circle id='gpPt5' stroke-width='0.222' stroke='currentColor' cx='0' cy='0' r='1'/> - <use xlink:href='#gpPt5' id='gpPt6' fill='currentColor' stroke='none'/> - <path id='gpPt7' stroke-width='0.222' stroke='currentColor' d='M0,-1.33 L-1.33,0.67 L1.33,0.67 z'/> - <use xlink:href='#gpPt7' id='gpPt8' fill='currentColor' stroke='none'/> - <use xlink:href='#gpPt7' id='gpPt9' stroke='currentColor' transform='rotate(180)'/> - <use xlink:href='#gpPt9' id='gpPt10' fill='currentColor' stroke='none'/> - <use xlink:href='#gpPt3' id='gpPt11' stroke='currentColor' transform='rotate(45)'/> - <use xlink:href='#gpPt11' id='gpPt12' fill='currentColor' stroke='none'/> -</defs> -<g style="fill:none; color:white; stroke:black; stroke-width:1.00; stroke-linecap:butt; stroke-linejoin:miter"> -</g> -<g style="fill:none; color:black; stroke:currentColor; stroke-width:1.00; stroke-linecap:butt; stroke-linejoin:miter"> -</g> -<g style="fill:none; color:gray; stroke:currentColor; stroke-width:1.00; stroke-linecap:butt; stroke-linejoin:miter"> - <path stroke='gray' stroke-dasharray=' 2,4' class="gridline" d='M71.9,142.4 L575.0,142.4 h0.01'/></g> -<g style="fill:none; color:black; stroke:currentColor; stroke-width:1.00; stroke-linecap:butt; stroke-linejoin:miter"> - <path stroke='black' d='M71.9,142.4 L80.9,142.4 h0.01'/> <g transform="translate(63.6,146.9)" style="stroke:none; fill:black; font-family:Verdana; font-size:12.00pt; text-anchor:end"> - <text> 0</text> - </g> -</g> -<g style="fill:none; color:gray; stroke:currentColor; stroke-width:1.00; stroke-linecap:butt; stroke-linejoin:miter"> - <path stroke='gray' stroke-dasharray=' 2,4' class="gridline" d='M71.9,117.3 L575.0,117.3 h0.01'/></g> -<g style="fill:none; color:black; stroke:currentColor; stroke-width:1.00; stroke-linecap:butt; stroke-linejoin:miter"> - <path stroke='black' d='M71.9,117.3 L80.9,117.3 h0.01'/> <g transform="translate(63.6,121.8)" style="stroke:none; fill:black; font-family:Verdana; font-size:12.00pt; text-anchor:end"> - <text> 20</text> - </g> -</g> -<g style="fill:none; color:gray; stroke:currentColor; stroke-width:1.00; stroke-linecap:butt; stroke-linejoin:miter"> - <path stroke='gray' stroke-dasharray=' 2,4' class="gridline" d='M71.9,92.1 L575.0,92.1 h0.01'/></g> -<g style="fill:none; color:black; stroke:currentColor; stroke-width:1.00; stroke-linecap:butt; stroke-linejoin:miter"> - <path stroke='black' d='M71.9,92.1 L80.9,92.1 h0.01'/> <g transform="translate(63.6,96.6)" style="stroke:none; fill:black; font-family:Verdana; font-size:12.00pt; text-anchor:end"> - <text> 40</text> - </g> -</g> -<g style="fill:none; color:gray; stroke:currentColor; stroke-width:1.00; stroke-linecap:butt; stroke-linejoin:miter"> - <path stroke='gray' stroke-dasharray=' 2,4' class="gridline" d='M71.9,67.0 L575.0,67.0 h0.01'/></g> -<g style="fill:none; color:black; stroke:currentColor; stroke-width:1.00; stroke-linecap:butt; stroke-linejoin:miter"> - <path stroke='black' d='M71.9,67.0 L80.9,67.0 h0.01'/> <g transform="translate(63.6,71.5)" style="stroke:none; fill:black; font-family:Verdana; font-size:12.00pt; text-anchor:end"> - <text> 60</text> - </g> -</g> -<g style="fill:none; color:gray; stroke:currentColor; stroke-width:1.00; stroke-linecap:butt; stroke-linejoin:miter"> - <path stroke='gray' stroke-dasharray=' 2,4' class="gridline" d='M71.9,41.8 L575.0,41.8 h0.01'/></g> -<g style="fill:none; color:black; stroke:currentColor; stroke-width:1.00; stroke-linecap:butt; stroke-linejoin:miter"> - <path stroke='black' d='M71.9,41.8 L80.9,41.8 h0.01'/> <g transform="translate(63.6,46.3)" style="stroke:none; fill:black; font-family:Verdana; font-size:12.00pt; text-anchor:end"> - <text> 80</text> - </g> -</g> -<g style="fill:none; color:gray; stroke:currentColor; stroke-width:1.00; stroke-linecap:butt; stroke-linejoin:miter"> - <path stroke='gray' stroke-dasharray=' 2,4' class="gridline" d='M71.9,16.7 L575.0,16.7 h0.01'/></g> -<g style="fill:none; color:black; stroke:currentColor; stroke-width:1.00; stroke-linecap:butt; stroke-linejoin:miter"> - <path stroke='black' d='M71.9,16.7 L80.9,16.7 h0.01'/> <g transform="translate(63.6,21.2)" style="stroke:none; fill:black; font-family:Verdana; font-size:12.00pt; text-anchor:end"> - <text> 100</text> - </g> -</g> -<g style="fill:none; color:gray; stroke:currentColor; stroke-width:1.00; stroke-linecap:butt; stroke-linejoin:miter"> - <path stroke='gray' stroke-dasharray=' 2,4' class="gridline" d='M71.9,142.4 L71.9,16.7 h0.01'/></g> -<g style="fill:none; color:black; stroke:currentColor; stroke-width:1.00; stroke-linecap:butt; stroke-linejoin:miter"> - <path stroke='black' d='M71.9,142.4 L71.9,133.4 h0.01'/> <g transform="translate(71.9,164.9)" style="stroke:none; fill:black; font-family:Verdana; font-size:12.00pt; text-anchor:middle"> - <text> 0</text> - </g> -</g> -<g style="fill:none; color:gray; stroke:currentColor; stroke-width:1.00; stroke-linecap:butt; stroke-linejoin:miter"> - <path stroke='gray' stroke-dasharray=' 2,4' class="gridline" d='M163.4,142.4 L163.4,16.7 h0.01'/></g> -<g style="fill:none; color:black; stroke:currentColor; stroke-width:1.00; stroke-linecap:butt; stroke-linejoin:miter"> - <path stroke='black' d='M163.4,142.4 L163.4,133.4 h0.01'/> <g transform="translate(163.4,164.9)" style="stroke:none; fill:black; font-family:Verdana; font-size:12.00pt; text-anchor:middle"> - <text> 100</text> - </g> -</g> -<g style="fill:none; color:gray; stroke:currentColor; stroke-width:1.00; stroke-linecap:butt; stroke-linejoin:miter"> - <path stroke='gray' stroke-dasharray=' 2,4' class="gridline" d='M254.8,142.4 L254.8,16.7 h0.01'/></g> -<g style="fill:none; color:black; stroke:currentColor; stroke-width:1.00; stroke-linecap:butt; stroke-linejoin:miter"> - <path stroke='black' d='M254.8,142.4 L254.8,133.4 h0.01'/> <g transform="translate(254.8,164.9)" style="stroke:none; fill:black; font-family:Verdana; font-size:12.00pt; text-anchor:middle"> - <text> 200</text> - </g> -</g> -<g style="fill:none; color:gray; stroke:currentColor; stroke-width:1.00; stroke-linecap:butt; stroke-linejoin:miter"> - <path stroke='gray' stroke-dasharray=' 2,4' class="gridline" d='M346.3,142.4 L346.3,16.7 h0.01'/></g> -<g style="fill:none; color:black; stroke:currentColor; stroke-width:1.00; stroke-linecap:butt; stroke-linejoin:miter"> - <path stroke='black' d='M346.3,142.4 L346.3,133.4 h0.01'/> <g transform="translate(346.3,164.9)" style="stroke:none; fill:black; font-family:Verdana; font-size:12.00pt; text-anchor:middle"> - <text> 300</text> - </g> -</g> -<g style="fill:none; color:gray; stroke:currentColor; stroke-width:1.00; stroke-linecap:butt; stroke-linejoin:miter"> - <path stroke='gray' stroke-dasharray=' 2,4' class="gridline" d='M437.8,142.4 L437.8,16.7 h0.01'/></g> -<g style="fill:none; color:black; stroke:currentColor; stroke-width:1.00; stroke-linecap:butt; stroke-linejoin:miter"> - <path stroke='black' d='M437.8,142.4 L437.8,133.4 h0.01'/> <g transform="translate(437.8,164.9)" style="stroke:none; fill:black; font-family:Verdana; font-size:12.00pt; text-anchor:middle"> - <text> 400</text> - </g> -</g> -<g style="fill:none; color:gray; stroke:currentColor; stroke-width:1.00; stroke-linecap:butt; stroke-linejoin:miter"> - <path stroke='gray' stroke-dasharray=' 2,4' class="gridline" d='M529.3,142.4 L529.3,16.7 h0.01'/></g> -<g style="fill:none; color:black; stroke:currentColor; stroke-width:1.00; stroke-linecap:butt; stroke-linejoin:miter"> - <path stroke='black' d='M529.3,142.4 L529.3,133.4 h0.01'/> <g transform="translate(529.3,164.9)" style="stroke:none; fill:black; font-family:Verdana; font-size:12.00pt; text-anchor:middle"> - <text> 500</text> - </g> - <path stroke='black' d='M71.9,16.7 L71.9,142.4 L575.0,142.4 L575.0,16.7 L71.9,16.7 Z h0.01'/> <g transform="translate(17.6,79.6) rotate(270)" style="stroke:none; fill:black; font-family:Verdana; font-size:12.00pt; text-anchor:middle"> - <text>Throughput [Gbit/s]</text> - </g> - <g transform="translate(323.4,191.9)" style="stroke:none; fill:black; font-family:Verdana; font-size:12.00pt; text-anchor:middle"> - <text>Elapsed time (seconds)</text> - </g> -</g> - <g id="gnuplot_plot_1" ><title>gnuplot_plot_1</title> -<g style="fill:none; color:white; stroke:black; stroke-width:4.00; stroke-linecap:butt; stroke-linejoin:miter"> -</g> -<g style="fill:none; color:red; stroke:currentColor; stroke-width:4.00; stroke-linecap:butt; stroke-linejoin:miter"> - <path stroke='rgb(228, 26, 28)' d='M72.8,142.4 L73.7,142.4 L74.6,142.4 L75.6,142.4 L76.5,142.4 L77.4,142.4 L78.3,142.4 L79.2,142.4 - L80.1,142.4 L81.0,142.4 L82.0,142.4 L82.9,142.4 L83.8,142.4 L84.7,142.4 L85.6,142.4 L86.5,142.4 - L87.5,142.4 L88.4,142.4 L89.3,142.4 L90.2,142.4 L91.1,142.4 L92.0,142.4 L92.9,142.4 L93.9,142.4 - L94.8,142.4 L95.7,142.4 L96.6,142.4 L97.5,142.4 L98.4,142.4 L99.3,142.4 L100.3,142.4 L101.2,142.4 - L102.1,142.4 L103.0,142.4 L103.9,142.4 L104.8,142.4 L105.7,142.4 L106.7,142.4 L107.6,142.4 L108.5,142.4 - L109.4,142.4 L110.3,142.4 L111.2,142.4 L112.1,142.4 L113.1,142.4 L114.0,142.4 L114.9,142.4 L115.8,142.4 - L116.7,142.4 L117.6,142.4 L118.6,142.4 L119.5,142.4 L120.4,142.4 L121.3,142.4 L122.2,142.4 L123.1,142.4 - L124.0,142.4 L125.0,142.4 L125.9,142.4 L126.8,142.4 L127.7,142.4 L128.6,142.4 L129.5,142.4 L130.4,142.4 - L131.4,142.4 L132.3,142.4 L133.2,142.4 L134.1,142.4 L135.0,142.4 L135.9,142.4 L136.8,142.4 L137.8,142.4 - L138.7,142.4 L139.6,142.4 L140.5,142.4 L141.4,142.4 L142.3,142.4 L143.2,142.4 L144.2,142.4 L145.1,142.4 - L146.0,142.4 L146.9,142.4 L147.8,142.4 L148.7,142.4 L149.7,142.4 L150.6,142.4 L151.5,142.4 L152.4,142.4 - L153.3,142.4 L154.2,142.4 L155.1,142.4 L156.1,142.4 L157.0,142.4 L157.9,142.4 L158.8,142.4 L159.7,142.4 - L160.6,142.4 L161.5,142.4 L162.5,142.4 L163.4,142.4 L164.3,142.4 L165.2,142.4 L166.1,142.4 L167.0,142.4 - L167.9,142.4 L168.9,142.4 L169.8,142.4 L170.7,142.4 L171.6,142.4 L172.5,142.4 L173.4,142.4 L174.3,142.4 - L175.3,142.4 L176.2,142.4 L177.1,142.4 L178.0,142.4 L178.9,142.4 L179.8,142.4 L180.8,142.4 L181.7,142.4 - L182.6,142.4 L183.5,142.4 L184.4,142.4 L185.3,142.4 L186.2,142.4 L187.2,142.4 L188.1,142.4 L189.0,142.4 - L189.9,142.4 L190.8,142.4 L191.7,142.4 L192.6,142.4 L193.6,142.4 L194.5,142.4 L195.4,142.4 L196.3,142.4 - L197.2,142.4 L198.1,142.4 L199.0,142.4 L200.0,142.4 L200.9,142.4 L201.8,142.0 L202.7,139.5 L203.6,137.0 - L204.5,136.1 L205.5,141.5 L206.4,142.4 L207.3,137.7 L208.2,134.9 L209.1,140.8 L210.0,140.2 L210.9,141.1 - L211.9,141.7 L212.8,141.7 L213.7,142.2 L214.6,142.4 L215.5,142.4 L216.4,139.0 L217.3,140.2 L218.3,142.3 - L219.2,142.2 L220.1,141.8 L221.0,142.2 L221.9,142.3 L222.8,142.4 L223.7,142.2 L224.7,141.9 L225.6,140.8 - L226.5,139.2 L227.4,138.9 L228.3,139.9 L229.2,140.3 L230.1,135.5 L231.1,137.8 L232.0,140.7 L232.9,141.2 - L233.8,141.2 L234.7,141.6 L235.6,141.5 L236.6,138.9 L237.5,139.2 L238.4,141.1 L239.3,142.1 L240.2,141.4 - L241.1,142.1 L242.0,142.1 L243.0,141.9 L243.9,142.0 L244.8,141.6 L245.7,141.7 L246.6,141.6 L247.5,141.2 - L248.4,141.5 L249.4,140.1 L250.3,139.7 L251.2,140.8 L252.1,138.2 L253.0,138.6 L253.9,137.7 L254.8,137.1 - L255.8,138.0 L256.7,139.1 L257.6,140.8 L258.5,141.6 L259.4,141.7 L260.3,141.8 L261.2,142.0 L262.2,142.1 - L263.1,141.6 L264.0,141.1 L264.9,141.2 L265.8,141.2 L266.7,141.6 L267.7,139.4 L268.6,139.3 L269.5,140.6 - L270.4,139.5 L271.3,140.0 L272.2,140.7 L273.1,140.2 L274.1,137.5 L275.0,136.1 L275.9,139.7 L276.8,140.4 - L277.7,141.4 L278.6,140.7 L279.5,140.9 L280.5,141.1 L281.4,141.3 L282.3,141.1 L283.2,140.9 L284.1,140.6 - L285.0,139.9 L285.9,141.2 L286.9,138.0 L287.8,137.6 L288.7,139.3 L289.6,137.7 L290.5,139.7 L291.4,138.7 - L292.3,140.0 L293.3,140.5 L294.2,140.5 L295.1,140.8 L296.0,141.4 L296.9,140.7 L297.8,141.3 L298.8,141.3 - L299.7,141.2 L300.6,141.1 L301.5,141.4 L302.4,139.8 L303.3,136.9 L304.2,136.1 L305.2,139.3 L306.1,141.4 - L307.0,134.9 L307.9,139.0 L308.8,140.2 L309.7,140.7 L310.6,140.6 L311.6,140.5 L312.5,139.6 L313.4,141.8 - L314.3,139.9 L315.2,134.2 L316.1,135.5 L317.0,137.9 L318.0,141.1 L318.9,137.0 L319.8,140.1 L320.7,139.1 - L321.6,140.0 L322.5,139.9 L323.5,139.4 L324.4,140.1 L325.3,140.0 L326.2,137.1 L327.1,137.7 L328.0,139.4 - L328.9,137.3 L329.9,138.9 L330.8,138.3 L331.7,139.1 L332.6,140.7 L333.5,141.9 L334.4,142.0 L335.3,141.8 - L336.3,141.5 L337.2,139.5 L338.1,140.4 L339.0,140.3 L339.9,140.2 L340.8,139.2 L341.7,136.9 L342.7,135.3 - L343.6,139.1 L344.5,141.2 L345.4,135.8 L346.3,137.9 L347.2,139.4 L348.1,141.1 L349.1,140.6 L350.0,140.3 - L350.9,139.6 L351.8,141.0 L352.7,141.9 L353.6,142.4 L354.6,142.1 L355.5,140.2 L356.4,139.9 L357.3,137.9 - L358.2,137.8 L359.1,138.3 L360.0,139.6 L361.0,138.9 L361.9,136.7 L362.8,139.0 L363.7,141.2 L364.6,141.3 - L365.5,140.7 L366.4,139.1 L367.4,139.3 L368.3,141.8 L369.2,139.9 L370.1,140.0 L371.0,138.4 L371.9,139.2 - L372.8,139.6 L373.8,136.8 L374.7,139.1 L375.6,140.7 L376.5,137.0 L377.4,136.6 L378.3,140.3 L379.2,140.6 - L380.2,141.8 L381.1,141.3 L382.0,139.4 L382.9,138.7 L383.8,140.2 L384.7,141.0 L385.7,141.0 L386.6,141.1 - L387.5,139.6 L388.4,139.1 L389.3,138.3 L390.2,140.5 L391.1,135.7 L392.1,136.3 L393.0,134.8 L393.9,139.0 - L394.8,141.4 L395.7,139.1 L396.6,141.7 L397.5,142.2 L398.5,142.3 L399.4,141.8 L400.3,141.5 L401.2,141.3 - L402.1,140.0 L403.0,139.9 L403.9,140.0 L404.9,138.9 L405.8,138.0 L406.7,138.6 L407.6,137.1 L408.5,134.4 - L409.4,137.5 L410.3,140.1 L411.3,140.9 L412.2,139.8 L413.1,140.6 L414.0,138.8 L414.9,140.2 L415.8,138.8 - L416.8,138.9 L417.7,137.0 L418.6,136.8 L419.5,137.8 L420.4,138.6 L421.3,140.0 L422.2,141.5 L423.2,142.1 - L424.1,141.3 L425.0,140.0 L425.9,139.9 L426.8,141.5 L427.7,140.6 L428.6,140.4 L429.6,140.9 L430.5,140.2 - L431.4,140.0 L432.3,138.4 L433.2,135.8 L434.1,137.9 L435.0,137.6 L436.0,138.5 L436.9,138.9 L437.8,137.6 - L438.7,139.5 L439.6,140.0 L440.5,140.1 L441.4,140.0 L442.4,140.7 L443.3,141.6 L444.2,135.0 L445.1,136.1 - L446.0,136.8 L446.9,138.9 L447.9,137.8 L448.8,140.0 L449.7,139.6 L450.6,138.3 L451.5,139.9 L452.4,139.8 - L453.3,139.2 L454.3,139.1 L455.2,139.6 L456.1,137.7 L457.0,138.7 L457.9,135.8 L458.8,139.3 L459.7,139.2 - L460.7,138.5 L461.6,138.5 L462.5,139.0 L463.4,139.7 L464.3,140.8 L465.2,141.3 L466.1,140.8 L467.1,140.2 - L468.0,138.5 L468.9,137.9 L469.8,136.5 L470.7,135.3 L471.6,138.2 L472.6,139.3 L473.5,139.5 L474.4,140.6 - L475.3,140.9 L476.2,141.1 L477.1,140.0 L478.0,136.8 L479.0,140.6 L479.9,142.1 L480.8,142.0 L481.7,140.7 - L482.6,139.4 L483.5,137.8 L484.4,138.7 L485.4,140.5 L486.3,136.8 L487.2,135.7 L488.1,135.7 L489.0,138.5 - L489.9,138.9 L490.8,141.1 L491.8,140.6 L492.7,140.8 L493.6,138.6 L494.5,138.5 L495.4,139.4 L496.3,140.1 - L497.2,139.4 L498.2,140.1 L499.1,139.6 L500.0,138.0 L500.9,138.4 L501.8,139.3 L502.7,137.1 L503.7,137.4 - L504.6,137.5 L505.5,140.6 L506.4,141.6 L507.3,142.2 L508.2,141.2 L509.1,139.1 L510.1,137.2 L511.0,139.4 - L511.9,141.8 L512.8,137.3 L513.7,139.8 L514.6,137.7 L515.5,137.3 L516.5,137.2 L517.4,137.6 L518.3,140.9 - L519.2,141.3 L520.1,141.7 L521.0,142.0 L521.9,141.2 L522.9,139.9 L523.8,139.0 L524.7,139.0 L525.6,138.2 - L526.5,135.2 L527.4,138.0 L528.3,138.5 L529.3,134.6 L530.2,140.0 L531.1,141.2 L532.0,140.8 L532.9,141.4 - L533.8,142.2 L534.8,142.3 L535.7,142.4 L536.6,141.4 L537.5,140.2 L538.4,138.6 L539.3,136.9 L540.2,137.9 - L541.2,137.9 L542.1,137.1 L543.0,137.7 L543.9,134.5 L544.8,141.1 L545.7,140.7 L546.6,141.0 L547.6,139.7 - L548.5,139.1 L549.4,139.1 L550.3,140.0 L551.2,139.1 L552.1,141.5 L553.0,142.2 L554.0,141.9 L554.9,140.6 - L555.8,138.8 L556.7,138.4 L557.6,138.7 L558.5,139.0 L559.4,140.4 L560.4,142.2 L561.3,142.2 L562.2,139.9 - L563.1,139.3 L564.0,142.4 L564.9,142.4 L565.9,142.4 L566.8,142.4 L567.7,142.4 L568.6,142.4 L569.5,142.4 - L570.4,142.4 L571.3,142.4 L572.3,142.4 L573.2,142.4 L574.1,142.4 L575.0,142.4 h0.01'/></g> - </g> -<g style="fill:none; color:white; stroke:rgb(228, 26, 28); stroke-width:1.00; stroke-linecap:butt; stroke-linejoin:miter"> -</g> -<g style="fill:none; color:black; stroke:currentColor; stroke-width:1.00; stroke-linecap:butt; stroke-linejoin:miter"> - <path stroke='black' d='M71.9,16.7 L71.9,142.4 L575.0,142.4 L575.0,16.7 L71.9,16.7 Z h0.01'/></g> -</g> -</svg> - http://git-wip-us.apache.org/repos/asf/incubator-crail-website/blob/c782b73a/content/img/blog/sort/performance_overall.png ---------------------------------------------------------------------- diff --git a/content/img/blog/sort/performance_overall.png b/content/img/blog/sort/performance_overall.png deleted file mode 100644 index 8de369e..0000000 Binary files a/content/img/blog/sort/performance_overall.png and /dev/null differ http://git-wip-us.apache.org/repos/asf/incubator-crail-website/blob/c782b73a/content/img/blog/sort/shuffle_rdma.png ---------------------------------------------------------------------- diff --git a/content/img/blog/sort/shuffle_rdma.png b/content/img/blog/sort/shuffle_rdma.png deleted file mode 100644 index 9d3d020..0000000 Binary files a/content/img/blog/sort/shuffle_rdma.png and /dev/null differ http://git-wip-us.apache.org/repos/asf/incubator-crail-website/blob/c782b73a/content/img/blog/sort/terasort_pipeline.png ---------------------------------------------------------------------- diff --git a/content/img/blog/sort/terasort_pipeline.png b/content/img/blog/sort/terasort_pipeline.png deleted file mode 100644 index f5a11c8..0000000 Binary files a/content/img/blog/sort/terasort_pipeline.png and /dev/null differ http://git-wip-us.apache.org/repos/asf/incubator-crail-website/blob/c782b73a/content/img/crail-stack-preview.png ---------------------------------------------------------------------- diff --git a/content/img/crail-stack-preview.png b/content/img/crail-stack-preview.png deleted file mode 100644 index e1b258c..0000000 Binary files a/content/img/crail-stack-preview.png and /dev/null differ http://git-wip-us.apache.org/repos/asf/incubator-crail-website/blob/c782b73a/content/img/crail_logo.png ---------------------------------------------------------------------- diff --git a/content/img/crail_logo.png b/content/img/crail_logo.png deleted file mode 100644 index 1ca0ce5..0000000 Binary files a/content/img/crail_logo.png and /dev/null differ http://git-wip-us.apache.org/repos/asf/incubator-crail-website/blob/c782b73a/content/img/crail_stack.png ---------------------------------------------------------------------- diff --git a/content/img/crail_stack.png b/content/img/crail_stack.png deleted file mode 100644 index 9708e4b..0000000 Binary files a/content/img/crail_stack.png and /dev/null differ http://git-wip-us.apache.org/repos/asf/incubator-crail-website/blob/c782b73a/content/img/crail_stack2.png ---------------------------------------------------------------------- diff --git a/content/img/crail_stack2.png b/content/img/crail_stack2.png deleted file mode 100644 index f2b8315..0000000 Binary files a/content/img/crail_stack2.png and /dev/null differ http://git-wip-us.apache.org/repos/asf/incubator-crail-website/blob/c782b73a/content/img/crail_stack3.png ---------------------------------------------------------------------- diff --git a/content/img/crail_stack3.png b/content/img/crail_stack3.png deleted file mode 100644 index 424ba46..0000000 Binary files a/content/img/crail_stack3.png and /dev/null differ http://git-wip-us.apache.org/repos/asf/incubator-crail-website/blob/c782b73a/content/index.html ---------------------------------------------------------------------- diff --git a/content/index.html b/content/index.html deleted file mode 100644 index 2f044d0..0000000 --- a/content/index.html +++ /dev/null @@ -1,161 +0,0 @@ -<!DOCTYPE html> -<html> - <head> - <meta charset="utf-8"> - <title>The Apache Crail (Incubating) Project: Overview</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/crail-stack-preview.png" /> - <meta property="og:image:secure_url" content="http://crail.incubator.apache.org/img/crail-stack-preview.png" /> - </head> - - <body> - <div class="container"> - <div class="header"> - <ul class="nav nav-pills pull-right"> - - - - <li class="active"> - <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> - - - - - <div class="jumbotron"> -<h4>Apache Crail is a high-performance distributed data store designed for fast sharing of ephemeral data in distributed data processing workloads</h4> -</div> - -<br> -<div> -<center> -<img src="http://crail.incubator.apache.org/img/crail_stack3.png" align="middle" style="width: 340px; text-align:center;"> -</center> -</div> -<br> - -<div class="row"> -<div class="col-lg-4"> -<h2>Fast</h2> -<p align="justify">Crail is designed from ground up for modern high-performance networking and storage hardware (RDMA, NVMe, NVMf, etc.). It leverages user-level I/O to access hardware directly from the application context, providing bare-metal I/O performance to analytics workloads. For example, Crail achieves data access at rates close to the 100Gb/s network limit with latencies below 10 us.</p> -<p><a class="btn btn-default" href="overview/index.html#overview">Learn more »</a></p> -</div> -<div class="col-lg-4"> -<h2>Heterogeneous</h2> -<p align="justify">Crail offers a unified storage namespace over a heterogeneous set of storage resources distributed in a cluster, such as DRAM, non-volatile memory (NVM), Flash or GPU memory. Depending on the storage policy, data sets may be stored on a particular storage technology or even a specific storage device, or be distributed across multiple devices and storage technologies. -</p> -<p><a class="btn btn-default" href="overview/index.html#fs">Learn more »</a></p> -</div> -<div class="col-lg-4"> -<h2>Modular</h2> -<p align="justify">Crail provides a modular architecture where new network and storage technologies can be integrated in the form of pluggable modules. Crail further exports various application interfaces including File System (FS), Key-Value (KV) and Streaming, and integrates seamlessly with the Apache ecosystem, such as Apache Spark, Apache Parquet, Apache Arrow, etc.</p> -<p><a class="btn btn-default" href="overview/index.html#spark">Learn more »</a></p> -</div> -</div> - -<h2>News</h2> -<ul class="news list-unstyled"> - - - <li class="shortnews"> - <span class="date">June 5, 2018</span> - <p>A Spark serverless architecture powered by Crail will be presented today at the <a href="https://databricks.com/session/serverless-machine-learning-on-modern-hardware-using-apache-spark">Spark Summit</a></p> - - </li> - - - - <li class="shortnews"> - <span class="date">June 5, 2018</span> - <p>Apache Crail (incubating) to feature in the <a href="https://dataworkssummit.com/san-jose-2018/session/data-processing-at-the-speed-of-100-gbpsapache-crail-incubating/">DataWorks Summit</a> on June 21st</p> - - </li> - - - - <li class="shortnews"> - <span class="date">June 4, 2018</span> - <p>Apache Crail 1.0 incubator <a href="https://dist.apache.org/repos/dist/release/incubator/crail/1.0-incubating/">release</a></p> - - </li> - - - - <li class="shortnews"> - <span class="date">January 22, 2018</span> - <p>Crail is now an Apache Incubator project!</p> - - </li> - - - - <li class="shortnews"> - <span class="date">November 23, 2017</span> - <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> - - </li> - - -</ul> - - -<p><a href="http://crail.incubator.apache.org/news/">Older posts…</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/c782b73a/content/js/srcset-polyfill.js ---------------------------------------------------------------------- diff --git a/content/js/srcset-polyfill.js b/content/js/srcset-polyfill.js deleted file mode 100644 index 9c8d2bc..0000000 --- a/content/js/srcset-polyfill.js +++ /dev/null @@ -1,52 +0,0 @@ -(function(window, document) { - // Test if it already supports srcset - if ('srcset' in document.createElement('img')) - return true; - - // We want to get the device pixel ratio - var maxWidth = (window.innerWidth > 0) ? window.innerWidth : screen.width, - maxHeight = (window.innerHeight > 0) ? window.innerHeight : screen.height, - maxDensity = window.devicePixelRatio || 1; - - // Implement srcset - function srcset(image) { - if (!image.attributes['srcset']) return false; - - var candidates = image.attributes['srcset'].nodeValue.split(','); - - for (var i = 0; i < candidates.length; i++) { - // The following regular expression was created based on the rules - // in the srcset W3C specification available at: - // http://www.w3.org/html/wg/drafts/srcset/w3c-srcset/ - - var descriptors = candidates[i].match( - /^\s*([^\s]+)\s*(\s(\d+)w)?\s*(\s(\d+)h)?\s*(\s(\d+)x)?\s*$/ - ), - filename = descriptors[1], - width = descriptors[3] || false, - height = descriptors[5] || false, - density = descriptors[7] || 1; - - if (width && width > maxWidth) { - continue; - } - - if (height && height > maxHeight) { - continue; - } - - if (density && density > maxDensity) { - continue; - } - - image.src = filename; - } - } - - - var images = document.getElementsByTagName('img'); - - for (var i=0; i < images.length; i++) { - srcset(images[i]); - } -})(window, document); \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-crail-website/blob/c782b73a/content/news/index.html ---------------------------------------------------------------------- diff --git a/content/news/index.html b/content/news/index.html deleted file mode 100644 index ddb093b..0000000 --- a/content/news/index.html +++ /dev/null @@ -1,224 +0,0 @@ -<!DOCTYPE html> -<html> - <head> - <meta charset="utf-8"> - <title>The Apache Crail (Incubating) Project: News</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/news-summary.png" /> - <meta property="og:image:secure_url" content="http://crail.incubator.apache.org/img/blog/preview/news-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>News</h2> - - - <ul class="news list-unstyled"> - - - <li class="shortnews"> - <span class="date">June 5, 2018</span> - <p>A Spark serverless architecture powered by Crail will be presented today at the <a href="https://databricks.com/session/serverless-machine-learning-on-modern-hardware-using-apache-spark">Spark Summit</a></p> - - </li> - - - - <li class="shortnews"> - <span class="date">June 5, 2018</span> - <p>Apache Crail (incubating) to feature in the <a href="https://dataworkssummit.com/san-jose-2018/session/data-processing-at-the-speed-of-100-gbpsapache-crail-incubating/">DataWorks Summit</a> on June 21st</p> - - </li> - - - - <li class="shortnews"> - <span class="date">June 4, 2018</span> - <p>Apache Crail 1.0 incubator <a href="https://dist.apache.org/repos/dist/release/incubator/crail/1.0-incubating/">release</a></p> - - </li> - - - - <li class="shortnews"> - <span class="date">January 22, 2018</span> - <p>Crail is now an Apache Incubator project!</p> - - </li> - - - - <li class="shortnews"> - <span class="date">November 23, 2017</span> - <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> - - </li> - - - - <li class="shortnews"> - <span class="date">November 17, 2017</span> - <p>Crail features in the <a href="https://twit.tv/shows/floss-weekly/episodes/458?autostart=false">FLOSS weekly podcast</a></p> - - </li> - - - - <li class="shortnews"> - <span class="date">November 17, 2017</span> - <p>New blog <a href="http://crail.incubator.apache.org/blog/2017/11/rdmashuffle.html">post</a> about SparkRDMA and Crail shuffle plugins</p> - - </li> - - - - <li class="shortnews"> - <span class="date">August 4, 2017</span> - <p>Crail on OpenPower discussed by Peter Hofstee on <a href="https://www.youtube.com/watch?v=f-pgMaEmqn4&feature=youtu.be&platform=hootsuite">Youtube</a></p> - - </li> - - - - <li class="shortnews"> - <span class="date">June 17, 2017</span> - <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> - - </li> - - - - <li class="shortnews"> - <span class="date">March 29, 2017</span> - <p>First release of the NVMeF storage tier for Crail is available at <a href="http://github.com/zrlio/crail">GitHub</a></p> - - </li> - - - - <li class="shortnews"> - <span class="date">March 20, 2017</span> - <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> - - </li> - - - - <li class="shortnews"> - <span class="date">March 16, 2017</span> - <p>We are presenting Crail at a <a href="https://www.meetup.com/Big-Data-Developers-in-Munich/events/238408703/">meetup</a> before the <a href="https://dataworkssummit.com/munich-2017/agenda/#20170404">DataWorks Summit</a> in Munich on April 4th</p> - - </li> - - - - <li class="shortnews"> - <span class="date">March 12, 2017</span> - <p>We are presenting Crail at the <a href="https://www.openfabrics.org/index.php/abstracts-agenda.html">Open Fabrics Workshop</a> in Austin on March 28th</p> - - </li> - - - - <li class="shortnews"> - <span class="date">March 10, 2017</span> - <p>Our work on Storage disaggregation using Crail at the <a href="http://nvmw.ucsd.edu/2017/program">Non-Volatile Memories Workshop</a></p> - - </li> - - - - <li class="shortnews"> - <span class="date">January 17, 2017</span> - <p>New blog <a href="http://crail.incubator.apache.org/blog/2017/01/sorting.html">post</a> about sorting on a 100Gbit/s cluster using Spark/Crail</p> - - </li> - - - - <li class="shortnews"> - <span class="date">January 1, 2017</span> - <p>First release of the Spark shuffle engine available at <a href="http://github.com/zrlio/spark-io">GitHub</a></p> - - </li> - - - - <li class="shortnews"> - <span class="date">January 1, 2017</span> - <p>First release of the Crail distributed file system available at <a href="http://github.com/zrlio/crail">GitHub</a></p> - - </li> - - -</ul> - - - <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/c782b73a/content/overview/architecture.png ---------------------------------------------------------------------- diff --git a/content/overview/architecture.png b/content/overview/architecture.png deleted file mode 100644 index 2f11f95..0000000 Binary files a/content/overview/architecture.png and /dev/null differ http://git-wip-us.apache.org/repos/asf/incubator-crail-website/blob/c782b73a/content/overview/filesystem.png ---------------------------------------------------------------------- diff --git a/content/overview/filesystem.png b/content/overview/filesystem.png deleted file mode 100644 index 4b29413..0000000 Binary files a/content/overview/filesystem.png and /dev/null differ http://git-wip-us.apache.org/repos/asf/incubator-crail-website/blob/c782b73a/content/overview/filesystem2.png ---------------------------------------------------------------------- diff --git a/content/overview/filesystem2.png b/content/overview/filesystem2.png deleted file mode 100644 index 974e75a..0000000 Binary files a/content/overview/filesystem2.png and /dev/null differ http://git-wip-us.apache.org/repos/asf/incubator-crail-website/blob/c782b73a/content/overview/index.html ---------------------------------------------------------------------- diff --git a/content/overview/index.html b/content/overview/index.html deleted file mode 100644 index 1605363..0000000 --- a/content/overview/index.html +++ /dev/null @@ -1,247 +0,0 @@ -<!DOCTYPE html> -<html> - <head> - <meta charset="utf-8"> - <title>The Apache Crail (Incubating) Project: I/O Challenges</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/overview-summary.png" /> - <meta property="og:image:secure_url" content="http://crail.incubator.apache.org/img/blog/preview/overview-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 class="active"> - <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>I/O Challenges</h2> - - - <div style="text-align: justify"> -<p> -Modern storage and network technologies such as 100Gb/s Ethernet, RDMA, NVMe flash, etc., present new opportunities for data processing systems to further reduce the response times of analytics queries on large data sets. Unfortunately, leveraging modern hardware in systems like Spark, Flink or Hadoop remains challenging, for multiple reasons: -</p> -</div> - -<ul> - <li> - <p>Performance: todayâs data processing stacks employ many software layers, which is key to making the stacks modular and flexible to use. But the software layers also impose overheads during I/O operations that prevent applications from enjoying the full potential of the high-performance hardware. To eliminate these overheads, I/O operations must interact with the hardware directly from within the application context using principles like RDMA, DPDK or SPDK.</p> - </li> - <li> - <p>New opportunities: the improved performance of modern networking and storage hardware opens the door to rethinking the interplay of I/O and compute in a distributed data processing system. For instance, low latency remote data access enables schedulers to relax on data locality and in turn make better use of compute resources. At one extreme, storage resources can be completely disaggregated which is more cost effective and simplifies maintenance.</p> - </li> - <li> - <p>Heterogeneity: with modern hardware, I/O operations are becoming more complex. Not only are there more options to store data (disk, flash, DRAM, disaggregated storage, etc.) but also it is getting increasingly important to use storage resources efficiently. For instance, some newer technologies such as phase change memory (PCM) permit data access at byte granularity. Mediating storage access through a block device interface is a bad fit in such a case. Moreover, with accelerators like GPUs or FPGAs extending the traditional compute layer, new distributed interfaces to accelerator-local memories are needed.</p> - </li> -</ul> - -<p>In the <a href="http://crail.incubator.apache.org/blog">Blog</a> section we discuss each of those challenges in more detail.</p> - -<h2 id="crail-architecture">Crail Architecture</h2> - -<div style="text-align: justify"> -<p> -Crail aims at providing a comprehensive solution to the above challenges in a form that is non-intrusive and compatible with the Apache data processing ecosystem. In particular, Crail is designed to be consumeable by different compute engines such as Spark, Flink, Solr, etc., with very little integration effort. -</p> -</div> - -<h3 id="overview">Overview</h3> - -<div style="text-align: justify"> -<p> -The backbone of the Crail I/O architecture is Crail Store, a high-performance multi-tiered data store for temporary data in analytics workloads. If the context permits we often refer to Crail Store simply as Crail. Data processing frameworks and applications may directly interact with Crail for fast storage of in-flight data, but more commonly the interaction takes place through one of the Crail modules. As an example, the CrailHDFS adapter provides a standard HDFS interface allowing applications to use Crail Store the same way they use regular HDFS. Applications may want to use CrailHDFS for short-lived performance critical data, and regular HDFS for long-term data storage. CrailSparkIO is a Spark specific module which implements various I/O intensive Spark operations such as shuffle, broadcast, etc. Both CrailHDFS and CrailSparkIO can be used transparently with no need to recompile either the application or the data processing framework. -</p> -</div> -<p><br /> -<img src="architecture.png" width="500" align="middle" /> -<br /><br /></p> -<div style="text-align: justify"> -<p> -Crail modules are thin layers on top of Crail Store. Implementing new modules for a particular data processing framework or a specific I/O operation requires only a moderate amount of work. At the same time, modules inherit the full benefits of Crail in terms of user-level I/O, performance and storage tiering. For instance, in the blog section we show that the Crail-based shuffle engine for Spark permits all-to-all data shuffling very close to the speed of the 100Gb/s network fabric. -</p> -</div> - -<h3 id="fs">Crail Store</h3> - -<div style="text-align: justify"> -<p> -Crail Store implements a hierarchical namespace across a cluster of RDMA interconnected storage resources such as DRAM or flash. Storage resources may be co-located with the compute nodes of the cluster, or disagreggated inside the data center, or a mix of both. Nodes in the Crail namespace consist of arrays of blocks distributed across storage resources in the cluster. Crail groups storage resources into different tiers (e.g, DRAM, flash, disk) and permits node segments (blocks) to be allocated in specific tiers but also across tiers. For instance, by default Crail uses horizontal tiering where higher performing storage resources are filled up across the cluster prior to using lower performing tiers -- resulting in a more effective usage of storage hardware. -</p> -<p> -Crail currently supports five types of nodes to be stored in its namespace: regular data files, directories, multifiles, tables and keyvalue nodes. Regular data files are append-and-overwrite with only a single-writer permitted per file at a given time. Append-andoverwrite means that â aside from appending data to the file â overwriting existing content of a file is also permitted. Directories in Crail are just regular files containing fixed length directory records. The advantage -is that directory enumeration becomes just a standard file read operation which makes enumeration fast and -scalable with regard to the number of directory entries. Multifiles are files that can be written concurrently. -Internally, a multifile very much resembles a flat directory. Multiple concurrent substreams on a multifile are -backed with separate files inside the directory. Keyvalue nodes are similar to data files, except that keyvalue nodes can be updated with completely new values. Updating keyvalue nodes can happen concurrently by multiple clients in which case the last update prevails. Keyvalue nodes can only be attached to tables, which are similar to directory with the exception that tables cannot be nested. -</p> -</div> - -<div style="text-align:center"><img src="http://crail.incubator.apache.org/overview/filesystem2.png" width="550" /></div> -<p><br /></p> - -<div style="text-align: justify"> -<p> -Access to storage resources over the network -- as happening during file read/write operations -- are implemented using a variety of network and stoage APIs and protocols. Which API and protocol is uses to read/write a particular block depends to the type of storage that is accessed. For instance, accesses to blocks residing in the DRAM tier are implemented using one-sided read/write RDMA operations. Similarly, access to blocks residing in the NVMe tier of Crail are implemented using NVMe of fabrics (NVMf). In most of the cases, the network and storage devices are access directly from user-space via RDMA or other user-level APIs such as DPDK or SPDK. Crail is built in a way that new storage tiers can be added easily: storage tiers are actual plugins. With this, Crail can support new protocols and APIs and leverage upcoming storage and network technologies efficiently. -</p> -</div> -<p><br /> -<img src="tiering.png" width="650" align="middle" /> -<br /><br /></p> -<div style="text-align: justify"> -<p> -Crail's top level storage API offers asynchronous non-blocking functions for reading and writing data. Typically, the user-level APIs used by the storage tiers offer an asynchronous interface to the hardware which Crail directly leverages, thus, Crail is naturally asynchronous and does not need to engage any extra threads to provide asynchronism. The asynchronous API is particular important in the context of data processing, as it facilitates interleaving of computation and I/O in data processing workloads. Aside from the standard read/write operations, Crail provides extra semantics geared towards its use case. For instance, Crail exports functions to allocate dedicated I/O buffers from a reuseable pool -- memory that is registered with the hardware if needed to support zero-copy I/O. Moreover, Crail provides detailed control as to which storage tier and location preference should be used when allocating file system resources. -</p> -<p> -Crail not only exports a Java API but also is written entirely in Java, which makes it easy to use and allows for a better integration with data processing frameworks like Spark, Flink, Hadoop, etc. A simple example of a Crail write operation is shown below: -</p> -</div> -<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>CrailConfiguration conf = new CrailConfiguration(); -CrailStore store = CrailStore.newInstance(conf); -CrailFile file = store.createFile(filename, 0, 0).get().syncDir(); -CrailOutputStream outstream = file.getDirectOutputStream(); -ByteBuffer dataBuf = store.allocateBuffer(); -Future<DataResult> future = outputStream.write(dataBuf); -... -future.get(); -</code></pre></div></div> -<div style="text-align: justify"> -<p> - -Crail uses <a href="https://github.com/zrlio/disni">DiSNI</a>, a user-level network and storage stack for the Java virtual machine. DiSNI allows data to be exchanged in a zero-copy fashion between Java I/O memory and remote storage resources over RDMA. -</p> -</div> - -<h3>Crail HDFS Adapter</h3> - -<p>The Crail HDFS adaptor enables users to access Crail using the standard HDFS API. For instance, administrators can interact with Crail using the standard HDFS shell:</p> - -<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>./bin/crail fs -mkdir /test -./bin/crail fs -ls / -./bin/crail fs -copyFromLocal <path-to-local-file> -./bin/crail fs -cat /test/<file-name> -</code></pre></div></div> - -<p>Moreover, regular HDFS-based applications will transparently work with Crail when using fully qualified path names (or when specifying Crail as the default Hadoop file system):</p> - -<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Configuration conf = new Configuration(); -FileSystem fs = FileSystem.get(conf); -fs.create("crail://test/hello.txt"); -</code></pre></div></div> - -<h3 id="spark">Crail Spark Module</h3> - -<div style="text-align: justify"> -<p> -The Crail Spark module includes a Crail based shuffle engine as well as a broadcast service. The shuffle engine maps key ranges to directories in Crail. Each map task, while partitioning the data, appends key/value pairs to individual files in the corresponding directories. Tasks running on the same core within the cluster append to the same files, which reduces storage fragmentation. -</p> -</div> - -<p><br /> -<img src="shuffle.png" width="550" align="middle" /> -<br /><br /></p> - -<div style="text-align: justify"> -<p> -As is the case with the Crail HDFS adapter, the shuffle engine benefits from the performance and tiering advantages of the Crail data store. For instance, individual shuffle files are served using horizontal tiering. In most cases that means the files are filling up the memory tier as long as there is some DRAM available in the cluster, after which they extend to the flash tier. The shuffle engine further uses the Crail location affinity API to make sure local DRAM and flash is preferred over remote DRAM and flash respectively. Note that the shuffle engine is also completely zero-copy, as it transfers data directly from the I/O memory of the mappers to the I/O memory of the reducers. -</p> -</div> - -<div style="text-align: justify"> -<p> -The Crail-based broadcast plugin for Spark stores broadcast variables in Crail files. In contrast to the shuffle engine, broadcast is implemented without location affinity, which makes sure the underlying blocks of the Crail files are distributed across the cluster, leading to a better load balancing when reading broadcast variables. Crail shuffle and broadcast components can be enabled in Spark by setting the following system properties in spark-defaults.conf: -</p> -</div> - -<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>spark.shuffle.manager org.apache.spark.shuffle.crail.CrailShuffleManager -spark.broadcast.factory org.apache.spark.broadcast.CrailBroadcastFactory -</code></pre></div></div> - -<div style="text-align: justify"> -<p> -Both broadcast and shuffle require Spark data objects to be serialized into byte streams (as is also the case for the default Spark broadcast and shuffle components). Even though both Crail components work fine with any of the Spark built-in serializers (e.g. Kryo), to achieve the best possible performance applications running on Crail are encouraged to provide serialization and deserialization methods for their data types explicitly. One reason for this is that the built-in Spark serializers assume byte streams of type java.io.(InputStream/OutputStream). These stream types are less powerful than Crail streams. For instance, streams of type InputStream/OutputStream expose a synchronous API and are restricted to on-heap memory. Crail streams, on the other hand, expose an asynchronous API and integrate well with off-heap memory to reduce data copies. By defining custom serialization/deserialization methods, applications can take full advantage of Crail streams during broadcast and shu ffle operations. Moreover, serializers dedicated to one particular application type may further exploit information about the specific application data types to achieve a better performance. As we show in the blog, a custom serializer for a sorting application running on key/value objects of a fixed length byte array will not need to store serialization meta data, which reduces the final data size and simplifies the serialization process. -</p> -</div> - -<p><br /> -<img src="serializer.png" width="490" align="middle" /> -<br /><br /></p> - -<div style="text-align: justify"> -<p> -Serialization is one important aspect for broadcast and shuffle operations, sorting another, even though specific to shuffling. Sorting directly follows the network fetch phase in a shuffle operation if a key ordering is requested by the application. Again, the Crail shuffle engine works fine with the Spark built-in sorter, but often the shuffle performance can be improved by an application specific sorter. For instance, an application may use the Crail GPU tier to store data. In that case, sorting can be pushed to the GPU, rather than fetching the data into main memory and sorting it on the CPU. In other cases, the application may know the data types in advance and use the information to simplify sorting (e.g. use Radix sort instead TimSort). -</p> -<p> -Application specific serializers and sorters can be defined by setting the following system properties in spark-defaults.conf: -</p> -</div> - -<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>spark.crail.shuffle.serializer -spark.crail.shuffle.sorter -</code></pre></div></div> - - - - <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/c782b73a/content/overview/serializer.png ---------------------------------------------------------------------- diff --git a/content/overview/serializer.png b/content/overview/serializer.png deleted file mode 100644 index db99abb..0000000 Binary files a/content/overview/serializer.png and /dev/null differ http://git-wip-us.apache.org/repos/asf/incubator-crail-website/blob/c782b73a/content/overview/shuffle.png ---------------------------------------------------------------------- diff --git a/content/overview/shuffle.png b/content/overview/shuffle.png deleted file mode 100644 index 761b964..0000000 Binary files a/content/overview/shuffle.png and /dev/null differ http://git-wip-us.apache.org/repos/asf/incubator-crail-website/blob/c782b73a/content/overview/tiering.png ---------------------------------------------------------------------- diff --git a/content/overview/tiering.png b/content/overview/tiering.png deleted file mode 100644 index b131f59..0000000 Binary files a/content/overview/tiering.png and /dev/null differ