ΠŸΡ€Π΅Π΄Π½ΠΎΡΡ‚ΠΈ ΠΈ нСдостаци Π₯ΡƒΠ³Π΅ΠŸΠ°Π³Π΅Ρ

ΠŸΡ€Π΅Π΄Π½ΠΎΡΡ‚ΠΈ ΠΈ нСдостаци Π₯ΡƒΠ³Π΅ΠŸΠ°Π³Π΅Ρ

ΠŸΡ€Π΅Π²ΠΎΠ΄ Ρ‡Π»Π°Π½ΠΊΠ° ΠΏΡ€ΠΈΠΏΡ€Π΅ΠΌΡ™Π΅Π½ Π·Π° студСнтС курса β€žΠΠ΄ΠΌΠΈΠ½ΠΈΡΡ‚Ρ€Π°Ρ‚ΠΎΡ€ LinuxΒ».

РанијС сам Π³ΠΎΠ²ΠΎΡ€ΠΈΠΎ ΠΎ Ρ‚ΠΎΠΌΠ΅ ΠΊΠ°ΠΊΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΠΈ ΠΈ ΠΎΠΌΠΎΠ³ΡƒΡ›ΠΈΡ‚ΠΈ ΠΊΠΎΡ€ΠΈΡˆΡ›Π΅ΡšΠ΅ Hugepages-Π° Ρƒ Linux.
Овај Ρ‡Π»Π°Π½Π°ΠΊ Ρ›Π΅ Π±ΠΈΡ‚ΠΈ користан само Π°ΠΊΠΎ заиста ΠΈΠΌΠ°Ρ‚Π΅ мСсто Π΄Π° користитС Π₯угСпагСс. Π£ΠΏΠΎΠ·Π½Π°ΠΎ сам ΠΌΠ½ΠΎΠ³ΠΎ Ρ™ΡƒΠ΄ΠΈ који су ΠΏΡ€Π΅Π²Π°Ρ€Π΅Π½ΠΈ ΠΈΠ·Π³Π»Π΅Π΄ΠΎΠΌ Π΄Π° Ρ›Π΅ Π₯угСпагСс ΠΌΠ°Π³ΠΈΡ‡Π½ΠΎ ΠΏΠΎΠ±ΠΎΡ™ΡˆΠ°Ρ‚ΠΈ продуктивност. ΠœΠ΅Ρ’ΡƒΡ‚ΠΈΠΌ, ΠΎΠ³Ρ€ΠΎΠΌΠ½Π° страница јС слоТСна Ρ‚Π΅ΠΌΠ° ΠΈ ΠΌΠΎΠΆΠ΅ ΡΠΌΠ°ΡšΠΈΡ‚ΠΈ пСрформансС Π°ΠΊΠΎ сС користи Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΎ.

Π”Π΅ΠΎ 1: ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚Π΅ Π΄Π° Π»ΠΈ су ΠΎΠΌΠΎΠ³ΡƒΡ›Π΅Π½Π΅ ΠΎΠΏΡ†ΠΈΡ˜Π΅ hugepages Linux (ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π» ΠΎΠ²Π΄Π΅)

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌ:
ΠœΠΎΡ€Π°Ρ‚Π΅ Π΄Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚Π΅ Π΄Π° Π»ΠΈ јС Π₯ΡƒΠ³Π΅ΠŸΠ°Π³Π΅Ρ ΠΎΠΌΠΎΠ³ΡƒΡ›Π΅Π½ Π½Π° вашСм систСму.

reΕ‘enje:
ΠŸΡ€ΠΈΠ»ΠΈΡ‡Π½ΠΎ јС Ρ˜Π΅Π΄Π½ΠΎΡΡ‚Π°Π²Π½ΠΎ:

cat /sys/kernel/mm/transparent_hugepage/enabled

Π”ΠΎΠ±ΠΈΡ›Π΅Ρ‚Π΅ Π½Π΅ΡˆΡ‚ΠΎ ΠΎΠ²Π°ΠΊΠΎ:

always [madvise] never

