HugePages рдЪреЗ рдлрд╛рдпрджреЗ рдЖрдгрд┐ рддреЛрдЯреЗ

HugePages рдЪреЗ рдлрд╛рдпрджреЗ рдЖрдгрд┐ рддреЛрдЯреЗ

рдЕрднреНрдпрд╛рд╕рдХреНрд░рдорд╛рдЪреНрдпрд╛ рд╡рд┐рджреНрдпрд╛рд░реНрдереНрдпрд╛рдВрд╕рд╛рдареА рддрдпрд╛рд░ рдХреЗрд▓реЗрд▓реНрдпрд╛ рд▓реЗрдЦрд╛рдЪреЗ рднрд╛рд╖рд╛рдВрддрд░ "рд▓рд┐рдирдХреНрд╕ рдкреНрд░рд╢рд╛рд╕рдХ".

рдкреВрд░реНрд╡реА, рдореА Linux рд╡рд░ Hugepages рдЪреА рдЪрд╛рдЪрдгреА рдЖрдгрд┐ рд╕рдХреНрд╖рдо рдХрд╕реЗ рдХрд░рд╛рд╡реЗ рдпрд╛рдмрджреНрджрд▓ рдмреЛрд▓рд▓реЛ.
рд╣рд╛ рд▓реЗрдЦ рдлрдХреНрдд рддреЗрд╡реНрд╣рд╛рдЪ рдЙрдкрдпреБрдХреНрдд рдард░реЗрд▓ рдЬреЗрд╡реНрд╣рд╛ рддреБрдордЪреНрдпрд╛рдХрдбреЗ рдкреНрд░рдЪрдВрдб рдкреЗрдЬреЗрд╕ рд╡рд╛рдкрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЬрд╛рдЧрд╛ рдЕрд╕реЗрд▓. рдореА рдЕрд╢рд╛ рдЕрдиреЗрдХ рд▓реЛрдХрд╛рдВрдирд╛ рднреЗрдЯрд▓реЛ рдЖрд╣реЗ рдЬреНрдпрд╛рдВрдирд╛ Hugepages рдЬрд╛рджреБрдИрдкрдгреЗ рдЙрддреНрдкрд╛рджрдХрддрд╛ рд╕реБрдзрд╛рд░реЗрд▓ рдпрд╛ рдЖрд╢реЗрдиреЗ рдлрд╕рд▓реЗ рдЖрд╣реЗ. рддрдерд╛рдкрд┐, рд╡рд┐рд╢рд╛рд▓ рдкреЗрдЬрд┐рдВрдЧ рд╣рд╛ рдПрдХ рдЬрдЯрд┐рд▓ рд╡рд┐рд╖рдп рдЖрд╣реЗ рдЖрдгрд┐ рдЪреБрдХреАрдЪрд╛ рд╡рд╛рдкрд░ рдХреЗрд▓реНрдпрд╛рд╕ рдХрд╛рд░реНрдпрдкреНрд░рджрд░реНрд╢рди рдЦрд░рд╛рдм рд╣реЛрдК рд╢рдХрддреЗ.

рднрд╛рдЧ 1: Linux рд╡рд░ рд╡рд┐рд╢рд╛рд▓ рдкреГрд╖реНрдареЗ рд╕рдХреНрд╖рдо рдЖрд╣реЗрдд рдпрд╛рдЪреА рдкрдбрддрд╛рд│рдгреА рдХрд░рдгреЗ (рдореВрд│ рдпреЗрдереЗ)

рд╕рдорд╕реНрдпрд╛:
рддреБрдордЪреНрдпрд╛ рд╕рд┐рд╕реНрдЯреАрдорд╡рд░ HugePages рд╕рдХреНрд╖рдо рдЖрд╣реЗ рдХрд╛ рддреЗ рддрдкрд╛рд╕рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ.

рдЙрдкрд╛рдп:
рд╣реЗ рдЕрдЧрджреА рд╕реЛрдкреЗ рдЖрд╣реЗ:

cat /sys/kernel/mm/transparent_hugepage/enabled

рддреБрдореНрд╣рд╛рд▓рд╛ рдЕрд╕реЗ рдХрд╛рд╣реАрддрд░реА рдорд┐рд│реЗрд▓:

always [madvise] never

