زمین بازی CRUSH
آزمایشگاه
زمین بازی CRUSH
یک root، چند host و OSD بسازید، قاعده را انتخاب کنید و ببینید straw2 هر PG را کجا میگذارد؛ یک OSD را out یا down کنید یا وزنش را تغییر دهید و ببینید کدام PGها جابهجا میشوند.
۶۴ × ۳PG × نسخه
۹٫۹٪دادهای که تغییر آخر جابهجا کرد
۱۹PGهایی که مجموعهٔ upشان عوض شد
۰PGهایی با نسخهای کمتر از size
۰جای خالی (NONE)
تغییر آخر: osd.4 out شد. shardهای جابهجاشده در فهرست برجسته شدهاند.
$ ceph osd map pool1 rbd_data.10226b8b4567.0000000000000000ceph_str_hash_rjenkins → 0x87bd7b9a · ceph_stable_mod(·, 64, 63) → pg 1.1a · pps 0x8d2145b9 · up [4,2,8] p4
PG ← مجموعهٔ up (۶۴ PG؛ primary زیرخطدار)
- 1.0[0,6,5]
- 1.1[7,4,0]
- 1.2[4,7,0]
- 1.3[4,8,2]
- 1.4[1,8,5]
- 1.5[4,8,0]
- 1.6[6,4,2]
- 1.7[1,7,5]
- 1.8[6,0,4]
- 1.9[8,4,2]
- 1.a[1,5,7]
- 1.b[1,8,5]
- 1.c[6,5,2]
- 1.d[7,4,2]
- 1.e[1,8,4]
- 1.f[6,2,4]
- 1.10[5,2,8]
- 1.11[4,8,0]
- 1.12[0,6,5]
- 1.13[4,6,1]
- 1.14[5,8,1]
- 1.15[8,5,2]
- 1.16[5,0,6]
- 1.17[8,0,5]
- 1.18[6,2,4]
- 1.19[6,0,4]
- 1.1a[4,2,8]
- 1.1b[8,1,4]
- 1.1c[8,4,1]
- 1.1d[6,0,5]
- 1.1e[8,4,0]
- 1.1f[8,5,2]
- 1.20[2,6,5]
- 1.21[6,0,4]
- 1.22[2,4,6]
- 1.23[0,5,7]
- 1.24[0,4,6]
- 1.25[8,5,0]
- 1.26[1,4,6]
- 1.27[1,7,5]
- 1.28[5,7,0]
- 1.29[8,2,4]
- 1.2a[5,2,6]
- 1.2b[8,0,4]
- 1.2c[7,0,4]
- 1.2d[2,7,4]
- 1.2e[6,2,4]
- 1.2f[0,4,6]
- 1.30[6,5,0]
- 1.31[0,6,4]
- 1.32[0,6,4]
- 1.33[4,6,2]
- 1.34[8,0,5]
- 1.35[8,2,4]
- 1.36[7,0,4]
- 1.37[4,7,0]
- 1.38[6,4,2]
- 1.39[0,5,6]
- 1.3a[0,8,4]
- 1.3b[4,1,6]
- 1.3c[5,6,0]
- 1.3d[5,8,2]
- 1.3e[5,1,7]
- 1.3f[7,4,1]
مطابق با:
src/crush/mapper.c :: crush_do_ruleاجرای گامهای قاعده (take، chooseleaf، emit)src/crush/mapper.c :: crush_choose_firstn, crush_choose_indepحلقههای انتخاب replicated (firstn) و EC (indep) با تلاش دوبارهsrc/crush/mapper.c :: bucket_straw2_choose, generate_exponential_distribution, crush_lnstraw2: بزرگترین ln(hash)/weight برنده استsrc/crush/mapper.c :: is_outبررسی reweight که OSD خارجشده را رد میکندsrc/crush/hash.c :: crush_hash32_rjenkins1_2, _3hash جنکینز که CRUSH به کار میبردsrc/osd/osd_types.cc :: pg_pool_t::raw_pg_to_pps, hash_keyبذر PG که وارد CRUSH میشودsrc/include/rados.h :: ceph_stable_modنگاشت hash شیء به PG وقتی pg_num توانی از ۲ نیستsrc/common/ceph_hash.cc :: ceph_str_hash_rjenkinshash نام شیءsrc/osd/OSDMap.cc :: _pg_to_raw_osds, _raw_to_up_osdsاز مجموعهٔ خام تا مجموعهٔ up (OSDهای down حذف یا NONE میشوند)src/crush/CrushWrapper.cc :: add_simple_rule_at, insert_item; CrushWrapper.h :: set_tunables_jewelقاعدهای که ceph osd pool create میسازد و tunables نسخهٔ jewel