ืืืืขืจืืขืฆืื ื ืคืื ืืขื ืึทืจืืืงื ืฆืืืขืืจืืื ืคึฟืึทืจ ืงืืจืก ืกืืืืขื ืื
ืืื ืึทืืขืจ, ืืื ืืขืจืขืื ืืืขืื ืืื ืฆื ืคึผืจืืืืจื ืืื ืืขืื Hugepages ืืืืฃ ืืื ืืงืก.
ืืขืจ ืึทืจืืืงื ืืืขื ืืืื ื ืืฆืืง ืืืืื ืืืื ืืืจ ืืึทืงืข ืืึธืื ืึท ืคึผืืึทืฅ ืฆื ื ืืฆื Hugepages. ืืื ืืืข ืืืืขืื ื ืึท ืคึผืืึทืฅ ืคืื ืืขื ืืฉื ืืืึธืก ืืขื ืขื ืคืืื ืืืจื ืื ืืืกืงืืง ืึทื Hugepages ืืืขื ืืึทืืืฉืืงืึทืื ืคึฟืึทืจืืขืกืขืจื ืคึผืจืึธืืืึทืงืืืืืืื. ืึธืืขืจ, ืืืืืขืคึผืึทืืื ื ืืื ืึท ืงืึธืืคึผืืขืงืก ืืขืืข ืืื ืงืขื ืขื ืืืืจืืื ืคืึธืจืฉืืขืืื ื ืืืื ืืขืืืืื ื ืคืึทืืฉ.
ืืืื 1: ืืืขืจืึทืคืืืื ื ืึทื ืจืืืืง ืืืขืืขืจ ืืขื ืขื ืขื ืืืืึทืื ืืืืฃ ืืื ืืงืก (ืึธืจืืืื ืขื ืืึธ )
ืคึผืจืึธืืืขื:
ืืืจ ืืึทืจืคึฟื ืฆื ืงืึธื ืืจืึธืืืจื ืืืื HugePages ืืื ืขื ืืืืึทืื ืืืืฃ ืืืื ืกืืกืืขื.
ืืืืืื ื:
ืขืก ืืื ืืึทื ืฅ ืคึผืฉืื:
cat /sys/kernel/mm/transparent_hugepage/enabled
ืืืจ ืืืขื ืืึทืงืืืขื ืขืคึผืขืก ืืื ืืึธืก:
always [madvise] never
ืืืจ ืืืขื ืืขื ืึท ืจืฉืืื ืคืื ืคืึทืจืึทื ืขื ืึธืคึผืฆืืขืก (ืฉืืขื ืืืง, ืืึทืืืืืกืข, ืงืืื ืืึธื), ืืื ืื ืืขืจืืืืึทื ืึทืงืืืื ืึธืคึผืฆืืข ืืืขื ืืืื ืขื ืงืืึธืืื ืืื ืงืืึทืืขืจื (ืืืจื ืคืขืืืงืืึทื madvise).
madvise ืืืื ืึทื transparent hugepages
ืขื ืืืืึทืื ืืืืื ืคึฟืึทืจ ืืืงืึธืจื ืืขืืืื ืืืึธืก ืืคืืจืืฉ ืืขืื ืจืืืืง ืืืขืืขืจ ื ืืฆื
ืฉืืขื ืืืง ืืืื ืึทื transparent hugepages
ืฉืืขื ืืืง ืขื ืืืืึทืื ืคึฟืึทืจ ืึทืืข ืคึผืจืึทืกืขืกืึทื. ืืึธืก ืืืืฉืึทืืืึทืื ืืืคึผืจืืืื ืคืึธืจืฉืืขืืื ื, ืึธืืขืจ ืืืื ืืืจ ืืึธืื ืึท ื ืืฆื ืคืึทื ืืื ืคืืืข ืคึผืจืึทืกืขืกืึทื ืงืึทื ืกืืืื ื ืึท ืงืืืื ืกืืืข ืคืื โโโโืืืงืึธืจื, ืื ืงืืืืขืืืืง ืืึผืจืื ืืึทืกืข ืงืขื ืขื ืคืึทืจืืจืขืกืขืจื ืืจืึทืืึทืืืงืื.
ืงืืื ืืึธื ืืืื ืึทื transparent hugepages
ืืืขื ื ืืฉื ืืืื ืึทืจืืึทื ืืขืจืขืื ื ืืคืืื ืืืขื ืืขืืขืื ื ืืฆื madvise. ืฆื ืืขืคึฟืื ืขื ืืขืจ, ืงืึธื ืืึทืงื
ืืื ืฆื ืืืืฉื ืื ืคืขืืืงืืึทื ืืืขืจื
Option 1: ืืืืึทื ืืืืฉื sysfs
(ื ืึธื ืจืขืืึธืึธื ืืขืจ ืคึผืึทืจืึทืืขืืขืจ ืืืขื ืฆืืจืืงืงืืืขื ืฆื ืืืื ืคืขืืืงืืึทื ืืืขืจื):
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: ืืืืฉื ืื ืกืืกืืขื ืคืขืืืงืืึทื ืืืจื ืจืืงืึธืืคึผืืืืื ื ืื ืงืขืจื ืืื ืึท ืืึทืืึทืคืืื ืงืึทื ืคืืืืขืจืืืฉืึทื (ืืขื ืึธืคึผืฆืืข ืืื ืืืืื ืจืขืงืึทืืขื ืืื ืืืื ืืืจ ื ืืฆื ืึท ืื ืื ืงืขืจื):
- ืฆื ืืึทืฉืืขืืืงื ืฉืืขื ืืืง ืืืจื ืคืขืืืงืืึทื, ื ืืฆื:
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. ืืื ื ืึท ืืขืงื ืึทืืึทืืืฉืืงืึทื ืงืึธืืคึผืืขืงืก ืืื ืคึผืขืืึทื ืืืง ืึทืจืืืงื ืืืขื ืืกืชึผืื ืืืื ืฉืืืขืจ ืฆื ืคึฟืึทืจืฉืืืื ืคึฟืึทืจ ืืขื ืืฉื ืืืึธืก ืืขื ืขื ืืืืืืื ืฆื ืืจืึทืืื Hugepages ืืื ืึท ืคึผืึทื ืึทืกืืึท, ืืื ืืืขื ืงืจืื ืึทืงืืขืจืึทืกื ืคึฟืึทืจ ืคึผืึทืฉืืขืก. ืขืก ืืื ื ืึธืจ ืืืขืจื ืฆื ืืึทืืื ืืื ืืื ืขื ืึทื ืึท ืคึผืืึทืฅ ืคืื ืื ืืขืืขืก ืืขื ืขื ืืึทืงืข ืงืึธืืคึผืืืฆืืจื ืืื ืืขืจืืืขืจ ืืืืขืจ ืกืืืคึผืืึทืคืืื.
ืืืืข ืืึธื ืึทื ืืืจ ืืขื ืขื ืืขืจืขืื ืืืขืื 64-ืืืกื ืงืก 86 ืกืืกืืขืืขื ืืืึธืก ืืืืคื ืืื ืืงืก, ืืื ืึทื ืืื ื ืึธืจ ืืืขืจื ืขืืขื ืึทื ืื ืกืืกืืขื ืฉืืืฆื ืืจืึทื ืกืคึผืขืจืึทื ื ืืืขืคึผืึทืืขืก (ืืืืึทื ืขืก ืืื ื ืืฉื ืึท ืืืกืึธืจื ืึทื ืืืขืคึผืึทืืขืก ืืขื ืขื ื ืืฉื ืึธืืืืขืจืจืืืึทื), ืืื ืืื ืืขืจ ืคืึทื ืืื ืึผืืขื ืงืืื ืืึธืืขืจื ืืื ืืงืก ืกืืืื.
ืืื ืืืขื ืฆืืืฉืขืคึผืขื ืืขืจ ืืขืื ืืฉ ืืึทืฉืจืืึทืืื ื ืืื ืื ืืื ืงืก ืืื ืื.
ืืืืจืืืึทื ืืึผืจืื
ืืืื ืืืจ ืืขื ื ืึท C ++ ืคึผืจืึธืืจืึทืืืกื, ืืืจ ืืืืกื ืึทื ืึทืืืืฉืขืงืฅ ืืื ืืึผืจืื ืืึธืื ืกืคึผืขืฆืืคืืฉ ืึทืืจืขืกืขืก (ืืืึทืื ืืืึทืืืขืก).
ืึธืืขืจ, ืื ืึทืืจืขืกืขืก ืืึธื ื ืื ืืึทืืืงืข ืคืึทืจืืจืึทืืื ืืื ืืฉืืืืช ืึทืืจืขืกืขืก ืืื ืืึผืจืื (RAM ืึทืืจืขืกืขืก). ืืื ืคืึธืจืฉืืขืื ืึทืืจืขืกืขืก ืืื ืืืืจืืืึทื ืืึผืจืื. ืืขืจ ืคึผืจืึทืกืขืกืขืจ ืืื ืึท ืกืคึผืขืฆืืขื MMU (ืืืงืึธืจื ืคืึทืจืืืึทืืืื ื ืึทืคึผืึทืจืึทื) ืืึธืืืืข ืืืึธืก ืืขืืคึผืก ืื ืงืขืจื ืืึทืคึผืข ืืืืจืืืึทื ืืึผืจืื ืฆื ืึท ืืฉืืืืช ืึธืจื.
ืืขื ืฆืืืึทื ื ืืื ืคืืืข ืึทืืืืึทื ืืืืืฉืื, ืึธืืขืจ ืื ืืขืจืกื ืืืืืืืง ืืขื ืขื:
- ืคืึธืจืฉืืขืืื ื (ืคึฟืึทืจ ืคืึทืจืฉืืื ืกืืืืช);
- ืคึผืจืึธืืจืึทื ืืคืืขืืื ืืขืจืืงืืื, ืืึธืก ืืืืกื, ืงืืื ืคึผืจืึธืืจืึทื ืงืขื ื ืืฉื ืืืืขื ืขื ืคึฟืื ืืขืจ ืืึผืจืื ืคืื ืื ืื ืืขืจ ืคึผืจืึธืืจืึทื.
ืืืึธืก ืืขื ืขื ืืืขืืขืจ?
ืืืืจืืืขื ืืึผืจืื ืืื ืฆืขืืืืื ืืื ืืืขืืขืจ. ืืขืืขืจ ืืืื ืืืึทื ืืืืืื ืฆื ืึท ืกืคึผืขืฆืืคืืฉ ืคืืืืฉ ืืืงืึธืจื, ืขืก ืงืขื ืคืื ื ืฆื ืึท ืืขืื ื ืืื ืืึทืจืึทื, ืึธืืขืจ ืขืก ืงืขื ืคืื ื ืฆื ืึทื ืึทืืจืขืก ืึทืกืืื ื ืฆื ืึท ืืฉืืืืช ืืืื, ืึทืืึท ืืื ืึท ืืืืืขื ืงืึทืจืื.
ืจืืึฟ ืคืื ืื ืืืขืืขืจ ืืืึธืก ืืืจ ืืึทื ืืืขื ืืื ืืืืืื ืฆื ืืึทืจืึทื ืึธืืขืจ ืืขื ืขื ืกืืืึทืคึผื, ืืืึทืืฉ ืืื ืืขื ืขื ืกืืึธืจื ืืืืฃ ืืืื ืฉืืืขืจ ืคืึธืจ ืึธืืขืจ ืกืกื. ืืขืจ ืงืขืจื ืืึทื ืืืืฉืื ืื ืืฉืืืืช ืืืืกืืืื ืคืื ืืขืืขืจ ืืืึทื. ืืืื ืึท ืกืคึผืึธืึธืคืขื ืืืึทื ืืื ืึทืงืกืขืกื, ืืขืจ ืงืขืจื ืกืืึทืคึผืก ืืขื ืคืึธืืขื ืืืึธืก ืืื ืืจืืื ื ืฆื ืึทืงืกืขืก ืื ืืึผืจืื, ืืืืขื ืขื ืืขื ืืืึทื ืคืื ืื ืฉืืืขืจ ืคืึธืจ / ืกืกื ืืื ืืึทืจืึทื, ืืื ืืึทื ืคืึธืจืืขืฆื ืืขื ืคืึธืืขื.
ืืขืจ ืคึผืจืึธืฆืขืก ืืื ืืจืึทื ืกืคึผืขืจืึทื ื ืกืืจืืืื ื, ืืืึทืืฉ ืขืก ืืื ื ืืฉื ืืึทืืืงืข ืืืืขื ืขื ืืืืึทื ืคึฟืื ืื ืืื / ืกืกื. ืื ืืจืืืก ืคืื ื ืึธืจืืึทื ืืืขืืขืจ ืืื 4096 ืืืืขืก. ืื ืืจืืืก ืคืื ืืืืืฉืขืคึผืึทืืขืก ืืื 2 ืืขืืืืืื.
ืืืืขืจืืขืฆืื ื ืึทืกืึธืืกืืึทืืืื ืืึทืคืขืจ (TLB)
ืืืขื ืึท ืคึผืจืึธืืจืึทื ืึทืงืกืขืก ืึท ืืืึทื ืคืื ืืึผืจืื, ืื ืงืคึผื ืืืื ืืืืกื ืคืื ืืืึธืก ืืฉืืืืช ืืืึทื ืฆื ืืืืขื ืขื ืืึทืื (ืืึธืก ืืื, ืืึธืื ืึท ืืืืจืืืึทื ืึทืืจืขืก ืืึทืคึผืข).
ืืขืจ ืงืขืจื ืืื ืึท ืืึทืื ืกืืจืืงืืืจ (ืืืึทื ืืืฉ) ืืืึธืก ืึผืืื ืึทืืข ืื ืืื ืคึฟืึธืจืืึทืฆืืข ืืืขืื ืื ืืืขืืขืจ ืืืึธืก ืืขื ืขื ืืขื ืืฆื. ื ืืฆื ืืขื ืืึทืื ืกืืจืืงืืืจ, ืืืจ ืงืขื ืขื ืืึทืคึผืข ืึท ืืืืจืืืึทื ืึทืืจืขืก ืฆื ืึท ืืฉืืืืช ืึทืืจืขืก.
ืึธืืขืจ, ืื ืืืึทื ืืืฉ ืืื ืืึทื ืฅ ืงืึธืืคึผืืืฆืืจื ืืื ืคึผืึทืืขืืขื, ืึทืืื ืืืจ ืงืขื ืขื ืคืฉืื ื ืืฉื ืึทื ืึทืืืื ืื ืืื ืฆืข ืืึทืื ืกืืจืืงืืืจ ืืขืืขืจ ืืึธื ืืืขื ืึท ืคึผืจืึธืฆืขืก ืึทืงืกืขืก ืืืงืึธืจื.
ืฆืื ืืืืง, ืืื ืืืขืจ ืคึผืจืึทืกืขืกืขืจ ืืื ืึท TLB ืืืึธืก ืงืึทืฉ ืื ืืึทืคึผืื ื ืฆืืืืฉื ืืืืจืืืึทื ืืื ืืฉืืืืช ืึทืืจืขืกืขืก. ืืึธืก ืืืื ื ืึทื ืืึธืืฉ ืืืจ ืืึทืจืคึฟื ืฆื ืคึผืึทืจืกืืจื ืื ืืืึทื ืืืฉ ืืืืฃ ืืขืจ ืขืจืฉืืขืจ ืึทืงืกืขืก ืคึผืจืืืื, ืึทืืข ืกืึทืืกืึทืงืืืึทื ื ืึทืงืกืขืก ืฆื ืืขื ืืืึทื ืงืขื ืขื ืืืื ืืึทื ืืึทืื ืืื ืื TLB, ืึทืืึทืืื ื ืคึฟืึทืจ ืฉื ืขื ืึธืคึผืขืจืึทืฆืืข.
ืืืืึทื ืขืก ืืื ืืืคึผืืึทืืขื ืึทื ืืื ืึท ืืฉืืืืช ืืืื (ืืืึธืก ืืืื ืขืก ืฉื ืขื ืืื ืืขืจ ืขืจืฉืืขืจ ืึธืจื), ืืืึทื ืงืึทืคึผืึทืฆืืืขื ืืื ืืืืืืขื. ืืืื ืืืจ ืืืืื ืฆืืืจืื ืฆื ืืขืจ ืืืขืืขืจ, ืื TLB ืืืขื ื ืืฉื ืงืขื ืขื ืฆื ืงืจืึธื ืืึทืคึผืื ืื ืคึฟืึทืจ ืึทืืข ืคืื โโืืื, ืึทืืื ืืืื ืคึผืจืึธืืจืึทื ืืืขื ืืืืคื ืคืื ืกืืึธืืขืจ.
Hugepages ืงืืื ืฆื ืจืึทืืขืืืขื
ืึทืืื ืืืึธืก ืงืขื ืขื ืืืจ ืืึธื ืฆื ืืืกืืืืื TLB ืืืืคื? (ืืืจ ืืืขืจื ืขืืขื ืื ืคึผืจืึธืืจืึทื ื ืึธื ืืึทืจืฃ ืื ืืขืืืข ืกืืืข ืคืื โโืืึผืจืื).
ืืึธืก ืืื ืืื Hugepages ืงืืื ืืื. ืึทื ืฉืืึธื 4096 ืืืืขืก ืืืึธืก ืืึทืจืคื ืืืืื ืืืื TLB ืคึผืึธืืืฆืืข, ืืืื TLB ืคึผืึธืืืฆืืข ืงืขื ืืืฆื ืคืื ื ืฆื ืึท ืืืึทืคึผืื ื 2 ืืขืืืืืื. ืืึธืืืจ ืืืขืจื ืขืืขื ืึทื ืื TLB ืืื 512 ืืืื ืกื, ืืึธ ืึธื ืืืืขืคึผืึทืืขืก ืืืจ ืงืขื ืขื ืืืืึทืื:
4096 bโ
512=2 MB
ืืขืืึธืื ืืื ืงืขื ืขื ืืืจ ืคืึทืจืืืืึทืื ืืื ืืื:
2 MBโ
512=1 GB
ืืึธืก ืืื ืืืึธืก Hugepages ืืื ืึธืกืึทื. ืืื ืงืขื ืขื ืคึฟืึทืจืืขืกืขืจื ืคึผืจืึธืืืึทืงืืืืืืื ืึธื ืคืื ืื. ืืืขืจ ืขืก ืืขื ืขื ืืึทืืืืืืง ืงืืืืืืึทืฅ ืืึธ.
ืืืคืก ืกืคึผืึธืึธืคืื ื
ืืขืจ ืงืขืจื ืืืืืึธืืึทืืืฉ ืืึธื ืืืึธืจืก ืืื ืึธืคื ืืขืืขืจ ืืึผืจืื ืืืึทื ืืื ืืขื ืืฆื. ืืืื ืขืก ืืื ื ืืฉื ืืขื ืื ืคืืืืฉ ืืึผืจืื (ืืึทืจืึทื), ืืขืจ ืงืขืจื ืืืขื ืืึทื ืืืืื ืืงืขืจ ืืืืืืืง (ืืืืื ืืงืขืจ ืึธืคื ืืขื ืืฆื) ืืืขืืขืจ ืฆื ืื ืฉืืืขืจ ืืืกืง ืฆื ืืึทืคืจืืึทืขื ืขืืืขืืข ืืึทืจืึทื ืคึฟืึทืจ ืืขืจ ืืืืืืืง ืืืขืืขืจ.
ืืื ืคึผืจืื ืฆืืคึผ, ืืขืจ ืืขืืืืงืขืจ ืึทืคึผืืืื ืฆื Hugepages. ืึธืืขืจ, ืืขืจ ืงืขืจื ืงืขื ืขื ืืืืื ืืืกืืืึทืื ืืึทื ืฅ ืืืขืืขืจ, ื ืืฉื ืืืื ืืืืขืก.
ืืื ืก ืืึธืื ืืืจ ืืึธืื ืึท ืคึผืจืึธืืจืึทื ืืื ืืึธืก:
char* mymemory = malloc(2*1024*1024); // ะะพะทัะผะตะผ ััะพ ะทะฐ ะพะดะฝั Hugepage!
// ะะฐะฟะพะปะฝะธะผ mymemory ะบะฐะบะธะผะธ-ะปะธะฑะพ ะดะฐะฝะฝัะผะธ
// ะกะดะตะปะฐะตะผ ะผะฝะพะณะพ ะดััะณะธั
ะฒะตัะตะน,
// ะบะพัะพััะต ะฟัะธะฒะตะดัั ะบ ะฟะพะดะผะตะฝะต ัััะฐะฝะธัั mymemory
// ...
// ะะฐะฟัะพัะธะผ ะดะพัััะฟ ัะพะปัะบะพ ะบ ะฟะตัะฒะพะผั ะฑะฐะนัั
putchar(mymemory[0]);
ืืื ืืขื ืคืึทื, ืืขืจ ืงืขืจื ืืืขื ืืึทืจืคึฟื ืฆื ืคืึทืจืืืึทืื (ืืืืขื ืขื) ืืื ืคืื ืืื 2 ืืขืืืืืื ืคืื ืืื ืคึฟืึธืจืืึทืฆืืข ืคืื โโืื ืฉืืืขืจ ืคืึธืจ / ืกืกื ื ืึธืจ ืคึฟืึทืจ ืืืจ ืฆื ืืืืขื ืขื ืืืื ืืืื. ืืื ืคึฟืึทืจ ืจืขืืืืขืจ ืืืขืืขืจ, ืืืืื 4096 ืืืืขืก ืืึทืจืคึฟื ืฆื ืืืื ืืืืขื ืขื ืคึฟืื ืื ืฉืืืขืจ ืคืึธืจ / ืกืกื.
ืืขืจืืืขืจ, ืืืื ืจืืืืง ืืืึทื ืืื ืึธืืืืขืจืจืืื, ืขืก ืืื ืืืืื ืคืึทืกืืขืจ ืฆื ืืืืขื ืขื ืืืื ืืืจ ืืึทืจืคึฟื ืฆื ืึทืงืกืขืก ืื ืืื ืฆืข ืืืึทื. ืืขื ืืืื ืึทื ืืืื ืืืจ ืืขื ืขื ืืจืืื ื ืฆื ืจืึทื ืืึทืืื ืึทืงืกืขืก ืคืึทืจืฉืืืขื ืข ืคึผืึทืจืฅ ืคืื ืืึผืจืื ืืื ื ืึธืจ ืืืืขื ืขื ืึท ืคึผืึธืจ ืคืื ืงืืืึธืืืื, ืืืจ ืืึธื ื ืืฆื ืจืขืืืืขืจ ืืืขืืขืจ ืืื ื ืืฉื ืืึธืจื ืืืขืื ืขืคึผืขืก ืึทื ืืขืจืฉ.
ืืืืฃ ืื ืื ืืขืจืข ืืึทื ื, ืืืื ืืืจ ืืึทืจืคึฟื ืฆื ืึทืงืกืขืก ืึท ืืจืืืก ืืืื ืคืื ืืึผืจืื ืกืึทืงืืืขื ืืฉืึทืื, ืจืืืืง ืืืขืืขืจ ืืืขื ืคึฟืึทืจืืขืกืขืจื ืืืื ืคืึธืจืฉืืขืืื ื. ืึธืืขืจ, ืืืจ ืืึทืจืคึฟื ืฆื ืคึผืจืืืืจื ืขืก ืืื (ื ืื ืืื ืึทืืกืืจืึทืงื ืืืืืืืืืจื) ืืื ืืขื ืืืึธืก ืึทืจืืขื ืคืึทืกืืขืจ.
ืึทืืึทืงืืืฉืึทื ืืื ืืึผืจืื
ืืืื ืืืจ ืฉืจืืึทืื C, ืืืจ ืืืืกื ืึทื ืืืจ ืงืขื ืขื ืืขืื ืึทืจืืืืจืขืจืึทืื ืงืืืื (ืึธืืขืจ ืึผืืขื ืึทืจืืืืจืขืจืึทืื ืืจืืืก) ืึทืืึทืื ืฅ ืคืื ืืึผืจืื ืคืื ืื ืงืืคึผืข. malloc()
. ืืื ืก ืืึธืื ืืืจ ืืึทืจืคึฟื 30 ืืืืขืก ืคืื ืืึผืจืื:
char* mymemory = malloc(30);
ืคึฟืึทืจ ืึท ืคึผืจืึธืืจืึทืืืกื, ืขืก ืงืขื ืืืื ืึทื ืืืจ "ืจืืงืืืขืก" 30 ืืืืขืก ืคืื ืืึผืจืื ืคืื ืื ืึธืคึผืขืจืืืืื ื ืกืืกืืขื ืืื ืฆืืจืืงืงืืืขื ืึท ืืืึทืื ืฆื ืขืืืขืืข ืืืืจืืืึทื ืืึผืจืื. ืืืขืจ ืืืขืฉื malloc ()
ืืื ื ืึธืจ ืึท C ืคึฟืื ืงืฆืืข ืืืึธืก ืจืืคื ืคึฟืื ืืขืจ ืคึฟืื ืงืฆืืข
ืึธืืขืจ, ืจืืงืืืขืกืืื ื ืืขืจ ืืื ืืขืจ ืืึผืจืื ืคึฟืึทืจ ืืขืืขืจ ืึทืืึทืงืืืฉืึทื ืืื ืืึทืืืึธื ืืฉ; ืขืก ืืื ืจืืึฟ ืืกืชึผืื ืึทื ืขืืืขืืข ืืึผืจืื ืึธืคึผืฉื ืื ืืื ืฉืืื ืืืคืจืืื (free())
, ืืื ืืืจ ืงืขื ืขื ืจืืืื ืขืก. malloc()
ืืืคึผืืึทืืึทื ืฅ ืืึทื ืฅ ืงืึธืืคึผืืขืงืก ืึทืืืขืจืืืึทืื ืคึฟืึทืจ ืจืืืืื ื ืืืคืจืืื ืืึผืจืื.
ืืื ืืขืจ ืืขืืืืงืขืจ ืฆืืื, ืึทืืฅ ืืึทืคึผืึทื ื ืึทื ื ืึธืืืืกื ืคึฟืึทืจ ืืืจ, ืึทืืื ืืืึธืก ืืึธื ืขืก ืืึธืจื ืืืจ? ืืืขืจ ืืืืึทื ืื ืึทืจืืืกืจืืคื free()
ืืื ื ืืฉื ืืืื ืขื ืึทื
ืขืก ืืื ืึทืืึท ืึท ืืึทื ืืื ืืึผืจืื ืคืจืึทืืืึทื ืืืืฉืึทื. ืืื ืขืงืกืืจืขื ืงืึทืกืขืก, ืขืก ืืขื ืขื ืงืืคึผืข ืกืขืืืึทื ืฅ ืืื ืืืืื ืึท ืืืกื ืืืืขืก ืืขื ืขื ืืขื ืืฆื, ืืฉืขืช ืึทืืฅ ืืื ืฆืืืืฉื ืืื ืืืคืจืืื (free())
.
ืืืืข ืืึธื ืึทื ืืืงืึธืจื ืคืจืึทืืืึทื ืืืืฉืึทื ืืื ืึทื ืื ืงืจืขืืึทืืื ืงืึธืืคึผืืืฆืืจื ืืขืืข, ืืื ืืคืืื ืืื ืขืจืืืขืจืืืง ืขื ืืขืจืื ืืขื ืฆื ืึท ืคึผืจืึธืืจืึทื ืงืขื ืขื ืืึธืื ืึท ืืึทืืืืืืง ืคึผืจืึทื. ืืื ืจืืึฟ ืคืืื, ืืืืื ืืืขื ื ืืฉื ืคืึทืจืฉืึทืคื ืืึทืืืืืืง ืืืงืึธืจื ืคืจืึทืืืึทื ืืืืฉืึทื, ืึธืืขืจ ืืืจ ืืึธื ืืืื ืึทืืืขืจ ืึทื ืืืื ืขืก ืืื ืึท ืคึผืจืึธืืืขื ืืื ืคืจืึทืืืึทื ืืืืฉืึทื ืืื ืขืืืขืืข ืืขืื ื ืคืื ืืขืจ ืงืืคึผืข, ืจืืืืง ืืืขืืขืจ ืงืขื ืขื ืืึทืื ืื ืกืืืืึทืฆืืข ืขืจืืขืจ.
ืกืขืืขืงืืืื ื ืืฆื ืคืื ืจืืืืง ืืืขืืขืจ
ื ืึธื ืืืืขื ืขื ืืขื ืึทืจืืืงื, ืืืจ ืืึธื ืืืฉืืืกื ืืืึธืก ืคึผืึทืจืฅ ืคืื ืืืื ืคึผืจืึธืืจืึทื ืงืขื ืขื ื ืืฅ ืคืื ื ืืฆื ืจืืืืง ืืืขืืขืจ ืืื ืืืึธืก ืงืขื ืขื ื ืืฉื. ืืึธื ืืืืึทืืืืง ืืืขืืขืจ ืืืื ืืืื ืขื ืืืืึทืื?
ืฆืื ืืืืง ืืืจ ืงืขื ืขื ื ืืฆื madvise()
ืฆื ืืขืื ืืืืขืคึผืึทืืื ื ืืืืื ืคึฟืึทืจ ืืขื ืข ืืืงืึธืจื ืืขืืืื ืืื ืขืก ืืืึธืื ืืืื ื ืืฆืืง.
ืขืจืฉืืขืจ, ืงืึธื ืืจืึธืืืจื ืึทื Hugepages ืืื ืคืืืกื ืืืง ืืื ืืึทืืืืืกืข () ืืึธืืข ื ืืฆื
ืืขืจื ืึธื, ื ืืฆื madvise()
ืฆื ืืึธืื ืื ืงืขืจื ืคึผืื ืงื ืืื ืฆื ื ืืฆื ืจืืืืง ืืืขืืขืจ.
#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)
ืืึทืืขืจืงืื ื ืึทื ืืขื ืืืคึฟื ืืื ืคืฉืื ืขืฆื ืฆื ืื ืงืขืจื ืืื ืฆื ืคืืจื ืืึผืจืื. ืืึธืก ืืื ื ืืฉื ืืืื ืขื ืึทื ืืขืจ ืงืขืจื ืืืขื ืืืืืึธืืึทืืืฉ ื ืืฆื ืจืืืืง ืืืขืืขืจ ืคึฟืึทืจ ืึท ืืขืืขืื ืืึผืจืื.
ืึธืคึผืฉืืงื ืฆื ืืึทืงืืืืขื ืืืืฉืึทื madvise()
, ืืขื ืืขืืข ืืื ืึท ืื ืงืจืขืืึทืืื ืึทืจืึธืคืึทื ื ืืขืจื ืขื ืืืกืืืื. ืึทืืื ืืืื ืืืจ ืืืขื ืฆื ืืึทืงืืืขื ืืึทืงืข ืืื ืืื ืขืก, ืืจืืืื ืืื ืฆื ืืืืขื ืขื ืืื ืคึผืจืืืืจื ืคึฟืึทืจ ืึท ืืืกื ืืืึธืื ืืืืืขืจ ืืืจ ืืขืจืืืึทืจืื positive ืจืขืืืืืึทืื.
ืืืึธืก ืฆื ืืืืขื ืขื?
IBM OpenStack ืึทืจืืืงื ืืืืฃ ืจืืืืง ืืืขืืขืจ ืืจืึทื ืกืคึผืขืจืึทื ื ืืืืขืคึผืึทืืขืก ืืืก ื ืื-ืืจืึทื ืกืคึผืขืจืึทื ื ืืืืขืคึผืึทืืขืก ืืืืงืืคืขืืืข ืึทืจืืืงื ืืืขืื TLB ืืื ืืงืก ืงืขืจื ืืึทืงืืืืขื ืืืืฉืึทื ืืืืฃ ืืจืึทื ืกืคึผืขืจืึทื ื ืืืืขืคึผืึทืืขืก StackOverflow: ืืืืขืคึผืึทืืขืก ืืขื ืขื ืคึผืจืึธื ืข ืฆื ืืืงืึธืจื ืคืจืึทืืืึทื ืืืืฉืึทื ืืืืงืจืึธืกืึธืคึฟื ืึทืจืืืงื ืืืขืื ืืืืจืืืึทื ืืึผืจืื ืคืึทืจืืืึทืืืื ื
ืืึธืื ืึท ืงืฉืื? ืฉืจืืื ืืื ืื ืืึทืืขืจืงืื ืืขื!
ืืงืืจ: www.habr.com