نگاشت striping در RBD
در کتاب: فصل ۳۷
آزمایشگاه
نگاشت striping در RBD
اندازهٔ شیء، stripe_unit و stripe_count یک image و offset و طول یک I/O را تعیین کنید: ببینید به کدام شیءهای rbd_data و کجای آنها دست میزند.
۲۵۶۰شیء در حالت پر
۴ MiBobject_size
۱۶ MiBاندازهٔ object set
۴شیءهایی که این I/O به آنها دست میزند
blockno = ⌊off / su⌋ · stripeno = ⌊blockno / sc⌋ · stripepos = blockno % sc · objectsetno = ⌊stripeno / (os / su)⌋ · objectno = objectsetno × sc + stripepos · offset in object = (stripeno % (os / su)) × su + off % su
| 0 | 1 | 2 | 3 | |
|---|---|---|---|---|
| s0… | ||||
| s2… | ||||
| s4… | ||||
| s6… | ||||
| s8… | ||||
| s10… | ||||
| s12… | ||||
| s14… | ||||
| s16… | ||||
| s18… | ||||
| s20… | ||||
| s22… | ||||
| s24… | ||||
| s26… | ||||
| s28… | ||||
| s30… | ||||
| s32… | ||||
| s34… | ||||
| s36… | ||||
| s38… | ||||
| s40… | ||||
| s42… | ||||
| s44… | ||||
| s46… | ||||
| s48… | ||||
| s50… | ||||
| s52… | ||||
| s54… | ||||
| s56… | ||||
| s58… | ||||
| s60… | ||||
| s62… |
| شیء | offset در شیء | طول | buffer_extents |
|---|---|---|---|
rbd_data.10226b8b4567.0000000000000000 | 262144 | 65536 | [48576, 65536] |
rbd_data.10226b8b4567.0000000000000001 | 262144 | 65536 | [114112, 65536] |
rbd_data.10226b8b4567.0000000000000002 | 262144 | 65536 | [179648, 65536] |
rbd_data.10226b8b4567.0000000000000003 | 213568 | 103392 | [0, 48576] [245184, 54816] |
rbd create pool/img --size 10G --object-size ۴M --stripe-unit 64K --stripe-count 4مطابق با:
src/osdc/Striper.cc :: Striper::file_to_extentsاز بازهٔ image تا extentهای شیءStriper.cc :: get_num_objects, get_file_offset, object_truncate_sizeشمار شیءها و نگاشت وارونsrc/librbd/ImageCtx.cc :: ImageCtx::init (format_string "%s.%016llx")نام شیء دادهsrc/include/rbd_types.h :: RBD_DATA_PREFIX "rbd_data."پیشوند نامsrc/test/test_striper.cc :: the upstream test vectors used by tests/simsبردارهایی که آزمونها با آن مقایسه میکنند