
เบเบฒเบโเปเบโเบเบปเบโเบเบงเบฒเบกโเบเบตเปโเปเบเปโเบเบฐโเบเบฝเบกโเบชเปเบฒโเบฅเบฑเบโเบเบฑเบโเบฎเบฝเบโเบซเบผเบฑเบโเบชเบนเบโ .
เบเปเบญเบเปเปเบฒเบเบตเปเบเปเบญเบเปเบเปเปเบงเบปเปเบฒเบเปเบฝเบงเบเบฑเบเบงเบดเบเบตเบเบฒเบเบเบงเบเบชเบญเบ เปเบฅเบฐ เปเบเบตเบเปเบเปเบเบฒเบ Hugepages เปเบ Linux.
เบเบปเบเบเบงเบฒเบกเบเบตเปเบเบฐเปเบเบฑเบเบเบฐเปเบซเบเบเบเบฝเบเปเบเปเบเปเบฒเบซเบฒเบเบงเปเบฒเบเปเบฒเบเบเบปเบงเบเบดเบเปเบฅเปเบงเบกเบตเบชเบฐเบเบฒเบเบเบตเปเบเบตเปเบเบฐเบเปเบฒเปเบเป Hugepages. เบเปเบฒเบเบฐเปเบเบปเปเบฒเปเบเปเบเบปเบเบเบฑเบเบซเบผเบฒเบเปเบเบปเบเบเบตเปเบเบทเบเบซเบฅเบญเบเบฅเบงเบเปเบเบเบเบงเบฒเบกเบชเบปเบเปเบชเบเปเบฒเบเบเบตเป Hugepages เบเบฐเบเบฑเบเบเบธเบเบเบปเบเบเบฐเบฅเบดเบเบขเปเบฒเบเบกเบฐเบซเบฑเบเบชเบฐเบเบฑเบ. เบขเปเบฒเบเปเบเบเปเบเบฒเบก, hugepaging เปเบเบฑเบเบซเบปเบงเบเปเปเบเบตเปเบชเบฑเบเบชเบปเบเปเบฅเบฐเบชเบฒเบกเบฒเบเบซเบผเบธเบเบฅเบปเบเบเบฐเบชเบดเบเบเบดเบเบฒเบเบเปเบฒเบซเบฒเบเบงเปเบฒเบเบทเบเบเปเบฒเปเบเปเบเปเปเบเบทเบเบเปเบญเบ.
เบเบฒเบเบเบต 1: เบเบงเบเบชเบญเบเบงเปเบฒ hugepages เบเบทเบเปเบเบตเบเปเบเปเบเบฒเบเปเบฅเปเบง Linux (เบเบปเปเบเบชเบฐเบเบฑเบ )
เบเบฑเบเบซเบฒ:
เบเปเบฒเบเบเปเบฒเปเบเบฑเบเบเปเบญเบเบเบงเบเปเบเบดเปเบเบงเปเบฒ HugePages เบเบทเบเปเบเบตเบเปเบเปเบขเบนเปเปเบเบฅเบฐเบเบปเบเบเบญเบเบเปเบฒเบ.
เบเบฒเบเปเบเปเปเบ:
เบกเบฑเบเบเปเบฒเบเบเบฒเบเบซเบผเบฒเบ:
cat /sys/kernel/mm/transparent_hugepage/enabledเบเปเบฒเบเบเบฐเปเบเปเบฎเบฑเบเบเบฒเบเบชเบดเปเบเบเบฒเบเบขเปเบฒเบเปเบเบฑเปเบเบเบตเป:
always [madvise] neverเบเปเบฒเบเบเบฐเปเบซเบฑเบเบฅเบฒเบเบเบฒเบเบเบฒเบเปเบฅเบทเบญเบเบเบตเปเบกเบต (เบชเบฐเปเบซเบกเบต, madvise, เบเปเปเปเบเบตเบ), เปเบฅเบฐเบเบฒเบเปเบฅเบทเบญเบเบเบตเปเปเบเปเปเบเบเบฑเบเบเบธเบเบฑเบเบเบฐเบเบทเบเบซเบธเปเบกเบขเบนเปเปเบเบงเบปเบเปเบฅเบฑเบ (เปเบเบเบเปเบฒเปเบฅเบตเปเบกเบเบปเปเบ Madvise).
Madvise เปเบฒเบ เบเบงเบฒเบกเบงเปเบฒ transparent hugepages เปเบเบตเบเปเบเปเบเบฝเบเปเบเปเบชเปเบฒเบฅเบฑเบเบเบทเปเบเบเบตเปเบซเบเปเบงเบเบเบงเบฒเบกเบเปเบฒเบเบตเปเบเบฑเบเปเบเบเบฎเปเบญเบเบเปเปเบซเปเบกเบตเบซเบเปเบฒเบเบฐเบซเบเบฒเบเปเบซเบเปเปเบเบเปเบเป .
เบชเบฐเปเบซเบกเบตเปเบ เปเบฒเบ เบเบงเบฒเบกเบงเปเบฒ transparent hugepages เปเบเบตเบเปเบเปเบเบฒเบเบชเบฐเปเปเบตเบชเปเบฒเบฅเบฑเบเบเบฐเบเบงเบเบเบฒเบเบเบฑเบเปเบปเบ. เบเบตเปเบเบปเบเบเบฐเบเบดเปเบฅเปเบงเบเบฑเบเบเบธเบเบเบฐเบชเบดเบเบเบดเบเบฒเบ, เปเบเปเบเปเบฒเบซเบฒเบเบงเปเบฒเบเปเบฒเบเบกเบตเบเปเบฅเบฐเบเบตเบเบฒเบเบเปเบฒเปเบเปเบเบตเปเบเบฐเบเบงเบเบเบฒเบเบเปเบฒเบเบงเบเบซเบผเบฒเบเบเปเบฒเบฅเบฑเบเบเปเบฅเบดเปเบเบเบเปเบฒเบเบงเบเบเบฐเบซเบเบฒเบเบเปเบญเบเบเบญเบเบซเบเปเบงเบเบเบงเบฒเบกเบเปเบฒ, เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบเบเบฒเบเปเบซเบผเบเบซเบเปเบงเบเบเบงเบฒเบกเบเปเบฒเปเบเบเบฅเบงเบกเบชเบฒเบกเบฒเบเปเบเบตเปเบกเบเบถเปเบเบขเปเบฒเบเบซเบผเบงเบเบซเบผเบฒเบ.
เบเปเปเปเบเบตเบ เปเบฒเบ เบเบงเบฒเบกเบงเปเบฒ transparent hugepages เบเบฐเบเปเปเบเบทเบเบฅเบงเบกเปเบเบปเปเบฒเปเบเบดเบเปเบกเปเบเบงเปเบฒเบเบฐเบเบทเบเบฎเปเบญเบเบเปเปเบเบเปเบเป madvise. เปเบเบทเปเบญเบเบญเบเบซเบฒเบเปเปเบกเบนเบเปเบเบตเปเบกเปเบเบตเบก, เบเบดเบเบเปเป เปเบเปเบ Linux.
เบงเบดเบเบตเบเบฒเบเบเปเบฝเบเบเปเบฒเปเบฅเบตเปเบกเบเบปเปเบ
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/enabledOption 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, เบเปเบฒเบเบฐเปเบเบปเปเบฒเบเบฐเปเบชเบเบชเบฐเบฅเบฐเบเบงเบฒเบกเบเบทเบเบเปเบญเบเปเบเบทเปเบญเบเบงเบฒเบกเบเปเบฒเบเบเบฒเบ. เบกเบฑเบเปเบเบฑเบเบกเบนเบเบเปเบฒเบเบตเปเบเบทเปเปเบงเปเบงเปเบฒเบซเบผเบฒเบเบซเบปเบงเบเปเปเปเบกเปเบเบชเบฑเบเบชเบปเบเปเบเปเปเปเบฅเบฐเบเบฑเปเบเบเบฑเปเบเบเบถเปเบเบเปเบฒเบเบเบฒเบเบซเบผเบฒเบ.
เบเบฐเบฅเบธเบเบฒเบฎเบฑเบเบเบฒเบเบงเปเบฒเบเบงเบเปเบฎเบปเบฒเบเบณเบฅเบฑเบเปเบงเบปเปเบฒเบเปเบฝเบงเบเบฑเบเบฅเบฐเบเบปเบ x86 64-เบเบดเบเบเบตเปเปเบฎเบฑเบเบงเบฝเบเบขเบนเปเปเบ Linux, เปเบฅเบฐเบเปเบญเบเบเบฝเบเปเบเปเบชเบปเบกเบกเบธเบเบงเปเบฒเบฅเบฐเบเบปเบเบฎเบญเบเบฎเบฑเบ hugepages เบเบตเปเปเบเปเบเปเบช (เปเบเบทเปเบญเบเบเบฒเบเบกเบฑเบเบเปเปเปเบกเปเบเบเปเปเปเบชเบเบเบฝเบเบเบตเป 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(), เบซเบปเบงเบเปเปเบเบตเปเบกเบตเปเบชเบฑเปเบเปเบเปเบเบเบฒเบเบฎเบฝเบเบฎเบนเปเบเบตเปเบชเบนเบเบเบฑเบเบขเปเบฒเบเบเปเปเปเปเบฒเปเบเบทเปเบญ. เบชเบฐเบเบฑเปเบ, เบเปเบฒเปเบเบปเปเบฒเบเบฑเปเบเปเบเบเบฐเปเบเบฑเปเบเปเบเปเป, เบเบฝเบกเบญเปเบฒเบ เปเบฅเบฐ เบเบปเบเบชเบญเบเบชเบญเบเบชเบฒเบกเบญเบฒเบเบดเบเบเปเบญเบเปเบเบปเปเบฒเบเบฐเบเบฒเบเบซเบงเบฑเบเบเบปเบเปเบเปเบฎเบฑเบเปเบเบเบฒเบเบเบงเบ.
เบญเปเบฒเบเบซเบเบฑเบ?
เบกเบตเบเบณเบเบฒเบกเบเป? เบเบฝเบเปเบเบเปเบฒเปเบซเบฑเบ!
เปเบซเบผเปเบเบเปเปเบกเบนเบ: www.habr.com
