
ΠΡΠ΅Π²ΠΎΠ΄ ΡΠ»Π°Π½ΠΊΠ° ΠΏΡΠΈΠΏΡΠ΅ΠΌΡΠ΅Π½ Π·Π° ΡΡΡΠ΄Π΅Π½ΡΠ΅ ΠΊΡΡΡΠ° .
Π Π°Π½ΠΈΡΠ΅ ΡΠ°ΠΌ Π³ΠΎΠ²ΠΎΡΠΈΠΎ ΠΎ ΡΠΎΠΌΠ΅ ΠΊΠ°ΠΊΠΎ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΠΈ ΠΈ ΠΎΠΌΠΎΠ³ΡΡΠΈΡΠΈ ΠΊΠΎΡΠΈΡΡΠ΅ΡΠ΅ Hugepages-Π° Ρ Linux.
ΠΠ²Π°Ρ ΡΠ»Π°Π½Π°ΠΊ ΡΠ΅ Π±ΠΈΡΠΈ ΠΊΠΎΡΠΈΡΡΠ°Π½ ΡΠ°ΠΌΠΎ Π°ΠΊΠΎ Π·Π°ΠΈΡΡΠ° ΠΈΠΌΠ°ΡΠ΅ ΠΌΠ΅ΡΡΠΎ Π΄Π° ΠΊΠΎΡΠΈΡΡΠΈΡΠ΅ Π₯ΡΠ³Π΅ΠΏΠ°Π³Π΅Ρ. Π£ΠΏΠΎΠ·Π½Π°ΠΎ ΡΠ°ΠΌ ΠΌΠ½ΠΎΠ³ΠΎ ΡΡΠ΄ΠΈ ΠΊΠΎΡΠΈ ΡΡ ΠΏΡΠ΅Π²Π°ΡΠ΅Π½ΠΈ ΠΈΠ·Π³Π»Π΅Π΄ΠΎΠΌ Π΄Π° ΡΠ΅ Π₯ΡΠ³Π΅ΠΏΠ°Π³Π΅Ρ ΠΌΠ°Π³ΠΈΡΠ½ΠΎ ΠΏΠΎΠ±ΠΎΡΡΠ°ΡΠΈ ΠΏΡΠΎΠ΄ΡΠΊΡΠΈΠ²Π½ΠΎΡΡ. ΠΠ΅ΡΡΡΠΈΠΌ, ΠΎΠ³ΡΠΎΠΌΠ½Π° ΡΡΡΠ°Π½ΠΈΡΠ° ΡΠ΅ ΡΠ»ΠΎΠΆΠ΅Π½Π° ΡΠ΅ΠΌΠ° ΠΈ ΠΌΠΎΠΆΠ΅ ΡΠΌΠ°ΡΠΈΡΠΈ ΠΏΠ΅ΡΡΠΎΡΠΌΠ°Π½ΡΠ΅ Π°ΠΊΠΎ ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΎ.
ΠΠ΅ΠΎ 1: ΠΡΠΎΠ²Π΅ΡΠΈΡΠ΅ Π΄Π° Π»ΠΈ ΡΡ ΠΎΠΌΠΎΠ³ΡΡΠ΅Π½Π΅ ΠΎΠΏΡΠΈΡΠ΅ hugepages Linux (ΠΎΡΠΈΠ³ΠΈΠ½Π°Π» )
ΠΡΠΎΠ±Π»Π΅ΠΌ:
ΠΠΎΡΠ°ΡΠ΅ Π΄Π° ΠΏΡΠΎΠ²Π΅ΡΠΈΡΠ΅ Π΄Π° Π»ΠΈ ΡΠ΅ Π₯ΡΠ³Π΅ΠΠ°Π³Π΅Ρ ΠΎΠΌΠΎΠ³ΡΡΠ΅Π½ Π½Π° Π²Π°ΡΠ΅ΠΌ ΡΠΈΡΡΠ΅ΠΌΡ.
reΕ‘enje:
ΠΡΠΈΠ»ΠΈΡΠ½ΠΎ ΡΠ΅ ΡΠ΅Π΄Π½ΠΎΡΡΠ°Π²Π½ΠΎ:
cat /sys/kernel/mm/transparent_hugepage/enabledΠΠΎΠ±ΠΈΡΠ΅ΡΠ΅ Π½Π΅ΡΡΠΎ ΠΎΠ²Π°ΠΊΠΎ:
always [madvise] neverΠΠΈΠ΄Π΅ΡΠ΅ΡΠ΅ Π»ΠΈΡΡΡ Π΄ΠΎΡΡΡΠΏΠ½ΠΈΡ ΠΎΠΏΡΠΈΡΠ° (ΡΠ²Π΅ΠΊ, Π»ΡΠ΄ΠΎ, Π½ΠΈΠΊΠ°Π΄), Π° ΡΡΠ΅Π½ΡΡΠ½ΠΎ Π°ΠΊΡΠΈΠ²Π½Π° ΠΎΠΏΡΠΈΡΠ° ΡΠ΅ Π±ΠΈΡΠΈ Π·Π°ΡΠ²ΠΎΡΠ΅Π½Π° Ρ Π·Π°Π³ΡΠ°Π΄Π°ΠΌΠ° (ΠΏΠΎΠ΄ΡΠ°Π·ΡΠΌΠ΅Π²Π°Π½ΠΎ ΠΌΠ°Π΄Π²ΠΈΡΠ΅).
ΠΌΠ°Π΄Π²ΠΈΡΠ΅ Π·Π½Π°ΡΠΈ Π΄Π° transparent hugepages ΠΎΠΌΠΎΠ³ΡΡΠ΅Π½ΠΎ ΡΠ°ΠΌΠΎ Π·Π° ΠΌΠ΅ΠΌΠΎΡΠΈΡΡΠΊΠ΅ ΠΎΠ±Π»Π°ΡΡΠΈ ΠΊΠΎΡΠ΅ Π΅ΠΊΡΠΏΠ»ΠΈΡΠΈΡΠ½ΠΎ Π·Π°Ρ
ΡΠ΅Π²Π°ΡΡ ΠΎΠ³ΡΠΎΠΌΠ½Π΅ ΡΡΡΠ°Π½ΠΈΡΠ΅ ΠΊΠΎΡΠΈΡΡΠ΅ΡΠΈ .
ΡΠ²Π΅ΠΊ Π·Π½Π°ΡΠΈ Π΄Π° transparent hugepages ΡΠ²Π΅ΠΊ ΠΎΠΌΠΎΠ³ΡΡΠ΅Π½ Π·Π° ΡΠ²Π΅ ΠΏΡΠΎΡΠ΅ΡΠ΅. ΠΠ²ΠΎ ΠΎΠ±ΠΈΡΠ½ΠΎ ΠΏΠΎΠ±ΠΎΡΡΠ°Π²Π° ΠΏΠ΅ΡΡΠΎΡΠΌΠ°Π½ΡΠ΅, Π°Π»ΠΈ Π°ΠΊΠΎ ΠΈΠΌΠ°ΡΠ΅ ΡΠ»ΡΡΠ°Ρ ΡΠΏΠΎΡΡΠ΅Π±Π΅ Ρ ΠΊΠΎΡΠ΅ΠΌ ΠΌΠ½ΠΎΠ³ΠΈ ΠΏΡΠΎΡΠ΅ΡΠΈ ΡΡΠΎΡΠ΅ ΠΌΠ°Π»Ρ ΠΊΠΎΠ»ΠΈΡΠΈΠ½Ρ ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ΅, ΠΎΠ½Π΄Π° ΡΠ΅ ΡΠΊΡΠΏΠ½ΠΎ ΠΎΠΏΡΠ΅ΡΠ΅ΡΠ΅ΡΠ΅ ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ΅ ΠΌΠΎΠΆΠ΅ Π΄ΡΠ°ΠΌΠ°ΡΠΈΡΠ½ΠΎ ΠΏΠΎΠ²Π΅ΡΠ°ΡΠΈ.
Π½ΠΈΠΊΠ°Π΄ Π·Π½Π°ΡΠΈ Π΄Π° transparent hugepages Π½Π΅ΡΠ΅ Π±ΠΈΡΠΈ ΡΠΊΡΡΡΠ΅Π½ΠΎ ΡΠ°ΠΊ Π½ΠΈ ΠΊΠ°Π΄Π° ΡΠ΅ ΡΠΎ Π·Π°Ρ
ΡΠ΅Π²Π° ΠΊΠΎΡΠΈΡΡΠ΅ΡΠ΅ΠΌ ΠΌΠ°Π΄Π²ΠΈΡΠ΅-Π°. ΠΠ° Π±ΠΈΡΡΠ΅ ΡΠ°Π·Π½Π°Π»ΠΈ Π²ΠΈΡΠ΅, ΠΊΠΎΠ½ΡΠ°ΠΊΡΠΈΡΠ°ΡΡΠ΅ ΡΠ΅Π·Π³ΡΠ° Linux.
ΠΠ°ΠΊΠΎ ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠΈ ΠΏΠΎΠ΄ΡΠ°Π·ΡΠΌΠ΅Π²Π°Π½Ρ Π²ΡΠ΅Π΄Π½ΠΎΡΡ
ΠΠΏΡΠΈΡΠ° ΠΠ‘ΠΠ£ΠΠΠ‘: ΠΠΈΡΠ΅ΠΊΡΠ½ΠΎ ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠΈ 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ΠΠΏΡΠΈΡΠ° ΠΠ‘ΠΠ£ΠΠΠ‘: ΠΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅ ΠΏΠΎΠ΄ΡΠ°Π·ΡΠΌΠ΅Π²Π°Π½ΠΈ ΡΠΈΡΡΠ΅ΠΌ ΡΠ°ΠΊΠΎ ΡΡΠΎ ΡΠ΅ΡΠ΅ ΠΏΠΎΠ½ΠΎΠ²ΠΎ ΠΊΠΎΠΌΠΏΠ°ΡΠ»ΠΈΡΠ°ΡΠΈ ΠΊΠ΅ΡΠ½Π΅Π» ΡΠ° ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠΎΠ²Π°Π½ΠΎΠΌ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠΎΠΌ (ΠΎΠ²Π° ΠΎΠΏΡΠΈΡΠ° ΡΠ΅ ΠΏΡΠ΅ΠΏΠΎΡΡΡΡΡΠ΅ ΡΠ°ΠΌΠΎ Π°ΠΊΠΎ ΠΊΠΎΡΠΈΡΡΠΈΡΠ΅ ΠΏΡΠΈΠ»Π°Π³ΠΎΡΠ΅Π½ΠΎ ΡΠ΅Π·Π³ΡΠΎ):
- ΠΠ° Π±ΠΈΡΡΠ΅ ΡΠ²Π΅ΠΊ ΠΏΠΎΠ΄Π΅ΡΠΈΠ»ΠΈ ΠΏΠΎΠ΄ΡΠ°Π·ΡΠΌΠ΅Π²Π°Π½ΠΎ, ΠΊΠΎΡΠΈΡΡΠΈΡΠ΅:
CONFIG_TRANSPARENT_HUGEPAGE_ALWAYS=y # Comment out CONFIG_TRANSPARENT_HUGEPAGE_MADVISE=y - ΠΠ° Π±ΠΈΡΡΠ΅ ΠΏΠΎΡΡΠ°Π²ΠΈΠ»ΠΈ ΠΌΠ°Π΄Π²ΠΈΡΠ΅ ΠΊΠ°ΠΎ ΠΏΠΎΠ΄ΡΠ°Π·ΡΠΌΠ΅Π²Π°Π½ΠΈ, ΠΊΠΎΡΠΈΡΡΠΈΡΠ΅:
CONFIG_TRANSPARENT_HUGEPAGE_MADVISE=y # Comment out CONFIG_TRANSPARENT_HUGEPAGE_ALWAYS=y
ΠΠ΅ΠΎ 2: ΠΡΠ΅Π΄Π½ΠΎΡΡΠΈ ΠΈ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΈ Π₯ΡΠ³Π΅ΠΠ°Π³Π΅Ρ
ΠΠΎΠΊΡΡΠ°ΡΠ΅ΠΌΠΎ Π΄Π° ΡΠ΅Π»Π΅ΠΊΡΠΈΠ²Π½ΠΎ ΠΎΠ±ΡΠ°ΡΠ½ΠΈΠΌΠΎ ΠΏΡΠ΅Π΄Π½ΠΎΡΡΠΈ, Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΊΠ΅ ΠΈ ΠΌΠΎΠ³ΡΡΠ΅ Π·Π°ΠΌΠΊΠ΅ ΠΊΠΎΡΠΈΡΡΠ΅ΡΠ° Π₯ΡΠ³Π΅ΠΏΠ°Π³Π΅Ρ. ΠΠΎΡΡΠΎ ΡΠ΅ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΡΠΊΠΈ ΡΠ»ΠΎΠΆΠ΅Π½ ΠΈ ΠΏΠ΅Π΄Π°Π½ΡΠ°Π½ ΡΠ»Π°Π½Π°ΠΊ Π²Π΅ΡΠΎΠ²Π°ΡΠ½ΠΎ Π±ΠΈΡΠΈ ΡΠ΅ΡΠΊΠΎ ΡΠ°Π·ΡΠΌΠ΅ΡΠΈ ΡΡΠ΄ΠΈΠΌΠ° ΠΊΠΎΡΠΈ ΡΠ΅ Π·Π°Π²Π°ΡΠ°Π²Π°ΡΡ ΠΌΠΈΡΠ»Π΅ΡΠΈ Π΄Π° ΡΠ΅ Π₯ΡΠ³Π΅ΠΏΠ°Π³Π΅Ρ Π»Π΅ΠΊ, ΠΆΡΡΠ²ΠΎΠ²Π°ΡΡ ΠΏΡΠ΅ΡΠΈΠ·Π½ΠΎΡΡ ΡΠ°Π΄ΠΈ ΡΠ΅Π΄Π½ΠΎΡΡΠ°Π²Π½ΠΎΡΡΠΈ. Π‘Π°ΠΌΠΎ Π²ΡΠ΅Π΄ΠΈ ΠΈΠΌΠ°ΡΠΈ Π½Π° ΡΠΌΡ Π΄Π° ΡΡ ΠΌΠ½ΠΎΠ³Π΅ ΡΠ΅ΠΌΠ΅ Π·Π°ΠΈΡΡΠ° ΡΠ»ΠΎΠΆΠ΅Π½Π΅ ΠΈ ΡΡΠΎΠ³Π° Π²Π΅ΠΎΠΌΠ° ΠΏΠΎΡΠ΅Π΄Π½ΠΎΡΡΠ°Π²ΡΠ΅Π½Π΅.
ΠΠΌΠ°ΡΡΠ΅ Π½Π° ΡΠΌΡ Π΄Π° Π³ΠΎΠ²ΠΎΡΠΈΠΌΠΎ ΠΎ 64-Π±ΠΈΡΠ½ΠΈΠΌ x86 ΡΠΈΡΡΠ΅ΠΌΠΈΠΌΠ° ΠΊΠΎΡΠΈ ΡΠ°Π΄Π΅ Π½Π° Linux, ΠΈ Π΄Π° ΡΠ΅Π΄Π½ΠΎΡΡΠ°Π²Π½ΠΎ ΠΏΡΠ΅ΡΠΏΠΎΡΡΠ°Π²ΡΠ°ΠΌ Π΄Π° ΡΠΈΡΡΠ΅ΠΌ ΠΏΠΎΠ΄ΡΠΆΠ°Π²Π° ΡΡΠ°Π½ΡΠΏΠ°ΡΠ΅Π½ΡΠ½Π΅ Π²Π΅Π»ΠΈΠΊΠ΅ ΡΡΡΠ°Π½ΠΈΡΠ΅ (ΠΏΠΎΡΡΠΎ Π½ΠΈΡΠ΅ ΠΌΠ°Π½Π° ΡΡΠΎ Π²Π΅Π»ΠΈΠΊΠ΅ ΡΡΡΠ°Π½ΠΈΡΠ΅ Π½ΠΈΡΡ Π·Π°ΠΌΠ΅ΡΠ΅Π½Π΅), ΠΊΠ°ΠΎ ΡΡΠΎ ΡΠ΅ ΡΠ»ΡΡΠ°Ρ Ρ ΡΠΊΠΎΡΠΎ ΡΠ²Π°ΠΊΠΎΠΌ ΠΌΠΎΠ΄Π΅ΡΠ½ΠΎΠΌ ΠΎΠΊΡΡΠΆΠ΅ΡΡ Linux.
ΠΡΠΈΠ»ΠΎΠΆΠΈΡΡ Π²ΠΈΡΠ΅ ΡΠ΅Ρ Π½ΠΈΡΠΊΠΎΠ³ ΠΎΠΏΠΈΡΠ° Π½Π° Π»ΠΈΠ½ΠΊΠΎΠ²ΠΈΠΌΠ° ΠΈΡΠΏΠΎΠ΄.
ΠΠΈΡΡΡΠ΅Π»Π½Π° ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ°
ΠΠΊΠΎ ΡΡΠ΅ Π¦++ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ΅Ρ, Π·Π½Π°ΡΠ΅ Π΄Π° ΠΎΠ±ΡΠ΅ΠΊΡΠΈ Ρ ΠΌΠ΅ΠΌΠΎΡΠΈΡΠΈ ΠΈΠΌΠ°ΡΡ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½Π΅ Π°Π΄ΡΠ΅ΡΠ΅ (Π²ΡΠ΅Π΄Π½ΠΎΡΡΠΈ ΠΏΠΎΠΊΠ°Π·ΠΈΠ²Π°ΡΠ°).
ΠΠ΅ΡΡΡΠΈΠΌ, ΠΎΠ²Π΅ Π°Π΄ΡΠ΅ΡΠ΅ Π½Π΅ ΠΎΠ΄ΡΠ°ΠΆΠ°Π²Π°ΡΡ Π½ΡΠΆΠ½ΠΎ ΡΠΈΠ·ΠΈΡΠΊΠ΅ Π°Π΄ΡΠ΅ΡΠ΅ Ρ ΠΌΠ΅ΠΌΠΎΡΠΈΡΠΈ (Π ΠΠ Π°Π΄ΡΠ΅ΡΠ΅). ΠΠ½ΠΈ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΡΠ°ΡΡ Π°Π΄ΡΠ΅ΡΠ΅ Ρ Π²ΠΈΡΡΡΠ΅Π»Π½ΠΎΡ ΠΌΠ΅ΠΌΠΎΡΠΈΡΠΈ. ΠΡΠΎΡΠ΅ΡΠΎΡ ΠΈΠΌΠ° ΠΏΠΎΡΠ΅Π±Π°Π½ ΠΠΠ£ (ΠΌΠ΅ΠΌΠΎΡΠΈ ΠΌΠ°Π½Π°Π³Π΅ΠΌΠ΅Π½Ρ ΡΠ½ΠΈΡ) ΠΌΠΎΠ΄ΡΠ» ΠΊΠΎΡΠΈ ΠΏΠΎΠΌΠ°ΠΆΠ΅ ΠΊΠ΅ΡΠ½Π΅Π»Ρ Π΄Π° ΠΌΠ°ΠΏΠΈΡΠ° Π²ΠΈΡΡΡΠ΅Π»Π½Ρ ΠΌΠ΅ΠΌΠΎΡΠΈΡΡ Π½Π° ΡΠΈΠ·ΠΈΡΠΊΡ Π»ΠΎΠΊΠ°ΡΠΈΡΡ.
ΠΠ²Π°Ρ ΠΏΡΠΈΡΡΡΠΏ ΠΈΠΌΠ° ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡΠ΅Π΄Π½ΠΎΡΡΠΈ, Π°Π»ΠΈ Π½Π°ΡΠ²Π°ΠΆΠ½ΠΈΡΠ΅ ΡΡ:
- ΠΠ΅ΡΡΠΎΡΠΌΠ°Π½ΡΠ΅ (ΠΈΠ· ΡΠ°Π·Π½ΠΈΡ ΡΠ°Π·Π»ΠΎΠ³Π°);
- ΠΠ·ΠΎΠ»Π°ΡΠΈΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°, ΠΎΠ΄Π½ΠΎΡΠ½ΠΎ Π½ΠΈΡΠ΅Π΄Π°Π½ ΠΏΡΠΎΠ³ΡΠ°ΠΌ Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠΈΡΠ° ΠΈΠ· ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ΅ Π΄ΡΡΠ³ΠΎΠ³ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°.
Π¨ΡΠ° ΡΡ ΡΡΡΠ°Π½ΠΈΡΠ΅?
ΠΠΈΡΡΡΠ΅Π»Π½Π° ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ° ΡΠ΅ ΠΏΠΎΠ΄Π΅ΡΠ΅Π½Π° Π½Π° ΡΡΡΠ°Π½ΠΈΡΠ΅. Π‘Π²Π°ΠΊΠ° ΠΏΠΎΡΠ΅Π΄ΠΈΠ½Π°ΡΠ½Π° ΡΡΡΠ°Π½ΠΈΡΠ° ΡΠΊΠ°Π·ΡΡΠ΅ Π½Π° ΠΎΠ΄ΡΠ΅ΡΠ΅Π½Ρ ΡΠΈΠ·ΠΈΡΠΊΡ ΠΌΠ΅ΠΌΠΎΡΠΈΡΡ, ΠΌΠΎΠΆΠ΅ ΡΠΊΠ°Π·ΠΈΠ²Π°ΡΠΈ Π½Π° ΠΎΠ±Π»Π°ΡΡ Ρ Π ΠΠ-Ρ ΠΈΠ»ΠΈ ΠΌΠΎΠΆΠ΅ ΡΠΊΠ°Π·ΠΈΠ²Π°ΡΠΈ Π½Π° Π°Π΄ΡΠ΅ΡΡ Π΄ΠΎΠ΄Π΅ΡΠ΅Π½Ρ ΡΠΈΠ·ΠΈΡΠΊΠΎΠΌ ΡΡΠ΅ΡΠ°ΡΡ, ΠΊΠ°ΠΎ ΡΡΠΎ ΡΠ΅ Π²ΠΈΠ΄Π΅ΠΎ ΠΊΠ°ΡΡΠΈΡΠ°.
ΠΠ΅ΡΠΈΠ½Π° ΡΡΡΠ°Π½ΠΈΡΠ° ΡΠ° ΠΊΠΎΡΠΈΠΌΠ° ΡΠ΅ Π±Π°Π²ΠΈΡΠ΅ ΠΈΠ»ΠΈ ΡΠΏΡΡΡΡΠ΅ Π½Π° Π ΠΠ ΠΈΠ»ΠΈ ΡΠ΅ Π·Π°ΠΌΠ΅ΡΡΡΡ, ΡΡΠΎ Π·Π½Π°ΡΠΈ Π΄Π° ΡΡ ΡΡΠΊΠ»Π°Π΄ΠΈΡΡΠ΅Π½Π΅ Π½Π° Π²Π°ΡΠ΅ΠΌ ΡΠ²ΡΡΡΠΎΠΌ Π΄ΠΈΡΠΊΡ ΠΈΠ»ΠΈ Π‘Π‘Π-Ρ. ΠΠ΅ΡΠ½Π΅Π» ΡΠΏΡΠ°Π²ΡΠ° ΡΠΈΠ·ΠΈΡΠΊΠΈΠΌ ΠΈΠ·Π³Π»Π΅Π΄ΠΎΠΌ ΡΠ²Π°ΠΊΠ΅ ΡΡΡΠ°Π½ΠΈΡΠ΅. ΠΠΊΠΎ ΡΠ΅ ΠΏΡΠΈΡΡΡΠΏΠΈ Π»Π°ΠΆΠ½ΠΎΡ ΡΡΡΠ°Π½ΠΈΡΠΈ, ΠΊΠ΅ΡΠ½Π΅Π» Π·Π°ΡΡΡΠ°Π²ΡΠ° Π½ΠΈΡ ΠΊΠΎΡΠ° ΠΏΠΎΠΊΡΡΠ°Π²Π° Π΄Π° ΠΏΡΠΈΡΡΡΠΏΠΈ ΠΌΠ΅ΠΌΠΎΡΠΈΡΠΈ, ΡΠΈΡΠ° ΡΡΡΠ°Π½ΠΈΡΡ ΡΠ° ΡΠ²ΡΡΡΠΎΠ³ Π΄ΠΈΡΠΊΠ°/Π‘Π‘Π-Π° Ρ Π ΠΠ, Π° Π·Π°ΡΠΈΠΌ Π½Π°ΡΡΠ°Π²ΡΠ° ΡΠ° ΠΈΠ·Π²ΡΡΠ°Π²Π°ΡΠ΅ΠΌ Π½ΠΈΡΠΈ.
ΠΠ²Π°Ρ ΠΏΡΠΎΡΠ΅Ρ ΡΠ΅ ΡΡΠ°Π½ΡΠΏΠ°ΡΠ΅Π½ΡΠ°Π½, ΡΡΠΎ Π·Π½Π°ΡΠΈ Π΄Π° ΡΠ΅ Π½Π΅ ΡΠΈΡΠ° Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ ΡΠ° Π₯ΠΠ/Π‘Π‘Π-Π°. ΠΠ΅Π»ΠΈΡΠΈΠ½Π° Π½ΠΎΡΠΌΠ°Π»Π½ΠΈΡ ΡΡΡΠ°Π½ΠΈΡΠ° ΡΠ΅ 4096 Π±Π°ΡΡΠΎΠ²Π°. ΠΠ΅Π»ΠΈΡΠΈΠ½Π° ΠΎΠ³ΡΠΎΠΌΠ½ΠΈΡ ΡΡΡΠ°Π½ΠΈΡΠ° ΡΠ΅ 2 ΠΌΠ΅Π³Π°Π±Π°ΡΡΠ°.
Π’ΡΠ°Π½ΡΠ»Π°ΡΠΈΡΡΠΊΠΈ Π°ΡΠΎΡΠΈΡΠ°ΡΠΈΠ²Π½ΠΈ Π±Π°ΡΠ΅Ρ (Π’ΠΠ)
ΠΠ°Π΄Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌ ΠΏΡΠΈΡΡΡΠΏΠΈ ΡΡΡΠ°Π½ΠΈΡΠΈ ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ΅, Π¦ΠΠ£ ΠΌΠΎΡΠ° Π·Π½Π°ΡΠΈ ΡΠ° ΠΊΠΎΡΠ΅ ΡΠΈΠ·ΠΈΡΠΊΠ΅ ΡΡΡΠ°Π½ΠΈΡΠ΅ Π΄Π° ΡΠΈΡΠ° ΠΏΠΎΠ΄Π°ΡΠΊΠ΅ (ΡΠΎ ΡΠ΅ΡΡ, ΠΈΠΌΠ° Π²ΠΈΡΡΡΠ΅Π»Π½Ρ ΠΌΠ°ΠΏΡ Π°Π΄ΡΠ΅ΡΠ°).
ΠΠ΅ΡΠ½Π΅Π» ΠΈΠΌΠ° ΡΡΡΡΠΊΡΡΡΡ ΠΏΠΎΠ΄Π°ΡΠ°ΠΊΠ° (ΡΠ°Π±Π΅Π»Ρ ΡΡΡΠ°Π½ΠΈΡΠ°) ΠΊΠΎΡΠ° ΡΠ°Π΄ΡΠΆΠΈ ΡΠ²Π΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡΠ΅ ΠΎ ΡΡΡΠ°Π½ΠΈΡΠ°ΠΌΠ° ΠΊΠΎΡΠ΅ ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠ΅. ΠΠΎΡΠΈΡΡΠ΅ΡΠΈ ΠΎΠ²Ρ ΡΡΡΡΠΊΡΡΡΡ ΠΏΠΎΠ΄Π°ΡΠ°ΠΊΠ°, ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΌΠ°ΠΏΠΈΡΠ°ΡΠΈ Π²ΠΈΡΡΡΠ΅Π»Π½Ρ Π°Π΄ΡΠ΅ΡΡ Ρ ΡΠΈΠ·ΠΈΡΠΊΡ Π°Π΄ΡΠ΅ΡΡ.
ΠΠ΅ΡΡΡΠΈΠΌ, ΡΠ°Π±Π΅Π»Π° ΡΡΡΠ°Π½ΠΈΡΠ° ΡΠ΅ ΠΏΡΠΈΠ»ΠΈΡΠ½ΠΎ ΡΠ»ΠΎΠΆΠ΅Π½Π° ΠΈ ΡΠΏΠΎΡΠ°, ΡΠ°ΠΊΠΎ Π΄Π° ΡΠ΅Π΄Π½ΠΎΡΡΠ°Π²Π½ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌΠΎ Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠ°ΡΠΈ ΡΠ΅Π»Ρ ΡΡΡΡΠΊΡΡΡΡ ΠΏΠΎΠ΄Π°ΡΠ°ΠΊΠ° ΡΠ²Π°ΠΊΠΈ ΠΏΡΡ ΠΊΠ°Π΄Π° ΠΏΡΠΎΡΠ΅Ρ ΠΏΡΠΈΡΡΡΠΏΠ° ΠΌΠ΅ΠΌΠΎΡΠΈΡΠΈ.
ΠΠ° ΡΡΠ΅ΡΡ, Π½Π°Ρ ΠΏΡΠΎΡΠ΅ΡΠΎΡ ΠΈΠΌΠ° Π’ΠΠ ΠΊΠΎΡΠΈ ΠΊΠ΅ΡΠΈΡΠ° ΠΌΠ°ΠΏΠΈΡΠ°ΡΠ΅ ΠΈΠ·ΠΌΠ΅ΡΡ Π²ΠΈΡΡΡΠ΅Π»Π½ΠΈΡ ΠΈ ΡΠΈΠ·ΠΈΡΠΊΠΈΡ Π°Π΄ΡΠ΅ΡΠ°. Π’ΠΎ Π·Π½Π°ΡΠΈ Π΄Π° ΠΈΠ°ΠΊΠΎ ΡΡΠ΅Π±Π° Π΄Π° ΡΠ°ΡΡΠ»Π°Π½ΠΈΠΌΠΎ ΡΠ°Π±Π΅Π»Ρ ΡΡΡΠ°Π½ΠΈΡΠ° ΠΏΡΠΈ ΠΏΡΠ²ΠΎΠΌ ΠΏΠΎΠΊΡΡΠ°ΡΡ ΠΏΡΠΈΡΡΡΠΏΠ°, ΡΠ²ΠΈ Π½Π°ΡΠ΅Π΄Π½ΠΈ ΠΏΡΠΈΡΡΡΠΏΠΈ ΡΡΡΠ°Π½ΠΈΡΠΈ ΡΠ΅ ΠΌΠΎΠ³Ρ ΡΡΠΊΠΎΠ²Π°ΡΠΈ Ρ Π’ΠΠ-Ρ, ΡΡΠΎ ΠΎΠΌΠΎΠ³ΡΡΠ°Π²Π° Π±ΡΠ· ΡΠ°Π΄.
ΠΠΎΡΡΠΎ ΡΠ΅ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠΈΡΠ°Π½ ΠΊΠ°ΠΎ ΡΠΈΠ·ΠΈΡΠΊΠΈ ΡΡΠ΅ΡΠ°Ρ (ΡΡΠΎ Π³Π° ΡΠΈΠ½ΠΈ Π±ΡΠ·ΠΈΠΌ Π½Π° ΠΏΡΠ²ΠΎΠΌ ΠΌΠ΅ΡΡΡ), ΡΠ΅Π³ΠΎΠ² ΠΊΠ°ΠΏΠ°ΡΠΈΡΠ΅Ρ ΡΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½. ΠΠ°ΠΊΠ»Π΅, Π°ΠΊΠΎ ΠΆΠ΅Π»ΠΈΡΠ΅ Π΄Π° ΠΏΡΠΈΡΡΡΠΏΠΈΡΠ΅ Π²Π΅ΡΠ΅ΠΌ Π±ΡΠΎΡΡ ΡΡΡΠ°Π½ΠΈΡΠ°, Π’ΠΠ Π½Π΅ΡΠ΅ ΠΌΠΎΡΠΈ Π΄Π° ΡΡΠΊΠ»Π°Π΄ΠΈΡΡΠΈ ΠΌΠ°ΠΏΠΈΡΠ°ΡΠ° Π·Π° ΡΠ²Π΅ ΡΠΈΡ , Π·Π±ΠΎΠ³ ΡΠ΅Π³Π° ΡΠ΅ Π²Π°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌ ΡΠ°Π΄ΠΈΡΠΈ ΠΌΠ½ΠΎΠ³ΠΎ ΡΠΏΠΎΡΠΈΡΠ΅.
Π₯ΡΠ³Π΅ΠΏΠ°Π³Π΅Ρ Π΄ΠΎΠ»Π°Π·ΠΈ Ρ ΠΏΠΎΠΌΠΎΡ
ΠΠ°ΠΊΠ»Π΅, ΡΡΠ° ΠΌΠΎΠΆΠ΅ΠΌΠΎ Π΄Π° ΡΡΠ°Π΄ΠΈΠΌΠΎ Π΄Π° ΠΈΠ·Π±Π΅Π³Π½Π΅ΠΌΠΎ ΠΏΡΠ΅Π»ΠΈΠ²Π°ΡΠ΅ Π’ΠΠ-Π°? (ΠΡΠ΅ΡΠΏΠΎΡΡΠ°Π²ΡΠ°ΠΌΠΎ Π΄Π° ΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΡ ΠΈ Π΄Π°ΡΠ΅ ΠΏΠΎΡΡΠ΅Π±Π½Π° ΠΈΡΡΠ° ΠΊΠΎΠ»ΠΈΡΠΈΠ½Π° ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ΅).
ΠΠ²Π΄Π΅ Π΄ΠΎΠ»Π°Π·ΠΈ Π₯ΡΠ³Π΅ΠΏΠ°Π³Π΅Ρ. Π£ΠΌΠ΅ΡΡΠΎ 4096 Π±Π°ΡΡΠΎΠ²Π° ΠΊΠΎΡΠΈ Π·Π°Ρ ΡΠ΅Π²Π°ΡΡ ΡΠ°ΠΌΠΎ ΡΠ΅Π΄Π°Π½ Π’ΠΠ ΡΠ½ΠΎΡ, ΡΠ΅Π΄Π°Π½ Π’ΠΠ ΡΠ½ΠΎΡ ΡΠ°Π΄Π° ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠΊΠ°Π·ΡΡΠ΅ Π½Π° ΠΎΠ³ΡΠΎΠΌΠ½Π° 2 ΠΌΠ΅Π³Π°Π±Π°ΡΡΠ°. ΠΡΠ΅ΡΠΏΠΎΡΡΠ°Π²ΠΈΠΌΠΎ Π΄Π° Π’ΠΠ ΠΈΠΌΠ° 512 ΡΠ½ΠΎΡΠ°, ΠΎΠ²Π΄Π΅ Π±Π΅Π· ΠΎΠ³ΡΠΎΠΌΠ½ΠΈΡ ΡΡΡΠ°Π½ΠΈΡΠ° ΠΌΠΎΠΆΠ΅ΠΌΠΎ Π΄Π° ΡΠ΅ ΠΏΠΎΠ΄ΡΠ΄Π°ΡΠ°ΠΌΠΎ:
4096 bβ
512=2 MBΠΠ°ΠΊΠΎ ΠΎΠ½Π΄Π° Π΄Π° ΡΠ΅ ΠΏΠΎΡΠ΅Π΄ΠΈΠΌΠΎ ΡΠ° ΡΠΈΠΌΠ°:
2 MBβ
512=1 GBΠΠ±ΠΎΠ³ ΡΠΎΠ³Π° ΡΠ΅ Π₯ΡΠ³Π΅ΠΏΠ°Π³Π΅Ρ ΡΡΠ°ΡΠ°Π½. ΠΠ½ΠΈ ΠΌΠΎΠ³Ρ ΠΏΠΎΠ±ΠΎΡΡΠ°ΡΠΈ ΠΏΡΠΎΠ΄ΡΠΊΡΠΈΠ²Π½ΠΎΡΡ Π±Π΅Π· ΠΌΠ½ΠΎΠ³ΠΎ Π½Π°ΠΏΠΎΡΠ°. ΠΠ»ΠΈ ΠΎΠ²Π΄Π΅ ΠΏΠΎΡΡΠΎΡΠ΅ Π·Π½Π°ΡΠ°ΡΠ½Π° ΡΠΏΠΎΠ·ΠΎΡΠ΅ΡΠ°.
ΠΠ³ΡΠΎΠΌΠ½Π΅ Π»Π°ΠΆΠ½Π΅ ΡΡΡΠ°Π½ΠΈΡΠ΅
ΠΠ΅ΡΠ½Π΅Π» Π°ΡΡΠΎΠΌΠ°ΡΡΠΊΠΈ ΠΏΡΠ°ΡΠΈ ΠΊΠΎΠ»ΠΈΠΊΠΎ ΡΠ΅ΡΡΠΎ ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ ΡΠ²Π°ΠΊΠ° ΠΌΠ΅ΠΌΠΎΡΠΈΡΡΠΊΠ° ΡΡΡΠ°Π½ΠΈΡΠ°. ΠΠΊΠΎ Π½Π΅ΠΌΠ° Π΄ΠΎΠ²ΠΎΡΠ½ΠΎ ΡΠΈΠ·ΠΈΡΠΊΠ΅ ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ΅ (Π ΠΠ), ΠΊΠ΅ΡΠ½Π΅Π» ΡΠ΅ ΠΏΡΠ΅ΠΌΠ΅ΡΡΠΈΡΠΈ ΠΌΠ°ΡΠ΅ Π²Π°ΠΆΠ½Π΅ (ΡΠ΅ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠ΅Π½Π΅) ΡΡΡΠ°Π½ΠΈΡΠ΅ Π½Π° ΡΠ²ΡΡΡΠΈ Π΄ΠΈΡΠΊ Π΄Π° Π±ΠΈ ΠΎΡΠ»ΠΎΠ±ΠΎΠ΄ΠΈΠΎ Π½Π΅ΡΡΠΎ Π ΠΠ-Π° Π·Π° Π²Π°ΠΆΠ½ΠΈΡΠ΅ ΡΡΡΠ°Π½ΠΈΡΠ΅.
Π£ ΠΏΡΠΈΠ½ΡΠΈΠΏΡ, ΠΈΡΡΠΎ Π²Π°ΠΆΠΈ ΠΈ Π·Π° Π₯ΡΠ³Π΅ΠΏΠ°Π³Π΅Ρ. ΠΠ΅ΡΡΡΠΈΠΌ, ΠΊΠ΅ΡΠ½Π΅Π» ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΌΠ΅ΡΠ° ΡΠ°ΠΌΠΎ ΡΠ΅Π»Π΅ ΡΡΡΠ°Π½ΠΈΡΠ΅, Π° Π½Π΅ ΠΏΠΎΡΠ΅Π΄ΠΈΠ½Π°ΡΠ½Π΅ Π±Π°ΡΡΠΎΠ²Π΅.
Π Π΅ΡΠΈΠΌΠΎ Π΄Π° ΠΈΠΌΠ°ΠΌΠΎ ΠΎΠ²Π°ΠΊΠ°Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌ:
char* mymemory = malloc(2*1024*1024); // ΠΠΎΠ·ΡΠΌΠ΅ΠΌ ΡΡΠΎ Π·Π° ΠΎΠ΄Π½Ρ Hugepage!
// ΠΠ°ΠΏΠΎΠ»Π½ΠΈΠΌ mymemory ΠΊΠ°ΠΊΠΈΠΌΠΈ-Π»ΠΈΠ±ΠΎ Π΄Π°Π½Π½ΡΠΌΠΈ
// Π‘Π΄Π΅Π»Π°Π΅ΠΌ ΠΌΠ½ΠΎΠ³ΠΎ Π΄ΡΡΠ³ΠΈΡ
Π²Π΅ΡΠ΅ΠΉ,
// ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΈΠ²Π΅Π΄ΡΡ ΠΊ ΠΏΠΎΠ΄ΠΌΠ΅Π½Π΅ ΡΡΡΠ°Π½ΠΈΡΡ mymemory
// ...
// ΠΠ°ΠΏΡΠΎΡΠΈΠΌ Π΄ΠΎΡΡΡΠΏ ΡΠΎΠ»ΡΠΊΠΎ ΠΊ ΠΏΠ΅ΡΠ²ΠΎΠΌΡ Π±Π°ΠΉΡΡ
putchar(mymemory[0]); Π£ ΠΎΠ²ΠΎΠΌ ΡΠ»ΡΡΠ°ΡΡ, ΠΊΠ΅ΡΠ½Π΅Π» ΡΠ΅ ΠΌΠΎΡΠ°ΡΠΈ Π΄Π° Π·Π°ΠΌΠ΅Π½ΠΈ (ΠΏΡΠΎΡΠΈΡΠ°) ΡΠ°ΠΊ 2 ΠΌΠ΅Π³Π°Π±Π°ΡΡΠ° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡΠ° ΡΠ° ΡΠ²ΡΡΡΠΎΠ³ Π΄ΠΈΡΠΊΠ°/Π‘Π‘Π-Π° ΡΠ°ΠΌΠΎ Π΄Π° Π±ΠΈΡΡΠ΅ ΠΌΠΎΠ³Π»ΠΈ Π΄Π° ΠΏΡΠΎΡΠΈΡΠ°ΡΠ΅ ΡΠ΅Π΄Π°Π½ Π±Π°ΡΡ. Π¨ΡΠΎ ΡΠ΅ ΡΠΈΡΠ΅ ΠΎΠ±ΠΈΡΠ½ΠΈΡ ΡΡΡΠ°Π½ΠΈΡΠ°, ΡΠ°ΠΌΠΎ 4096 Π±Π°ΡΡΠΎΠ²Π° ΡΡΠ΅Π±Π° Π΄Π° ΡΠ΅ ΠΏΡΠΎΡΠΈΡΠ° ΡΠ° ΡΠ²ΡΡΡΠΎΠ³ Π΄ΠΈΡΠΊΠ°/Π‘Π‘Π-Π°.
Π‘ΡΠΎΠ³Π°, Π°ΠΊΠΎ ΡΠ΅ ΠΎΠ³ΡΠΎΠΌΠ½Π° ΡΡΡΠ°Π½ΠΈΡΠ° Π·Π°ΠΌΠ΅ΡΠ΅Π½Π°, Π±ΡΠΆΠ΅ ΡΠ΅ ΡΠΈΡΠ°ΡΠ΅ ΡΠ°ΠΌΠΎ Π°ΠΊΠΎ ΡΡΠ΅Π±Π° Π΄Π° ΠΏΡΠΈΡΡΡΠΏΠΈΡΠ΅ ΡΠ΅Π»ΠΎΡ ΡΡΡΠ°Π½ΠΈΡΠΈ. Π’ΠΎ Π·Π½Π°ΡΠΈ Π΄Π° Π°ΠΊΠΎ ΠΏΠΎΠΊΡΡΠ°Π²Π°ΡΠ΅ Π΄Π° Π½Π°ΡΡΠΌΠΈΡΠ½ΠΎ ΠΏΡΠΈΡΡΡΠΏΠΈΡΠ΅ ΡΠ°Π·Π»ΠΈΡΠΈΡΠΈΠΌ Π΄Π΅Π»ΠΎΠ²ΠΈΠΌΠ° ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ΅ ΠΈ ΡΠΈΡΠ°ΡΠ΅ ΡΠ°ΠΌΠΎ Π½Π΅ΠΊΠΎΠ»ΠΈΠΊΠΎ ΠΊΠΈΠ»ΠΎΠ±Π°ΡΡΠ°, ΡΡΠ΅Π±Π°Π»ΠΎ Π±ΠΈ Π΄Π° ΠΊΠΎΡΠΈΡΡΠΈΡΠ΅ ΠΎΠ±ΠΈΡΠ½Π΅ ΡΡΡΠ°Π½ΠΈΡΠ΅ ΠΈ Π΄Π° Π½Π΅ Π±ΡΠΈΠ½Π΅ΡΠ΅ Π½ΠΈ ΠΎ ΡΠ΅ΠΌΡ Π΄ΡΡΠ³ΠΎΠΌ.
Π‘ Π΄ΡΡΠ³Π΅ ΡΡΡΠ°Π½Π΅, Π°ΠΊΠΎ ΡΡΠ΅Π±Π° Π΄Π° ΠΏΡΠΈΡΡΡΠΏΠΈΡΠ΅ Π²Π΅Π»ΠΈΠΊΠΎΠΌ Π΄Π΅Π»Ρ ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ΅ ΡΠ·Π°ΡΡΠΎΠΏΠ½ΠΎ, ΠΎΠ³ΡΠΎΠΌΠ½Π΅ ΡΡΡΠ°Π½ΠΈΡΠ΅ ΡΠ΅ ΠΏΠΎΠ±ΠΎΡΡΠ°ΡΠΈ Π²Π°ΡΠ΅ ΠΏΠ΅ΡΡΠΎΡΠΌΠ°Π½ΡΠ΅. ΠΠ΅ΡΡΡΠΈΠΌ, ΠΌΠΎΡΠ°ΡΠ΅ ΡΠΎ ΡΠ°ΠΌΠΈ Π΄Π° ΡΠ΅ΡΡΠΈΡΠ°ΡΠ΅ (Π½Π΅ ΡΠ° Π°ΠΏΡΡΡΠ°ΠΊΡΠ½ΠΈΠΌ ΡΠΎΡΡΠ²Π΅ΡΠΎΠΌ) ΠΈ Π²ΠΈΠ΄ΠΈΡΠ΅ ΡΡΠ° ΡΠ°Π΄ΠΈ Π±ΡΠΆΠ΅.
ΠΠ»ΠΎΠΊΠ°ΡΠΈΡΠ° Ρ ΠΌΠ΅ΠΌΠΎΡΠΈΡΠΈ
ΠΠΊΠΎ ΠΏΠΈΡΠ΅ΡΠ΅ Π¦, Π·Π½Π°ΡΠ΅ Π΄Π° ΠΌΠΎΠΆΠ΅ΡΠ΅ Π·Π°Ρ
ΡΠ΅Π²Π°ΡΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΡΠ½ΠΎ ΠΌΠ°Π»Π΅ (ΠΈΠ»ΠΈ ΡΠΊΠΎΡΠΎ ΠΏΡΠΎΠΈΠ·Π²ΠΎΡΠ½ΠΎ Π²Π΅Π»ΠΈΠΊΠ΅) ΠΊΠΎΠ»ΠΈΡΠΈΠ½Π΅ ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ΅ ΠΈΠ· Π³ΠΎΠΌΠΈΠ»Π΅ ΠΊΠΎΡΠΈΡΡΠ΅ΡΠΈ malloc(). Π Π΅ΡΠΈΠΌΠΎ Π΄Π° Π²Π°ΠΌ ΡΡΠ΅Π±Π° 30 Π±Π°ΡΡΠΎΠ²Π° ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ΅:
char* mymemory = malloc(30);ΠΡΠΎΠ³ΡΠ°ΠΌΠ΅ΡΡ ΠΌΠΎΠΆΠ΅ ΠΈΠ·Π³Π»Π΅Π΄Π°ΡΠΈ Π΄Π° βΠ·Π°Ρ
ΡΠ΅Π²Π°ΡΠ΅β 30 Π±Π°ΡΡΠΎΠ²Π° ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ΅ ΠΎΠ΄ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎΠ³ ΡΠΈΡΡΠ΅ΠΌΠ° ΠΈ Π²ΡΠ°ΡΠ°ΡΠ΅ ΠΏΠΎΠΊΠ°Π·ΠΈΠ²Π°Ρ Π½Π° Π½Π΅ΠΊΡ Π²ΠΈΡΡΡΠ΅Π»Π½Ρ ΠΌΠ΅ΠΌΠΎΡΠΈΡΡ. ΠΠ»ΠΈ Ρ ΡΡΠ²Π°ΡΠΈ malloc () ΡΠ΅ ΡΠ°ΠΌΠΎ Π¦ ΡΡΠ½ΠΊΡΠΈΡΠ° ΠΊΠΎΡΠ° ΠΏΠΎΠ·ΠΈΠ²Π° ΡΠ½ΡΡΠ°Ρ ΡΡΠ½ΠΊΡΠΈΡΠ΅ Π΄Π° Π·Π°ΡΡΠ°ΠΆΠΈΡΠ΅ ΠΈΠ»ΠΈ ΠΎΡΠ»ΠΎΠ±ΠΎΠ΄ΠΈΡΠ΅ ΠΌΠ΅ΠΌΠΎΡΠΈΡΡ ΠΎΠ΄ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎΠ³ ΡΠΈΡΡΠ΅ΠΌΠ°.
ΠΠ΅ΡΡΡΠΈΠΌ, Π·Π°Ρ
ΡΠ΅Π²Π°ΡΠΈ ΡΠ²Π΅ Π²ΠΈΡΠ΅ ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ΅ Π·Π° ΡΠ²Π°ΠΊΡ Π°Π»ΠΎΠΊΠ°ΡΠΈΡΡ ΡΠ΅ Π½Π΅Π΅ΡΠΈΠΊΠ°ΡΠ½ΠΎ; Π½Π°ΡΠ²Π΅ΡΠΎΠ²Π°ΡΠ½ΠΈΡΠ΅ ΡΠ΅ Π½Π΅ΠΊΠΈ ΠΌΠ΅ΠΌΠΎΡΠΈΡΡΠΊΠΈ ΡΠ΅Π³ΠΌΠ΅Π½Ρ Π²Π΅Ρ ΠΎΡΠ»ΠΎΠ±ΠΎΡΠ΅Π½ (free()), ΠΈ ΠΌΠΎΠΆΠ΅ΠΌΠΎ Π³Π° ΠΏΠΎΠ½ΠΎΠ²ΠΎ ΠΊΠΎΡΠΈΡΡΠΈΡΠΈ. malloc() ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠΈΡΠ° ΠΏΡΠΈΠ»ΠΈΡΠ½ΠΎ ΡΠ»ΠΎΠΆΠ΅Π½Π΅ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ΅ Π·Π° ΠΏΠΎΠ½ΠΎΠ²Π½ΠΎ ΠΊΠΎΡΠΈΡΡΠ΅ΡΠ΅ ΠΎΡΠ»ΠΎΠ±ΠΎΡΠ΅Π½Π΅ ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ΅.
Π£ ΠΈΡΡΠΎ Π²ΡΠ΅ΠΌΠ΅, ΡΠ²Π΅ ΡΠ΅ Π΄Π΅ΡΠ°Π²Π° Π½Π΅ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ Π·Π° Π²Π°Ρ, ΠΏΠ° Π·Π°ΡΡΠΎ Π±ΠΈ Π²Π°Ρ ΡΠΎ Π·Π°Π±ΡΠΈΡΠ°Π²Π°Π»ΠΎ? ΠΠ»ΠΈ Π·Π°ΡΠΎ ΡΡΠΎ ΡΠ΅ ΠΈΠ·Π°Π·ΠΎΠ² free() Π½Π΅ Π·Π½Π°ΡΠΈ ΡΠΎ .
ΠΠΎΡΡΠΎΡΠΈ ΡΠ°ΠΊΠ²Π° ΡΡΠ²Π°Ρ ΠΊΠ°ΠΎ ΡΡΠΎ ΡΠ΅ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ° ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ΅. Π£ Π΅ΠΊΡΡΡΠ΅ΠΌΠ½ΠΈΠΌ ΡΠ»ΡΡΠ°ΡΠ΅Π²ΠΈΠΌΠ°, ΠΏΠΎΡΡΠΎΡΠ΅ ΡΠ΅Π³ΠΌΠ΅Π½ΡΠΈ Ρ
ΡΠΏΠ΅ Π³Π΄Π΅ ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ ΡΠ°ΠΌΠΎ Π½Π΅ΠΊΠΎΠ»ΠΈΠΊΠΎ Π±Π°ΡΡΠΎΠ²Π°, Π΄ΠΎΠΊ ΡΠ΅ ΡΠ²Π΅ ΠΈΠ·ΠΌΠ΅ΡΡ ΠΎΡΠ»ΠΎΠ±ΠΎΡΠ΅Π½ΠΎ (free()).
ΠΠΌΠ°ΡΡΠ΅ Π½Π° ΡΠΌΡ Π΄Π° ΡΠ΅ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ° ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ΅ Π½Π΅Π²Π΅ΡΠΎΠ²Π°ΡΠ½ΠΎ ΡΠ»ΠΎΠΆΠ΅Π½Π° ΡΠ΅ΠΌΠ°, ΠΏΠ° ΡΠ°ΠΊ ΠΈ ΠΌΠ°ΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½Π΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ° ΠΌΠΎΠ³Ρ ΠΈΠΌΠ°ΡΠΈ Π·Π½Π°ΡΠ°ΡΠ°Π½ ΡΡΠΈΡΠ°Ρ. Π£ Π²Π΅ΡΠΈΠ½ΠΈ ΡΠ»ΡΡΠ°ΡΠ΅Π²Π°, ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈ Π½Π΅ΡΠ΅ ΠΈΠ·Π°Π·Π²Π°ΡΠΈ Π·Π½Π°ΡΠ°ΡΠ½Ρ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ°ΡΠΈΡΡ ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ΅, Π°Π»ΠΈ ΡΡΠ΅Π±Π° Π΄Π° Π±ΡΠ΄Π΅ΡΠ΅ ΡΠ²Π΅ΡΠ½ΠΈ Π΄Π° Π°ΠΊΠΎ ΠΏΠΎΡΡΠΎΡΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌ ΡΠ° ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠΎΠΌ Ρ Π½Π΅ΠΊΠΎΠΌ Π΄Π΅Π»Ρ Π³ΠΎΠΌΠΈΠ»Π΅, ΠΎΠ³ΡΠΎΠΌΠ½Π΅ ΡΡΡΠ°Π½ΠΈΡΠ΅ ΠΌΠΎΠ³Ρ ΠΏΠΎΠ³ΠΎΡΡΠ°ΡΠΈ ΡΠΈΡΡΠ°ΡΠΈΡΡ.
Π‘Π΅Π»Π΅ΠΊΡΠΈΠ²Π½ΠΎ ΠΊΠΎΡΠΈΡΡΠ΅ΡΠ΅ ΠΎΠ³ΡΠΎΠΌΠ½ΠΈΡ ΡΡΡΠ°Π½ΠΈΡΠ°
ΠΠ°ΠΊΠΎΠ½ ΡΡΠΎ ΡΡΠ΅ ΠΏΡΠΎΡΠΈΡΠ°Π»ΠΈ ΠΎΠ²Π°Ρ ΡΠ»Π°Π½Π°ΠΊ, ΡΡΠ²ΡΠ΄ΠΈΠ»ΠΈ ΡΡΠ΅ ΠΊΠΎΡΠΈ Π΄Π΅Π»ΠΎΠ²ΠΈ Π²Π°ΡΠ΅Π³ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ° ΠΌΠΎΠ³Ρ ΠΈΠΌΠ°ΡΠΈ ΠΊΠΎΡΠΈΡΡΠΈ ΠΎΠ΄ ΠΊΠΎΡΠΈΡΡΠ΅ΡΠ° ΠΎΠ³ΡΠΎΠΌΠ½ΠΈΡ ΡΡΡΠ°Π½ΠΈΡΠ°, Π° ΠΊΠΎΡΠΈ Π½Π΅. ΠΠ°ΠΊΠ»Π΅, Π΄Π° Π»ΠΈ Π±ΠΈ ΠΎΠ³ΡΠΎΠΌΠ½Π΅ ΡΡΡΠ°Π½ΠΈΡΠ΅ ΡΠΎΠΏΡΡΠ΅ ΡΡΠ΅Π±Π°Π»ΠΎ Π΄Π° Π±ΡΠ΄Ρ ΠΎΠΌΠΎΠ³ΡΡΠ΅Π½Π΅?
Π‘ΡΠ΅ΡΠΎΠΌ, ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈΡΠΈ madvise()Π΄Π° Π±ΠΈ ΡΠ΅ ΠΎΠΌΠΎΠ³ΡΡΠΈΠ»Π° Π²Π΅Π»ΠΈΠΊΠ° ΡΡΡΠ°Π½ΠΈΡΠ° ΡΠ°ΠΌΠΎ Π·Π° ΠΎΠ½Π΅ ΠΌΠ΅ΠΌΠΎΡΠΈΡΡΠΊΠ΅ ΠΎΠ±Π»Π°ΡΡΠΈ Π³Π΄Π΅ Π±ΠΈ ΡΠΎ Π±ΠΈΠ»ΠΎ ΠΊΠΎΡΠΈΡΠ½ΠΎ.
ΠΡΠ²ΠΎ, ΠΏΡΠΎΠ²Π΅ΡΠΈΡΠ΅ Π΄Π° Π»ΠΈ Ρ ΡΠ³Π΅ΠΏΠ°Π³Π΅Ρ ΡΠ°Π΄ΠΈ Ρ ΠΌΠ°Π΄Π²ΠΈΡΠ΅() ΡΠ΅ΠΆΠΈΠΌΡ ΠΊΠΎΡΠΈΡΡΠ΅ΡΠΈ Π½Π° ΠΏΠΎΡΠ΅ΡΠΊΡ ΡΠ»Π°Π½ΠΊΠ°.
ΠΠ°ΡΠΈΠΌ ΠΊΠΎΡΠΈΡΡΠΈΡΠ΅ 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(), ΠΎΠ²Π° ΡΠ΅ΠΌΠ° ΠΈΠΌΠ° Π½Π΅Π²Π΅ΡΠΎΠ²Π°ΡΠ½ΠΎ ΡΡΡΠΌΡ ΠΊΡΠΈΠ²Ρ ΡΡΠ΅ΡΠ°. ΠΠ°ΠΊΠ»Π΅, Π°ΠΊΠΎ Π½Π°ΠΌΠ΅ΡΠ°Π²Π°ΡΠ΅ Π΄Π° Π±ΡΠ΄Π΅ΡΠ΅ Π·Π°ΠΈΡΡΠ° Π΄ΠΎΠ±ΡΠΈ Ρ ΡΠΎΠΌΠ΅, ΠΏΡΠΈΠΏΡΠ΅ΠΌΠΈΡΠ΅ ΡΠ΅ Π·Π° ΡΠΈΡΠ°ΡΠ΅ ΠΈ ΡΠ΅ΡΡΠΈΡΠ°ΡΠ΅ Π½Π΅ΠΊΠΎΠ»ΠΈΠΊΠΎ Π½Π΅Π΄Π΅ΡΠ° ΠΏΡΠ΅ Π½Π΅Π³ΠΎ ΡΡΠΎ ΠΎΡΠ΅ΠΊΡΡΠ΅ΡΠ΅ Π±ΠΈΠ»ΠΎ ΠΊΠ°ΠΊΠ²Π΅ ΠΏΠΎΠ·ΠΈΡΠΈΠ²Π½Π΅ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠ΅.
Π¨ΡΠ° ΡΠΈΡΠ°ΡΠΈ?
ΠΠΌΠ°ΠΌ ΡΠ΅Π΄Π½ΠΎ ΠΏΠΈΡΠ°ΡΠ΅? ΠΠ°ΠΏΠΈΡΠΈΡΠ΅ Ρ ΠΊΠΎΠΌΠ΅Π½ΡΠ°ΡΠΈΠΌΠ°!
ΠΠ·Π²ΠΎΡ: Π²Π²Π².Ρ Π°Π±Ρ.ΡΠΎΠΌ
