เบเบฒเบโเปเบโเบเบปเบโเบเบงเบฒเบกโเบเบตเปโเปเบเปโเบเบฐโเบเบฝเบกโเบชเปเบฒโเบฅเบฑเบโเบเบฑเบโเบฎเบฝเบโเบซเบผเบฑเบโเบชเบนเบโ
เบเปเบญเบเบซเบเปเบฒเบเบตเป, เบเปเบฒเบเบฐเปเบเบปเปเบฒเปเบเปเปเบงเบปเปเบฒเบเปเบฝเบงเบเบฑเบเบงเบดเบเบตเบเบฒเบเบเบปเบเบชเบญเบเปเบฅเบฐเปเบเบตเบเปเบเป Hugepages เปเบ Linux.
เบเบปเบเบเบงเบฒเบกเบเบตเปเบเบฐเปเบเบฑเบเบเบฐเปเบซเบเบเบเบฝเบเปเบเปเบเปเบฒเบซเบฒเบเบงเปเบฒเบเปเบฒเบเบเบปเบงเบเบดเบเปเบฅเปเบงเบกเบตเบชเบฐเบเบฒเบเบเบตเปเบเบตเปเบเบฐเบเปเบฒเปเบเป Hugepages. เบเปเบฒเบเบฐเปเบเบปเปเบฒเปเบเปเบเบปเบเบเบฑเบเบซเบผเบฒเบเปเบเบปเบเบเบตเปเบเบทเบเบซเบฅเบญเบเบฅเบงเบเปเบเบเบเบงเบฒเบกเบชเบปเบเปเบชเบเปเบฒเบเบเบตเป Hugepages เบเบฐเบเบฑเบเบเบธเบเบเบปเบเบเบฐเบฅเบดเบเบขเปเบฒเบเบกเบฐเบซเบฑเบเบชเบฐเบเบฑเบ. เบขเปเบฒเบเปเบเบเปเบเบฒเบก, hugepaging เปเบเบฑเบเบซเบปเบงเบเปเปเบเบตเปเบชเบฑเบเบชเบปเบเปเบฅเบฐเบชเบฒเบกเบฒเบเบซเบผเบธเบเบฅเบปเบเบเบฐเบชเบดเบเบเบดเบเบฒเบเบเปเบฒเบซเบฒเบเบงเปเบฒเบเบทเบเบเปเบฒเปเบเปเบเปเปเบเบทเบเบเปเบญเบ.
เบชเปเบงเบเบเบต 1: เบเบฒเบเบเบงเบเบชเบญเบเบงเปเบฒเปเปเบฒเปเบซเบเปเบเบทเบเปเบเบตเบเปเบเปเปเบ Linux (เบเบปเปเบเบชเบฐเบเบฑเบ เบเบตเปเบเบตเป )
เบเบฑเบเบซเบฒ:
เบเปเบฒเบเบเปเบฒเปเบเบฑเบเบเปเบญเบเบเบงเบเปเบเบดเปเบเบงเปเบฒ HugePages เบเบทเบเปเบเบตเบเปเบเปเบขเบนเปเปเบเบฅเบฐเบเบปเบเบเบญเบเบเปเบฒเบ.
เบเบฒเบเปเบเปเปเบ:
เบกเบฑเบเบเปเบฒเบเบเบฒเบเบซเบผเบฒเบ:
cat /sys/kernel/mm/transparent_hugepage/enabled
เบเปเบฒเบเบเบฐเปเบเปเบฎเบฑเบเบเบฒเบเบชเบดเปเบเบเบฒเบเบขเปเบฒเบเปเบเบฑเปเบเบเบตเป:
always [madvise] never
เบเปเบฒเบเบเบฐเปเบซเบฑเบเบฅเบฒเบเบเบฒเบเบเบฒเบเปเบฅเบทเบญเบเบเบตเปเบกเบต (เบชเบฐเปเบซเบกเบต, madvise, เบเปเปเปเบเบตเบ), เปเบฅเบฐเบเบฒเบเปเบฅเบทเบญเบเบเบตเปเปเบเปเปเบเบเบฑเบเบเบธเบเบฑเบเบเบฐเบเบทเบเบซเบธเปเบกเบขเบนเปเปเบเบงเบปเบเปเบฅเบฑเบ (เปเบเบเบเปเบฒเปเบฅเบตเปเบกเบเบปเปเบ Madvise).
Madvise เปเบฒเบ เบเบงเบฒเบกเบงเปเบฒ transparent hugepages
เปเบเบตเบเปเบเปเบเบฝเบเปเบเปเบชเปเบฒเบฅเบฑเบเบเบทเปเบเบเบตเปเบซเบเปเบงเบเบเบงเบฒเบกเบเปเบฒเบเบตเปเบเบฑเบเปเบเบเบฎเปเบญเบเบเปเปเบซเปเบกเบตเบซเบเปเบฒเบเบฐเบซเบเบฒเบเปเบซเบเปเปเบเบเปเบเป
เบชเบฐเปเบซเบกเบตเปเบ เปเบฒเบ เบเบงเบฒเบกเบงเปเบฒ transparent hugepages
เปเบเบตเบเปเบเปเบเบฒเบเบชเบฐเปเปเบตเบชเปเบฒเบฅเบฑเบเบเบฐเบเบงเบเบเบฒเบเบเบฑเบเปเบปเบ. เบเบตเปเบเบปเบเบเบฐเบเบดเปเบฅเปเบงเบเบฑเบเบเบธเบเบเบฐเบชเบดเบเบเบดเบเบฒเบ, เปเบเปเบเปเบฒเบซเบฒเบเบงเปเบฒเบเปเบฒเบเบกเบตเบเปเบฅเบฐเบเบตเบเบฒเบเบเปเบฒเปเบเปเบเบตเปเบเบฐเบเบงเบเบเบฒเบเบเปเบฒเบเบงเบเบซเบผเบฒเบเบเปเบฒเบฅเบฑเบเบเปเบฅเบดเปเบเบเบเปเบฒเบเบงเบเบเบฐเบซเบเบฒเบเบเปเบญเบเบเบญเบเบซเบเปเบงเบเบเบงเบฒเบกเบเปเบฒ, เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบเบเบฒเบเปเบซเบผเบเบซเบเปเบงเบเบเบงเบฒเบกเบเปเบฒเปเบเบเบฅเบงเบกเบชเบฒเบกเบฒเบเปเบเบตเปเบกเบเบถเปเบเบขเปเบฒเบเบซเบผเบงเบเบซเบผเบฒเบ.
เบเปเปเปเบเบตเบ เปเบฒเบ เบเบงเบฒเบกเบงเปเบฒ transparent hugepages
เบเบฐเบเปเปเบเบทเบเบฅเบงเบกเปเบเบปเปเบฒเปเบเบดเบเปเบกเปเบเบงเปเบฒเบเบฐเบเบทเบเบฎเปเบญเบเบเปเปเบเบเปเบเป madvise. เปเบเบทเปเบญเบเบญเบเบซเบฒเบเปเปเบกเบนเบเปเบเบตเปเบกเปเบเบตเบก, เบเบดเบเบเปเป
เบงเบดเบเบตเบเบฒเบเบเปเบฝเบเบเปเบฒเปเบฅเบตเปเบกเบเบปเปเบ
Option 1: เบเปเบฝเบเปเบเบเปเบเบเบเบปเบ sysfs
(เบซเบผเบฑเบเบเบฒเบ reboot เบเบปเบงเบเปเบฒเบเบปเบเบเบฒเบเบเบฐเบเบฑเบเบเบทเบเปเบเบเปเบฒเปเบฅเบตเปเบกเบเบปเปเบเบเบญเบเบกเบฑเบ):
echo always >/sys/kernel/mm/transparent_hugepage/enabled
echo madvise >/sys/kernel/mm/transparent_hugepage/enabled
echo never >/sys/kernel/mm/transparent_hugepage/enabled
Option 2: เบเปเบฝเบเบเปเบฒเปเบฅเบตเปเบกเบเบปเปเบเบเบญเบเบฅเบฐเบเบปเบเปเบเบเบเบฒเบเบฅเบงเบเบฅเบงเบก kernel เบเบทเบเปเปเปเบเปเบงเบเบเบฒเบเบเบฑเปเบเบเปเบฒเบเบตเปเบเปเบฝเบเปเบเบ (เบเบปเบงเปเบฅเบทเบญเบเบเบตเปเบเบทเบเปเบเบฐเบเบณเบเบฝเบเปเบเปเบเปเบฒเปเบเบปเปเบฒเบเบณเบฅเบฑเบเปเบเป kernel เปเบเบเบเบณเบเบปเบเปเบญเบ):
- เปเบเบทเปเบญเบเบฑเปเบเปเบเบฑเบเบเปเบฒเปเบฅเบตเปเบกเบเบปเปเบเบชเบฐเปเปเบต, เปเบซเปเปเบเป:
CONFIG_TRANSPARENT_HUGEPAGE_ALWAYS=y # Comment out CONFIG_TRANSPARENT_HUGEPAGE_MADVISE=y
- เปเบเบทเปเบญเบเบฑเปเบ madvise เปเบเบฑเบเบเปเบฒเปเบฅเบตเปเบกเบเบปเปเบ, เปเบซเปเปเบเป:
CONFIG_TRANSPARENT_HUGEPAGE_MADVISE=y # Comment out CONFIG_TRANSPARENT_HUGEPAGE_ALWAYS=y
เบชเปเบงเบเบเบต 2: เบเปเปเบเบตเปเบฅเบฐเบเปเปเปเบชเบเบเบญเบ HugePages
เบเบงเบเปเบฎเบปเบฒเบเบฐเบเบฐเบเบฒเบเบฒเบกเบญเบฐเบเบดเบเบฒเบเบเปเปเบเบต, เบเปเปเปเบชเบ เปเบฅเบฐ เปเบเบญเบฑเบเบเบฐเบฅเบฒเบเบเบตเปเปเบเบฑเบเปเบเปเบเปเบเบญเบเบเบฒเบเปเบเป Hugepages. เบเบฑเบเบเบฑเปเบเปเบเปเบเบปเบเบเบงเบฒเบกเบเบตเปเบชเบฑเบเบชเบปเบเบเบฒเบเบเปเบฒเบเปเบเบฑเบเปเบเปเบฅเบขเบตเปเบฅเบฐ pedantic เบญเบฒเบเบเบฐเบเบฒเบเบเบตเปเบเบฐเปเบเบปเปเบฒเปเบเบชเปเบฒเบฅเบฑเบเบเบนเปเบเบตเปเบเบทเบเบซเบผเบญเบเบฅเบงเบเปเบเบเบงเบฒเบกเบเบดเบเบเบญเบ Hugepages เปเบกเปเบ panacea, เบเปเบฒเบเบฐเปเบเบปเปเบฒเบเบฐเปเบชเบเบชเบฐเบฅเบฐเบเบงเบฒเบกเบเบทเบเบเปเบญเบเปเบเบทเปเบญเบเบงเบฒเบกเบเปเบฒเบเบเบฒเบ. เบกเบฑเบเปเบเบฑเบเบกเบนเบเบเปเบฒเบเบตเปเบเบทเปเปเบงเปเบงเปเบฒเบซเบผเบฒเบเบซเบปเบงเบเปเปเปเบกเปเบเบชเบฑเบเบชเบปเบเปเบเปเปเปเบฅเบฐเบเบฑเปเบเบเบฑเปเบเบเบถเปเบเบเปเบฒเบเบเบฒเบเบซเบผเบฒเบ.
เบเบฐเบฅเบธเบเบฒเบชเบฑเบเปเบเบเบงเปเบฒเบเบงเบเปเบฎเบปเบฒเบเปเบฒเบฅเบฑเบเปเบงเบปเปเบฒเบเปเบฝเบงเบเบฑเบเบฅเบฐเบเบปเบ 64-bit x86 เบเบตเปเปเบเป Linux, เปเบฅเบฐเบเปเบญเบเบเบฝเบเปเบเปเบชเบปเบกเบกเบธเบเบงเปเบฒเบฅเบฐเบเบปเบเบชเบฐเบซเบเบฑเบเบชเบฐเบซเบเบนเบเบเบฐเบซเบเบฒเบเปเบซเบเปเบเบตเปเปเบเปเบเปเบช (เปเบเบทเปเบญเบเบเบฒเบเบงเปเบฒเบกเบฑเบเบเปเปเปเบกเปเบเบเปเปเปเบชเบเบเบตเป hugepages เบเปเปเปเบเปเบเบทเบเบเบฝเบเบเบฑเบ), เปเบเบฑเปเบเบเบฝเบงเบเบฑเบเบเบฑเบเปเบเบทเบญเบเบเบธเบ Linux เบเบตเปเบเบฑเบเบชเบฐเปเบซเบก. เบชเบฐเบเบฒเบเปเบงเบเบฅเปเบญเบก.
เบเปเบฒเบเบฐเปเบเบปเปเบฒเบเบฐเบเบฑเบเบเบดเบเบเปเบฒเบญเบฐเบเบดเบเบฒเบเบเปเบฒเบเบงเบดเบเบฒเบเบฒเบเปเบเบตเปเบกเปเบเบตเบกเปเบเบเบฒเบเปเบเบทเปเบญเบกเบเปเปเบเปเบฒเบเบฅเบธเปเบกเบเบตเป.
เปเปเบงเบเบเบงเบฒเบกเบเบณเบชเบฐเปเปเบทเบญเบ
เบเปเบฒเบเปเบฒเบเปเบเบฑเบเปเบเบฅเปเบเบฅเบก C++, เบเปเบฒเบเบฎเบนเปเบงเปเบฒเบงเบฑเบเบเบธเปเบเบซเบเปเบงเบเบเบงเบฒเบกเบเปเบฒเบกเบตเบเบตเปเบขเบนเปเบชเบฐเปเบเบฒเบฐ (เบเปเบฒเบเบปเบงเบเบตเป).
เบขเปเบฒเบเปเบเบเปเบเบฒเบก, เบเบตเปเบขเบนเปเปเบซเบผเบปเปเบฒเบเบตเปเบเปเปเบเปเบฒเปเบเบฑเบเบเปเบญเบเบชเบฐเบเปเบญเบเปเบเบดเบเบเบตเปเบขเบนเปเบเบฒเบเบเปเบฒเบเบฎเปเบฒเบเบเบฒเบเปเบเบซเบเปเบงเบเบเบงเบฒเบกเบเปเบฒ (เบเบตเปเบขเบนเป RAM). เบเบงเบเปเบเบปเบฒเปเบเบฑเบเบเบปเบงเปเบเบเบเบตเปเบขเบนเปเปเบเบซเบเปเบงเบเบเบงเบฒเบกเบเปเบฒ virtual. เปเบเปเบเบเปเบเบตเบกเบตเปเบกเบเบนเบ MMU เบเบดเปเบชเบ (เบซเบเปเบงเบเบเบฒเบเบเบธเปเบกเบเบญเบเบซเบเปเบงเบเบเบงเบฒเบกเบเปเบฒ) เบเบตเปเบเปเบงเบเปเบซเป kernel เปเบเบเบเบตเปเบซเบเปเบงเบเบเบงเบฒเบกเบเปเบฒ virtual เบเบฑเบเบชเบฐเบเบฒเบเบเบตเปเบเบฒเบเบเปเบฒเบเบฎเปเบฒเบเบเบฒเบ.
เบงเบดเบเบตเบเบฒเบเบเบตเปเบกเบตเบเปเปเบเบตเบซเบผเบฒเบ, เปเบเปเบชเบดเปเบเบเบตเปเบชเปเบฒเบเบฑเบเบเบตเปเบชเบธเบเปเบกเปเบ:
- เบเบฒเบเบเบฐเบเบดเบเบฑเบ (เบชเปเบฒเบฅเบฑเบเปเบซเบเบเบปเบเบเปเบฒเบเป);
- เบเบฒเบเปเบเบเปเบเบเบเบฒเบ, เบเบฑเปเบเปเบกเปเบ, เบเปเปเบกเบตเปเบเบฅเปเบเบฅเบกเปเบเบชเบฒเบกเบฒเบเบญเปเบฒเบเบเบฒเบเบเบงเบฒเบกเบเบปเบเบเปเบฒเบเบญเบเปเบเปเบเบผเบกเบญเบทเปเบ.
เปเปเบฒเปเบกเปเบเบซเบเบฑเบ?
เบซเบเปเบงเบเบเบงเบฒเบกเบเปเบฒ virtual เปเบเปเบเบญเบญเบเปเบเบฑเบเบซเบเปเบฒ. เปเบเปเบฅเบฐเบซเบเปเบฒเบเบตเปเปเบซเปเปเบซเบฑเบเปเบเบดเบเบเบงเบฒเบกเบเบปเบเบเปเบฒเบเบฒเบเบเปเบฒเบเบฎเปเบฒเบเบเบฒเบเบชเบฐเปเบเบฒเบฐ, เบกเบฑเบเบชเบฒเบกเบฒเบเบเบตเปเปเบเบซเบฒเบเบทเปเบเบเบตเปเปเบ RAM, เบซเบผเบทเบกเบฑเบเบชเบฒเบกเบฒเบเบเบตเปเปเบเบซเบฒเบเบตเปเบขเบนเปเบเบตเปเบเบทเบเบกเบญเบเบซเบกเบฒเบเปเบซเปเบเบฑเบเบญเบธเบเบฐเบเบญเบเบเบฒเบเบเปเบฒเบเบฎเปเบฒเบเบเบฒเบเปเบเบฑเปเบเบเบฑเบเบงเบตเบเบตเปเบญ.
เบซเบเปเบฒเบชเปเบงเบเปเบซเบเปเบเบตเปเบเปเบฒเบเบเบฑเบเบเบฒเบเบเบฑเบเบเบธเบเบเบตเป RAM เบซเบผเบทเบเบทเบเบเปเบฝเบ, เบเบถเปเบเบซเบกเบฒเบเบเบงเบฒเบกเบงเปเบฒเบเบงเบเบกเบฑเบเบเบทเบเปเบเบฑเบเปเบงเปเปเบเบฎเบฒเบเปเบเบซเบผเบท SSD เบเบญเบเบเปเบฒเบ. kernel เบเบฑเบเบเบฒเบเบฎเบนเบเปเบเบเบเบฒเบเบเปเบฒเบเบฎเปเบฒเบเบเบฒเบเบเบญเบเปเบเปเบฅเบฐเบซเบเปเบฒ. เบเปเบฒเบซเบเปเบฒ spoofed เบเบทเบเปเบเบปเปเบฒเปเบเบดเบ, kernel เบเบฐเบขเบธเบ thread เบเบตเปเบเบฐเบเบฒเบเบฒเบกเปเบเบปเปเบฒเปเบเบดเบเบซเบเปเบงเบเบเบงเบฒเบกเบเปเบฒ, เบญเปเบฒเบเบซเบเปเบฒเบเบฒเบเบฎเบฒเบเปเบ / SSD เปเบเบปเปเบฒเปเบเปเบ RAM, เปเบฅเบฐเบซเบผเบฑเบเบเบฒเบเบเบฑเปเบเบชเบทเบเบเปเปเบเปเบฒเปเบเบตเบเบเบฒเบ thread.
เบเบฐเบเบงเบเบเบฒเบเบเบตเปเปเบกเปเบเปเบเปเบเปเบช, เบเบถเปเบเบซเบกเบฒเบเบเบงเบฒเบกเบงเปเบฒเบกเบฑเบเบเปเปเบเปเบฒเปเบเบฑเบเบเปเบญเบเบญเปเบฒเบเปเบเบเบเบปเบเบเบฒเบ HDD / SSD. เบเบฐเบซเบเบฒเบเบเบญเบเบซเบเปเบฒเบเบปเบเบเบฐเบเบดเปเบกเปเบ 4096 bytes. เบเบฐเปเบฒเบเปเปเบฒเปเบซเบเปเปเบกเปเบ 2 megabytes.
Translation-associative buffer (TLB)
เปเบกเบทเปเบญเปเบเบเบเบฒเบเปเบเบปเปเบฒเปเบเบดเบเบซเบเปเบฒเบเบญเบเบซเบเปเบงเบเบเบงเบฒเบกเบเปเบฒ, CPU เบเปเบญเบเบฎเบนเปเบงเปเบฒเบซเบเปเบฒเบเบฒเบเบเปเบฒเบเบฎเปเบฒเบเบเบฒเบเบเบตเปเบเบฐเบญเปเบฒเบเบเปเปเบกเบนเบเบเบฒเบ (เบเบฑเปเบเปเบกเปเบ, เบกเบตเปเบเบเบเบตเปเบเบตเปเบขเบนเป virtual).
kernel เบกเบตเปเบเบเบชเปเบฒเบเบเปเปเบกเบนเบ (เบเบฒเบเบฐเบฅเบฒเบเบซเบเปเบฒ) เบเบตเปเบกเบตเบเปเปเบกเบนเบเบเบฑเบเบซเบกเบปเบเบเปเบฝเบงเบเบฑเบเบซเบเปเบฒเบเบตเปเบเบทเบเบเปเบฒเปเบเป. เบเบฒเบเบเปเบฒเปเบเปเปเบเบเบชเปเบฒเบเบเปเปเบกเบนเบเบเบตเป, เบเปเบฒเบเบชเบฒเบกเบฒเบเปเบเบเบเบตเปเบเบตเปเบขเบนเป virtual เบเบฑเบเบเบตเปเบขเบนเปเบเบฒเบเบเปเบฒเบเบฎเปเบฒเบเบเบฒเบ.
เบขเปเบฒเบเปเบเบเปเบเบฒเบก, เบเบฒเบเบฐเบฅเบฒเบเบซเบเปเบฒเปเบกเปเบเบเปเบญเบเบเปเบฒเบเบชเบฑเบเบชเบปเบเปเบฅเบฐเบเปเบฒ, เบเบฑเปเบเบเบฑเปเบเบเบงเบเปเบฎเบปเบฒเบเปเปเบชเบฒเบกเบฒเบเบงเบดเปเบเบฒเบฐเปเบเบเบชเปเบฒเบเบเปเปเบกเบนเบเบเบฑเบเบซเบกเบปเบเบเบธเบเบเบฑเปเบเบเบตเปเบเบฐเบเบงเบเบเบฒเบเปเบเบปเปเบฒเปเบเบดเบเบซเบเปเบงเบเบเบงเบฒเบกเบเปเบฒ.
เปเบเบเบเบต, เปเบเปเบเบเปเบเบตเบเบญเบเบเบงเบเปเบฎเบปเบฒเบกเบต TLB เบเบตเปเปเบเบฑเบเบเปเปเบกเบนเบเปเบเบเบเบตเปเบฅเบฐเบซเบงเปเบฒเบเบเบตเปเบขเบนเป virtual เปเบฅเบฐเบเบฒเบเบเปเบฒเบเบฎเปเบฒเบเบเบฒเบ. เบเบตเปเบซเบกเบฒเบเบเบงเบฒเบกเบงเปเบฒเปเบเบดเบเปเบกเปเบเบงเปเบฒเบเบงเบเปเบฎเบปเบฒเบเปเบฒเปเบเบฑเบเบเปเบญเบเปเบเปเปเบเบเบเบฒเบเบฐเบฅเบฒเบเบซเบเปเบฒเปเบเบเบงเบฒเบกเบเบฐเบเบฒเบเบฒเบกเปเบเบเบฒเบเปเบเบปเปเบฒเปเบเบดเบเบเบฑเปเบเบเปเบฒเบญเบดเบ, เบเบธเบเปเบเบฒเบเปเบเบปเปเบฒเปเบเบดเบเบเปเปเปเบเปเบเบซเบเปเบฒเบชเบฒเบกเบฒเบเบเบทเบเบเบฑเบเบเบฒเบเบขเบนเปเปเบ TLB, เบญเบฐเบเบธเบเบฒเบเปเบซเปเบเปเบฒเปเบเบตเบเบเบฒเบเปเบเปเปเบง.
เปเบเบทเปเบญเบเบเบฒเบเบงเปเบฒเบกเบฑเบเบเบทเบเบเบฐเบเบดเบเบฑเบเปเบเบฑเบเบญเบธเบเบฐเบเบญเบเบเบฒเบเบเปเบฒเบเบฎเปเบฒเบเบเบฒเบ (เปเบเบดเปเบเปเบฎเบฑเบเปเบซเปเบกเบฑเบเปเบงเปเบเบชเบฐเบเบฒเบเบเบตเปเบเปเบฒเบญเบดเบ), เบเบงเบฒเบกเบชเบฒเบกเบฒเบเบเบญเบเบกเบฑเบเปเบกเปเบเบเปเบฒเบเบฑเบ. เบเบฑเปเบเบเบฑเปเบเบเปเบฒเบเปเบฒเบเบเปเบญเบเบเบฒเบเปเบเบปเปเบฒเบซเบฒเบซเบเปเบฒเบซเบผเบฒเบ, TLB เบเบฐเบเปเปเบชเบฒเบกเบฒเบเปเบเบฑเบเบฎเบฑเบเบชเบฒเปเบเบเบเบตเปเบชเปเบฒเบฅเบฑเบเบเบงเบเบกเบฑเบเบเบฑเบเบซเบกเบปเบ, เปเบเบดเปเบเปเบฎเบฑเบเปเบซเปเปเบเบผเปเบเบผเบกเบเบญเบเบเปเบฒเบเปเบฎเบฑเบเบงเบฝเบเบเปเบฒเบฅเบปเบเบซเบผเบฒเบ.
Hugepages เบกเบฒเบเบนเปเปเบ
เบเบฑเปเบเบเบฑเปเบเบเบงเบเปเบฎเบปเบฒเบชเบฒเบกเบฒเบเปเบฎเบฑเบเปเบเบงเปเบเปเบเบทเปเบญเบซเบผเบตเบเปเบงเบฑเปเบเบเบฒเบ overflow TLB? (เบเบงเบเปเบฎเบปเบฒเบชเบปเบกเบกเบธเบเบงเปเบฒเปเบเบเบเบฒเบเบเบฑเบเบเปเบญเบเบเบฒเบเบเปเบฒเบเบงเบเบซเบเปเบงเบเบเบงเบฒเบกเบเปเบฒเบเบฝเบงเบเบฑเบ).
เบเบตเปเปเบกเปเบเบเปเบญเบเบเบตเป Hugepages เปเบเบปเปเบฒเบกเบฒ. เปเบเบเบเบตเปเบเบฐเปเบเบฑเบ 4096 bytes เบเบตเปเบเปเบญเบเบเบฒเบเบเบฝเบเปเบเปเบซเบเบถเปเบ TLB entry, เบซเบเบถเปเบ TLB entry เบเบฐเบเบธเบเบฑเบเบชเบฒเบกเบฒเบเบเบตเปเปเบซเปเปเบซเบฑเบเปเบเบดเบ 2 megabytes เบเบตเปเบเบดเปเบเปเบซเบเป. เปเบซเปเบชเบปเบกเบกเบธเบเบงเปเบฒ TLB เบกเบต 512 เบฅเบฒเบเบเบฒเบ, เบเบตเปเบเบตเปเปเบเบเบเปเปเบกเบตเบเบฒเบ Hugepages เบเบงเบเปเบฎเบปเบฒเบชเบฒเบกเบฒเบเบเบฑเบเบเบนเปเปเบเป:
4096 bโ
512=2 MB
เปเบฅเปเบงเบเบงเบเปเบฎเบปเบฒเบเบฐเบเบฝเบเบเบฝเบเบเบฑเบเปเบเบปเบฒเปเบเบปเปเบฒเปเบเปเปเบเบงเปเบ:
2 MBโ
512=1 GB
เบเบตเปเปเบกเปเบเปเบซเบเบเบปเบเบเบตเปเบงเปเบฒ Hugepages เปเบกเปเบเบซเบเปเบฒเบซเบงเบฒเบเบชเบฝเบง. เบเบงเบเปเบเบปเบฒเบชเบฒเบกเบฒเบเบเบฑเบเบเบธเบเบเบปเบเบเบฐเบฅเบดเบเปเบเปเปเบเบเบเปเปเบเปเบญเบเปเบเปเบเบงเบฒเบกเบเบฐเบเบฒเบเบฒเบกเบซเบผเบฒเบ. เปเบเปเบกเบตเบเปเปเบเบงเบเบฅเบฐเบงเบฑเบเบเบตเปเบชเปเบฒเบเบฑเบเบขเบนเปเบเบตเปเบเบตเป.
เบเบฒเบเบซเบผเบญเบเบฅเบงเบเปเปเบฒเปเบซเบเป
kernel เบเบดเบเบเบฒเบกเบญเบฑเบเบเบฐเปเบเบกเบฑเบเบงเปเบฒเปเบเปเบฅเบฐเบซเบเปเบฒเบซเบเปเบงเบเบเบงเบฒเบกเบเปเบฒเบเบทเบเบเปเบฒเปเบเปเปเบฅเบทเปเบญเบเปเบชเปเปเบฒเปเบ. เบเปเบฒเบเปเปเบกเบตเบซเบเปเบงเบเบเบงเบฒเบกเบเปเบฒเบเบฒเบเบเปเบฒเบเบฎเปเบฒเบเบเบฒเบ (RAM) เบเบฝเบเบเป, เปเบเปเบเบเบฐเบเปเบฒเบเบซเบเปเบฒเบเบตเปเบชเปเบฒเบเบฑเบเบซเบเปเบญเบ (เบซเบเปเบญเบเบเบตเปเปเบเปเปเบฅเบทเปเบญเบเป) เปเบเบซเบฒเบฎเบฒเบเบเบดเบเปเบเบทเปเบญเบเบฐเบซเบเบฒเบ RAM เบเบฒเบเบซเบเปเบฒเบชเปเบฒเบฅเบฑเบเบซเบเปเบฒเบเบตเปเบชเปเบฒเบเบฑเบเบเบงเปเบฒ.
เปเบเบซเบผเบฑเบเบเบฒเบ, เบเบฝเบงเบเบฑเบเปเบเปเบเบฑเบ Hugepages. เบขเปเบฒเบเปเบเบเปเบเบฒเบก, kernel เบเบฝเบเปเบเปเบชเบฒเบกเบฒเบเปเบฅเบเบเปเบฝเบเบซเบเปเบฒเบเบฑเบเบซเบกเบปเบ, เบเปเปเปเบกเปเบ bytes เบชเปเบงเบเบเบธเบเบเบปเบ.
เบชเบปเบกเบกเบธเบเบงเปเบฒเบเบงเบเปเบฎเบปเบฒเบกเบตเปเบเบเบเบฒเบเบเบตเป:
char* mymemory = malloc(2*1024*1024); // ะะพะทัะผะตะผ ััะพ ะทะฐ ะพะดะฝั Hugepage!
// ะะฐะฟะพะปะฝะธะผ mymemory ะบะฐะบะธะผะธ-ะปะธะฑะพ ะดะฐะฝะฝัะผะธ
// ะกะดะตะปะฐะตะผ ะผะฝะพะณะพ ะดััะณะธั
ะฒะตัะตะน,
// ะบะพัะพััะต ะฟัะธะฒะตะดัั ะบ ะฟะพะดะผะตะฝะต ัััะฐะฝะธัั mymemory
// ...
// ะะฐะฟัะพัะธะผ ะดะพัััะฟ ัะพะปัะบะพ ะบ ะฟะตัะฒะพะผั ะฑะฐะนัั
putchar(mymemory[0]);
เปเบโเบเปโเบฅเบฐโเบเบตโเบเบตเปโ, kernel เบเบฐโเบเปเบฒโเปเบเบฑเบโเบเปเบญเบโเบเบปเบโเปเบเบ (เบญเปเบฒเบโ) เปเบเบฑเบ 2 megabytes เบเบญเบโเบเปเปโเบกเบนเบโเบเบฒเบโเบฎเบฒเบโเบเบดเบ / SSD เบเบฝเบโเปเบเปโเบชเปเบฒโเบฅเบฑเบโเบเปเบฒเบโเบเบตเปโเบเบฐโเบญเปเบฒเบโเบซเบเบถเปเบ byteโ. เบชเปเบฒเบฅเบฑเบเบซเบเปเบฒเบเบปเบเบเบฐเบเบด, เบเบฝเบเปเบเป 4096 bytes เบเปเบญเบเปเบเปเบฎเบฑเบเบเบฒเบเบญเปเบฒเบเบเบฒเบเบฎเบฒเบเปเบ / SSD.
เบเบฑเปเบเบเบฑเปเบ, เบเปเบฒเบซเบเปเบฒเปเบซเบเปเบเบทเบ overridden, เบกเบฑเบเบเบฝเบเปเบเปเปเบงเบเบงเปเบฒเบเบตเปเบเบฐเบญเปเบฒเบเบเปเบฒเบเปเบฒเบเบเปเบญเบเบเบฒเบเปเบเบปเปเบฒเปเบเบดเบเบซเบเปเบฒเบเบฑเบเบซเบกเบปเบ. เบเบตเปเบซเบกเบฒเบเบเบงเบฒเบกเบงเปเบฒเบเปเบฒเบเปเบฒเบเบเบฐเบเบฒเบเบฒเบกเปเบเบปเปเบฒเปเบเบซเบฒเบชเปเบงเบเบเปเบฒเบเปเบเบญเบเบซเบเปเบงเบเบเบงเบฒเบกเบเปเบฒเปเบเบเบชเบธเปเบกเปเบฅเบฐเบเบฝเบเปเบเปเบญเปเบฒเบเบชเบญเบเบชเบฒเบกเบเบดเปเบฅเปเบ, เบเปเบฒเบเบเบงเบเปเบเปเบซเบเปเบฒเบเบปเบเบเบฐเบเบดเปเบฅเบฐเบเปเปเบเบฑเบเบงเบปเบเบเปเบฝเบงเบเบฑเบเบชเบดเปเบเบญเบทเปเบ.
เปเบเบเบฒเบเบเบปเบเบเบฑเบเบเปเบฒเบก, เบเปเบฒเบเปเบฒเบเบเปเบญเบเบเบฒเบเปเบเบปเปเบฒเปเบเบดเบเบชเปเบงเบเปเบซเบเปเบเบญเบเบซเบเปเบงเบเบเบงเบฒเบกเบเปเบฒเบเบฒเบกเบฅเปเบฒเบเบฑเบ, เบซเบเปเบฒเปเบซเบเปเบเบฐเบเบฑเบเบเบธเบเบเบฒเบเบเบฐเบเบดเบเบฑเบเบเบญเบเบเปเบฒเบ. เบขเปเบฒเบเปเบเบเปเบเบฒเบก, เบเปเบฒเบเบเปเบฒเปเบเบฑเบเบเปเบญเบเปเบเปเบเบปเบเบชเบญเบเบเบปเบงเบเปเบฒเบเปเบญเบ (เบเปเปเปเบกเปเบเบเบฑเบเบเบญเบเปเบง abstract) เปเบฅเบฐเปเบเบดเปเบเบชเบดเปเบเบเบตเปเปเบฎเบฑเบเบงเบฝเบเปเบเปเปเบงเบเบถเปเบ.
เบเบฒเบเบเบฑเบเบชเบฑเบเปเบเบเบงเบฒเบกเบเบปเบเบเปเบฒ
เบเปเบฒเบเปเบฒเบเบเบฝเบ C, เบเปเบฒเบเบฎเบนเปเบงเปเบฒเบเปเบฒเบเบชเบฒเบกเบฒเบเบฎเปเบญเบเบเปเปเบซเปเบกเบตเบเปเบฒเบเบงเบเบซเบเปเบงเบเบเบงเบฒเบกเบเปเบฒเบเบตเปเบกเบตเบเบฐเบซเบเบฒเบเบเปเบญเบ (เบซเบผเบทเปเบเบทเบญเบเบเบฐเบซเบเบฒเบเปเบซเบเป) เบเบฒเบ heap เปเบเบเปเบเป malloc()
. เปเบซเปเปเบงเบปเปเบฒเบงเปเบฒเบเปเบฒเบเบเปเบญเบเบเบฒเบ 30 bytes เบเบญเบเบซเบเปเบงเบเบเบงเบฒเบกเบเปเบฒ:
char* mymemory = malloc(30);
เบชเปเบฒเบฅเบฑเบเบเบฑเบเบเบฝเบเปเบเบฅเปเบเบฅเบก, เบกเบฑเบเบญเบฒเบเบเบฐเบเบฒเบเบปเบเบงเปเบฒเบเปเบฒเบเบเปเบฒเบฅเบฑเบ "เบฎเปเบญเบเบเป" เบซเบเปเบงเบเบเบงเบฒเบกเบเปเบฒ 30 bytes เบเบฒเบเบฅเบฐเบเบปเบเบเบฐเบเบดเบเบฑเบเบเบฒเบเปเบฅเบฐเบชเบปเปเบเบเบปเบงเบเบตเปเปเบเบซเบฒเบซเบเปเบงเบเบเบงเบฒเบกเบเปเบฒ virtual. เปเบเปเบเบปเบงเบเบดเบเปเบฅเปเบง malloc ()
เปเบกเปเบเบเบฝเบเปเบเปเบเบฑเบเบเบฑเบ C เบเบตเปเปเบเบซเบฒเบเบฒเบเบเบฒเบเปเบเบเบฑเบเบเบฑเบ
เบขเปเบฒเบเปเบเบเปเปเบเบฒเบก, เบเบฒเบเบฎเปเบญเบเบเปเบเบงเบฒเบกเบเบปเบเบเปเบฒเบซเบผเบฒเบเบเบทเปเบเบชเปเบฒเบฅเบฑเบเบเบฒเบเบเบฑเบเบชเบฑเบเปเบเปเบฅเบฐเบเบปเบเปเบกเปเบเบเปเปเบกเบตเบเบฐเบชเบดเบเบเบดเบเบฒเบ; เบกเบฑเบเปเบเบฑเบเปเบเปเบเปเบซเบผเบฒเบเบเบตเปเบชเบธเบเบงเปเบฒเบเบฒเบเบชเปเบงเบเบเบงเบฒเบกเบเบปเบเบเปเบฒเปเบเปเบเบทเบเบเบปเบเบเปเบญเบเปเบฅเปเบง (free())
, เปเบฅเบฐโเบเบงเบโเปเบฎเบปเบฒโเบชเบฒโเบกเบฒเบโเบเปเบฒโเปเบเปโเบเบทเบโเปเบเปโ. malloc()
เบเบฐเบเบดเบเบฑเบ algorithms เบเบตเปเบเปเบญเบเบเปเบฒเบเบชเบฑเบเบชเบปเบเบชเปเบฒเบฅเบฑเบเบเบฒเบเบเปเบฒเปเบเปเบซเบเปเบงเบเบเบงเบฒเบกเบเปเบฒเบเบตเปเบเบทเบเบเบปเบเบเปเบญเบเบเบทเบ.
เปเบเปเบงเบฅเบฒเบเบฝเบงเบเบฑเบ, เบเบธเบเบชเบดเปเบเบเบธเบเบขเปเบฒเบเปเบเบตเบเบเบทเปเบเปเบเบเบเปเปเปเบเปเบชเบฑเบเปเบเบเปเบซเบฑเบเบชเปเบฒเบฅเบฑเบเบเปเบฒเบ, เบเบฑเปเบเบเบฑเปเบเปเบเบฑเบเบซเบเบฑเบเบกเบฑเบเบเบงเบเบเบฑเบเบงเบปเบเบเปเบฒเบ? เปเบเปเปเบเบทเปเบญเบเบเบฒเบเบงเปเบฒเบชเบดเปเบเบเปเบฒเบเบฒเบ free()
เบเปเปเปเบเปเบซเบกเบฒเบเบเบงเบฒเบกเบงเปเบฒ
เบกเบตโเบชเบดเปเบโเบเบฑเปเบโเบเปเบฒเบงโเปเบเบฑเบโเบเบฒเบโเปเบเปเบโเปเบเบโเบเบงเบฒเบกโเบเบปเบโเบเปเบฒโ. เปเบเบเปเบฅเบฐเบเบตเบเบตเปเบฎเปเบฒเบเปเบฎเบ, เบกเบตเบเบฒเบเบชเปเบงเบ heap เบเบตเปเบกเบตเบเบฝเบเปเบเปเบชเบญเบเบชเบฒเบก bytes เปเบเบปเปเบฒเบเบฑเปเบเบเบตเปเบเบทเบเบเปเบฒเปเบเปเปเบเบเบฐเบเบฐเบเบตเปเบเบธเบเบชเบดเปเบเบเบธเบเบขเปเบฒเบเบขเบนเปเปเบเบฅเบฐเบซเบงเปเบฒเบเปเบเปเบเบทเบเบเบปเบเบเปเบญเบ. (free())
.
เบเบฐโเบฅเบธโเบเบฒโเบชเบฑเบโเปเบเบโเบงเปเบฒ fragmentation เบเบงเบฒเบกโเบเบปเบโเบเปเบฒโเปเบเบฑเบโเบซเบปเบงโเบเปเปโเบเบตเปโเบเบฑเบโเบเปเบญเบโเบขเปเบฒเบโเบเปเปโเบซเบเปเบฒโเปเบเบทเปเบญโ, เปเบฅเบฐโเปเบเบดเบโเปเบกเปเบโเบงเปเบฒโเบเบฒเบโเบเปเบฝเบโเปเบเบโเปเบฅเบฑเบโเบเปเบญเบโเบเบญเบโเปเบเบโเบเบฒเบโเบชเบฒโเบกเบฒเบโเบกเบตโเบเบปเบโเบเบฐโเบเบปเบโเบเบตเปโเบชเปเบฒโเบเบฑเบโ. เปเบเบเปเบฅเบฐเบเบตเบซเบผเบฒเบเบเบตเปเบชเบธเบ, เปเบเบฅเปเบเบฅเบกเบเบฐเบเปเปเปเบฎเบฑเบเปเบซเปเปเบเบตเบเบเบฒเบเปเบเปเบเบชเปเบงเบเบซเบเปเบงเบเบเบงเบฒเบกเบเปเบฒเบเบตเปเบชเปเบฒเบเบฑเบ, เปเบเปเบเปเบฒเบเบเบงเบเบฎเบนเปเบงเปเบฒเบเปเบฒเบกเบตเบเบฑเบเบซเบฒเบเบฒเบเปเบเบเปเบเบเบขเบนเปเปเบเบเบฒเบเบเบทเปเบเบเบตเปเบเบญเบ heap, hugepages เบชเบฒเบกเบฒเบเปเบฎเบฑเบเปเบซเปเบชเบฐเบเบฒเบเบฐเบเบฒเบเบฎเปเบฒเบเปเบฎเบเบเบถเปเบ.
เบเบฒเบโเบเบฑเบโเปเบฅเบทเบญเบโเบเบฒเบโเบเปเบฒโเปเบเปโเบเบญเบ hugepagesโ
เบซเบผเบฑเบเบเบฒเบเบญเปเบฒเบเบเบปเบเบเบงเบฒเบกเบเบตเป, เบเปเบฒเบเปเบเปเบเปเบฒเบเบปเบเบงเปเบฒเบเบฒเบเบชเปเบงเบเปเบเบเบญเบเปเบเบเบเบฒเบเบเบญเบเบเปเบฒเบเบชเบฒเบกเบฒเบเปเบเปเบฎเบฑเบเบเบปเบเบเบฐเปเบซเบเบเบเบฒเบเบเบฒเบเบเปเบฒเปเบเป hugepages เปเบฅเบฐเบชเบดเปเบเบเบตเปเบเปเปเบชเบฒเบกเบฒเบ. เบเบฑเปเบเบเบฑเปเบเบซเบเปเบฒเบเบฐเบซเบเบฒเบเปเบซเบเปเบเบงเบเบเบฐเบเบทเบเปเบเบตเบเปเบเปเบเบฑเบเบซเบกเบปเบเบเป?
เปเบเบเบเบตเบเบตเปเบเปเบฒเบเบชเบฒเบกเบฒเบเบเปเบฒเปเบเป madvise()
เปเบเบทเปเบญเปเบเบตเบเปเบเปเบเบฒเบเปเบซเบเปเบเบฝเบเปเบเปเบชเปเบฒเบฅเบฑเบเบเบทเปเบเบเบตเปเบเบงเบฒเบกเบเบปเบเบเปเบฒเบเบตเปเบกเบฑเบเบเบฐเปเบเบฑเบเบเบฐเปเบซเบเบ.
เบเปเบฒเบญเบดเบ, เปเบซเปเบเบงเบเปเบเบดเปเบเบงเปเบฒ hugepages เบเปเบฒเบฅเบฑเบเปเบฅเปเบเบขเบนเปเปเบเปเบซเบกเบ madvise() เปเบเบเปเบเป
เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบ, เปเบเป madvise()
เปเบเบทเปเบญเบเบญเบ kernel เบขเปเบฒเบเปเบเปเบเบดเบเบเปเบญเบเบเบตเปเบเบฐเปเบเป hugepages.
#include <sys/mman.h>
// ะะปะปะพัะธััะนัะต ะฑะพะปััะพะต ะบะพะปะธัะตััะฒะพ ะฟะฐะผััะธ, ะบะพัะพััั ะฑัะดะตัะต ะธัะฟะพะปัะทะพะฒะฐัั
size_t size = 256*1024*1024;
char* mymemory = malloc(size);
// ะัะพััะพ ะฒะบะปััะธัะต hugepagesโฆ
madvise(mymemory, size, MADV_HUGEPAGE);
// โฆ ะธ ะทะฐะดะฐะนัะต ัะปะตะดัััะตะต
madvise(mymemory, size, MADV_HUGEPAGE | MADV_SEQUENTIAL)
เปเบซเปเบชเบฑเบเปเบเบเบงเปเบฒเบงเบดเบเบตเบเบฒเบเบเบตเปเปเบกเปเบเบเปเบฒเปเบเบฐเบเปเบฒเบเบฝเบเปเบเปเบเบฑเบเปเบเปเบเบเปเบฝเบงเบเบฑเบเบงเบดเบเบตเบเบฒเบเบเบฑเบเบเบฒเบเบซเบเปเบงเบเบเบงเบฒเบกเบเปเบฒ. เบเบตเปเบเปเปเปเบเปเบซเบกเบฒเบเบเบงเบฒเบกเบงเปเบฒ kernel เบเบฐเบเปเบฒเปเบเป hugepages เบญเบฑเบเบเบฐเปเบเบกเบฑเบเบชเปเบฒเบฅเบฑเบเบซเบเปเบงเบเบเบงเบฒเบกเบเปเบฒเบเบตเปเบเปเบฒเบเบปเบเปเบงเป.
เบญเปเบฒเบเปเบเบดเบเปเบญเบเบฐเบชเบฒเบ madvise()
, เบซเบปเบงเบเปเปเบเบตเปเบกเบตเปเบชเบฑเปเบเปเบเปเบเบเบฒเบเบฎเบฝเบเบฎเบนเปเบเบตเปเบชเบนเบเบเบฑเบเบขเปเบฒเบเบเปเปเปเปเบฒเปเบเบทเปเบญ. เบชเบฐเบเบฑเปเบ, เบเปเบฒเปเบเบปเปเบฒเบเบฑเปเบเปเบเบเบฐเปเบเบฑเปเบเปเบเปเป, เบเบฝเบกเบญเปเบฒเบ เปเบฅเบฐ เบเบปเบเบชเบญเบเบชเบญเบเบชเบฒเบกเบญเบฒเบเบดเบเบเปเบญเบเปเบเบปเปเบฒเบเบฐเบเบฒเบเบซเบงเบฑเบเบเบปเบเปเบเปเบฎเบฑเบเปเบเบเบฒเบเบเบงเบ.
เบญเปเบฒเบเบซเบเบฑเบ?
เบเบปเบเบเบงเบฒเบก IBM OpenStack เบขเบนเปเปเบเบซเบเปเบฒเปเบซเบเป เปเปเบฒเปเบซเบเปเบเบตเปเปเบเปเบเปเบชเบเบฝเบเบเบฑเบเปเปเบฒเปเบซเบเปเบเบตเปเบเปเปเปเบเปเบเปเบช เบเบปเบเบเบงเบฒเบก Wikipedia เบเปเบฝเบงเบเบฑเบ TLB เปเบญเบเบฐเบชเบฒเบเบเบญเบ Linux kernel เปเบเบซเบเปเบฒเบเบฐเบซเบเบฒเบเปเบซเบเปเบเบตเปเปเบเปเบเปเบช StackOverflow: Hugepages เบกเบตเบเบงเบฒเบกเบชเปเบฝเบเบเปเปเบเบฒเบเปเบเบเปเบเบเบเบญเบเบซเบเปเบงเบเบเบงเบฒเบกเบเปเบฒ เบเบปเบเบเบงเบฒเบก Microsoft เบเปเบฝเบงเบเบฑเบเบเบฒเบเบเบฑเบเบเบฒเบเบซเบเปเบงเบเบเบงเบฒเบกเบเปเบฒ virtual
เบกเบตเบเบณเบเบฒเบกเบเป? เบเบฝเบเปเบเบเปเบฒเปเบซเบฑเบ!
เปเบซเบผเปเบเบเปเปเบกเบนเบ: www.habr.com