Π’ΠΈΠ΄Π΅Ρ›Π΅Ρ‚Π΅ листу доступних ΠΎΠΏΡ†ΠΈΡ˜Π° (ΡƒΠ²Π΅ΠΊ, Π»ΡƒΠ΄ΠΎ, Π½ΠΈΠΊΠ°Π΄), Π° Ρ‚Ρ€Π΅Π½ΡƒΡ‚Π½ΠΎ Π°ΠΊΡ‚ΠΈΠ²Π½Π° ΠΎΠΏΡ†ΠΈΡ˜Π° Ρ›Π΅ Π±ΠΈΡ‚ΠΈ Π·Π°Ρ‚Π²ΠΎΡ€Π΅Π½Π° Ρƒ Π·Π°Π³Ρ€Π°Π΄Π°ΠΌΠ° (ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π½ΠΎ мадвисС).

мадвисС Π·Π½Π°Ρ‡ΠΈ Π΄Π° transparent hugepages ΠΎΠΌΠΎΠ³ΡƒΡ›Π΅Π½ΠΎ само Π·Π° ΠΌΠ΅ΠΌΠΎΡ€ΠΈΡ˜ΡΠΊΠ΅ области којС Сксплицитно Π·Π°Ρ…Ρ‚Π΅Π²Π°Ρ˜Ρƒ ΠΎΠ³Ρ€ΠΎΠΌΠ½Π΅ страницС користСћи мадвисС (2).

ΡƒΠ²Π΅ΠΊ Π·Π½Π°Ρ‡ΠΈ Π΄Π° 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(), ΠΎΠ²Π° Ρ‚Π΅ΠΌΠ° ΠΈΠΌΠ° Π½Π΅Π²Π΅Ρ€ΠΎΠ²Π°Ρ‚Π½ΠΎ стрму ΠΊΡ€ΠΈΠ²Ρƒ ΡƒΡ‡Π΅ΡšΠ°. Π”Π°ΠΊΠ»Π΅, Π°ΠΊΠΎ Π½Π°ΠΌΠ΅Ρ€Π°Π²Π°Ρ‚Π΅ Π΄Π° Π±ΡƒΠ΄Π΅Ρ‚Π΅ заиста Π΄ΠΎΠ±Ρ€ΠΈ Ρƒ Ρ‚ΠΎΠΌΠ΅, ΠΏΡ€ΠΈΠΏΡ€Π΅ΠΌΠΈΡ‚Π΅ сС Π·Π° Ρ‡ΠΈΡ‚Π°ΡšΠ΅ ΠΈ Ρ‚Π΅ΡΡ‚ΠΈΡ€Π°ΡšΠ΅ Π½Π΅ΠΊΠΎΠ»ΠΈΠΊΠΎ Π½Π΅Π΄Π΅Ρ™Π° ΠΏΡ€Π΅ Π½Π΅Π³ΠΎ ΡˆΡ‚ΠΎ ΠΎΡ‡Π΅ΠΊΡƒΡ˜Π΅Ρ‚Π΅ Π±ΠΈΠ»ΠΎ ΠΊΠ°ΠΊΠ²Π΅ ΠΏΠΎΠ·ΠΈΡ‚ΠΈΠ²Π½Π΅ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚Π΅.

Π¨Ρ‚Π° Ρ‡ΠΈΡ‚Π°Ρ‚ΠΈ?

Имам јСдно ΠΏΠΈΡ‚Π°ΡšΠ΅? ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ Ρƒ ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΌΠ°!

Π˜Π·Π²ΠΎΡ€: Π²Π²Π².Ρ…Π°Π±Ρ€.Ρ†ΠΎΠΌ

ΠšΡƒΠΏΠΈΡ‚Π΅ ΠΏΠΎΡƒΠ·Π΄Π°Π½ хостинг Π·Π° ΡΠ°Ρ˜Ρ‚ΠΎΠ²Π΅ са Π”Π”ΠΎΠ‘ Π·Π°ΡˆΡ‚ΠΈΡ‚ΠΎΠΌ, Π’ΠŸΠ‘ Π’Π”Π‘ сСрвСрС πŸ”₯ ΠšΡƒΠΏΠΈΡ‚Π΅ ΠΏΠΎΡƒΠ·Π΄Π°Π½ Π²Π΅Π± хостинг са DDoS Π·Π°ΡˆΡ‚ΠΈΡ‚ΠΎΠΌ, VPS VDS сСрвСрС | ProHoster