рддреБрдореНрд╣рд╛рд▓рд╛ рдЙрдкрд▓рдмреНрдз рдкрд░реНрдпрд╛рдпрд╛рдВрдЪреА рд╕реВрдЪреА рджрд┐рд╕реЗрд▓ (рдиреЗрд╣рдореА, madvise, рдХрдзреАрд╣реА), рдЖрдгрд┐ рд╕рдзреНрдпрд╛ рд╕рдХреНрд░рд┐рдп рдкрд░реНрдпрд╛рдп рдХрдВрд╕рд╛рдд рдмрдВрдж рдХреЗрд▓рд╛ рдЬрд╛рдИрд▓ (рдбреАрдлреЙрд▓реНрдЯрдиреБрд╕рд╛рд░ madvise).

madvise рдпрд╛рдЪрд╛ рдЕрд░реНрде transparent hugepages рдХреЗрд╡рд│ рдореЗрдорд░реА рдХреНрд╖реЗрддреНрд░рд╛рдВрд╕рд╛рдареА рд╕рдХреНрд╖рдо рдХреЗрд▓реЗ рдЖрд╣реЗ рдЬреЗ рд╡рд╛рдкрд░реВрди рдореЛрдареНрдпрд╛ рдкреГрд╖реНрдард╛рдВрдЪреА рд╕реНрдкрд╖реНрдЯрдкрдгреЗ рд╡рд┐рдирдВрддреА рдХрд░рддрд╛рдд madvise(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 рд╡рд╛рдкрд░рдгреНрдпрд╛рдЪреЗ рдлрд╛рдпрджреЗ, рддреЛрдЯреЗ рдЖрдгрд┐ рд╕рдВрднрд╛рд╡реНрдп рддреЛрдЯреЗ рдЖрдореНрд╣реА рдирд┐рд╡рдбрдХрдкрдгреЗ рд╕реНрдкрд╖реНрдЯ рдХрд░рдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХрд░реВ. рд╣реНрдпреБрдЬрдкреЗрдЬреЗрд╕ рд╣рд╛ рд░рд╛рдордмрд╛рдг рдЙрдкрд╛рдп рдЕрд╕рд▓реНрдпрд╛рдЪреНрдпрд╛ рднреНрд░рдорд╛рдд рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рд▓реЛрдХрд╛рдВрд╕рд╛рдареА рддрд╛рдВрддреНрд░рд┐рдХрджреГрд╖реНрдЯреНрдпрд╛ рдЧреБрдВрддрд╛рдЧреБрдВрддреАрдЪрд╛ рдЖрдгрд┐ рдкреЗрдбреЗрдВрдЯрд┐рдХ рд▓реЗрдЦ рд╕рдордЬрдгреЗ рдХрдареАрдг рдЕрд╕рд▓реНрдпрд╛рдиреЗ, рдореА рд╕рд╛рдзреЗрдкрдгрд╛рд╕рд╛рдареА рдЕрдЪреВрдХрддреЗрдЪрд╛ рддреНрдпрд╛рдЧ рдХрд░реАрди. рд╣реЗ рд▓рдХреНрд╖рд╛рдд рдареЗрд╡рдгреНрдпрд╛рд╕рд╛рд░рдЦреЗ рдЖрд╣реЗ рдХреА рдмрд░реЗрдЪ рд╡рд┐рд╖рдп рдЦрд░реЛрдЦрд░рдЪ рдЧреБрдВрддрд╛рдЧреБрдВрддреАрдЪреЗ рдЖрд╣реЗрдд рдЖрдгрд┐ рдореНрд╣рдгреВрди рддреЗ рдореЛрдареНрдпрд╛ рдкреНрд░рдорд╛рдгрд╛рдд рд╕рд░рд▓реАрдХреГрдд рдЖрд╣реЗрдд.

рдХреГрдкрдпрд╛ рд▓рдХреНрд╖рд╛рдд рдШреНрдпрд╛ рдХреА рдЖрдореНрд╣реА рд▓рд┐рдирдХреНрд╕ рдЪрд╛рд▓рд╡рдгрд╛рд░реНтАНрдпрд╛ 64-рдмрд┐рдЯ x86 рд╕рд┐рд╕реНрдЯрдордмрджреНрджрд▓ рдмреЛрд▓рдд рдЖрд╣реЛрдд рдЖрдгрд┐ рдореА рдлрдХреНрдд рдЕрд╕реЗ рдЧреГрд╣реАрдд рдзрд░рдд рдЖрд╣реЗ рдХреА рд╣реА рдкреНрд░рдгрд╛рд▓реА рдкрд╛рд░рджрд░реНрд╢рдХ рд╡рд┐рд╢рд╛рд▓рдкреГрд╖реНрдард╛рдВрдирд╛ рд╕рдорд░реНрдерди рджреЗрддреЗ (рдХрд╛рд░рдг рд╣реЗ рдХрд╛рд╣реА рдЧреИрд░ рдирд╛рд╣реА рдХреА рд╡рд┐рд╢рд╛рд▓рдкреГрд╖реНрдареЗ рдЕрдзрд┐рд▓рд┐рдЦрд┐рдд рд╣реЛрдд рдирд╛рд╣реАрдд), рдЬрд╕реЗ рдХреА рдЬрд╡рд│рдЬрд╡рд│ рдХреЛрдгрддреНрдпрд╛рд╣реА рдЖрдзреБрдирд┐рдХ рд▓рд┐рдирдХреНрд╕рдордзреНрдпреЗ рдЖрд╣реЗ. рд╡рд╛рддрд╛рд╡рд░рдг

рдореА рдЦрд╛рд▓реАрд▓ рджреБрд╡реНрдпрд╛рдВрдордзреНрдпреЗ рдЕрдзрд┐рдХ рддрд╛рдВрддреНрд░рд┐рдХ рд╡рд░реНрдгрди рд╕рдВрд▓рдЧреНрди рдХрд░реЗрди.

рдЖрднрд╛рд╕реА рд╕реНрдореГрддреА

рддреБрдореНрд╣реА C++ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдЕрд╕рд▓реНрдпрд╛рд╕, рддреБрдореНрд╣рд╛рд▓рд╛ рдорд╛рд╣реАрдд рдЖрд╣реЗ рдХреА рдореЗрдорд░реАрдордзреАрд▓ рд╡рд╕реНрддреВрдВрдирд╛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрддреНрддреЗ (рдкреЙрдЗрдВрдЯрд░ рд╡реНрд╣реЕрд▓реНрдпреВ) рдЕрд╕рддрд╛рдд.

рддрдерд╛рдкрд┐, рд╣реЗ рдкрддреНрддреЗ рдореЗрдорд░реАрдордзреНрдпреЗ (RAM рдкрддреНрддреЗ) рднреМрддрд┐рдХ рдкрддреНрддреЗ рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд рдХрд░рдд рдирд╛рд╣реАрдд. рддреЗ рд╡реНрд╣рд░реНрдЪреНрдпреБрдЕрд▓ рдореЗрдорд░реАрдордзреНрдпреЗ рдкрддреНрддреЗ рджрд░реНрд╢рд╡рддрд╛рдд. рдкреНрд░реЛрд╕реЗрд╕рд░рдордзреНрдпреЗ рдПрдХ рд╡рд┐рд╢реЗрд╖ MMU (рдореЗрдорд░реА рдореЕрдиреЗрдЬрдореЗрдВрдЯ рдпреБрдирд┐рдЯ) рдореЙрдбреНрдпреВрд▓ рдЖрд╣реЗ рдЬреЗ рдХрд░реНрдирд▓ рдореЕрдк рд╡реНрд╣рд░реНрдЪреНрдпреБрдЕрд▓ рдореЗрдорд░реАрд▓рд╛ рднреМрддрд┐рдХ рд╕реНрдерд╛рдирд╛рд╡рд░ рдорджрдд рдХрд░рддреЗ.

рдпрд╛ рдкрджреНрдзрддреАрдЪреЗ рдмрд░реЗрдЪ рдлрд╛рдпрджреЗ рдЖрд╣реЗрдд, рдкрд░рдВрддреБ рд╕рд░реНрд╡рд╛рдд рдорд╣рддреНрд╡рд╛рдЪреЗ рдЖрд╣реЗрдд:

  • рдХрд╛рдордЧрд┐рд░реА (рд╡рд┐рд╡рд┐рдз рдХрд╛рд░рдгрд╛рдВрдореБрд│реЗ);
  • рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЖрдпрд╕реЛрд▓реЗрд╢рди, рдореНрд╣рдгрдЬреЗрдЪ рдХреЛрдгрддрд╛рд╣реА рдкреНрд░реЛрдЧреНрд░рд╛рдо рджреБрд╕рд░реНтАНрдпрд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдордЪреНрдпрд╛ рдореЗрдорд░реАрдордзреВрди рд╡рд╛рдЪреВ рд╢рдХрдд рдирд╛рд╣реА.

рдкреГрд╖реНрдареЗ рдХрд╛рдп рдЖрд╣реЗрдд?

рд╡реНрд╣рд░реНрдЪреНрдпреБрдЕрд▓ рдореЗрдорд░реА рдкреГрд╖реНрдард╛рдВрдордзреНрдпреЗ рд╡рд┐рднрд╛рдЧрд▓реА рдЖрд╣реЗ. рдкреНрд░рддреНрдпреЗрдХ рд╡реИрдпрдХреНрддрд┐рдХ рдкреГрд╖реНрда рд╡рд┐рд╢рд┐рд╖реНрдЯ рднреМрддрд┐рдХ рдореЗрдорд░реАрдХрдбреЗ рдирд┐рд░реНрджреЗрд╢ рдХрд░рддреЗ, рддреЗ RAM рдордзреАрд▓ рдХреНрд╖реЗрддреНрд░рд╛рдХрдбреЗ рдирд┐рд░реНрджреЗрд╢ рдХрд░реВ рд╢рдХрддреЗ рдХрд┐рдВрд╡рд╛ рддреЗ рдПрдЦрд╛рджреНрдпрд╛ рднреМрддрд┐рдХ рдЙрдкрдХрд░рдгрд╛рд▓рд╛ рдирд┐рдпреБрдХреНрдд рдХреЗрд▓реЗрд▓реНрдпрд╛ рдкрддреНрддреНрдпрд╛рдХрдбреЗ рдирд┐рд░реНрджреЗрд╢ рдХрд░реВ рд╢рдХрддреЗ, рдЬрд╕реЗ рдХреА рд╡реНрд╣рд┐рдбрд┐рдУ рдХрд╛рд░реНрдб.

рддреБрдореНрд╣реА рдбреАрд▓ рдХреЗрд▓реЗрд▓реА рдмрд░реАрдЪрд╢реА рдкреЗрдЬ рдПрдХрддрд░ RAM рдХрдбреЗ рдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░рддрд╛рдд рдХрд┐рдВрд╡рд╛ рд╕реНрд╡реЕрдк рдХреЗрд▓реЗрд▓реА рдЕрд╕рддрд╛рдд, рдореНрд╣рдгрдЬреЗ рддреА рддреБрдордЪреНрдпрд╛ рд╣рд╛рд░реНрдб рдбреНрд░рд╛рдЗрд╡реНрд╣ рдХрд┐рдВрд╡рд╛ SSD рд╡рд░ рд╕рд╛рдард╡рд▓реЗрд▓реА рдЕрд╕рддрд╛рдд. рдХрд░реНрдирд▓ рдкреНрд░рддреНрдпреЗрдХ рдкреГрд╖реНрдард╛рдЪреЗ рднреМрддрд┐рдХ рд▓реЗрдЖрдЙрдЯ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ. рдлрд╕рд╡рдгреВрдХ рдХреЗрд▓реЗрд▓реНрдпрд╛ рдкреГрд╖реНрдард╛рд╡рд░ рдкреНрд░рд╡реЗрд╢ рдХреЗрд▓рд╛ рдЕрд╕рд▓реНрдпрд╛рд╕, рдХрд░реНрдирд▓ рдореЗрдорд░реАрдордзреНрдпреЗ рдкреНрд░рд╡реЗрд╢ рдХрд░рдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХрд░рдд рдЕрд╕рд▓реЗрд▓рд╛ рдереНрд░реЗрдб рдерд╛рдВрдмрд╡рддреЛ, рд╣рд╛рд░реНрдб рдбреНрд░рд╛рдЗрд╡реНрд╣/рдПрд╕рдПрд╕рдбреА рд╡рд░реВрди RAM рдордзреНрдпреЗ рдкреГрд╖реНрда рд╡рд╛рдЪрддреЛ рдЖрдгрд┐ рдирдВрддрд░ рдереНрд░реЗрдб рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рдгреЗ рд╕реБрд░реВ рдареЗрд╡рддреЛ.

рд╣реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкреНрд░рд╡рд╛рд╣ рдкрд╛рд░рджрд░реНрд╢рдХ рдЖрд╣реЗ, рдпрд╛рдЪрд╛ рдЕрд░реНрде рддреА HDD/SSD рд╡рд░реВрди рдереЗрдЯ рд╡рд╛рдЪрд▓реА рдЬрд╛рдд рдирд╛рд╣реА. рд╕рд╛рдорд╛рдиреНрдп рдкреГрд╖реНрдард╛рдВрдЪрд╛ рдЖрдХрд╛рд░ 4096 рдмрд╛рдЗрдЯреНрд╕ рдЖрд╣реЗ. рдкреНрд░рдЪрдВрдб рдкреГрд╖реНрдард╛рдВрдЪрд╛ рдЖрдХрд╛рд░ 2 рдореЗрдЧрд╛рдмрд╛рдЗрдЯреНрд╕ рдЖрд╣реЗ.

рдЯреНрд░рд╛рдиреНрд╕рд▓реЗрд╢рди-рдЕрд╕реЛрд╕рд┐рдПрдЯрд┐рд╡реНрд╣ рдмрдлрд░ (TLB)

рдЬреЗрд╡реНрд╣рд╛ рдПрдЦрд╛рджрд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдореЗрдорд░реАрдЪреНрдпрд╛ рдкреГрд╖реНрдард╛рд╡рд░ рдкреНрд░рд╡реЗрд╢ рдХрд░рддреЛ, рддреЗрд╡реНрд╣рд╛ CPU рд▓рд╛ рдорд╛рд╣рд┐рдд рдЕрд╕рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ рдХреА рдХреЛрдгрддреНрдпрд╛ рднреМрддрд┐рдХ рдкреГрд╖реНрдард╛рд╡рд░реВрди рдбреЗрдЯрд╛ рд╡рд╛рдЪрд╛рдпрдЪрд╛ рдЖрд╣реЗ (рдореНрд╣рдгрдЬреЗ, рдПрдХ рдЖрднрд╛рд╕реА рдкрддреНрддрд╛ рдирдХрд╛рд╢рд╛ рдЖрд╣реЗ).

рдХрд░реНрдирд▓рдордзреНрдпреЗ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ (рдкреГрд╖реНрда рд╕рд╛рд░рдгреА) рдЕрд╕рддреЗ рдЬреНрдпрд╛рдордзреНрдпреЗ рд╡рд╛рдкрд░рд▓реНрдпрд╛ рдЬрд╛рдгрд╛рд░реНтАНрдпрд╛ рдкреГрд╖реНрдард╛рдВрдмрджреНрджрд▓ рд╕рд░реНрд╡ рдорд╛рд╣рд┐рддреА рдЕрд╕рддреЗ. рдпрд╛ рдбреЗрдЯрд╛ рд╕реНрдЯреНрд░рдХреНрдЪрд░рдЪрд╛ рд╡рд╛рдкрд░ рдХрд░реВрди, рддреБрдореНрд╣реА рдкреНрд░рддреНрдпрдХреНрд╖ рдкрддреНрддреНрдпрд╛рд╡рд░ рдЖрднрд╛рд╕реА рдкрддреНрддрд╛ рдореЕрдк рдХрд░реВ рд╢рдХрддрд╛.

рддрдерд╛рдкрд┐, рдкреГрд╖реНрда рд╕рд╛рд░рдгреА рдЦреВрдкрдЪ рдЬрдЯрд┐рд▓ рдЖрдгрд┐ рд╣рд│реВ рдЖрд╣реЗ, рдореНрд╣рдгреВрди рдкреНрд░рддреНрдпреЗрдХ рд╡реЗрд│реА рдЬреЗрд╡реНрд╣рд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдорд░реАрдордзреНрдпреЗ рдкреНрд░рд╡реЗрд╢ рдХрд░рддреЗ рддреЗрд╡реНрд╣рд╛ рдЖрдореНрд╣реА рд╕рдВрдкреВрд░реНрдг рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдиреЗрдЪреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реВ рд╢рдХрдд рдирд╛рд╣реА.

рд╕реБрджреИрд╡рд╛рдиреЗ, рдЖрдордЪреНрдпрд╛ рдкреНрд░реЛрд╕реЗрд╕рд░рдордзреНрдпреЗ TLB рдЖрд╣реЗ рдЬреЛ рдЖрднрд╛рд╕реА рдЖрдгрд┐ рднреМрддрд┐рдХ рдкрддреНрддреНрдпрд╛рдВрдордзреАрд▓ рдореЕрдкрд┐рдВрдЧ рдХреЕрд╢ рдХрд░рддреЛ. рдпрд╛рдЪрд╛ рдЕрд░реНрде рдЕрд╕рд╛ рдХреА рдЖрдореНрд╣рд╛рд▓рд╛ рдкрд╣рд┐рд▓реНрдпрд╛ рдНрдХреНрд╕реЗрд╕рдЪреНрдпрд╛ рдкреНрд░рдпрддреНрдирд╛рдд рдкреГрд╖реНрда рд╕рд╛рд░рдгреАрдЪреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЕрд╕рд▓реЗ рддрд░реА, рдкреГрд╖реНрдард╛рд╡рд░реАрд▓ рддреНрдпрд╛рдирдВрддрд░рдЪреЗ рд╕рд░реНрд╡ рдкреНрд░рд╡реЗрд╢ TLB рдордзреНрдпреЗ рд╣рд╛рддрд╛рд│рд▓реЗ рдЬрд╛рдК рд╢рдХрддрд╛рдд, рдЬреНрдпрд╛рдореБрд│реЗ рдЬрд▓рдж рдСрдкрд░реЗрд╢рдирд▓рд╛ рдЕрдиреБрдорддреА рдорд┐рд│рддреЗ.

рдХрд╛рд░рдг рддреЗ рднреМрддрд┐рдХ рдЙрдкрдХрд░рдг рдореНрд╣рдгреВрди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХреЗрд▓реЗ рдЧреЗрд▓реЗ рдЖрд╣реЗ (рдЬреНрдпрд╛рдореБрд│реЗ рддреЗ рдкреНрд░рдердо рд╕реНрдерд╛рдирд╛рд╡рд░ рдЬрд▓рдж рд╣реЛрддреЗ), рддреНрдпрд╛рдЪреА рдХреНрд╖рдорддрд╛ рдорд░реНрдпрд╛рджрд┐рдд рдЖрд╣реЗ. рддреНрдпрд╛рдореБрд│реЗ рддреБрдореНрд╣рд╛рд▓рд╛ рдЕрдзрд┐рдХ рдкреЗрдЬреЗрд╕ рдНрдХреНрд╕реЗрд╕ рдХрд░рд╛рдпрдЪреЗ рдЕрд╕рд▓реНрдпрд╛рд╕, TLB рддреНрдпрд╛ рд╕рд░реНрд╡рд╛рдВрд╕рд╛рдареА рдореЕрдкрд┐рдВрдЧ рд╕рдВрдЪрдпрд┐рдд рдХрд░реВ рд╢рдХрдгрд╛рд░ рдирд╛рд╣реА, рдЬреНрдпрд╛рдореБрд│реЗ рддреБрдордЪрд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЦреВрдкрдЪ рд╣рд│реВ рдЪрд╛рд▓реЗрд▓.

рдкреНрд░рдЪрдВрдб рдкреГрд╖реНрдареЗ рдмрдЪрд╛рд╡рд╛рд╕рд╛рдареА рдпреЗрддрд╛рдд

рддрд░ TLB рдУрд╡реНрд╣рд░рдлреНрд▓реЛ рдЯрд╛рд│рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдкрдг рдХрд╛рдп рдХрд░реВ рд╢рдХрддреЛ? (рдЖрдореНрд╣реА рдЧреГрд╣реАрдд рдзрд░рддреЛ рдХреА рдкреНрд░реЛрдЧреНрд░рд╛рдорд▓рд╛ рдЕрдЬреВрдирд╣реА рд╕рдорд╛рди рдкреНрд░рдорд╛рдгрд╛рдд рдореЗрдорд░реА рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ).

рдЗрдереЗрдЪ Hugepages рдпреЗрддрд╛рдд. 4096 рдмрд╛рдЗрдЯреНрд╕ рдРрд╡рдЬреА рдлрдХреНрдд рдПрдХ TLB рдПрдВрдЯреНрд░реА рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ, рдПрдХ TLB рдПрдВрдЯреНрд░реА рдЖрддрд╛ рддрдмреНрдмрд▓ 2 рдореЗрдЧрд╛рдмрд╛рдЗрдЯреНрд╕ рджрд░реНрд╢рд╡реВ рд╢рдХрддреЗ. TLB рдордзреНрдпреЗ 512 рдПрдВрдЯреНрд░реА рдЖрд╣реЗрдд рдЕрд╕реЗ рдЧреГрд╣реАрдд рдзрд░реВ рдпрд╛, рдпреЗрдереЗ рдореЛрдареНрдпрд╛ рдкреГрд╖реНрдард╛рдВрд╢рд┐рд╡рд╛рдп рдЖрдкрдг рдЬреБрд│реВ рд╢рдХрддреЛ:

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 рдореЗрдЧрд╛рдмрд╛рдЗрдЯреНрд╕ рдЗрддрдХреА рдорд╛рд╣рд┐рддреА рдмрджрд▓рдгреЗ (рд╡рд╛рдЪрдгреЗ) рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ рдлрдХреНрдд рдПрдХ рдмрд╛рдЗрдЯ рд╡рд╛рдЪрдгреНрдпрд╛рд╕рд╛рдареА. рдирд┐рдпрдорд┐рдд рдкреГрд╖реНрдард╛рдВрд╕рд╛рдареА, рд╣рд╛рд░реНрдб рдбреНрд░рд╛рдЗрд╡реНрд╣/рдПрд╕рдПрд╕рдбреА рд╡рд░реВрди рдлрдХреНрдд 4096 рдмрд╛рдЗрдЯреНрд╕ рд╡рд╛рдЪрдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ.

рдореНрд╣рдгреВрди, рдЬрд░ рд╡рд┐рд╢рд╛рд▓рдкреГрд╖реНрда рдУрд╡реНрд╣рд░рд░рд╛рдЗрдб рдХреЗрд▓реЗ рдЕрд╕реЗрд▓ рддрд░, рдЬрд░ рддреБрдореНрд╣рд╛рд▓рд╛ рд╕рдВрдкреВрд░реНрдг рдкреГрд╖реНрдард╛рд╡рд░ рдкреНрд░рд╡реЗрд╢ рдХрд░рдгреНрдпрд╛рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЕрд╕реЗрд▓ рддрд░рдЪ рддреЗ рд╡рд╛рдЪрдгреЗ рдЬрд▓рдж рд╣реЛрдИрд▓. рдпрд╛рдЪрд╛ рдЕрд░реНрде рдЕрд╕рд╛ рдХреА рдЬрд░ рддреБрдореНрд╣реА рдпрд╛рджреГрдЪреНрдЫрд┐рдХрдкрдгреЗ рдореЗрдорд░реАрдЪреНрдпрд╛ рд╡реЗрдЧрд╡реЗрдЧрд│реНрдпрд╛ рднрд╛рдЧрд╛рдВрдордзреНрдпреЗ рдкреНрд░рд╡реЗрд╢ рдХрд░рдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХрд░рдд рдЕрд╕рд╛рд▓ рдЖрдгрд┐ рдлрдХреНрдд рджреЛрди рдХрд┐рд▓реЛрдмрд╛рдЗрдЯреНрд╕ рд╡рд╛рдЪрдд рдЕрд╕рд╛рд▓, рддрд░ рддреБрдореНрд╣реА рдирд┐рдпрдорд┐рдд рдкреГрд╖реНрдареЗ рд╡рд╛рдкрд░рд╛рд╡реАрдд рдЖрдгрд┐ рдХрд╢рд╛рдЪреАрд╣реА рдХрд╛рд│рдЬреА рдХрд░реВ рдирдпреЗ.

рджреБрд╕рд░реАрдХрдбреЗ, рдЬрд░ рддреБрдореНрд╣рд╛рд▓рд╛ рдореЗрдорд░реАрдЪреНрдпрд╛ рдореЛрдареНрдпрд╛ рднрд╛рдЧрд╛рдордзреНрдпреЗ рдЕрдиреБрдХреНрд░рдореЗ рдкреНрд░рд╡реЗрд╢ рдХрд░рдгреНрдпрд╛рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЕрд╕реЗрд▓, рддрд░ рд╡рд┐рд╢рд╛рд▓ рдкреГрд╖реНрдареЗ рддреБрдордЪреЗ рдХрд╛рд░реНрдпрдкреНрд░рджрд░реНрд╢рди рд╕реБрдзрд╛рд░рддреАрд▓. рддрдерд╛рдкрд┐, рддреБрдореНрд╣рд╛рд▓рд╛ рддреЗ рд╕реНрд╡рддрдГ рддрдкрд╛рд╕рдгреНрдпрд╛рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЖрд╣реЗ (рдЕрдореВрд░реНрдд рд╕реЙрдлреНрдЯрд╡реЗрдЕрд░рд╕рд╣ рдирд╛рд╣реА) рдЖрдгрд┐ рдХрд╛рдп рдЬрд▓рдж рдХрд╛рд░реНрдп рдХрд░рддреЗ рддреЗ рдкрд╣рд╛.

рдореЗрдорд░реА рдордзреНрдпреЗ рд╡рд╛рдЯрдк

рддреБрдореНрд╣реА C рд▓рд┐рд╣рд┐рд▓реНрдпрд╛рд╕, рддреБрдореНрд╣рд╛рд▓рд╛ рдорд╛рд╣реАрдд рдЖрд╣реЗ рдХреА рддреБрдореНрд╣реА рдпрд╛ рдвреАрдЧрдордзреВрди рдЕрдирд┐рдпрдВрддреНрд░рд┐рддрдкрдгреЗ рд▓рд╣рд╛рди (рдХрд┐рдВрд╡рд╛ рдЬрд╡рд│рдЬрд╡рд│ рдЕрдирд┐рдпрдВрддреНрд░рд┐рддрдкрдгреЗ рдореЛрдареНрдпрд╛ рдкреНрд░рдорд╛рдгрд╛рдд) рдореЗрдорд░реАрдЪреА рд╡рд┐рдирдВрддреА рдХрд░реВ рд╢рдХрддрд╛. malloc(). рд╕рдордЬрд╛ рддреБрдореНрд╣рд╛рд▓рд╛ 30 рдмрд╛рдЗрдЯреНрд╕ рдореЗрдорд░реА рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ:

char* mymemory = malloc(30);

рдПрдЦрд╛рджреНрдпрд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░рд▓рд╛, рдЕрд╕реЗ рджрд┐рд╕реВрди рдпреЗрдИрд▓ рдХреА рддреБрдореНрд╣реА рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдордХрдбреВрди 30 рдмрд╛рдЗрдЯреНрд╕ рдореЗрдорд░реАрдЪреА "рд╡рд┐рдирдВрддреА" рдХрд░рдд рдЖрд╣рд╛рдд рдЖрдгрд┐ рдХрд╛рд╣реА рд╡реНрд╣рд░реНрдЪреНрдпреБрдЕрд▓ рдореЗрдорд░реАрд╡рд░ рдкреЙрдЗрдВрдЯрд░ рдкрд░рдд рдХрд░рдд рдЖрд╣рд╛рдд. рдкрдг рдкреНрд░рддреНрдпрдХреНрд╖рд╛рдд malloc () рд╣реЗ рдлрдХреНрдд рдПрдХ C рдлрдВрдХреНрд╢рди рдЖрд╣реЗ рдЬреЗ рдлрдВрдХреНрд╢рдирдордзреВрди рдХреЙрд▓ рдХрд░рддреЗ brk рдЖрдгрд┐ sbrk рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯреАрдордордзреВрди рдореЗрдорд░реАрдЪреА рд╡рд┐рдирдВрддреА рдХрд░рдгреЗ рдХрд┐рдВрд╡рд╛ рдореБрдХреНрдд рдХрд░рдгреЗ.

рддрдерд╛рдкрд┐, рдкреНрд░рддреНрдпреЗрдХ рд╡рд╛рдЯрдкрд╛рд╕рд╛рдареА рдЕрдзрд┐рдХрд╛рдзрд┐рдХ рдореЗрдорд░реАрдЪреА рд╡рд┐рдирдВрддреА рдХрд░рдгреЗ рдЕрдХрд╛рд░реНрдпрдХреНрд╖рдо рдЖрд╣реЗ; рдмрд╣реБрдзрд╛ рдХрд╛рд╣реА рдореЗрдорд░реА рд╡рд┐рднрд╛рдЧ рдЖрдзреАрдЪ рдореЛрдХрд│рд╛ рдЭрд╛рд▓рд╛ рдЖрд╣реЗ (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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╛