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

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

ΠŸΡ€Π΅Π²ΠΎΠ΄ Π½Π° написот ΠΏΠΎΠ΄Π³ΠΎΡ‚Π²Π΅Π½ Π·Π° студСнти Π½Π° курсСви β€žΠΠ΄ΠΌΠΈΠ½ΠΈΡΡ‚Ρ€Π°Ρ‚ΠΎΡ€ Π½Π° Π›ΠΈΠ½ΡƒΠΊΡβ€œ.

ΠŸΡ€Π΅Ρ‚Ρ…ΠΎΠ΄Π½ΠΎ, Π·Π±ΠΎΡ€ΡƒΠ²Π°Π² Π·Π° Ρ‚ΠΎΠ° ΠΊΠ°ΠΊΠΎ Π΄Π° сС тСстира ΠΈ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΠΈ Hugepages Π½Π° Linux.
Оваа ΡΡ‚Π°Ρ‚ΠΈΡ˜Π° ќС Π±ΠΈΠ΄Π΅ корисна само Π°ΠΊΠΎ навистина ΠΈΠΌΠ°Ρ‚Π΅ мСсто Π·Π° ΠΊΠΎΡ€ΠΈΡΡ‚Π΅ΡšΠ΅ Π½Π° Hugepages. Π‘ΡƒΠΌ срСтнал ΠΌΠ½ΠΎΠ³Ρƒ Π»ΡƒΡ“Π΅ ΠΊΠΎΠΈ сС ΠΈΠ·ΠΌΠ°ΠΌΠ΅Π½ΠΈ ΠΎΠ΄ ΠΈΠ·Π³Π»Π΅Π΄ΠΈΡ‚Π΅ Π΄Π΅ΠΊΠ° Hugepages ΠΌΠ°Π³ΠΈΡ‡Π½ΠΎ ќС ја ΠΏΠΎΠ΄ΠΎΠ±Ρ€ΠΈ продуктивноста. Π‘Π΅ΠΏΠ°ΠΊ, ΠΎΠ³Ρ€ΠΎΠΌΠ½ΠΈΡ‚Π΅ страници Π΅ слоТСна Ρ‚Π΅ΠΌΠ° ΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° Π³ΠΈ влоши пСрформанситС Π΄ΠΎΠΊΠΎΠ»ΠΊΡƒ сС користи Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΎ.

Π”Π΅Π» 1: ΠŸΠΎΡ‚Π²Ρ€Π΄Π° Π΄Π΅ΠΊΠ° ΠΎΠ³Ρ€ΠΎΠΌΠ½ΠΈΡ‚Π΅ страници сС ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½ΠΈ Π½Π° Linux (ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π» Ρ‚ΡƒΠΊΠ°)

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌ:
Π’Ρ€Π΅Π±Π° Π΄Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚Π΅ Π΄Π°Π»ΠΈ HugePages Π΅ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½ΠΎ Π½Π° Π²Π°ΡˆΠΈΠΎΡ‚ систСм.

Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅:
ΠŸΡ€ΠΈΠ»ΠΈΡ‡Π½ΠΎ Π΅ Сдноставно:

cat /sys/kernel/mm/transparent_hugepage/enabled

ЌС Π΄ΠΎΠ±ΠΈΠ΅Ρ‚Π΅ Π½Π΅ΡˆΡ‚ΠΎ ΠΊΠ°ΠΊΠΎ ΠΎΠ²Π°:

always [madvise] never

ЌС Π²ΠΈΠ΄ΠΈΡ‚Π΅ листа Π½Π° достапни ΠΎΠΏΡ†ΠΈΠΈ (сСкогаш, Π»ΡƒΠ΄ΠΎ, никогаш), Π° ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°Π»Π½ΠΎ Π°ΠΊΡ‚ΠΈΠ²Π½Π°Ρ‚Π° ΠΎΠΏΡ†ΠΈΡ˜Π° ќС Π±ΠΈΠ΄Π΅ Π·Π°Ρ‚Π²ΠΎΡ€Π΅Π½Π° Π²ΠΎ Π·Π°Π³Ρ€Π°Π΄ΠΈ (стандардно Π»ΡƒΠ΄ΠΈΠ»ΠΎ).

