Rust LT Online #3 で発表したスライドです https://rust.connpass.com/event/209279/
KOBA789RustͰon-diskͳB+TreeΛ ࡞ͬͨͱ͖ͷࡉ͔ͳ
View Slide
KOBA789ݱࡏਐߦܗͰແ৬‣ 3VTUྺ͘Β͍‣ ී௨ʹΣϒαʔόʔΛॻ͍ͨΓ‣ %#.4Λॻ͍ͨΓ‣ ϒϥβͰಈ͘ճ࿏$"%Λॻ͍ͨΓ 8"4.λʔήοτ‣ ࣗ࡞ΩʔϘʔυͷ ϑΝʔϜΣΞΛॻ͍ͨΓ ͍ΘΏΔΈࠐΈ3VTU͓͢͢Ίͷࣄʹؔ͢Δใ ͍ͭͰܴ͍ͯ͠·͢https://gihyo.jp/magazine/wdpress/archive/2021/vol122ʲະঝࠂʳࡶࢽʹهࣄॻ͖·ͨ͠
RustͰon-diskͳB+TreeΛ ࡞ͬͨͱ͖ͷࡉ͔ͳࠓճͷλΠτϧ ʢ࠶ܝʣ
RustͰon-diskͳB+TreeΛ ࡞ͬͨͱ͖ͷࡉ͔ͳͱʁ
RustͰon-diskͳB+TreeΛ ࡞ͬͨͱ͖ͷࡉ͔ͳͱʁ" ༰ΛσΟεΫʹӬଓԽͰ͖ͨΓɺ ϝϞϦΑΓେ͖ͳ༰ΛσΟεΫ্Ͱѻ͑ͨΓ͢Δ #5SFF˞ಠࣗͷఆٛͰ͢
ϊʔυϊʔυ ϊʔυϊʔυ ϊʔυϊʔυ ϊʔυ ϊʔυ ϊʔυϊʔυ͜͏͍͏#5SFFΛߟ͑Δ
ϊʔυϊʔυϊʔυ ϊʔυϊʔυ ϊʔυϊʔυ ϊʔυϊʔυ ϊʔυͱΓ͋͑ͣ࣍ݩʹͭͿ͢
σΟεΫʢϑΝΠϧʣϊʔυϊʔυϊʔυ ϊʔυϊʔυ ϊʔυϊʔυ ϊʔυϊʔυ ϊʔυσΟεΫ͕͋Δͱ͢Δ
σΟεΫʢϑΝΠϧʣϊʔυϊʔυϊʔυ ϊʔυϊʔυ ϊʔυϊʔυ ϊʔυϊʔυ ϊʔυσΟεΫʹೖͬͨ
σΟεΫʢϑΝΠϧʣϊʔυϊʔυϊʔυ ϊʔυϊʔυ ϊʔυϊʔυ ϊʔυϊʔυ ϊʔυCPU#5SFFΛૢ࡞͍ͨ͠
σΟεΫʢϑΝΠϧʣϊʔυϊʔυϊʔυ ϊʔυϊʔυ ϊʔυϊʔυ ϊʔυϊʔυ ϊʔυCPU#5SFFΛૢ࡞͍ͨ͠σΟεΫΛಡΈॻ͖͢Δͷ͍͠ෆศ
ϝϞϦσΟεΫʢϑΝΠϧʣϊʔυϊʔυϊʔυ ϊʔυϊʔυ ϊʔυϊʔυ ϊʔυϊʔυ ϊʔυCPUϝϞϦʹόοϑΝΛ༻ҙ
ϝϞϦσΟεΫʢϑΝΠϧʣϊʔυϊʔυϊʔυ ϊʔυϊʔυ ϊʔυϊʔυ ϊʔυϊʔυ ϊʔυϊʔυ ϊʔυϊʔυ ϊʔυϊʔυCPU
ϝϞϦσΟεΫʢϑΝΠϧʣϊʔυϊʔυ ϊʔυϊʔυϊʔυϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυϊʔυ ϊʔυϊʔυ ϊʔυϊʔυCPUϊʔυͷҰ෦ΛϝϞϦ
ϝϞϦσΟεΫʢϑΝΠϧʣϊʔυϊʔυ ϊʔυϊʔυϊʔυϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυϊʔυ ϊʔυϊʔυ ϊʔυϊʔυCPUಡΈॻ͖ೖΕସ͑όοϑΝϓʔϧϚωʔδϟ
ϊʔυϊʔυ ϊʔυϊʔυ ϊʔυϊʔυ ϊʔυ ϊʔυ ϊʔυϊʔυҰ෦ͷϊʔυͷΈ͕ϝϞϦʹ͋Δ#5SFFͱ͍͑Δന͍ϊʔυσΟεΫʹ͔͠ͳ͍
ϝϞϦσΟεΫʢϑΝΠϧʣϊʔυϊʔυ ϊʔυϊʔυϊʔυϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυϊʔυ ϊʔυϊʔυ ϊʔυϊʔυCPUಡΈॻ͖ೖΕସ͑ͱ͜ΖͰɺ
ϝϞϦσΟεΫʢϑΝΠϧʣϊʔυϊʔυ ϊʔυϊʔυϊʔυϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυϊʔυ ϊʔυϊʔυ ϊʔυϊʔυCPUಡΈॻ͖ೖΕସ͑ϚϧνίΞΛ׆༻͍ͨ͠Ͱ͢ΑͶʁCPU CPU CPU
ϝϞϦσΟεΫʢϑΝΠϧʣϊʔυϊʔυ ϊʔυϊʔυϊʔυϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυϊʔυ ϊʔυϊʔυ ϊʔυϊʔυCPUར༻தͷϊʔυΛόοϑΝ͔Β͍ग़ͨ͠Γ͢Δͱ͍ͨΜͳ͜ͱʹCPU CPU CPUΛಡΈ͍ͨɻΛ͍ग़ͦ͏ͯίϥϊʔυར༻த
ϝϞϦσΟεΫʢϑΝΠϧʣϊʔυϊʔυ ϊʔυϊʔυϊʔυϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυϊʔυ ϊʔυϊʔυ ϊʔυϊʔυCPUར༻தͷϊʔυΛόοϑΝ͔Β͍ग़ͨ͠Γ͢Δͱ͍ͨΜͳ͜ͱʹCPU CPU CPUΛಡΈ͍ͨɻΛ͍ग़ͦ͏ͯίϥϊʔυར༻த͜ͷΜͷ σʔλߏɾΞϧΰϦζϜΛ 3VTUͰͲ͏͢Δ͔POEJTLಛ༗ͷ͕͋͠͞Δ
3VTUͰPOEJTLͳ#5SFFΛ࡞Δͱ͖ͷݒ೦ࣄ߲w όοϑΝϓʔϧϚωʔδϟͷ σʔλߏͱΞϧΰϦζϜw #5SFFͷϊʔυͷσʔλߏw #5SFFͷഉଞ੍ޚ
όοϑΝϓʔϧϚωʔδϟͷ σʔλߏͱΞϧΰϦζϜ
ར༻தͷϊʔυΛอޢ͢Δʹ$.6ͷߨٛͰΘΕ͍ͯΔ#VT5VC $ͱ͍͏࣮ͷ߹ϊʔυʢϖʔδʣʹΧϯλΛ ࣋ͬͯཧ͍ͯ͠Δhttps://github.com/cmu-db/bustub/blob/master/src/include/storage/page/page.hϐϯ 1JOʮར༻தʯͷҙຯ˞3VTUͷ1JOͱؔͳ͍
3VTUͰͲ͏͢Δ͔Ҋ$ಉ༷ʹΧϯλͰอޢw ڞ༗ϝϞϦΛॻ͖͑ΔͨΊɺ વͷΑ͏ʹVOTBGF͕ొw ઈରʹόάΒͤΔࣗ৴͔͠ͳ͍w ͜ΕͳΒ$Ͱॻ͚͍͍w ଈߦͰϘπ
3VTUͰͲ͏͢Δ͔Ҋ3X-PDLͰอޢw ར༻த4IBSFEMPDLΛ͓࣋ͬͯ͘w ͍ग़ͨ͘͠ͳͬͨΒ&YDMVTJWFMPDLΛऔΔw (VBSEܥͷߏମTUBUJD͡Όͳ͍ͷͰ औΓճ͕͠ѱ͍
3VTUͰͲ͏͢Δ͔Ҋ"SDͰอޢw "SDʹHFU@NVU NVU"SD5ͱ͍͏ ϝιου͕͋Δw ࢀরΧϯλ͕ͷͱ͖ʹ͚ͩNVU5͕औΕΔw όοϑΝϓʔϧͷʮϐϯʯͱ૬ੑ͕Αͦ͞͏ͳػೳw ͨͩ͠ϨγʔόNVUw όοϑΝϓʔϧશମΛอޢ͢Δ.VUFY͕͋ΔͷͰ Մมࢀর͕औΕΔ
#5SFFͷϊʔυͷ σʔλߏ
#5SFFͷϊʔυͷߏૉʹΔͱɺ͜͏
⚠ϊʔυσΟεΫʹ ॻ͖ग़ͤͳ͚ΕͳΒͳ͍ͪΖΜɺಡΈग़͠Ͱ͖ͳ͚ΕͳΒͳ͍
2ߏମΛσΟεΫʹ ॻ͖ग़͍ͨ͠ͱ͖ɺͲ͏͢Δʁ
2ߏମΛσΟεΫʹ ॻ͖ग़͍ͨ͠ͱ͖ɺͲ͏͢ΔʁTFSEF
2ߏମΛσΟεΫʹ ॻ͖ग़͍ͨ͠ͱ͖ɺͲ͏͢ΔʁTFSEFγϦΞϥΠζޙͷσʔλ͕Θ͔Βͳ͍͠ޮѱ͍ͷͰμϝ
2ߏମΛσΟεΫʹ ॻ͖ग़͍ͨ͠ͱ͖ɺͲ͏͢Δʁ"ͦͷ··ॻ͖ग़ͤΔ σʔλߏΛ͕Μ࣮ͬͯ͢Δ
ͦͷ··ॻ͖ग़ͤΔσʔλߏৗʹݻఆͷόΠτྻͷΈʹऩ·Δσʔλߏϊʔυ͖ͬ͞ొͨ͠ϊʔυ͘Μ
ͦͷ··ॻ͖ग़ͤΔσʔλߏৗʹݻఆͷόΠτྻͷΈʹऩ·Δσʔλߏ,#࣮͜͏͍͏େ͖͞
ͦͷ··ॻ͖ग़ͤΔσʔλߏৗʹݻఆͷόΠτྻͷΈʹऩ·Δσʔλߏ,#,FZ 7BMVF͜Ε,FZ7BMVFͷϖΞ
ͦͷ··ॻ͖ग़ͤΔσʔλߏৗʹݻఆͷόΠτྻͷΈʹऩ·Δσʔλߏ,#,FZ 7BMVF,FZ 7BMVF,FZ 7BMVF͞όϥόϥ
ͦͷ··ॻ͖ग़ͤΔσʔλߏৗʹݻఆͷόΠτྻͷΈʹऩ·Δσʔλߏ,#,FZ 7BMVF ,FZ 7BMVF ,FZ 7BMVF͜ΕΛͦͷ··ෑ͖٧ΊΔͱ
ͦͷ··ॻ͖ग़ͤΔσʔλߏৗʹݻఆͷόΠτྻͷΈʹऩ·Δσʔλߏ,#,FZ 7BMVF ,FZ 7BMVF ,FZ 7BMVFΦϑηοτִ͕ؒͰͳ͍ͷͰೋ୳ࡧͰ͖ͳ͍
ͦͷ··ॻ͖ग़ͤΔσʔλߏৗʹݻఆͷόΠτྻͷΈʹऩ·Δσʔλߏ,#,FZ 7BMVF,FZ 7BMVF,FZ 7BMVFΓ͠
ͦͷ··ॻ͖ग़ͤΔσʔλߏৗʹݻఆͷόΠτྻͷΈʹऩ·Δσʔλߏ,#,FZ 7BMVF ,FZ 7BMVF ,FZ 7BMVF,FZ7BMVFޙΖʹ٧Ίͯ
ͦͷ··ॻ͖ग़ͤΔσʔλߏৗʹݻఆͷόΠτྻͷΈʹऩ·Δσʔλߏ,#1US ,FZ 7BMVF ,FZ 7BMVF ,FZ 7BMVF1US 1USݻఆͷϙΠϯλΛ಄ʹฒΔ
ͦͷ··ॻ͖ग़ͤΔσʔλߏৗʹݻఆͷόΠτྻͷΈʹऩ·Δσʔλߏ,#1US ,FZ 7BMVF ,FZ 7BMVF ,FZ 7BMVF1US 1US͜ΕΛ3VTUͰॻ͘
ͱ͜ΖͰ͜ΕΛͲ͏ͬͯ Ωϟετ͢Δͷ͔
std::mem::transmute
std::mem::transmuteͦΜͳةݥͳͷ͏Θ͚ͳ͍
ศརDSBUFl[FSPDPQZzΞϥΠϝϯτͳͲΛߟྀͯ҆͠શʹܕΩϟετͰ͖Δw (PPHMFͷ'VDITJBͰΘΕ͍ͯΔͬΆ͍w ͍ํʹ͔ͳΓΫη͕͋Δw υΩϡϝϯτۃΊͯগͳ͍w αϯϓϧίʔυ'VDITJBͷωοτϫʔΫελοΫ
LayoutVerifiedͱ͍͏ εϚʔτϙΠϯλܦ༝Ͱૢ࡞͢Δnew_from_prefixϝιου ϔομͱϘσΟʹ͔Ε͍ͯΔ σʔλߏʹ͑Δ
1US ,FZ 7BMVF ,FZ 7BMVF ,FZ 7BMVF1US 1USOVN@TMPUTIFBEFS CPEZ
new_sliceϝιουͰ ϙΠϯλͷεϥΠεΛΓग़͍ͯ͠Δ
1US ,FZ 7BMVF ,FZ 7BMVF ,FZ 7BMVF1US 1USOVN@TMPUTQPJOUFSTIFBEFS CPEZ
1US ,FZ 7BMVF ,FZ 7BMVF ,FZ 7BMVF1US 1USOVN@TMPUTQPJOUFSTIFBEFS CPEZ͜ͷਤΛΑ͘ݟͯ΄͍͠
1US ,FZ 7BMVF ,FZ 7BMVF ,FZ 7BMVF1US 1USOVN@TMPUTQPJOUFSTIFBEFS CPEZQPJOUFSTCPEZΛआ༻͍ͯ͠Δ
1US ,FZ 7BMVF ,FZ 7BMVF ,FZ 7BMVF1US 1USOVN@TMPUTQPJOUFSTIFBEFS CPEZQPJOUFSTCPEZΛआ༻͍ͯ͠Δͭ·Γɺ,FZ7BMVFϖΞΛมߋ͢Δͱ͖ʹ ͍͍ͪͪQPJOUFSTΛख์͞ͳ͚ΕͳΒͳ͍ͩΔ͍ ʢ͔ͨ͠ͳ͠ʣ
#5SFFͷഉଞ੍ޚ
ϊʔυϊʔυ ϊʔυϊʔυ ϊʔυϊʔυ ϊʔυ ϊʔυ ϊʔυϊʔυCPU CPU
ϊʔυϊʔυ ϊʔυϊʔυ ϊʔυϊʔυ ϊʔυ ϊʔυ ϊʔυϊʔυCPU CPUModifyModify💥😩😩
ϊʔυϊʔυ ϊʔυϊʔυ ϊʔυϊʔυ ϊʔυ ϊʔυ ϊʔυϊʔυCPU CPUϩοΫ্͔ΒॱʹऔΔ
ϊʔυϊʔυ ϊʔυϊʔυ ϊʔυϊʔυ ϊʔυ ϊʔυ ϊʔυϊʔυϩοΫ্͔ΒॱʹऔΔCPU CPU
ϊʔυϊʔυ ϊʔυϊʔυ ϊʔυϊʔυ ϊʔυ ϊʔυ ϊʔυϊʔυϩοΫ͕औΕͨΒɺ্ͷϩοΫख์ͯ͠Α͍CPU CPU
ϊʔυϊʔυ ϊʔυϊʔυ ϊʔυϊʔυ ϊʔυ ϊʔυ ϊʔυϊʔυଞͷεϨου͕ಈ͚ͯฒྻ্͕͕ΔCPU CPU
ϊʔυϊʔυ ϊʔυϊʔυ ϊʔυϊʔυ ϊʔυ ϊʔυ ϊʔυϊʔυCPU CPUಉ༷ʹଓ͚Δ
ϊʔυϊʔυ ϊʔυϊʔυ ϊʔυϊʔυ ϊʔυ ϊʔυ ϊʔυϊʔυԼͷϊʔυ͕ᷓΕͦ͏ͳ߹ɺ্ͷϩοΫΛख์ͯ͠ͳΒͳ͍ ʢॻ͖ࠐΈͷ߹ʣCPU CPU
ϊʔυϊʔυ ϊʔυϊʔυ ϊʔυϊʔυ ϊʔυ ϊʔυ ϊʔυϊʔυCPU CPU͜ΕΛ3VTUͰ࣮͢Δ
#5SFFͷഉଞ੍ޚૉʹ࣮
#5SFFͷഉଞ੍ޚૉʹ࣮page: Arc>ro_page: RwLockReadGuard<_, Page>next_page: Arc>ro_next_page: RwLockReadGuard<_, Page>next_pageΛಈ͔͍͕ͨ͠かといってRwLockReadGuardΛ ख์͢Θ͚ʹ͍͔ͳ͍ro_page͕pageΛɺ ro_next_page͕next_pageΛ ࢀর͍ͯ͠ΔͷͰಈ͔ͤͳ͍
#5SFFͷഉଞ੍ޚૉʹ࣮page: Arc>ro_page: RwLockReadGuard<_, Page>next_page: Arc>ro_next_page: RwLockReadGuard<_, Page>next_pageΛಈ͔͍͕ͨ͠かといってRwLockReadGuardΛ ख์͢Θ͚ʹ͍͔ͳ͍ro_page͕pageΛɺ ro_next_page͕next_pageΛ ࢀর͍ͯ͠ΔͷͰಈ͔ͤͳ͍٧Έ
͜ΕΑ͋͘Δ4UBCMF"EESFTT"SDͷࢦ͢ϙΠϯλෆมͳΜ͔ͩΒNPWFͤͯ͘͞Εw PXOJOH@SFGΫϨʔτͳͲͰ ղܾ͕ࢼΈΒΕ͍ͯΔw ࠓճ3X-PDL3FBE(VBSEʹ ಛघͳϝιουΛੜͯ͠ճආ
0XOFE3X-PDL3FBE(VBSEΊͬͪΌVOTBGF͚ͩͲ͔ͨ͠ͳ͍
ࠓհͨ͠ίʔυ͍͍ͩͨ(JU)VCʹ͋ΔRQw IUUQTHJUIVCDPN,0#"RQw ϚϧνεϨουw ίʔυ͕ͱͯԚ͍SFMMZw IUUQTHJUIVCDPN,0#"SFMMZw γϯάϧεϨουw 8%#13&447PMͷͨΊʹ ॻ͖ԼΖͨ͠w ͪΐͬͱίʔυ͕៉ྷ
·ͱΊಈతͳσʔλߏΛ࣮͢Δͱ3VTUಛ༗ͷ͕ͯ͠͞Μ͜Γʂw "SDHFU@NVUͷΑ͏ͳϚΠφʔͳ ϝιουΛ͓ͬͯ͘ͱʹཱͭw TUEΫϨʔτΛ׆͔ͤΔΑ͏ʹ σʔλߏΛมܗ͢ΔεΩϧ͕ॏཁw ίϯύΠϧΤϥʔΛோΊΔ͚ͩͰͳ͘ɺ ϝϞϦͷ༷ࢠΛ૾͢Δw ͋Δ͖ϝϞϦͷߏ͔Β σʔλߏΛٯࢉ͢Δͷ͕ίπ