]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commit
memstore: PageSetObject for MemStore integration
authorCasey Bodley <cbodley@redhat.com>
Wed, 5 Aug 2015 20:18:01 +0000 (16:18 -0400)
committerCasey Bodley <cbodley@redhat.com>
Thu, 27 Aug 2015 16:31:32 +0000 (12:31 -0400)
commit4e6548ca750601b01c4c1d035ca81505dca94fbf
tree75df84c056e558109944112106fab9d3ec99c767
parentdd7fe61e61fc6b44edb3735471c96a1e17fb644e
memstore: PageSetObject for MemStore integration

adds config variable memstore_page_set=true to switch between the
PageSet and bufferlist implementations for object data

benchmark results:

test command:
./ceph_objectstore_bench --osd_objectstore=memstore --osd_data=/home/casey/osbench --size=1g --block-size=X --threads=Y --repeats=32

test hardware: 2x Intel(R) Xeon(R) CPU E5-2620 0 @ 2.00GHz (12 cores/24
threads), 64GB memory

bufferlist (sequential write bandwidth in MB/s):

threads bs=4k bs=64k bs=256k bs=1m bs=4m
1 x 63 340 6177 81861
8 x 17 304 5910 87708
16 x x 320 5959 86578
        x: bandwidth approached 0 as size grew

PageSet (sequential write bandwidth in MB/s):

threads bs=4k bs=64k bs=256k bs=1m bs=4m
1 197 2122 3085 4471 4712
8 626 8808 15518 20389 18926
16 726 9581 18997 22330 21983

bufferlist performs extremely well in constrained workloads (large block
size and total file size below ~10G), because its writes are zero-copy.
but it breaks down at smaller block sizes due to the linear property of
the bufferlist

PageSet trades the zero-copy property for a logarithmic data structure
in order to achieve more reliable performance across file and block
sizes, in addition to better thread scaling

note: because each PG operates on a different collection and uses the
Sequencer to serialize the operations therein, we're not likely to see
the benefits from multilpe threads in the OSD

Signed-off-by: Casey Bodley <cbodley@redhat.com>
src/common/config_opts.h
src/os/MemStore.cc
src/os/MemStore.h