ΠΡΠ΅Π²ΠΎΠ΄ Π½Π° Π½Π°ΠΏΠΈΡΠΎΡ ΠΏΠΎΠ΄Π³ΠΎΡΠ²Π΅Π½ Π·Π° ΡΡΡΠ΄Π΅Π½ΡΠΈ Π½Π° ΠΊΡΡΡΠ΅Π²ΠΈ
ΠΡΠ΅ΡΡ
ΠΎΠ΄Π½ΠΎ, Π·Π±ΠΎΡΡΠ²Π°Π² Π·Π° ΡΠΎΠ° ΠΊΠ°ΠΊΠΎ Π΄Π° ΡΠ΅ ΡΠ΅ΡΡΠΈΡΠ° ΠΈ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΠΈ Hugepages Π½Π° Linux.
ΠΠ²Π°Π° ΡΡΠ°ΡΠΈΡΠ° ΡΠ΅ Π±ΠΈΠ΄Π΅ ΠΊΠΎΡΠΈΡΠ½Π° ΡΠ°ΠΌΠΎ Π°ΠΊΠΎ Π½Π°Π²ΠΈΡΡΠΈΠ½Π° ΠΈΠΌΠ°ΡΠ΅ ΠΌΠ΅ΡΡΠΎ Π·Π° ΠΊΠΎΡΠΈΡΡΠ΅ΡΠ΅ Π½Π° Hugepages. Π‘ΡΠΌ ΡΡΠ΅ΡΠ½Π°Π» ΠΌΠ½ΠΎΠ³Ρ Π»ΡΡΠ΅ ΠΊΠΎΠΈ ΡΠ΅ ΠΈΠ·ΠΌΠ°ΠΌΠ΅Π½ΠΈ ΠΎΠ΄ ΠΈΠ·Π³Π»Π΅Π΄ΠΈΡΠ΅ Π΄Π΅ΠΊΠ° Hugepages ΠΌΠ°Π³ΠΈΡΠ½ΠΎ ΡΠ΅ ΡΠ° ΠΏΠΎΠ΄ΠΎΠ±ΡΠΈ ΠΏΡΠΎΠ΄ΡΠΊΡΠΈΠ²Π½ΠΎΡΡΠ°. Π‘Π΅ΠΏΠ°ΠΊ, ΠΎΠ³ΡΠΎΠΌΠ½ΠΈΡΠ΅ ΡΡΡΠ°Π½ΠΈΡΠΈ Π΅ ΡΠ»ΠΎΠΆΠ΅Π½Π° ΡΠ΅ΠΌΠ° ΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° Π³ΠΈ Π²Π»ΠΎΡΠΈ ΠΏΠ΅ΡΡΠΎΡΠΌΠ°Π½ΡΠΈΡΠ΅ Π΄ΠΎΠΊΠΎΠ»ΠΊΡ ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΎ.
ΠΠ΅Π» 1: ΠΠΎΡΠ²ΡΠ΄Π° Π΄Π΅ΠΊΠ° ΠΎΠ³ΡΠΎΠΌΠ½ΠΈΡΠ΅ ΡΡΡΠ°Π½ΠΈΡΠΈ ΡΠ΅ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½ΠΈ Π½Π° Linux (ΠΎΡΠΈΠ³ΠΈΠ½Π°Π» ΡΡΠΊΠ° )
ΠΡΠΎΠ±Π»Π΅ΠΌ:
Π’ΡΠ΅Π±Π° Π΄Π° ΠΏΡΠΎΠ²Π΅ΡΠΈΡΠ΅ Π΄Π°Π»ΠΈ HugePages Π΅ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½ΠΎ Π½Π° Π²Π°ΡΠΈΠΎΡ ΡΠΈΡΡΠ΅ΠΌ.
ΡΠ΅ΡΠ΅Π½ΠΈΠ΅:
ΠΡΠΈΠ»ΠΈΡΠ½ΠΎ Π΅ Π΅Π΄Π½ΠΎΡΡΠ°Π²Π½ΠΎ:
cat /sys/kernel/mm/transparent_hugepage/enabled
ΠΠ΅ Π΄ΠΎΠ±ΠΈΠ΅ΡΠ΅ Π½Π΅ΡΡΠΎ ΠΊΠ°ΠΊΠΎ ΠΎΠ²Π°:
always [madvise] never
ΠΠ΅ Π²ΠΈΠ΄ΠΈΡΠ΅ Π»ΠΈΡΡΠ° Π½Π° Π΄ΠΎΡΡΠ°ΠΏΠ½ΠΈ ΠΎΠΏΡΠΈΠΈ (ΡΠ΅ΠΊΠΎΠ³Π°Ρ, Π»ΡΠ΄ΠΎ, Π½ΠΈΠΊΠΎΠ³Π°Ρ), Π° ΠΌΠΎΠΌΠ΅Π½ΡΠ°Π»Π½ΠΎ Π°ΠΊΡΠΈΠ²Π½Π°ΡΠ° ΠΎΠΏΡΠΈΡΠ° ΡΠ΅ Π±ΠΈΠ΄Π΅ Π·Π°ΡΠ²ΠΎΡΠ΅Π½Π° Π²ΠΎ Π·Π°Π³ΡΠ°Π΄ΠΈ (ΡΡΠ°Π½Π΄Π°ΡΠ΄Π½ΠΎ Π»ΡΠ΄ΠΈΠ»ΠΎ).
Π»ΡΠ΄ΠΈΠ»ΠΎ Π·Π½Π°ΡΠΈ Π΄Π΅ΠΊΠ° transparent hugepages
ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½ΠΎ ΡΠ°ΠΌΠΎ Π·Π° ΠΌΠ΅ΠΌΠΎΡΠΈΡΠΊΠΈ ΠΎΠ±Π»Π°ΡΡΠΈ ΠΊΠΎΠΈ Π΅ΠΊΡΠΏΠ»ΠΈΡΠΈΡΠ½ΠΎ Π±Π°ΡΠ°Π°Ρ ΠΎΠ³ΡΠΎΠΌΠ½ΠΈ ΡΡΡΠ°Π½ΠΈΡΠΈ ΡΠΎ ΠΊΠΎΡΠΈΡΡΠ΅ΡΠ΅
ΡΠ΅ΠΊΠΎΠ³Π°Ρ Π·Π½Π°ΡΠΈ Π΄Π΅ΠΊΠ° transparent hugepages
ΡΠ΅ΠΊΠΎΠ³Π°Ρ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½ΠΎ Π·Π° ΡΠΈΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΠΈ. ΠΠ²Π° ΠΎΠ±ΠΈΡΠ½ΠΎ Π³ΠΈ ΠΏΠΎΠ΄ΠΎΠ±ΡΡΠ²Π° ΠΏΠ΅ΡΡΠΎΡΠΌΠ°Π½ΡΠΈΡΠ΅, Π½ΠΎ Π°ΠΊΠΎ ΠΈΠΌΠ°ΡΠ΅ ΡΠ»ΡΡΠ°Ρ Π½Π° ΡΠΏΠΎΡΡΠ΅Π±Π° ΠΊΠ°Π΄Π΅ ΡΡΠΎ ΠΌΠ½ΠΎΠ³Ρ ΠΏΡΠΎΡΠ΅ΡΠΈ ΡΡΠΎΡΠ°Ρ ΠΌΠ°Π»Π° ΠΊΠΎΠ»ΠΈΡΠΈΠ½Π° Π½Π° ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ°, ΡΠΎΠ³Π°Ρ ΡΠ΅Π»ΠΎΠΊΡΠΏΠ½ΠΎΡΠΎ ΠΎΠΏΡΠΎΠ²Π°ΡΡΠ²Π°ΡΠ΅ Π½Π° ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ°ΡΠ° ΠΌΠΎΠΆΠ΅ Π΄ΡΠ°ΡΡΠΈΡΠ½ΠΎ Π΄Π° ΡΠ΅ Π·Π³ΠΎΠ»Π΅ΠΌΠΈ.
Π½ΠΈΠΊΠΎΠ³Π°Ρ Π·Π½Π°ΡΠΈ Π΄Π΅ΠΊΠ° transparent hugepages
Π½Π΅ΠΌΠ° Π΄Π° Π±ΠΈΠ΄Π°Ρ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈ Π΄ΡΡΠΈ ΠΈ ΠΊΠΎΠ³Π° ΡΠ΅ Π±Π°ΡΠ° ΡΠΎ ΠΊΠΎΡΠΈΡΡΠ΅ΡΠ΅ Π½Π° madvise. ΠΠ° Π΄Π° Π΄ΠΎΠ·Π½Π°Π΅ΡΠ΅ ΠΏΠΎΠ²Π΅ΡΠ΅, ΠΊΠΎΠ½ΡΠ°ΠΊΡΠΈΡΠ°ΡΡΠ΅
ΠΠ°ΠΊΠΎ Π΄Π° ΡΠ° ΡΠΌΠ΅Π½ΠΈΡΠ΅ ΡΡΠ°Π½Π΄Π°ΡΠ΄Π½Π°ΡΠ° Π²ΡΠ΅Π΄Π½ΠΎΡΡ
ΠΠΏΡΠΈΡΠ° 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
ΠΠΏΡΠΈΡΠ° 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-Π±ΠΈΡΠ½ΠΈ x86 ΡΠΈΡΡΠ΅ΠΌΠΈ ΡΠΎ Linux, ΠΈ Π΄Π΅ΠΊΠ° Π΅Π΄Π½ΠΎΡΡΠ°Π²Π½ΠΎ ΠΏΡΠ΅ΡΠΏΠΎΡΡΠ°Π²ΡΠ²Π°ΠΌ Π΄Π΅ΠΊΠ° ΡΠΈΡΡΠ΅ΠΌΠΎΡ ΠΏΠΎΠ΄Π΄ΡΠΆΡΠ²Π° ΡΡΠ°Π½ΡΠΏΠ°ΡΠ΅Π½ΡΠ½ΠΈ ΠΎΠ³ΡΠΎΠΌΠ½ΠΈ ΡΡΡΠ°Π½ΠΈΡΠΈ (Π±ΠΈΠ΄Π΅ΡΡΠΈ Π½Π΅ Π΅ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΎΠΊ ΡΡΠΎ ΠΎΠ³ΡΠΎΠΌΠ½ΠΈΡΠ΅ ΡΡΡΠ°Π½ΠΈΡΠΈ Π½Π΅ ΡΠ΅ ΠΏΡΠ΅ΠΏΠΈΡΡΠ²Π°Π°Ρ), ΠΊΠ°ΠΊΠΎ ΡΡΠΎ Π΅ ΡΠ»ΡΡΠ°Ρ Π²ΠΎ ΡΠ΅ΡΠΈΡΠΈ ΡΠ΅ΠΊΠΎΡ ΠΌΠΎΠ΄Π΅ΡΠ΅Π½ Linux ΠΆΠΈΠ²ΠΎΡΠ½Π°ΡΠ° ΡΡΠ΅Π΄ΠΈΠ½Π°.
ΠΠ΅ ΠΏΡΠΈΠΊΠ°ΡΠ°ΠΌ ΠΏΠΎΠ²Π΅ΡΠ΅ ΡΠ΅Ρ Π½ΠΈΡΠΊΠΈ ΠΎΠΏΠΈΡ Π½Π° Π»ΠΈΠ½ΠΊΠΎΠ²ΠΈΡΠ΅ ΠΏΠΎΠ΄ΠΎΠ»Ρ.
ΠΠΈΡΡΡΠ΅Π»Π½Π° ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ°
ΠΠΊΠΎ ΡΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ΅Ρ Π²ΠΎ C++, Π·Π½Π°Π΅ΡΠ΅ Π΄Π΅ΠΊΠ° ΠΎΠ±ΡΠ΅ΠΊΡΠΈΡΠ΅ Π²ΠΎ ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ°ΡΠ° ΠΈΠΌΠ°Π°Ρ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½ΠΈ Π°Π΄ΡΠ΅ΡΠΈ (Π²ΡΠ΅Π΄Π½ΠΎΡΡΠΈ Π½Π° ΠΏΠΎΠΊΠ°ΠΆΡΠ²Π°ΡΠΎΡ).
Π‘Π΅ΠΏΠ°ΠΊ, ΠΎΠ²ΠΈΠ΅ Π°Π΄ΡΠ΅ΡΠΈ Π½Π΅ ΠΌΠΎΡΠ° Π΄Π° Π³ΠΈ ΠΎΠ΄ΡΠ°Π·ΡΠ²Π°Π°Ρ ΡΠΈΠ·ΠΈΡΠΊΠΈΡΠ΅ Π°Π΄ΡΠ΅ΡΠΈ Π²ΠΎ ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ°ΡΠ° (RAM-Π°Π΄ΡΠ΅ΡΠΈ). Π’ΠΈΠ΅ ΠΏΡΠ΅ΡΡΡΠ°Π²ΡΠ²Π°Π°Ρ Π°Π΄ΡΠ΅ΡΠΈ Π²ΠΎ Π²ΠΈΡΡΡΠ΅Π»Π½Π°ΡΠ° ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ°. ΠΡΠΎΡΠ΅ΡΠΎΡΠΎΡ ΠΈΠΌΠ° ΡΠΏΠ΅ΡΠΈΡΠ°Π»Π΅Π½ MMU (Π΅Π΄ΠΈΠ½ΠΈΡΠ° Π·Π° ΡΠΏΡΠ°Π²ΡΠ²Π°ΡΠ΅ ΡΠΎ ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ°) ΠΊΠΎΡ ΠΌΡ ΠΏΠΎΠΌΠ°Π³Π° Π½Π° ΠΊΠ΅ΡΠ½Π΅Π»ΠΎΡ Π΄Π° ΡΠ° ΠΌΠ°ΠΏΠΈΡΠ° Π²ΠΈΡΡΡΠ΅Π»Π½Π°ΡΠ° ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ° Π½Π° ΡΠΈΠ·ΠΈΡΠΊΠ° Π»ΠΎΠΊΠ°ΡΠΈΡΠ°.
ΠΠ²ΠΎΡ ΠΏΡΠΈΡΡΠ°ΠΏ ΠΈΠΌΠ° ΠΌΠ½ΠΎΠ³Ρ ΠΏΡΠ΅Π΄Π½ΠΎΡΡΠΈ, Π½ΠΎ Π½Π°ΡΠ²Π°ΠΆΠ½ΠΈΡΠ΅ ΡΠ΅:
- ΠΠ·Π²Π΅Π΄Π±Π° (ΠΎΠ΄ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΏΡΠΈΡΠΈΠ½ΠΈ);
- ΠΡΠΎΠ³ΡΠ°ΠΌΡΠΊΠ° ΠΈΠ·ΠΎΠ»Π°ΡΠΈΡΠ°, ΠΎΠ΄Π½ΠΎΡΠ½ΠΎ Π½ΠΈΡΡ Π΅Π΄Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ° Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠΈΡΠ° ΠΎΠ΄ ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ°ΡΠ° Π½Π° Π΄ΡΡΠ³Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°.
Π¨ΡΠΎ ΡΠ΅ ΡΡΡΠ°Π½ΠΈΡΠΈ?
ΠΠΈΡΡΡΠ΅Π»Π½Π°ΡΠ° ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ° Π΅ ΠΏΠΎΠ΄Π΅Π»Π΅Π½Π° Π½Π° ΡΡΡΠ°Π½ΠΈΡΠΈ. Π‘Π΅ΠΊΠΎΡΠ° ΠΏΠΎΠ΅Π΄ΠΈΠ½Π΅ΡΠ½Π° ΡΡΡΠ°Π½ΠΈΡΠ° ΡΠΊΠ°ΠΆΡΠ²Π° Π½Π° ΠΎΠ΄ΡΠ΅Π΄Π΅Π½Π° ΡΠΈΠ·ΠΈΡΠΊΠ° ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ°, ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠΊΠ°ΠΆΠ΅ Π½Π° ΠΎΠ±Π»Π°ΡΡ Π²ΠΎ RAM ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ°ΡΠ° ΠΈΠ»ΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠΊΠ°ΠΆΠ΅ Π½Π° Π°Π΄ΡΠ΅ΡΠ° Π΄ΠΎΠ΄Π΅Π»Π΅Π½Π° Π½Π° ΡΠΈΠ·ΠΈΡΠΊΠΈ ΡΡΠ΅Π΄, ΠΊΠ°ΠΊΠΎ ΡΡΠΎ Π΅ Π²ΠΈΠ΄Π΅ΠΎ ΠΊΠ°ΡΡΠΈΡΠΊΠ°.
ΠΠΎΠ²Π΅ΡΠ΅ΡΠΎ ΠΎΠ΄ ΡΡΡΠ°Π½ΠΈΡΠΈΡΠ΅ ΡΠΎ ΠΊΠΎΠΈ ΡΠ΅ Π·Π°Π½ΠΈΠΌΠ°Π²Π°ΡΠ΅ ΡΠΊΠ°ΠΆΡΠ²Π°Π°Ρ Π½Π° RAM ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ° ΠΈΠ»ΠΈ ΡΠ΅ Π·Π°ΠΌΠ΅Π½Π΅ΡΠΈ, ΡΡΠΎ Π·Π½Π°ΡΠΈ Π΄Π΅ΠΊΠ° ΡΠ΅ Π·Π°ΡΡΠ²Π°Π½ΠΈ Π½Π° Π²Π°ΡΠΈΠΎΡ Ρ Π°ΡΠ΄ Π΄ΠΈΡΠΊ ΠΈΠ»ΠΈ SSD. ΠΠ°Π΄ΡΠΎΡΠΎ ΡΠΏΡΠ°Π²ΡΠ²Π° ΡΠΎ ΡΠΈΠ·ΠΈΡΠΊΠΈΠΎΡ ΡΠ°ΡΠΏΠΎΡΠ΅Π΄ Π½Π° ΡΠ΅ΠΊΠΎΡΠ° ΡΡΡΠ°Π½ΠΈΡΠ°. ΠΠΊΠΎ ΡΠ΅ ΠΏΡΠΈΡΡΠ°ΠΏΠΈ Π΄ΠΎ Π»Π°ΠΆΠ½Π° ΡΡΡΠ°Π½ΠΈΡΠ°, ΠΊΠ΅ΡΠ½Π΅Π»ΠΎΡ ΡΠ° Π·Π°ΠΏΠΈΡΠ° Π½ΠΈΠ·Π°ΡΠ° ΡΡΠΎ ΡΠ΅ ΠΎΠ±ΠΈΠ΄ΡΠ²Π° Π΄Π° ΠΏΡΠΈΡΡΠ°ΠΏΠΈ Π΄ΠΎ ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ°ΡΠ°, ΡΠ° ΡΠΈΡΠ° ΡΡΡΠ°Π½ΠΈΡΠ°ΡΠ° ΠΎΠ΄ Ρ Π°ΡΠ΄ Π΄ΠΈΡΠΊΠΎΡ/SSD Π²ΠΎ RAM ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ°ΡΠ°, Π° ΠΏΠΎΡΠΎΠ° ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΡΠ²Π° ΡΠΎ ΠΈΠ·Π²ΡΡΡΠ²Π°ΡΠ΅ΡΠΎ Π½Π° Π½ΠΈΡΠΊΠ°ΡΠ°.
ΠΠ²ΠΎΡ ΠΏΡΠΎΡΠ΅Ρ Π΅ ΡΡΠ°Π½ΡΠΏΠ°ΡΠ΅Π½ΡΠ΅Π½, ΡΡΠΎ Π·Π½Π°ΡΠΈ Π΄Π΅ΠΊΠ° Π½Π΅ ΠΌΠΎΡΠ° Π΄Π° ΡΠ΅ ΡΠΈΡΠ° Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ ΠΎΠ΄ HDD/SSD. ΠΠΎΠ»Π΅ΠΌΠΈΠ½Π°ΡΠ° Π½Π° Π½ΠΎΡΠΌΠ°Π»Π½ΠΈΡΠ΅ ΡΡΡΠ°Π½ΠΈΡΠΈ Π΅ 4096 Π±Π°ΡΡΠΈ. ΠΠΎΠ»Π΅ΠΌΠΈΠ½Π°ΡΠ° Π½Π° Π³ΠΎΠ»Π΅ΠΌΠΈΡΠ΅ ΡΡΡΠ°Π½ΠΈΡΠΈ Π΅ 2 ΠΌΠ΅Π³Π°Π±Π°ΡΡΠΈ.
ΠΡΠ΅Π²ΠΎΠ΄-Π°ΡΠΎΡΠΈΡΠ°ΡΠΈΠ²Π΅Π½ Π±Π°ΡΠ΅Ρ (TLB)
ΠΠΎΠ³Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°ΡΠ° ΠΏΡΠΈΡΡΠ°ΠΏΡΠ²Π° Π΄ΠΎ ΡΡΡΠ°Π½ΠΈΡΠ° ΠΎΠ΄ ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ°ΡΠ°, ΠΏΡΠΎΡΠ΅ΡΠΎΡΠΎΡ ΠΌΠΎΡΠ° Π΄Π° Π·Π½Π°Π΅ ΠΎΠ΄ ΠΊΠΎΡΠ° ΡΠΈΠ·ΠΈΡΠΊΠ° ΡΡΡΠ°Π½ΠΈΡΠ° Π΄Π° ΡΠΈΡΠ° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ (Ρ.Π΅. Π΄Π° ΠΈΠΌΠ° Π²ΠΈΡΡΡΠ΅Π»Π½Π° ΠΌΠ°ΠΏΠ° Π½Π° Π°Π΄ΡΠ΅ΡΠ°).
ΠΠ°Π΄ΡΠΎΡΠΎ ΠΈΠΌΠ° ΡΡΡΡΠΊΡΡΡΠ° Π½Π° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ (ΡΠ°Π±Π΅Π»Π° Π½Π° ΡΡΡΠ°Π½ΠΈΡΠΈ) ΠΊΠΎΡΠ° Π³ΠΈ ΡΠΎΠ΄ΡΠΆΠΈ ΡΠΈΡΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ Π·Π° ΡΡΡΠ°Π½ΠΈΡΠΈΡΠ΅ ΡΡΠΎ ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠ°Ρ. ΠΠΎΡΠΈΡΡΠ΅ΡΡΠΈ ΡΠ° ΠΎΠ²Π°Π° ΡΡΡΡΠΊΡΡΡΠ° Π½Π° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΌΠ°ΠΏΠΈΡΠ°ΡΠ΅ Π²ΠΈΡΡΡΠ΅Π»Π½Π° Π°Π΄ΡΠ΅ΡΠ° Π½Π° ΡΠΈΠ·ΠΈΡΠΊΠ° Π°Π΄ΡΠ΅ΡΠ°.
Π‘Π΅ΠΏΠ°ΠΊ, ΡΠ°Π±Π΅Π»Π°ΡΠ° ΡΠΎ ΡΡΡΠ°Π½ΠΈΡΠΈ Π΅ ΠΏΡΠΈΠ»ΠΈΡΠ½ΠΎ ΡΠ»ΠΎΠΆΠ΅Π½Π° ΠΈ Π±Π°Π²Π½Π°, ΡΠ°ΠΊΠ° ΡΡΠΎ Π΅Π΄Π½ΠΎΡΡΠ°Π²Π½ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌΠ΅ Π΄Π° ΡΠ° Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠ°ΠΌΠ΅ ΡΠ΅Π»Π°ΡΠ° ΡΡΡΡΠΊΡΡΡΠ° Π½Π° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ ΡΠ΅ΠΊΠΎΠ³Π°Ρ ΠΊΠΎΠ³Π° ΠΏΡΠΎΡΠ΅ΡΠΎΡ ΡΠ΅ ΠΏΡΠΈΡΡΠ°ΠΏΠΈ Π΄ΠΎ ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ°ΡΠ°.
ΠΠ° ΡΡΠ΅ΡΠ°, Π½Π°ΡΠΈΠΎΡ ΠΏΡΠΎΡΠ΅ΡΠΎΡ ΠΈΠΌΠ° TLB ΡΡΠΎ Π³ΠΎ ΠΊΠ΅ΡΠΈΡΠ° ΠΌΠ°ΠΏΠΈΡΠ°ΡΠ΅ΡΠΎ ΠΏΠΎΠΌΠ΅ΡΡ Π²ΠΈΡΡΡΠ΅Π»Π½ΠΈΡΠ΅ ΠΈ ΡΠΈΠ·ΠΈΡΠΊΠΈΡΠ΅ Π°Π΄ΡΠ΅ΡΠΈ. ΠΠ²Π° Π·Π½Π°ΡΠΈ Π΄Π΅ΠΊΠ° ΠΈΠ°ΠΊΠΎ ΡΡΠ΅Π±Π° Π΄Π° ΡΠ° Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠ°ΠΌΠ΅ ΡΠ°Π±Π΅Π»Π°ΡΠ° ΡΠΎ ΡΡΡΠ°Π½ΠΈΡΠΈ ΠΏΡΠΈ ΠΏΡΠ²ΠΈΠΎΡ ΠΎΠ±ΠΈΠ΄ Π·Π° ΠΏΡΠΈΡΡΠ°ΠΏ, ΡΠΈΡΠ΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΈ ΠΏΡΠΈΡΡΠ°ΠΏΠΈ Π΄ΠΎ ΡΡΡΠ°Π½ΠΈΡΠ°ΡΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΡΠ°ΠΊΡΠ²Π°Π°Ρ Π²ΠΎ TLB, ΡΡΠΎ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡΠ²Π° Π±ΡΠ·ΠΎ ΡΠ°Π±ΠΎΡΠ΅ΡΠ΅.
ΠΠΈΠ΄Π΅ΡΡΠΈ Π΅ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠΈΡΠ°Π½ ΠΊΠ°ΠΊΠΎ ΡΠΈΠ·ΠΈΡΠΊΠΈ ΡΡΠ΅Π΄ (ΡΡΠΎ Π½Π° ΠΏΡΠ²ΠΎ ΠΌΠ΅ΡΡΠΎ Π³ΠΎ ΠΏΡΠ°Π²ΠΈ Π±ΡΠ·), Π½Π΅Π³ΠΎΠ²ΠΈΠΎΡ ΠΊΠ°ΠΏΠ°ΡΠΈΡΠ΅Ρ Π΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½. ΠΠ½Π°ΡΠΈ, Π°ΠΊΠΎ ΡΠ°ΠΊΠ°ΡΠ΅ Π΄Π° ΠΏΡΠΈΡΡΠ°ΠΏΠΈΡΠ΅ Π΄ΠΎ ΠΏΠΎΠ²Π΅ΡΠ΅ ΡΡΡΠ°Π½ΠΈΡΠΈ, TLB Π½Π΅ΠΌΠ° Π΄Π° ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠΊΠ»Π°Π΄ΠΈΡΠ° ΠΌΠ°ΠΏΠΈΡΠ°ΡΠ° Π·Π° ΡΠΈΡΠ΅ Π½ΠΈΠ², ΡΡΠΎ ΠΏΡΠ΅Π΄ΠΈΠ·Π²ΠΈΠΊΡΠ²Π° Π²Π°ΡΠ°ΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ° Π΄Π° ΡΠ°Π±ΠΎΡΠΈ ΠΌΠ½ΠΎΠ³Ρ ΠΏΠΎΠ±Π°Π²Π½ΠΎ.
Hugepages Π΄ΠΎΠ°ΡΠ° Π½Π° ΠΏΠΎΠΌΠΎΡ
ΠΠ½Π°ΡΠΈ, ΡΡΠΎ ΠΌΠΎΠΆΠ΅ΠΌΠ΅ Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΠΌΠ΅ Π·Π° Π΄Π° ΠΈΠ·Π±Π΅Π³Π½Π΅ΠΌΠ΅ ΠΏΡΠ΅Π»Π΅Π²Π°ΡΠ΅ Π½Π° TLB? (ΠΡΠ΅ΡΠΏΠΎΡΡΠ°Π²ΡΠ²Π°ΠΌΠ΅ Π΄Π΅ΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°ΡΠ° ΡΓ¨ ΡΡΡΠ΅ ΠΈΠΌΠ° ΠΏΠΎΡΡΠ΅Π±Π° ΠΎΠ΄ ΠΈΡΡΠ° ΠΊΠΎΠ»ΠΈΡΠΈΠ½Π° Π½Π° ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ°).
Π’ΡΠΊΠ° Π²Π»Π΅Π³ΡΠ²Π° Hugepages. ΠΠ°ΠΌΠ΅ΡΡΠΎ 4096 Π±Π°ΡΡΠΈ Π΄Π° Π±Π°ΡΠ°Π°Ρ ΡΠ°ΠΌΠΎ Π΅Π΄Π΅Π½ Π²Π»Π΅Π· Π²ΠΎ TLB, Π΅Π΄Π΅Π½ TLB Π·Π°ΠΏΠΈΡ ΡΠ΅Π³Π° ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠΊΠ°ΠΆΠ΅ Π½Π° Π½Π΅Π²Π΅ΡΠΎΡΠ°ΡΠ½ΠΈ 2 ΠΌΠ΅Π³Π°Π±Π°ΡΡΠΈ. ΠΠ° ΠΏΡΠ΅ΡΠΏΠΎΡΡΠ°Π²ΠΈΠΌΠ΅ Π΄Π΅ΠΊΠ° TLB ΠΈΠΌΠ° 512 Π·Π°ΠΏΠΈΡΠΈ, ΠΎΠ²Π΄Π΅ Π±Π΅Π· Hugepages ΠΌΠΎΠΆΠ΅ΠΌΠ΅ Π΄Π° ΡΠ΅ ΡΠΎΠ²ΠΏΠ°Π΄Π½Π΅ΠΌΠ΅:
4096 bβ
512=2 MB
Π’ΠΎΠ³Π°Ρ, ΠΊΠ°ΠΊΠΎ ΠΌΠΎΠΆΠ΅ΠΌΠ΅ Π΄Π° ΡΠ΅ ΡΠΏΠΎΡΠ΅Π΄ΠΈΠΌΠ΅ ΡΠΎ Π½ΠΈΠ²:
2 MBβ
512=1 GB
ΠΠ²Π° Π΅ ΠΏΡΠΈΡΠΈΠ½Π°ΡΠ° Π·ΠΎΡΡΠΎ Hugepages Π΅ ΠΎΠ΄Π»ΠΈΡΠ΅Π½. Π’ΠΈΠ΅ ΠΌΠΎΠΆΠ°Ρ Π΄Π° ΡΠ° ΠΏΠΎΠ΄ΠΎΠ±ΡΠ°Ρ ΠΏΡΠΎΠ΄ΡΠΊΡΠΈΠ²Π½ΠΎΡΡΠ° Π±Π΅Π· ΠΌΠ½ΠΎΠ³Ρ Π½Π°ΠΏΠΎΡ. ΠΠΎ, ΡΡΠΊΠ° ΠΈΠΌΠ° Π·Π½Π°ΡΠΈΡΠ΅Π»Π½ΠΈ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅Π΄ΡΠ²Π°ΡΠ°.
ΠΠ³ΡΠΎΠΌΠ½ΠΈ ΡΡΡΠ°Π½ΠΈΡΠΈ ΠΈΠ·ΠΌΠ°ΠΌΠ°
ΠΠ°Π΄ΡΠΎΡΠΎ Π°Π²ΡΠΎΠΌΠ°ΡΡΠΊΠΈ ΡΠ»Π΅Π΄ΠΈ ΠΊΠΎΠ»ΠΊΡ ΡΠ΅ΡΡΠΎ ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ ΡΠ΅ΠΊΠΎΡΠ° ΠΌΠ΅ΠΌΠΎΡΠΈΡΠΊΠ° ΡΡΡΠ°Π½ΠΈΡΠ°. ΠΠΊΠΎ Π½Π΅ΠΌΠ° Π΄ΠΎΠ²ΠΎΠ»Π½ΠΎ ΡΠΈΠ·ΠΈΡΠΊΠ° ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ° (RAM), ΠΊΠ΅ΡΠ½Π΅Π»ΠΎΡ ΡΠ΅ ΠΏΡΠ΅ΠΌΠ΅ΡΡΠΈ ΠΏΠΎΠΌΠ°Π»ΠΊΡ Π²Π°ΠΆΠ½ΠΈ (ΠΏΠΎΡΠ΅ΡΠΊΠΎ ΠΊΠΎΡΠΈΡΡΠ΅Π½ΠΈ) ΡΡΡΠ°Π½ΠΈΡΠΈ Π½Π° ΡΠ²ΡΠ΄ΠΈΠΎΡ Π΄ΠΈΡΠΊ Π·Π° Π΄Π° ΠΎΡΠ»ΠΎΠ±ΠΎΠ΄ΠΈ ΠΌΠ°Π»ΠΊΡ RAM ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ° Π·Π° ΠΏΠΎΠ²Π°ΠΆΠ½ΠΈ ΡΡΡΠ°Π½ΠΈΡΠΈ.
ΠΠΎ ΠΏΡΠΈΠ½ΡΠΈΠΏ, ΠΈΡΡΠΎΡΠΎ Π²Π°ΠΆΠΈ ΠΈ Π·Π° Hugepages. Π‘Π΅ΠΏΠ°ΠΊ, ΠΊΠ΅ΡΠ½Π΅Π»ΠΎΡ ΠΌΠΎΠΆΠ΅ Π΄Π° Π·Π°ΠΌΠ΅Π½ΠΈ ΡΠ°ΠΌΠΎ ΡΠ΅Π»ΠΈ ΡΡΡΠ°Π½ΠΈΡΠΈ, Π° Π½Π΅ ΠΏΠΎΠ΅Π΄ΠΈΠ½Π΅ΡΠ½ΠΈ Π±Π°ΡΡΠΈ.
ΠΠ° ΡΠ΅ΡΠ΅ΠΌΠ΅ Π΄Π΅ΠΊΠ° ΠΈΠΌΠ°ΠΌΠ΅ Π²Π°ΠΊΠ²Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°:
char* mymemory = malloc(2*1024*1024); // ΠΠΎΠ·ΡΠΌΠ΅ΠΌ ΡΡΠΎ Π·Π° ΠΎΠ΄Π½Ρ Hugepage!
// ΠΠ°ΠΏΠΎΠ»Π½ΠΈΠΌ mymemory ΠΊΠ°ΠΊΠΈΠΌΠΈ-Π»ΠΈΠ±ΠΎ Π΄Π°Π½Π½ΡΠΌΠΈ
// Π‘Π΄Π΅Π»Π°Π΅ΠΌ ΠΌΠ½ΠΎΠ³ΠΎ Π΄ΡΡΠ³ΠΈΡ
Π²Π΅ΡΠ΅ΠΉ,
// ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΈΠ²Π΅Π΄ΡΡ ΠΊ ΠΏΠΎΠ΄ΠΌΠ΅Π½Π΅ ΡΡΡΠ°Π½ΠΈΡΡ mymemory
// ...
// ΠΠ°ΠΏΡΠΎΡΠΈΠΌ Π΄ΠΎΡΡΡΠΏ ΡΠΎΠ»ΡΠΊΠΎ ΠΊ ΠΏΠ΅ΡΠ²ΠΎΠΌΡ Π±Π°ΠΉΡΡ
putchar(mymemory[0]);
ΠΠΎ ΠΎΠ²ΠΎΡ ΡΠ»ΡΡΠ°Ρ, ΠΊΠ΅ΡΠ½Π΅Π»ΠΎΡ ΡΠ΅ ΡΡΠ΅Π±Π° Π΄Π° Π·Π°ΠΌΠ΅Π½ΠΈ (ΡΠΈΡΠ°) Π΄ΡΡΠΈ 2 ΠΌΠ΅Π³Π°Π±Π°ΡΡΠΈ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎΠ΄ Ρ Π°ΡΠ΄ Π΄ΠΈΡΠΊΠΎΡ/SSD ΡΠ°ΠΌΠΎ Π·Π° Π΄Π° ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΏΡΠΎΡΠΈΡΠ°ΡΠ΅ Π΅Π΄Π΅Π½ Π±Π°ΡΡ. Π¨ΡΠΎ ΡΠ΅ ΠΎΠ΄Π½Π΅ΡΡΠ²Π° Π΄ΠΎ ΠΎΠ±ΠΈΡΠ½ΠΈΡΠ΅ ΡΡΡΠ°Π½ΠΈΡΠΈ, ΡΠ°ΠΌΠΎ 4096 Π±Π°ΡΡΠΈ ΡΡΠ΅Π±Π° Π΄Π° ΡΠ΅ ΠΏΡΠΎΡΠΈΡΠ°Π°Ρ ΠΎΠ΄ Ρ Π°ΡΠ΄ Π΄ΠΈΡΠΊΠΎΡ/SSD.
ΠΠ°ΡΠΎΠ°, Π°ΠΊΠΎ ΠΎΠ³ΡΠΎΠΌΠ½Π°ΡΠ° ΡΡΡΠ°Π½ΠΈΡΠ° Π΅ ΠΎΡΡΡΠ»Π΅Π½Π°, ΡΠ°Π° Π΅ ΠΏΠΎΠ±ΡΠ·Π° Π·Π° ΡΠΈΡΠ°ΡΠ΅ ΡΠ°ΠΌΠΎ Π°ΠΊΠΎ ΡΡΠ΅Π±Π° Π΄Π° ΠΏΡΠΈΡΡΠ°ΠΏΠΈΡΠ΅ Π΄ΠΎ ΡΠ΅Π»Π°ΡΠ° ΡΡΡΠ°Π½ΠΈΡΠ°. ΠΠ²Π° Π·Π½Π°ΡΠΈ Π΄Π΅ΠΊΠ° Π°ΠΊΠΎ ΡΠ΅ ΠΎΠ±ΠΈΠ΄ΡΠ²Π°ΡΠ΅ ΠΏΠΎ ΡΠ»ΡΡΠ°Π΅Π½ ΠΈΠ·Π±ΠΎΡ Π΄Π° ΠΏΡΠΈΡΡΠ°ΠΏΠΈΡΠ΅ Π΄ΠΎ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ Π΄Π΅Π»ΠΎΠ²ΠΈ ΠΎΠ΄ ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ°ΡΠ° ΠΈ ΡΠ°ΠΌΠΎ ΡΠΈΡΠ°ΡΠ΅ Π½Π΅ΠΊΠΎΠ»ΠΊΡ ΠΊΠΈΠ»ΠΎΠ±Π°ΡΡΠΈ, ΡΡΠ΅Π±Π° Π΄Π° ΠΊΠΎΡΠΈΡΡΠΈΡΠ΅ ΠΎΠ±ΠΈΡΠ½ΠΈ ΡΡΡΠ°Π½ΠΈΡΠΈ ΠΈ Π΄Π° Π½Π΅ ΡΠ΅ Π³ΡΠΈΠΆΠΈΡΠ΅ Π·Π° Π½ΠΈΡΡΠΎ Π΄ΡΡΠ³ΠΎ.
ΠΠ΄ Π΄ΡΡΠ³Π° ΡΡΡΠ°Π½Π°, Π°ΠΊΠΎ ΡΡΠ΅Π±Π° ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΎ Π΄Π° ΠΏΡΠΈΡΡΠ°ΠΏΠΈΡΠ΅ Π΄ΠΎ Π³ΠΎΠ»Π΅ΠΌ Π΄Π΅Π» ΠΎΠ΄ ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ°ΡΠ°, ΠΎΠ³ΡΠΎΠΌΠ½ΠΈΡΠ΅ ΡΡΡΠ°Π½ΠΈΡΠΈ ΡΠ΅ Π³ΠΈ ΠΏΠΎΠ΄ΠΎΠ±ΡΠ°Ρ Π²Π°ΡΠΈΡΠ΅ ΠΏΠ΅ΡΡΠΎΡΠΌΠ°Π½ΡΠΈ. Π‘Π΅ΠΏΠ°ΠΊ, ΡΡΠ΅Π±Π° ΡΠ°ΠΌΠΈ Π΄Π° Π³ΠΎ ΡΠ΅ΡΡΠΈΡΠ°ΡΠ΅ (Π½Π΅ ΡΠΎ Π°ΠΏΡΡΡΠ°ΠΊΡΠ΅Π½ ΡΠΎΡΡΠ²Π΅Ρ) ΠΈ Π΄Π° Π²ΠΈΠ΄ΠΈΡΠ΅ ΡΡΠΎ ΡΠ°Π±ΠΎΡΠΈ ΠΏΠΎΠ±ΡΠ·ΠΎ.
Π Π°ΡΠΏΡΠ΅Π΄Π΅Π»Π±Π° Π²ΠΎ ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ°ΡΠ°
ΠΠΊΠΎ Π½Π°ΠΏΠΈΡΠ΅ΡΠ΅ C, Π·Π½Π°Π΅ΡΠ΅ Π΄Π΅ΠΊΠ° ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΏΠΎΠ±Π°ΡΠ°ΡΠ΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»Π½ΠΎ ΠΌΠ°Π»ΠΈ (ΠΈΠ»ΠΈ ΡΠ΅ΡΠΈΡΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»Π½ΠΎ Π³ΠΎΠ»Π΅ΠΌΠΈ) ΠΊΠΎΠ»ΠΈΡΠΈΠ½ΠΈ Π½Π° ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ° ΠΎΠ΄ ΠΊΡΠΏΠΎΡ ΠΊΠΎΡΠΈΡΡΠ΅ΡΡΠΈ malloc()
. ΠΠ° ΡΠ΅ΡΠ΅ΠΌΠ΅ Π΄Π΅ΠΊΠ° Π²ΠΈ ΡΡΠ΅Π±Π°Π°Ρ 30 Π±Π°ΡΡΠΈ ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ°:
char* mymemory = malloc(30);
ΠΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ΅Ρ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΌΡ ΡΠ΅ ΡΠΈΠ½ΠΈ Π΄Π΅ΠΊΠ° βΠ±Π°ΡΠ°ΡΠ΅β 30 Π±Π°ΡΡΠΈ ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ° ΠΎΠ΄ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΈΠΎΡ ΡΠΈΡΡΠ΅ΠΌ ΠΈ Π²ΡΠ°ΡΠ°ΡΠ΅ ΠΏΠΎΠΊΠ°ΠΆΡΠ²Π°Ρ Π½Π° Π½Π΅ΠΊΠΎΡΠ° Π²ΠΈΡΡΡΠ΅Π»Π½Π° ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ°. ΠΠΎ, Π²ΡΡΡΠ½ΠΎΡΡ malloc ()
Π΅ ΡΠ°ΠΌΠΎ C ΡΡΠ½ΠΊΡΠΈΡΠ° ΠΊΠΎΡΠ° ΠΏΠΎΠ²ΠΈΠΊΡΠ²Π° ΠΎΠ΄ Π²Π½Π°ΡΡΠ΅ Π²ΠΎ ΡΡΠ½ΠΊΡΠΈΡΠ°ΡΠ°
ΠΠ΅ΡΡΡΠΎΠ°, Π±Π°ΡΠ°ΡΠ΅ΡΠΎ ΡΠ΅ ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΈ ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ° Π·Π° ΡΠ΅ΠΊΠΎΡΠ° ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π±Π° Π΅ Π½Π΅Π΅ΡΠΈΠΊΠ°ΡΠ½ΠΎ; Π½Π°ΡΠ²Π΅ΡΠΎΡΠ°ΡΠ½ΠΎ Π½Π΅ΠΊΠΎΡ ΠΌΠ΅ΠΌΠΎΡΠΈΡΠΊΠΈ ΡΠ΅Π³ΠΌΠ΅Π½Ρ Π΅ Π²Π΅ΡΠ΅ ΠΎΡΠ»ΠΎΠ±ΠΎΠ΄Π΅Π½ (free())
, ΠΈ ΠΌΠΎΠΆΠ΅ΠΌΠ΅ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ Π΄Π° Π³ΠΎ ΠΊΠΎΡΠΈΡΡΠΈΠΌΠ΅. malloc()
ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠΈΡΠ° Π΄ΠΎΡΡΠ° ΡΠ»ΠΎΠΆΠ΅Π½ΠΈ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΈ Π·Π° ΠΏΠΎΠ²ΡΠΎΡΠ½Π° ΡΠΏΠΎΡΡΠ΅Π±Π° Π½Π° ΠΎΡΠ»ΠΎΠ±ΠΎΠ΄Π΅Π½Π°ΡΠ° ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ°.
ΠΠΎ ΠΈΡΡΠΎ Π²ΡΠ΅ΠΌΠ΅, ΡΓ¨ Π²ΠΈ ΡΠ΅ ΡΠ»ΡΡΡΠ²Π° Π½Π΅Π·Π°Π±Π΅Π»Π΅ΠΆΠ°Π½ΠΎ, ΠΏΠ° Π·ΠΎΡΡΠΎ ΡΠΎΠ° Π΄Π° Π²Π΅ Π·Π°Π³ΡΠΈΠΆΡΠ²Π°? ΠΠΎ Π·Π°ΡΠΎΠ° ΡΡΠΎ ΠΏΡΠ΅Π΄ΠΈΠ·Π²ΠΈΠΊΠΎΡ free()
Π½Π΅ Π·Π½Π°ΡΠΈ ΡΠΎΠ°
ΠΠΎΡΡΠΎΠΈ ΡΠ°ΠΊΠ²ΠΎ Π½Π΅ΡΡΠΎ ΠΊΠ°ΠΊΠΎ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ° Π½Π° ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ°ΡΠ°. ΠΠΎ Π΅ΠΊΡΡΡΠ΅ΠΌΠ½ΠΈ ΡΠ»ΡΡΠ°ΠΈ, ΠΈΠΌΠ° ΠΊΡΠΏ ΡΠ΅Π³ΠΌΠ΅Π½ΡΠΈ ΠΊΠ°Π΄Π΅ ΡΡΠΎ ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠ°Ρ ΡΠ°ΠΌΠΎ Π½Π΅ΠΊΠΎΠ»ΠΊΡ Π±Π°ΡΡΠΈ, Π΄ΠΎΠ΄Π΅ΠΊΠ° ΡΓ¨ ΠΏΠΎΠΌΠ΅ΡΡ Π΅ ΠΎΡΠ»ΠΎΠ±ΠΎΠ΄Π΅Π½ΠΎ (free())
.
ΠΠ΅ ΠΌΠΎΠ»ΠΈΠΌΠ΅ ΠΈΠΌΠ°ΡΡΠ΅ ΠΏΡΠ΅Π΄Π²ΠΈΠ΄ Π΄Π΅ΠΊΠ° ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ°ΡΠ° Π½Π° ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ°ΡΠ° Π΅ Π½Π΅Π²Π΅ΡΠΎΡΠ°ΡΠ½ΠΎ ΡΠ»ΠΎΠΆΠ΅Π½Π° ΡΠ΅ΠΌΠ°, ΠΏΠ° Π΄ΡΡΠΈ ΠΈ ΠΌΠ°Π»ΠΈ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ Π²ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°ΡΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠΌΠ°Π°Ρ Π·Π½Π°ΡΠΈΡΠ΅Π»Π½ΠΎ Π²Π»ΠΈΡΠ°Π½ΠΈΠ΅. ΠΠΎ ΠΏΠΎΠ²Π΅ΡΠ΅ΡΠΎ ΡΠ»ΡΡΠ°ΠΈ, ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ΅ Π½Π΅ΠΌΠ° Π΄Π° ΠΏΡΠ΅Π΄ΠΈΠ·Π²ΠΈΠΊΠ°Π°Ρ Π·Π½Π°ΡΠΈΡΠ΅Π»Π½Π° ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ° Π½Π° ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ°ΡΠ°, Π½ΠΎ ΡΡΠ΅Π±Π° Π΄Π° Π·Π½Π°Π΅ΡΠ΅ Π΄Π΅ΠΊΠ° Π°ΠΊΠΎ ΠΈΠΌΠ° ΠΏΡΠΎΠ±Π»Π΅ΠΌ ΡΠΎ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ° Π²ΠΎ Π½Π΅ΠΊΠΎΡΠ° ΠΎΠ±Π»Π°ΡΡ Π½Π° ΠΊΡΠΏΠΎΡ, ΠΎΠ³ΡΠΎΠΌΠ½ΠΈΡΠ΅ ΡΡΡΠ°Π½ΠΈΡΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ° Π²Π»ΠΎΡΠ°Ρ ΡΠΈΡΡΠ°ΡΠΈΡΠ°ΡΠ°.
Π‘Π΅Π»Π΅ΠΊΡΠΈΠ²Π½Π° ΡΠΏΠΎΡΡΠ΅Π±Π° Π½Π° ΠΎΠ³ΡΠΎΠΌΠ½ΠΈ ΡΡΡΠ°Π½ΠΈΡΠΈ
ΠΡΠΊΠ°ΠΊΠΎ ΡΠ° ΠΏΡΠΎΡΠΈΡΠ°Π²ΡΠ΅ ΡΡΠ°ΡΠΈΡΠ°ΡΠ°, ΡΡΠ²ΡΠ΄ΠΈΠ²ΡΠ΅ ΠΊΠΎΠΈ Π΄Π΅Π»ΠΎΠ²ΠΈ ΠΎΠ΄ Π²Π°ΡΠ°ΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ° ΠΌΠΎΠΆΠ°Ρ Π΄Π° ΠΈΠΌΠ°Π°Ρ ΠΊΠΎΡΠΈΡΡ ΠΎΠ΄ ΠΊΠΎΡΠΈΡΡΠ΅ΡΠ΅ΡΠΎ ΠΎΠ³ΡΠΎΠΌΠ½ΠΈ ΡΡΡΠ°Π½ΠΈΡΠΈ, Π° ΠΊΠΎΠΈ Π½Π΅. ΠΠ½Π°ΡΠΈ, Π΄Π°Π»ΠΈ Π²ΠΎΠΎΠΏΡΡΠΎ ΡΡΠ΅Π±Π° Π΄Π° ΡΠ΅ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΠ°Ρ ΠΎΠ³ΡΠΎΠΌΠ½ΠΈΡΠ΅ ΡΡΡΠ°Π½ΠΈΡΠΈ?
ΠΠ° ΡΡΠ΅ΡΠ° ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΊΠΎΡΠΈΡΡΠΈΡΠ΅ madvise()
Π·Π° Π΄Π° ΡΠ΅ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΠΈ ΠΎΠ³ΡΠΎΠΌΠ½ΠΎ ΡΠ½ΠΈΠΌΠ°ΡΠ΅ ΡΠ°ΠΌΠΎ Π·Π° ΠΎΠ½ΠΈΠ΅ ΠΌΠ΅ΠΌΠΎΡΠΈΡΠΊΠΈ ΠΎΠ±Π»Π°ΡΡΠΈ ΠΊΠ°Π΄Π΅ ΡΡΠΎ Π±ΠΈ Π±ΠΈΠ»ΠΎ ΠΊΠΎΡΠΈΡΠ½ΠΎ.
ΠΡΠ²ΠΎ, ΠΏΡΠΎΠ²Π΅ΡΠ΅ΡΠ΅ Π΄Π°Π»ΠΈ ΠΎΠ³ΡΠΎΠΌΠ½ΠΈΡΠ΅ ΡΡΡΠ°Π½ΠΈΡΠΈ ΡΠ°Π±ΠΎΡΠ°Ρ Π²ΠΎ ΡΠ΅ΠΆΠΈΠΌΠΎΡ 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()
, ΠΎΠ²Π°Π° ΡΠ΅ΠΌΠ° ΠΈΠΌΠ° Π½Π΅Π²Π΅ΡΠΎΡΠ°ΡΠ½ΠΎ ΡΡΡΠΌΠ½Π° ΠΊΡΠΈΠ²Π° Π½Π° ΡΡΠ΅ΡΠ΅. ΠΠ½Π°ΡΠΈ, Π°ΠΊΠΎ ΠΈΠΌΠ°ΡΠ΅ Π½Π°ΠΌΠ΅ΡΠ° Π΄Π° Π±ΠΈΠ΄Π΅ΡΠ΅ Π½Π°Π²ΠΈΡΡΠΈΠ½Π° Π΄ΠΎΠ±ΡΠΈ Π²ΠΎ ΡΠΎΠ°, ΠΏΠΎΠ΄Π³ΠΎΡΠ²Π΅ΡΠ΅ ΡΠ΅ Π΄Π° ΡΠΈΡΠ°ΡΠ΅ ΠΈ ΡΠ΅ΡΡΠΈΡΠ°ΡΠ΅ Π½Π΅ΠΊΠΎΠ»ΠΊΡ Π½Π΅Π΄Π΅Π»ΠΈ ΠΏΡΠ΅Π΄ Π΄Π° ΠΎΡΠ΅ΠΊΡΠ²Π°ΡΠ΅ ΠΏΠΎΠ·ΠΈΡΠΈΠ²Π½ΠΈ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈ.
Π¨ΡΠΎ Π΄Π° ΡΠ΅ ΠΏΡΠΎΡΠΈΡΠ°?
Π‘ΡΠ°ΡΠΈΡΠ° Π½Π° IBM OpenStack Π½Π° ΠΎΠ³ΡΠΎΠΌΠ½ΠΈ ΡΡΡΠ°Π½ΠΈΡΠΈ Π’ΡΠ°Π½ΡΠΏΠ°ΡΠ΅Π½ΡΠ½ΠΈ ΠΎΠ³ΡΠΎΠΌΠ½ΠΈ ΡΡΡΠ°Π½ΠΈΡΠΈ Π½Π°ΡΠΏΡΠΎΡΠΈ Π½Π΅ΡΡΠ°Π½ΡΠΏΠ°ΡΠ΅Π½ΡΠ½ΠΈ ΠΎΠ³ΡΠΎΠΌΠ½ΠΈ ΡΡΡΠ°Π½ΠΈΡΠΈ Π‘ΡΠ°ΡΠΈΡΠ° Π½Π° ΠΠΈΠΊΠΈΠΏΠ΅Π΄ΠΈΡΠ° Π·Π° TLB ΠΠΈΠ½ΡΠΊΡ ΠΊΠ΅ΡΠ½Π΅Π» Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ° Π½Π° ΠΏΡΠΎΡΠΈΡΠ½ΠΈ ΠΎΠ³ΡΠΎΠΌΠ½ΠΈ ΡΡΡΠ°Π½ΠΈΡΠΈ StackOverflow: ΠΠ³ΡΠΎΠΌΠ½ΠΈΡΠ΅ ΡΡΡΠ°Π½ΠΈΡΠΈ ΡΠ΅ ΡΠΊΠ»ΠΎΠ½ΠΈ ΠΊΠΎΠ½ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ° Π½Π° ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ°ΡΠ° Π‘ΡΠ°ΡΠΈΡΠ° Π½Π° Microsoft Π·Π° ΡΠΏΡΠ°Π²ΡΠ²Π°ΡΠ΅ ΡΠΎ Π²ΠΈΡΡΡΠ΅Π»Π½Π° ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ°
ΠΠΌΠ°ΡΠ΅ ΠΏΡΠ°ΡΠ°ΡΠ΅? ΠΠ°ΠΏΠΈΡΠ΅ΡΠ΅ Π²ΠΎ ΠΊΠΎΠΌΠ΅Π½ΡΠ°ΡΠΈ!
ΠΠ·Π²ΠΎΡ: www.habr.com