Π»ΡƒΠ΄ΠΈΠ»ΠΎ Π·Π½Π°Ρ‡ΠΈ Π΄Π΅ΠΊΠ° transparent hugepages ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½ΠΎ само Π·Π° мСмориски области ΠΊΠΎΠΈ Сксплицитно Π±Π°Ρ€Π°Π°Ρ‚ ΠΎΠ³Ρ€ΠΎΠΌΠ½ΠΈ страници со ΠΊΠΎΡ€ΠΈΡΡ‚Π΅ΡšΠ΅ Π»ΡƒΠ΄ΠΈΠ»ΠΎ (2).

сСкогаш Π·Π½Π°Ρ‡ΠΈ Π΄Π΅ΠΊΠ° 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)

Π—Π°Π±Π΅Π»Π΅ΠΆΠ΅Ρ‚Π΅ Π΄Π΅ΠΊΠ° овој ΠΌΠ΅Ρ‚ΠΎΠ΄ Π΅ Сдноставно совСт Π·Π° ΠΊΠ΅Ρ€Π½Π΅Π»ΠΎΡ‚ ΠΊΠ°ΠΊΠΎ Π΄Π° ΡƒΠΏΡ€Π°Π²ΡƒΠ²Π° со ΠΌΠ΅ΠΌΠΎΡ€ΠΈΡ˜Π°Ρ‚Π°. Ова Π½Π΅ Π·Π½Π°Ρ‡ΠΈ Π΄Π΅ΠΊΠ° ΠΊΠ΅Ρ€Π½Π΅Π»ΠΎΡ‚ автоматски ќС користи ΠΎΠ³Ρ€ΠΎΠΌΠ½ΠΈ страници Π·Π° Π΄Π°Π΄Π΅Π½Π° ΠΌΠ΅ΠΌΠΎΡ€ΠΈΡ˜Π°.

Π’ΠΈΠ΄Π΅Ρ‚Π΅ ја Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π°Ρ‚Π° (manpage)madviseΠ΄Π° Π΄ΠΎΠ·Π½Π°Π΅Ρ‚Π΅ повСќС Π·Π° ΡƒΠΏΡ€Π°Π²ΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ со ΠΌΠ΅ΠΌΠΎΡ€ΠΈΡ˜Π°Ρ‚Π° ΠΈ madvise(), ΠΎΠ²Π°Π° Ρ‚Π΅ΠΌΠ° ΠΈΠΌΠ° Π½Π΅Π²Π΅Ρ€ΠΎΡ˜Π°Ρ‚Π½ΠΎ стрмна ΠΊΡ€ΠΈΠ²Π° Π½Π° ΡƒΡ‡Π΅ΡšΠ΅. Π—Π½Π°Ρ‡ΠΈ, Π°ΠΊΠΎ ΠΈΠΌΠ°Ρ‚Π΅ Π½Π°ΠΌΠ΅Ρ€Π° Π΄Π° Π±ΠΈΠ΄Π΅Ρ‚Π΅ навистина Π΄ΠΎΠ±Ρ€ΠΈ Π²ΠΎ Ρ‚ΠΎΠ°, ΠΏΠΎΠ΄Π³ΠΎΡ‚Π²Π΅Ρ‚Π΅ сС Π΄Π° Ρ‡ΠΈΡ‚Π°Ρ‚Π΅ ΠΈ тСстиратС Π½Π΅ΠΊΠΎΠ»ΠΊΡƒ Π½Π΅Π΄Π΅Π»ΠΈ ΠΏΡ€Π΅Π΄ Π΄Π° ΠΎΡ‡Π΅ΠΊΡƒΠ²Π°Ρ‚Π΅ ΠΏΠΎΠ·ΠΈΡ‚ΠΈΠ²Π½ΠΈ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈ.

Π¨Ρ‚ΠΎ Π΄Π° сС ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°?

Π˜ΠΌΠ°Ρ‚Π΅ ΠΏΡ€Π°ΡˆΠ°ΡšΠ΅? ΠΠ°ΠΏΠΈΡˆΠ΅Ρ‚Π΅ Π²ΠΎ ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈ!

Π˜Π·Π²ΠΎΡ€: www.habr.com

Π”ΠΎΠ΄Π°Π΄Π΅Ρ‚Π΅ ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€