<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">

  <title><![CDATA[Category: PlanetOpenstack | SwiftStack]]></title>
  <link href="http://swiftstack.com/blog/categories/planetopenstack/atom.xml" rel="self"/>
  <link href="http://swiftstack.com/"/>
  <updated>2013-05-02T15:08:15-07:00</updated>
  <id>http://swiftstack.com/</id>
  <author>
    <name><![CDATA[SwiftStack]]></name>
    <email><![CDATA[contact@swiftstack.com]]></email>
  </author>
  <generator uri="http://octopress.org/">Octopress</generator>

  
  <entry>
    <title type="html"><![CDATA[Havana Design Summit: Swift API Discussions]]></title>
    <link href="http://swiftstack.com/blog/2013/04/24/openstack-summit-api-discussion/"/>
    <updated>2013-04-24T15:40:00-07:00</updated>
    <id>http://swiftstack.com/blog/2013/04/24/openstack-summit-api-discussion</id>
    <content type="html"><![CDATA[<p><img class="right" src="/images/posts/SwiftOutline.png" width="250"></p>

<p>As part of the Swift technical track last week at the OpenStack design summit, we had several topics on the Swift API. Swift has a remarkably stable API. We've added to the API, but we haven't removed anything or changed any existing behavior beyond some minor conformance-to-spec fixes. This means that clients written years ago still work even when talking to Swift clusters deployed just yesterday.</p>

<h2>External API</h2>

<p>Although it is stable, the Swift API is not without some minor warts. There are a few inconsistencies in the API and a few awkward parts that would break clients if they changed. Cleaning up these parts of the API will help client developers write cleaner Swift applications and will allow end users to more easily use cross-cloud Swift clusters.</p>

<p>Figuring out what will be changed in the Swift API will be a long proccess, but there are a few important baseline things that need to happen before any changes to the API can be made. First, we need a formal definition of what the Swift API is. We have never had a formal API spec. Swift has always relied on the careful attention of its contributors to ensure that existing clients don't break. A spec won't lessen the need for careful attention by contributors and reviewers, but it will allow client developers to know exactly what they can expect from a particular deployment. A formal API spec also allows deployers to know what must be supported to ensure support for data migration between Swift clusters. As a side-benefit, formally defining the API will expose gaps in our current docs and help us keep our docs more up-to-date.</p>

<p>The second thing we must do as a community is define our API for discovering the supported Swift API. Users need to be able to determine what API a particular Swift cluster supports in order to know how to talk to it. There has been a lot of work on API discoverability in other OpenStack projects, so I hope that we can use some of their techniques and lessons-learned in Swift.</p>

<p>Once we have these two things, an API spec and API discoverability, we can start the discussions around what needs to change in the Swift API and go about implementing the changes in the code.</p>

<p>I expect that all of these questions will create quite a bit of discussion in the community. As a group, we need to get feedback from deployers (of all sizes), developers, and end users. Together, we'll be able to make improvements and find the path that is best for everyone.</p>

<h2>Internal API</h2>

<p>Since a Swift cluster is a set of cooperating processes running on many servers, it implies that there is an internal API too. This API is how the communication between the nodes works and how the storage nodes talk to the underlying storage volumes.</p>

<p>While this internal API isn't nearly as formal or rigid as Swift's external API, there are opportunities to improve it too. Parts of Swift's code can be refactored to allow cleaner abstractions so that specific optimizations or alternatives can be implemented.</p>

<p>A while back, the concept of a Local File System (LFS) was proposed to Swift. Ultimately, the proposed patch was not merged, but the idea is a good one. The concept allows for filesystem-specific optimizations to be made. For example, an XFS module could optimize the way it walks over inodes or a ZFS module could take advantage of its ZFS-specific self-healing properties.</p>

<p>Other interested parties have started working on the concept for LFS rencently, specifically with the goal of better integrating Swift and GlusterFS. I'm hopeful that the patches will be successfully merged this time around, and I'm looking forward to the additional functionality the LFS feature will allow.</p>

<h2>Next Steps</h2>

<p>To move forward on improving both the internal and external APIs for Swift, we need community involvement for a few things:</p>

<ul>
<li>Formally defining the current Swift API</li>
<li>Implementing API version discoverability into Swift</li>
<li>Completion of the LFS patch for talking to storage volumes</li>
<li>Refactoring the proxy code to abstract communication with storage servers</li>
</ul>


<p>I'm looking for people in the Swift community to help completing these tasks. If you're interested, drop by #openstack-swift on freenode and let's talk!</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Havana Design Summit: Benchmarking Swift]]></title>
    <link href="http://swiftstack.com/blog/2013/04/18/openstack-summit-benchmarking-swift/"/>
    <updated>2013-04-18T12:38:00-07:00</updated>
    <id>http://swiftstack.com/blog/2013/04/18/openstack-summit-benchmarking-swift</id>
    <content type="html"><![CDATA[<p>At the OpenStack Summit last week, we had conversations with many users about
how to best benchmark Swift. In the developer summit sessions, benchmarking and
performance were recurring topics with lots of great input from both
developers and users. We also heard from HP, Intel, and Seagate about how they
conduct benchmarking of Swift and what they learned in the process. This
post provides an overview of why benchmarking is important for any Swift
cluster, how to approach it, and some of the key takeaways from the summit in
this area. It also provides an overview of
<a href="https://github.com/swiftstack/ssbench">SwiftStack Bench (ssbench)</a>,
the Swift benchmarking tool we recently open sourced.</p>

<h3>Benchmarking OpenStack Swift</h3>

<p>Depending on your goal, you may want a <strong>Realistic Benchmark</strong> or
a <strong>Targeted Benchmark</strong>.
Both approaches require benchmarking tools that scale
to avoid any bottlenecks in the benchmarking code during load generation.
Because of Swift's
fantastic horizontal scalability, avoiding bottlenecks in benchmarking
code can be very challenging.  Benchmarking Swift
means generating tens of thousands of concurrent requests and utilizing many
benchmarking servers to allow hundreds of gigabits per second of available
client throughput.  Both approaches to benchmarking also benefit
from fine-grained collection of total request latency, time-to-first-byte
latency, and Swift transaction IDs for every request.  But they do have
different goals, and that should inform load generation and results analysis.</p>

<p><strong>Realistic Benchmarking</strong>,
asks, "What happens when the cluster sees a particular client load?"
or "How many clients, ops-per-second, or throughput can my cluster
<em>really</em> support?"  You are more interested in simulating a production
workload than you are in isolating a particular action.  This kind of
benchmarking can benefit from simulating parametric mixed client
workloads (proportion of object sizes, operation types, etc.) or replaying a
workload based on some kind of capture or "trace" from another cluster.</p>

<p>With <strong>Targeted Benchmarking</strong>, you want to generate a very
specific, controlled load on the cluster to identify problems
and test potential improvements.  Data collected during a synthetic workload
will be less noisy than a more realistic, mixed workload.
This is useful for testing the effectiveness of tweaks to networking,
node hardware, tuning/configuration, and Swift code.</p>

<h3>SwiftStack Bench (ssbench)</h3>

<p>At SwiftStack, our first customer benchmarking requirements were <em>realistic</em>,
so we wrote a scalable benchmarking tool we named
<a href="https://github.com/swiftstack/ssbench">SwiftStack Bench (ssbench)</a>.  At
its heart, ssbench either manages the run of a mixed-workload benchmark
"scenario" or it generates a report from the results.  The data collected for
every request is quite rich and
includes the start time, total duration, time-to-first-byte if it was
a GET, and the Swift transaction ID for the request.  Because there
are many different ways to slice and dice the results, reporting
has a lot of room for improvement.  But the rich, raw results are
saved so that previously-run benchmarks may benefit from future reporting
improvements.</p>

<p>You can perform some <em>targeted</em> benchmarking with ssbench as well
by simply having a very simple scenario.  For example, you could target
small-object PUTs by having a scenario with only small files and only PUT
operations.
Similarly, you could have only large files and only GET operations.
Sam was able to demonstrate the benefit of per-disk I/O thread-pooling in
the object-server with a GET workload using ssbench.
We will soon
<a href="https://github.com/swiftstack/ssbench/issues/57">extend the available operation types</a>
in ssbench to cover metadata POST operations as well.
For folks with a metadata-intensive workload, these operations will enable
investigations of the way Swift handles metadata when adjusting the size of XFS
inodes, in addition to other metadata optimization.</p>

<p>The ssbench project is open-source and we look forward to developing
it cooperatively with the Swift community.  To that end, I led
a discussion session at this month's Design Summit to gather
requirements and suggestions for benchmarking Swift.  We had a lot
of great feedback captured in the
<a href="https://etherpad.openstack.org/HavanaSwiftBenchmarking">Etherpad</a>
from some current users of ssbench, other tool authors, and various
Swift users.</p>

<p>The session generated many new
<a href="https://github.com/swiftstack/ssbench/issues">feature requests</a>
for ssbench as well as other points/questions:</p>

<ul>
<li>Perhaps use <a href="http://tsung.erlang-projects.org/">Tsung</a> for load-generation?</li>
<li>Enable replaying a past load based on "trace" data from a live cluster.</li>
<li>Generate a parametric benchmark scenario from live cluster "trace"
data to develop more accurate loads.</li>
<li>Peter Portante from RedHat mentioned successfully using
<a href="http://oss.sgi.com/projects/pcp/index.html">Performance Co-Pilot</a>
to monitor a cluster during benchmarking.</li>
<li>In his presentations, Mark Seger from HP demonstrated using
<a href="http://sourceforge.net/projects/collectl/">collectl</a> to monitor a
cluster during benchmarking.</li>
</ul>


<p>Here's an example ssbench report.  Note that I used small objects
since I only had a single 12-core server and that the
cluster in question had a down node during the benchmark.  I also cut out the
"Worst latency TX ID" column so it would look better in this blog post.</p>

<pre><code>Medium test scenario
Worker count:  10   Concurrency: 800  Ran 2013-04-21 18:06:16 UTC to 2013-04-21 18:06:39 UTC (22s)

% Ops    C   R   U   D       Size Range       Size Name
 77%   % 26  60   7   7        1 kB -  16 kB  tiny
 23%   % 26  60   7   7      100 kB - 200 kB  small
---------------------------------------------------------------------
         26  60   7   7      CRUD weighted average

TOTAL
       Count: 99997  Average requests per second: 4475.8
                            min       max      avg      std_dev  95%-ile                 
       First-byte latency:  0.007 -   1.509    0.053  (  0.036)    0.082  (all obj sizes)
       Last-byte  latency:  0.009 -   1.941    0.160  (  0.127)    0.400  (all obj sizes)
       First-byte latency:  0.007 -   1.509    0.051  (  0.034)    0.070  (    tiny objs)
       Last-byte  latency:  0.009 -   1.559    0.133  (  0.109)    0.312  (    tiny objs)
       First-byte latency:  0.010 -   1.494    0.061  (  0.041)    0.100  (   small objs)
       Last-byte  latency:  0.017 -   1.941    0.248  (  0.140)    0.494  (   small objs)

CREATE
       Count: 25889  Average requests per second: 1158.8
                            min       max      avg      std_dev  95%-ile                 
       First-byte latency:  N/A   -   N/A      N/A    (  N/A  )    N/A    (all obj sizes)
       Last-byte  latency:  0.097 -   1.941    0.286  (  0.128)    0.520  (all obj sizes)
       First-byte latency:  N/A   -   N/A      N/A    (  N/A  )    N/A    (    tiny objs)
       Last-byte  latency:  0.097 -   1.559    0.253  (  0.110)    0.442  (    tiny objs)
       First-byte latency:  N/A   -   N/A      N/A    (  N/A  )    N/A    (   small objs)
       Last-byte  latency:  0.146 -   1.941    0.397  (  0.121)    0.589  (   small objs)

READ
       Count: 60191  Average requests per second: 2722.9
                            min       max      avg      std_dev  95%-ile                 
       First-byte latency:  0.007 -   1.509    0.053  (  0.036)    0.082  (all obj sizes)
       Last-byte  latency:  0.009 -   1.613    0.096  (  0.071)    0.231  (all obj sizes)
       First-byte latency:  0.007 -   1.509    0.051  (  0.034)    0.070  (    tiny objs)
       Last-byte  latency:  0.009 -   1.521    0.070  (  0.039)    0.103  (    tiny objs)
       First-byte latency:  0.010 -   1.494    0.061  (  0.041)    0.100  (   small objs)
       Last-byte  latency:  0.017 -   1.613    0.183  (  0.082)    0.296  (   small objs)

UPDATE
       Count:  6915  Average requests per second: 310.5
                            min       max      avg      std_dev  95%-ile                 
       First-byte latency:  N/A   -   N/A      N/A    (  N/A  )    N/A    (all obj sizes)
       Last-byte  latency:  0.088 -   1.516    0.252  (  0.125)    0.483  (all obj sizes)
       First-byte latency:  N/A   -   N/A      N/A    (  N/A  )    N/A    (    tiny objs)
       Last-byte  latency:  0.088 -   1.516    0.218  (  0.102)    0.394  (    tiny objs)
       First-byte latency:  N/A   -   N/A      N/A    (  N/A  )    N/A    (   small objs)
       Last-byte  latency:  0.121 -   1.409    0.367  (  0.124)    0.568  (   small objs)

DELETE
       Count:  7002  Average requests per second: 316.4
                            min       max      avg      std_dev  95%-ile                 
       First-byte latency:  N/A   -   N/A      N/A    (  N/A  )    N/A    (all obj sizes)
       Last-byte  latency:  0.041 -   1.522    0.144  (  0.094)    0.275  (all obj sizes)
       First-byte latency:  N/A   -   N/A      N/A    (  N/A  )    N/A    (    tiny objs)
       Last-byte  latency:  0.041 -   1.522    0.145  (  0.093)    0.277  (    tiny objs)
       First-byte latency:  N/A   -   N/A      N/A    (  N/A  )    N/A    (   small objs)
       Last-byte  latency:  0.045 -   1.502    0.143  (  0.094)    0.271  (   small objs)
</code></pre>

<h3>What Does Swift Look Like To a Drive?</h3>

<p>Tim Feldman from Seagate shared some interesting results of <em>targeted</em>
benchmarking, from the hard-drives' perspective.  For the most part, the drives
saw the expected load.  Volume of reads was lower than predicted,
but operating system buffer cache is the likely culprit, which is to be
expected if the volume of benchmark data isn't large enough to cause buffer
cache thrashing.</p>

<p>Mr. Feldman pointed out that "runt writes" will be a problem for drives with
<a href="http://www.seagate.com/tech-insights/advanced-format-4k-sector-hard-drives-master-ti/">native 4k sector sizes</a>.
A "runt write" results from writing to fewer than all 8 512-byte sections
of a single 4k sector.  When fewer than 8 512-byte sections of a 4k sector
are written to, the drive must perform a read-merge-write operation
instead of just a write.  When drives used in Swift clusters move to a
4k sector size (and this will happen soon), we'll need to make sure
the filesystem and OS correctly operate using 4k sectors and not legacy
512-byte sectors.</p>

<p>A relatively small number of disk sectors got
accessed many more times than the majority.  This would make sense for
filesystem and/or container metadata, but warrants further
investigation or optimization.</p>

<h3>What Can We Learn From Some Benchmarking?</h3>

<p>Jiangang Duan from Intel detailed his team's results from <em>targeted</em>
benchmarking with their open-source tool,
<a href="https://github.com/intel-cloud/cosbench">COSBench</a>.  They found that on
their
storage nodes, when buffer cache pressure caused filesystem metadata
to get evicted from memory, read performance suffered by 83%.  The
average read operation was 34 KB instead of averaging 122 KB, and read
requests per second and throughput were both worse.  Mr. Duan then showed
that setting the Linux kernel tunable, <code>vfs_cache_pressure</code>, to a very
low number almost entirely mitigated this performance drop
by keeping inode data cached when under memory pressure.</p>

<p>Mr. Duan noted that their servers had four bonded 1-Gb/s NICs and seemed to
utilize the bonding when transmitting data, but not when receiving it.
He said this could use some further investigation and potential optimization.</p>

<p>Finally, a slow disk which isn't actually dead can not only impact the average
latency of incoming requests to that disk, but worsen the latency of all
requests to the node by up to 25 percent.
I don't want to steal his thunder,
but Sam will be writing <a href="/blog/2013/04/18/havana-design-summit-enhancing-performance-with-thread-pools/">a brief blog post</a>
about <em>his</em> talk, which addressed this very problem.</p>

<h3>The Power of Fine-Grained Benchmark Metrics</h3>

<p>Mark Seger from HP drove home the point that fine-grained tracking of
each benchmark client request's results is critical.  Like ssbench,
his closed-source benchmarking tool suite, "getput", tracks response
latencies and Swift transaction IDs for each request.</p>

<p>Being able to report on latencies over time allows you to spot odd
things that happened briefly during a run.  Average numbers for the
whole run can't give you that.  Generating a latency
histogram can show you the <em>distribution</em> of latencies, allowing you
to see a long tail if you have one.</p>

<p>Mr. Seger noted that Swift's scaling is excellent: with multiple clients,
performance grows close to linearly.  With small objects, benchmarking
scales well, but with larger objects, CPU or bandwidth on the benchmark
node becomes a bottleneck.  This highlights my point earlier that
your benchmarking tool needs to scale out so it doesn't hit a bottleneck
before your cluster does.</p>

<p>When comparing <em>targeted</em> benchmark results for GETs of 1k, 10k,
and 100k objects, Mr. Seger found that the requests per second for 10k were
noticeably lower.  Further investigation revealed that only object sizes
between
7,888 and 22,469 bytes were affected.  It turned out that
<a href="http://en.wikipedia.org/wiki/Nagle's_algorithm">Nagel's algorithm</a> was
interfering because the maximum
segment size (MSS) over the physical NIC between the client and Pound
was much smaller than the MSS of the loopback device between Pound and
the Swift proxy-server.  This arbitrarily added latency to requests in
a certain size range.  Disabling Nagel's algorithm with
<code>TCP_NODELAY</code> on internal sockets within Swift may therefore be a
good idea.</p>

<p>A particular 6-second PUT had two of
three writes return in under one second, but the third
object-server held up the response to the client.  Mr. Seger suggested
optimizing client latency by returning success to the client as soon
as the PUT quorum is satisfied.</p>

<h3>Conclusion</h3>

<p>Benchmarking is an important part of any Swift deployment. With many tools
to choose from and best practices just emerging, it can be a daunting
project. This post provided an overview of available tools, best practices
and some lessons learned from the OpenStack summit. If you have questions
or like to discuss benchmarking Swift, feel free to reach out to us here
at SwiftStack.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Havana Design Summit: Extending ACLs and Metadata]]></title>
    <link href="http://swiftstack.com/blog/2013/04/17/openstack-summit-extending-swift-acls-and-metadata/"/>
    <updated>2013-04-17T18:30:00-07:00</updated>
    <id>http://swiftstack.com/blog/2013/04/17/openstack-summit-extending-swift-acls-and-metadata</id>
    <content type="html"><![CDATA[<p>Every year the Openstack conference gets bigger.  Every conference is at
a bigger venue with more people and more things going on.  But for Openstack
Developers hashing out the plan for the next set of work is the most fun part
of the collaborative environment at the conference.  And I'm having a blast.</p>

<p>This year the conference opened with a full day Swift design sessions on
Monday.  It was great to get down to brass tacks with Operators and Deployers
using Swift as well as good number of other Active Technical Contributers.
There is a TON of focus right now around some specific core topics, but then
on Tuesday Swift almost overran the unconference sessions.  With so many
people at the conference using Swift there was just too much to fit into one
packed room for one day.  The unconference sessions tend to be where a <em>bunch</em>
of smaller ideas can come together.  And some of these ideas can have a big
impact.</p>

<p>In particular David Hadas (another ATC for Swift who's been contributing since
last year and currently working at IBM) led a session at the end of the day on
extending ACL's and Metadata.</p>

<p>He introduced a couple of simple ideas to incrementally enhance Swift in small ways.</p>

<h3>Metadata Classification</h3>

<p>Swift supports metadata at every level.   On objects, containers, and even
directly on the account.  Users can set metadata through the Swift API.
Middleware and other core features will set metadata and then retrieve it later
and change the behavior of the API when acting on the entity based on the
metadata.  A straightforward example is the X-Delete-At metadata that is
central to the expiring object feature in Swift.  Once an object has expired,
even before it's been reaped by the consistency processes, the object server will
not serve an object after the X-Delete-At timestamp.  This is metadata that is
set by the user, but changes the way the storage system behaves.</p>

<p>Adding new capabilities often necessitates creating new metadata.  But, today
there's a number of places in the Swift code that have to distinguish between
metadata that the user can format to the own needs, or that must be validated
as recognized and in the correct format to be consumed by system.  As more
features and metadata are added, it becomes harder to individually rationalize
if the handling of the metadata is performing the proper validation in all
cases.</p>

<p>Every time new metadata is added to support a feature you have to write
validators.  That's not going to change.  We have to protect the system from
invalid input (garbage in garbage out).  But, deciding where to apply the
validation in Swift can require some relatively arcane knowledge about Swift
internals.  And still, most of the time you just piggy back on the processing
for a "similar type" of metadata anyway!</p>

<p>By classifying metadata we can make it easier to add new metadata (and
therefore new features that depend on metadata!)</p>

<p>To get us started David highlighted some high-level metadata classes:</p>

<ul>
<li>Storage System MD: Created by the storage system and consumed by the user (e.g. counters)</li>
<li>System MD: Created by the user and consumed by the storage system (e.g. ACLs, Quata)</li>
<li>User MD: Created by the user and consumed by the user (e.g. any regular user MD)</li>
</ul>


<p>He gave a nod to the CDMI standards definition for influencing these classes,
and got some good laughs poking fun that it might still be a good idea anyway.
Ha!  I totally agree, this is a good idea!</p>

<p>The work to do now is to identify and consolidate metadata validation and
build a system that will simplify the introduction of new metadata.  Working
out the details will require identifying all of the metadata that Swift is
currently supporting plus the known usecases where we know we want to extend
and verifying that they fit into these groups.  Then internally aligning the
places where Swift is processing and validating metadata under these buckets.</p>

<h3>Access Control Lists on Accounts</h3>

<p>I think Swift's container ACL's do a great job of balancing simplicity and
functionality.  Under a container you can individually grant (or revoke) read,
write or listing access based on individual users or groups identified by your
auth system or the Referer (sic).</p>

<p>This is very awesome.</p>

<p>Whether your usecase is simply sharing some static content in your container
with the world, or a more complex temporary granting of another authorized
user the ability to upload data under your account.  Swift ACL's allow YOU to
describe access to your data.</p>

<p>However, at the account level access is granted by the auth system.  If you
want a user to create containers in in a Swift account you would typically grant
them the admin role for that account in your auth system.</p>

<p>This works well with most of the auth systems that were built with cloud
systems like Swift in mind, certainly Keystone and Swauth.</p>

<p>But as Swift integrates with more businesses and existing auth systems it
becomes apparent that it may not always be easy to update the structure in the
pre-existing auth system for every new account in a highly scalable storage
system that's separating projects into thousands or even hundreds of thousands
of Swift accounts!</p>

<p>However, in the approach outlined by David, we can add the ability to
describe within Swift itself which pre-existing users or groups in the
auth system have access.  This puts the control of access to your data
completely in the hands of account owner.</p>

<p>There's still tons of issues to work through.  Can I remove my own access to
an account?  Can I transfer complete ownership?  As a service provider do I want to
allow users to have public accounts?  But I'm really excited about that work.</p>

<h3>Elegance is Powerful</h3>

<p>I think both of these ideas are taking existing concepts that are already in
Swift and expanding them incrementally.  But, personally, I'm blown away by the
implications.  Swift has always taken the approach of solving problems in the
simplest way that solves the broadest usecases.  I might even go as far to say
that style of simplification is a tenant of elegance.  And who doesn't need a
little more elegance in their software defined storage system?</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[SwiftStack at the Portland OpenStack Summit]]></title>
    <link href="http://swiftstack.com/blog/2013/04/12/swiftstack-at-portland-openstack-summit/"/>
    <updated>2013-04-12T13:30:00-07:00</updated>
    <id>http://swiftstack.com/blog/2013/04/12/swiftstack-at-portland-openstack-summit</id>
    <content type="html"><![CDATA[<p>On Monday, the Spring 2013 OpenStack summit is getting started in Portland, Oregon with a sold-out crowd. This year, there is a record attendance of more than 2,500 OpenStack users, developers, vendors and fans. Wow....what a change from the first summit in Austin, June 2010, which had a total of 150-ish attendees.</p>

<p>At this summit, a dozen SwiftStack’ers are attending and we will have a record number of sessions on OpenStack Swift - from the design sessions to an introduction on Swift to workshops on how to deploy Swift and SwiftStack and a panel on how to build a business on OpenStack, including Swift. To help you in your OpenStack summit planning, here is a schedule and summary of the sessions and workshops that the SwiftStack team will be participating in and presenting:</p>

<h3><a href="http://openstacksummitapril2013.sched.org/type/design+summit/swift">OpenStack Swift Design Summit Sessions</a></h3>

<p>Join the OpenStack Swift core team, Swift developers and SwiftStack Director of Technology / Swift Project Technical Lead (PTL), John Dickinson, to discuss the ongoing development of Swift, including plans for the Havana release.</p>

<p><strong>Swift extensions for real world (operator's view)</strong>
<em>Monday, April 14, 9:50 am @ meeting room B116</em></p>

<p><strong>Swift API Cleanup</strong>
<em>Monday, April 14, 11:00 am @ meeting room B116</em></p>

<p><strong>Local File System</strong>
<em>Monday, April 14, 11:50 am @ meeting room B116</em></p>

<p><strong>Swift with OpenStack what's next</strong>
<em>Monday, April 14, 1:50 pm @ meeting room B116</em></p>

<p><strong>Swift drive workloads</strong>
<em>Monday, April 14, 2:40 pm @ meeting room B116</em></p>

<p><strong>Speeding up the object server</strong>
<em>Monday, April 14, 3:40 pm @ meeting room B116</em></p>

<p><strong>Swift performance analysis</strong>
<em>Monday, April 14, 4:30 pm @ meeting room B116</em></p>

<p><strong>Benchmarking Swift</strong>
<em>Monday, April 14, 5:30 pm @ meeting room B116</em></p>

<h3><a href="http://openstacksummitapril2013.sched.org/event/87cb89f53af5b1f4434d080854511fe8#.UWhnbBnBCMw">OpenStack Swift Introduction: Architecture and Technical Overview</a></h3>

<p><em>Tuesday, April 16, 3:40 pm - 4:20 pm @ meeting room A106</em></p>

<p>Joe Arnold, CEO of SwiftStack, will provide an an overview of Swift’s architecture and its components. It will also cover real- world use cases, illustrating how high-volume websites use Swift and how the technology enables storage infrastructure-as-a-service.</p>

<p>The OpenStack Swift introduction is aimed at attendees who want to understand the design goals of Swift and how they can best make use of this OpenStack component. It will be an informative introduction for those interested in running Swift or contributing to the Swift project. <a href="http://openstacksummitapril2013.sched.org/event/87cb89f53af5b1f4434d080854511fe8#.UWhnbBnBCMw">Learn more here</a>.</p>

<h3><a href="http://openstacksummitapril2013.sched.org/event/1ceb0bf04191069973b84859da314970#.UWhouRnBCMw">Deploying OpenStack Swift Workshop</a></h3>

<p><em>Thursday, April 18, 1:30pm - 2:10pm @ meeting rooms C123 + C124</em></p>

<p>In this workshop, Joe Arnold, John Dickinson, Martin Lanner and Hugo Kuo of SwiftStack, will teach you how to deploy OpenStack Swift from the ground up. It will be a hands-on training where the audience will learn by doing rather than listening. Come with a laptop, or feel free to watch and learn.</p>

<p>You will be guided through a deployment and configuration of OpenStack Swift. We will walk you through the architecture of Swift while demonstrating a step- by-step installation from the ground up, including Swift's architecture (The Ring, Zones, Partitions, Accounts &amp; Containers), how to bootstrap a basic Swift installation, the guts of how OpenStack Swift works and Swift’s failure recovery mechanisms. <a href="http://openstacksummitapril2013.sched.org/event/1ceb0bf04191069973b84859da314970#.UWhouRnBCMw">Learn more here</a>.</p>

<h3><a href="http://openstacksummitapril2013.sched.org/event/a0b5ab29ddcafdcedaee0320826fb001#.UWhp3BnBCMw">Automating Swift deployments with SwiftStack Workshop</a></h3>

<p><em>Thursday, April 18, 2:30 pm - 3:00 pm @ meeting rooms C123 + C124</em></p>

<p>Join John Dickinson, Joe Arnold, Martin Lanner and Hugo Kuo in an interactive workshop, which will cover automation and management of OpenStack Swift with SwiftStack. In this hands-on workshop, you will learn about the automation required to run OpenStack Swift in production, runtime stacks for load-balancing, ssl-termination and authentication, networking architecture for Swift, monitoring Swift-specific metrics, tuning a Swift cluster and best practices for cluster expansion and failure handling. <a href="http://openstacksummitapril2013.sched.org/event/a0b5ab29ddcafdcedaee0320826fb001#.UWhp3BnBCMw">Learn more here</a>.</p>

<h3><a href="http://openstacksummitapril2013.sched.org/event/bdbac6bbcfd9094727105836834619f8#.UWhrzBnBCMw">Building an OpenStack Business Panel</a></h3>

<p><em>Wednesday, April 17, 1:50 pm - 2:30 pm @ meeting room A105</em></p>

<p>If you are interested in hearing a discussion on how to build a business on OpenStack, this is a the session to attend. Join Jonathan Bryce (OpenStack Executive Director), Ryan Floyd, (Storm Ventures Managing Director), Anders Tjernlund (COO and co-founder at SwiftStack) and other panelists in a discussion on lessons learned and best practices in building a business on OpenStack. While this is a more business oriented session, Swift is expected to be prominently featured in the discussion . <a href="http://openstacksummitapril2013.sched.org/event/bdbac6bbcfd9094727105836834619f8#.UWhrzBnBCMw">Learn more here</a>.</p>

<h3>Overflow Unconference Sessions</h3>

<p>The community submitted session proposals for 18 Swift technical talks, and since we were not able to schedule them all on Monday, we’ll be adding as many as we can to the Unconference track on Tuesday. These overflow sessions include talks on multi-cluster federation, archiving, RAID, and more. Keep an eye on the Unconference schedule, and join us for more technical discussions.</p>

<h3>SwiftStack Gift for Contributors</h3>

<p>OpenStack Swift is the result of over 100 contributors coming together to solve real-world problems. We’ve got a special gift for everyone who’s contributed to Swift. If you’ve in Swift’s authors file, stop by our booth and pick up your thank you gift.</p>

<h3>Giveaways for Everyone</h3>

<p>Finally, make sure to stop by our booth at the Summit. We have a giveaway there that you do not want to miss.</p>

<p>Looking forward to seeing everyone next week. And if you are not able to join us at Portland, we will make much of what we presented available here at swiftstack.com</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[OpenStack Swift Grizzly Release]]></title>
    <link href="http://swiftstack.com/blog/2013/04/04/openstack-swift-grizzly-release/"/>
    <updated>2013-04-04T12:00:00-07:00</updated>
    <id>http://swiftstack.com/blog/2013/04/04/openstack-swift-grizzly-release</id>
    <content type="html"><![CDATA[<p><img class="right" src="/images/posts/grizzly.jpg" width="320"></p>

<p>OpenStack Grizzly was <a href="http://www.openstack.org/blog/2013/04/openstack-grizzly/">released today</a>. As Swift's Project Technical Lead, the most fun part of my job is to put together the release notes at the end of the OpenStack release cycle. Seeing what the community has come together to build, the new use cases that are enabled, and the improvements in existing features is tremendously exciting. I'm honored to be a part of it. I'd like to share with you a few of the key features that have been added to Swift over the last six months.</p>

<p>During the OpenStack Grizzly release cycle, Swift has released version 1.7.5, 1.7.6, and 1.8.0. The full notes for these releases is available in <a href="https://github.com/openstack/swift/blob/master/CHANGELOG">Swift's changelog</a>.</p>

<p>As always, deployers can upgrade to the latest version of Swift with no downtime on their existing clusters.</p>

<h2>Key New Features</h2>

<ul>
<li><p><strong>Global clusters building blocks</strong></p>

<ul>
<li><p><strong>Allow the rings to have an adjustable replica count</strong>: Deployers can now adjust the replica count on existing clusters</p></li>
<li><p><strong>Allow rings to have different replica counts</strong>: Deployers can choose different replica counts for account, container, and object rings</p></li>
<li><p><strong>Added support for a region tier above zones</strong>: Deployers can group zones into regions.</p></li>
<li><p><strong>Added timing-based sorting of object servers on read requests</strong>: This allows the fastest responding server to serve the most requests instead of a random choice of the replicas. This can be especially useful when a replicas are in different regions separated by a WAN.</p></li>
</ul>
</li>
<li><p><strong>Added support for large objects with static manifests</strong>: Static large object manifests allow Swift users to specifically designate the individual segments which will make up a large object. <a href="http://docs.openstack.org/developer/swift/misc.html#module-swift.common.middleware.slo">Full docs</a> are on the OpenStack site.</p></li>
<li><p><strong>Added support for CORS requests</strong>: <a href="http://www.w3.org/TR/cors/">CORS</a> allows web application developers to get around same-origin restrictions in web browsers. With this feature, web developers can use a Swift cluster directly instead of needing to proxy content through a separate server.</p></li>
<li><p><strong>Bulk requests</strong>: Users can now ask a Swift cluster to upload or delete many objects with just one request.</p>

<ul>
<li><p><strong>Added support for auto-extracting archive uploads</strong>: A client can upload an archive file (ie a .tar file) and the contents will be stored individually in the cluster</p></li>
<li><p><strong>Added support for bulk deletes</strong>: A client can delete many objects with one delete request</p></li>
</ul>
</li>
<li><p><strong>Quotas</strong></p>

<ul>
<li><p>Added user-managed container quotas</p></li>
<li><p>Added support for account-level quotas (managed by an auth reseller)</p></li>
</ul>
</li>
</ul>


<p>I'm excited about what's been added to Swift and the growing community that has contributed to its development. I hope to see you all in Portland ten days from now at the OpenStack summit.</p>
]]></content>
  </entry>
  
</feed>
