Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up for free
Rustでon-diskなB+Treeを作ったときの細かな話
KOBA789
May 19, 2021
Programming
10
1.1k
Rustでon-diskなB+Treeを作ったときの細かな話
Rust LT Online #3 で発表したスライドです
https://rust.connpass.com/event/209279/
KOBA789
May 19, 2021
Tweet
Share
More Decks by KOBA789
See All by KOBA789
音をアレする
koba789
0
380
メガネとBluetooth Low Energyでお喋りする
koba789
0
1.2k
音の出るCPUを作っている途中
koba789
5
3.9k
自宅サーバーでbottlerocketを動かしてk8sクラスタを組む
koba789
0
980
へんなOSを自宅で使う
koba789
0
110
Keyboard Firmware in Rust
koba789
0
470
Rust本番投入をあきらめるためのガイドライン
koba789
3
6.8k
Rubyの会社でRustを書くということ
koba789
3
2.6k
非同期ジョブと仲良くする
koba789
4
1.3k
Other Decks in Programming
See All in Programming
Milestoner
bkuhlmann
1
250
フロントエンドで 良いコードを書くために
t_keshi
3
1.7k
NGK2023S - OCaml最高! スマホ開発にも使えちゃう?!
haochenxie
0
120
Amazon QuickSightのアップデート -re:Invent 2022の復習&2022年ハイライト-
shogo452
0
250
Findy - エンジニア向け会社紹介 / Findy Letter for Engineers
findyinc
2
42k
Unity+C#で学ぶ! メモリレイアウトとvtableのすゝめ 〜動的ポリモーフィズムを実現する仕組み〜
rossam
1
370
Next.js 13 Layout / Streaming SSR 仕組み解説
sumiren
0
160
そうだ、10Gを引こう
mattenn
0
100
Functional Data Engineering - A Blueprint for adopting functional principles in data pipeline
vananth22
0
200
和暦を正しく扱うための暦の話
nagise
10
6.7k
PHPアプリケーションにおけるアーキテクチャメトリクスについて / Architecture Metrics in PHP Applications
isanasan
1
290
Hasura の Relationship と権限管理
karszawa
0
180
Featured
See All Featured
No one is an island. Learnings from fostering a developers community.
thoeni
12
1.5k
Why You Should Never Use an ORM
jnunemaker
PRO
49
7.9k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
224
50k
A Philosophy of Restraint
colly
193
15k
Agile that works and the tools we love
rasmusluckow
321
20k
Designing for Performance
lara
600
65k
Learning to Love Humans: Emotional Interface Design
aarron
263
38k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
239
19k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
270
12k
Side Projects
sachag
451
37k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
182
15k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
217
21k
Transcript
KOBA789 RustͰ on-diskͳB+TreeΛ ࡞ͬͨͱ͖ͷ ࡉ͔ͳ
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ʹ
[email protected]
NVU"SD5 ͱ͍͏ ϝιου͕͋Δ w ࢀরΧϯλ͕ͷͱ͖ʹ͚ͩNVU5͕औΕΔ
w όοϑΝϓʔϧͷʮϐϯʯͱ૬ੑ͕Αͦ͞͏ͳػೳ w ͨͩ͠ϨγʔόNVU w όοϑΝϓʔϧશମΛอޢ͢Δ.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 7BMVF
1US 1US ݻఆͷϙΠϯλΛ಄ʹฒΔ
ͦͷ··ॻ͖ग़ͤΔσʔλߏ ৗʹݻఆͷόΠτྻͷΈʹऩ·Δσʔλߏ ,# 1US ,FZ 7BMVF ,FZ 7BMVF ,FZ 7BMVF
1US 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 7BMVF 1US 1US
[email protected]
IFBEFS CPEZ
new_sliceϝιουͰ ϙΠϯλͷεϥΠεΛΓग़͍ͯ͠Δ
1US ,FZ 7BMVF ,FZ 7BMVF ,FZ 7BMVF 1US 1US
[email protected]
QPJOUFST IFBEFS CPEZ
1US ,FZ 7BMVF ,FZ 7BMVF ,FZ 7BMVF 1US 1US
[email protected]
QPJOUFST IFBEFS CPEZ ͜ͷਤΛΑ͘ݟͯ΄͍͠
1US ,FZ 7BMVF ,FZ 7BMVF ,FZ 7BMVF 1US 1US
[email protected]
QPJOUFST IFBEFS CPEZ QPJOUFSTCPEZΛआ༻͍ͯ͠Δ
1US ,FZ 7BMVF ,FZ 7BMVF ,FZ 7BMVF 1US 1US
[email protected]
QPJOUFST IFBEFS CPEZ QPJOUFSTCPEZΛआ༻͍ͯ͠Δ ͭ·Γɺ,FZ7BMVFϖΞΛมߋ͢Δͱ͖ʹ ͍͍ͪͪQPJOUFSTΛख์͞ͳ͚ΕͳΒͳ͍ ͩΔ͍ ʢ͔ͨ͠ͳ͠ʣ
# 5SFFͷഉଞ੍ޚ
ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ
CPU CPU
ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ
CPU CPU Modify Modify 💥 😩 😩
ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ
CPU CPU ϩοΫ্͔ΒॱʹऔΔ
ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ
ϩοΫ্͔ΒॱʹऔΔ CPU CPU
ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ
ϩοΫ্͔ΒॱʹऔΔ CPU CPU
ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ
ϩοΫ͕औΕͨΒɺ্ͷϩοΫख์ͯ͠Α͍ CPU CPU
ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ
ଞͷεϨου͕ಈ͚ͯฒྻ্͕͕Δ CPU CPU
ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ
CPU CPU ಉ༷ʹଓ͚Δ
ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ
Լͷϊʔυ͕ᷓΕͦ͏ͳ߹ɺ্ͷϩοΫΛख์ͯ͠ͳΒͳ͍ ʢॻ͖ࠐΈͷ߹ʣ CPU CPU
ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ ϊʔυ
CPU CPU ͜ΕΛ3VTUͰ࣮͢Δ
# 5SFFͷഉଞ੍ޚ ૉʹ࣮
# 5SFFͷഉଞ੍ޚ ૉʹ࣮
# 5SFFͷഉଞ੍ޚ ૉʹ࣮ page: Arc<RwLock<Page>> ro_page: RwLockReadGuard<_, Page>
next_page: Arc<RwLock<Page>> ro_next_page: RwLockReadGuard<_, Page> next_pageΛಈ͔͍͕ͨ͠ かといってRwLockReadGuardΛ ख์͢Θ͚ʹ͍͔ͳ͍ ro_page͕pageΛɺ ro_next_page͕next_pageΛ ࢀর͍ͯ͠ΔͷͰಈ͔ͤͳ͍
# 5SFFͷഉଞ੍ޚ ૉʹ࣮ page: Arc<RwLock<Page>> ro_page: RwLockReadGuard<_, Page>
next_page: Arc<RwLock<Page>> ro_next_page: RwLockReadGuard<_, Page> next_pageΛಈ͔͍͕ͨ͠ かといってRwLockReadGuardΛ ख์͢Θ͚ʹ͍͔ͳ͍ ro_page͕pageΛɺ ro_next_page͕next_pageΛ ࢀর͍ͯ͠ΔͷͰಈ͔ͤͳ͍ ٧Έ
͜ΕΑ͋͘Δ4UBCMF"EESFTT "SDͷࢦ͢ϙΠϯλෆมͳΜ͔ͩΒNPWFͤͯ͘͞Ε w
[email protected]
ΫϨʔτͳͲͰ ղܾ͕ࢼΈΒΕ͍ͯΔ w ࠓճ3X-PDL3FBE(VBSEʹ ಛघͳϝιουΛੜͯ͠ճආ
0XOFE3X-PDL3FBE(VBSE ΊͬͪΌVOTBGF͚ͩͲ͔ͨ͠ͳ͍
ࠓհͨ͠ίʔυ͍͍ͩͨ(JU)VCʹ͋Δ RQ w IUUQTHJUIVCDPN,0#"RQ w ϚϧνεϨου w ίʔυ͕ͱͯԚ͍ SFMMZ w
IUUQTHJUIVCDPN,0#"SFMMZ w γϯάϧεϨου w 8&# %#13&447PMͷͨΊʹ ॻ͖ԼΖͨ͠ w ͪΐͬͱίʔυ͕៉ྷ
·ͱΊ ಈతͳσʔλߏΛ࣮͢Δͱ3VTUಛ༗ͷ͕ͯ͠͞Μ͜Γʂ w "SD
[email protected]
ͷΑ͏ͳϚΠφʔͳ ϝιουΛ͓ͬͯ͘ͱʹཱͭ w TUEΫϨʔτΛ׆͔ͤΔΑ͏ʹ σʔλߏΛมܗ͢ΔεΩϧ͕ॏཁ
w ίϯύΠϧΤϥʔΛோΊΔ͚ͩͰͳ͘ɺ ϝϞϦͷ༷ࢠΛ૾͢Δ w ͋Δ͖ϝϞϦͷߏ͔Β σʔλߏΛٯࢉ͢Δͷ͕ίπ