рд╣реНрдпреВрдЬрдкреЗрдЬ рдХреЗ рдлрд╛рдпрджреЗ рдФрд░ рдиреБрдХрд╕рд╛рди

рд╣реНрдпреВрдЬрдкреЗрдЬ рдХреЗ рдлрд╛рдпрджреЗ рдФрд░ рдиреБрдХрд╕рд╛рди

рдкрд╛рдареНрдпрдХреНрд░рдо рдХреЗ рд╡рд┐рджреНрдпрд╛рд░реНрдерд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдХрд┐рдпреЗ рдЧрдпреЗ рдЖрд▓реЗрдЦ рдХрд╛ рдЕрдиреБрд╡рд╛рдж "рд▓рд┐рдирдХреНрд╕ рдкреНрд░рд╢рд╛рд╕рдХ".

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

рднрд╛рдЧ 1: рдпрд╣ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдирд╛ рдХрд┐ рд▓рд┐рдирдХреНрд╕ (рдореВрд▓) рдкрд░ рд╡рд┐рд╢рд╛рд▓ рдкреГрд╖реНрда рд╕рдХреНрд╖рдо рд╣реИрдВ рдпрд╣рд╛рдВ)

рд╕рдорд╕реНрдпрд╛:
рдЖрдкрдХреЛ рдпрд╣ рдЬрд╛рдВрдЪрдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рдЖрдкрдХреЗ рд╕рд┐рд╕реНрдЯрдо рдкрд░ HugePages рд╕рдХреНрд╖рдо рд╣реИред

рд╕рдорд╛рдзрд╛рди:
рдпрд╣ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИ:

cat /sys/kernel/mm/transparent_hugepage/enabled

рдЖрдкрдХреЛ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рдорд┐рд▓реЗрдЧрд╛:

always [madvise] never

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

рдкрд╛рдЧрд▓рдкрди рдорддрд▓рдм рдХрд┐ transparent hugepages рдХреЗрд╡рд▓ рдЙрди рд╕реНрдореГрддрд┐ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдХреНрд╖рдо рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╡рд┐рд╢рд╛рд▓ рдкреГрд╖реНрдареЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рддреЗ рд╣реИрдВ рдкрд╛рдЧрд▓рдкрди(2).

рд╣рдореЗрд╢рд╛ рдорддрд▓рдм рдХрд┐ transparent hugepages рд╕рднреА рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╣рдореЗрд╢рд╛ рд╕рдХреНрд╖рдоред рдпрд╣ рдЖрдорддреМрд░ рдкрд░ рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рдЙрдкрдпреЛрдЧ рдХрд╛ рдорд╛рдорд▓рд╛ рд╣реИ рдЬрд╣рд╛рдВ рдХрдИ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдВ рдереЛрдбрд╝реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдореЗрдореЛрд░реА рдХрд╛ рдЙрдкрднреЛрдЧ рдХрд░ рд░рд╣реА рд╣реИрдВ, рддреЛ рд╕рдордЧреНрд░ рдореЗрдореЛрд░реА рд▓реЛрдб рдирд╛рдЯрдХреАрдп рд░реВрдк рд╕реЗ рдмрдврд╝ рд╕рдХрддрд╛ рд╣реИред

рдХрднреА рдирд╣реАрдБ рдорддрд▓рдм рдХрд┐ transparent hugepages рдореИрдбрд╡рд┐рдЬрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдкрд░ рднреА рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЕрдзрд┐рдХ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдкрд░реНрдХ рдХрд░реЗрдВ рдкреНрд░рд▓реЗрдЦрди рд▓рд┐рдирдХреНрд╕ рдХрд░реНрдиреЗрд▓.

рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рдХреИрд╕реЗ рдмрджрд▓реЗрдВ

рджреЗрдЦрд┐рдпреЗ 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
  • рдореИрдбрд╡рд┐рдЬрд╝ рдХреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:
    CONFIG_TRANSPARENT_HUGEPAGE_MADVISE=y
    # Comment out CONFIG_TRANSPARENT_HUGEPAGE_ALWAYS=y

рднрд╛рдЧ 2: рд╣реНрдпреВрдЬрдкреЗрдЬ рдХреЗ рдлрд╛рдпрджреЗ рдФрд░ рдиреБрдХрд╕рд╛рди

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

рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╣рдо рд▓рд┐рдирдХреНрд╕ рдкрд░ рдЪрд▓рдиреЗ рд╡рд╛рд▓реЗ 64-рдмрд┐рдЯ x86 рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдФрд░ рдореИрдВ рдмрд╕ рдпрд╣ рдорд╛рди рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рд╕рд┐рд╕реНрдЯрдо рдкрд╛рд░рджрд░реНрд╢реА рд╣реНрдпреВрдЬрдкреЗрдЬ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ (рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдХреЛрдИ рдиреБрдХрд╕рд╛рди рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╣реНрдпреВрдЬрдкреЗрдЬ рдУрд╡рд░рд░рд╛рдЗрдЯ рдирд╣реАрдВ рдХрд┐рдП рдЧрдП рд╣реИрдВ), рдЬреИрд╕рд╛ рдХрд┐ рд▓рдЧрднрдЧ рдХрд┐рд╕реА рднреА рдЖрдзреБрдирд┐рдХ рд▓рд┐рдирдХреНрд╕ рдореЗрдВ рд╣реЛрддрд╛ рд╣реИ рдкрд░реНрдпрд╛рд╡рд░рдгред

рдореИрдВ рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рд▓рд┐рдВрдХ рдореЗрдВ рдЕрдзрд┐рдХ рддрдХрдиреАрдХреА рд╡рд┐рд╡рд░рдг рд╕рдВрд▓рдЧреНрди рдХрд░реВрдВрдЧрд╛ред

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

рдпрджрд┐ рдЖрдк C++ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рд╣реИрдВ, рддреЛ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдореЗрдореЛрд░реА рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрддреЗ (рдкреЙрдЗрдВрдЯрд░ рдорд╛рди) рд╣реЛрддреЗ рд╣реИрдВред

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

рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рдХрдИ рдлрд╛рдпрджреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИрдВ:

  • рдкреНрд░рджрд░реНрд╢рди (рд╡рд┐рднрд┐рдиреНрди рдХрд╛рд░рдгреЛрдВ рд╕реЗ);
  • рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЖрдЗрд╕реЛрд▓реЗрд╢рди, рдЕрд░реНрдерд╛рдд рдХреЛрдИ рднреА рдкреНрд░реЛрдЧреНрд░рд╛рдо рджреВрд╕рд░реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреА рдореЗрдореЛрд░реА рд╕реЗ рдирд╣реАрдВ рдкрдврд╝ рд╕рдХрддрд╛ред

рдкреЗрдЬ рдХреНрдпрд╛ рд╣реИрдВ?

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

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

рдпрд╣ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реНрдЯреНрд░реАрдо рдкрд╛рд░рджрд░реНрд╢реА рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рд╕реАрдзреЗ рдПрдЪрдбреАрдбреА/рдПрд╕рдПрд╕рдбреА рд╕реЗ рдкрдврд╝реА рдЬрд╛рддреА рд╣реИред рд╕рд╛рдорд╛рдиреНрдп рдкреГрд╖реНрдареЛрдВ рдХрд╛ рдЖрдХрд╛рд░ 4096 рдмрд╛рдЗрдЯреНрд╕ рд╣реЛрддрд╛ рд╣реИред рд╣реНрдпреВрдЬрдкреЗрдЬ рдХрд╛ рдЖрдХрд╛рд░ 2 рдореЗрдЧрд╛рдмрд╛рдЗрдЯ рд╣реИред

рдЕрдиреБрд╡рд╛рдж-рд╕рд╛рд╣рдЪрд░реНрдп рдмрдлрд╝рд░ (рдЯреАрдПрд▓рдмреА)

рдЬрдм рдХреЛрдИ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдореЗрдореЛрд░реА рдХреЗ рдХрд┐рд╕реА рдкреЗрдЬ рддрдХ рдкрд╣реБрдВрдЪрддрд╛ рд╣реИ, рддреЛ рд╕реАрдкреАрдпреВ рдХреЛ рдкрддрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдХрд┐рд╕ рднреМрддрд┐рдХ рдкреЗрдЬ рд╕реЗ рдбреЗрдЯрд╛ рдкрдврд╝рдирд╛ рд╣реИ (рдЕрд░реНрдерд╛рдд, рдПрдХ рд╡рд░реНрдЪреБрдЕрд▓ рдПрдбреНрд░реЗрд╕ рдореИрдк рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП)ред

рдХрд░реНрдиреЗрд▓ рдореЗрдВ рдПрдХ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ (рдкреЗрдЬ рдЯреЗрдмрд▓) рд╣реЛрддреА рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛ рд░рд╣реЗ рдкреЗрдЬреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рд╛рд░реА рдЬрд╛рдирдХрд╛рд░реА рд╣реЛрддреА рд╣реИред рдЗрд╕ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЖрдк рд╡рд░реНрдЪреБрдЕрд▓ рдкрддреЗ рдХреЛ рднреМрддрд┐рдХ рдкрддреЗ рдкрд░ рдореИрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд╣рд╛рд▓рд╛рдБрдХрд┐, рдкреГрд╖реНрда рддрд╛рд▓рд┐рдХрд╛ рдХрд╛рдлреА рдЬрдЯрд┐рд▓ рдФрд░ рдзреАрдореА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЬрдм рднреА рдХреЛрдИ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдореЛрд░реА рддрдХ рдкрд╣реБрдБрдЪрддреА рд╣реИ рддреЛ рд╣рдо рд╕рдВрдкреВрд░реНрдг рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред

рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рд╣рдорд╛рд░реЗ рдкреНрд░реЛрд╕реЗрд╕рд░ рдореЗрдВ рдПрдХ рдЯреАрдПрд▓рдмреА рд╣реИ рдЬреЛ рд╡рд░реНрдЪреБрдЕрд▓ рдФрд░ рднреМрддрд┐рдХ рдкрддреЛрдВ рдХреЗ рдмреАрдЪ рдореИрдкрд┐рдВрдЧ рдХреЛ рдХреИрд╢ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдпрджреНрдпрдкрд┐ рд╣рдореЗрдВ рдкрд╣рд▓реЗ рдПрдХреНрд╕реЗрд╕ рдкреНрд░рдпрд╛рд╕ рдкрд░ рдкреЗрдЬ рдЯреЗрдмрд▓ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдкреЗрдЬ рдкрд░ рд╕рднреА рдмрд╛рдж рдХреА рдПрдХреНрд╕реЗрд╕ рдХреЛ рдЯреАрдПрд▓рдмреА рдореЗрдВ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рддреЗрдЬ рд╕рдВрдЪрд╛рд▓рди рдХреА рдЕрдиреБрдорддрд┐ рдорд┐рд▓рддреА рд╣реИред

рдЪреВрдБрдХрд┐ рдЗрд╕реЗ рдПрдХ рднреМрддрд┐рдХ рдЙрдкрдХрд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (рдЬреЛ рдЗрд╕реЗ рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рддреЗрдЬрд╝ рдмрдирд╛рддрд╛ рд╣реИ), рдЗрд╕рдХреА рдХреНрд╖рдорддрд╛ рд╕реАрдорд┐рдд рд╣реИред рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЖрдк рдЕрдзрд┐рдХ рдкреГрд╖реНрдареЛрдВ рддрдХ рдкрд╣реБрдБрдЪрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЯреАрдПрд▓рдмреА рдЙрди рд╕рднреА рдХреЗ рд▓рд┐рдП рдореИрдкрд┐рдВрдЧ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдЬрд┐рд╕рд╕реЗ рдЖрдкрдХрд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдмрд╣реБрдд рдзреАрдореА рдЧрддрд┐ рд╕реЗ рдЪрд▓реЗрдЧрд╛ред

рд╡рд┐рд╢рд╛рд▓рдкреЗрдЬ рдмрдЪрд╛рд╡ рдХреЗ рд▓рд┐рдП рдЖрддреЗ рд╣реИрдВ

рддреЛ рдЯреАрдПрд▓рдмреА рдЕрддрд┐рдкреНрд░рд╡рд╛рд╣ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдо рдХреНрдпрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? (рд╣рдо рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдЕрднреА рднреА рдЙрддрдиреА рд╣реА рдореЗрдореЛрд░реА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ)ред

рдпрд╣реАрдВ рдкрд░ рд╣реНрдпреВрдЬрдкреЗрдЬреЗрд╕ рдЖрддрд╛ рд╣реИред рдХреЗрд╡рд▓ рдПрдХ рдЯреАрдПрд▓рдмреА рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╡рд╛рд▓реЗ 4096 рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рдмрдЬрд╛рдп, рдПрдХ рдЯреАрдПрд▓рдмреА рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдЕрдм 2 рдореЗрдЧрд╛рдмрд╛рдЗрдЯ рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░ рд╕рдХрддреА рд╣реИред рдЖрдЗрдП рдорд╛рди рд▓реЗрдВ рдХрд┐ рдЯреАрдПрд▓рдмреА рдореЗрдВ 512 рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпрд╛рдБ рд╣реИрдВ, рдпрд╣рд╛рдВ рдмрд┐рдирд╛ рд╣реНрдпреВрдЬрдкреЗрдЬ рдХреЗ рд╣рдо рдорд┐рд▓рд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

4096 bтЛЕ512=2 MB

рдлрд┐рд░ рд╣рдо рдЙрдирд╕реЗ рддреБрд▓рдирд╛ рдХреИрд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

2 MBтЛЕ512=1 GB

рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ Hugepages рдЕрджреНрднреБрдд рд╣реИред рд╡реЗ рдмрд┐рдирд╛ рдЕрдзрд┐рдХ рдкреНрд░рдпрд╛рд╕ рдХреЗ рдЙрддреНрдкрд╛рджрдХрддрд╛ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЪреЗрддрд╛рд╡рдирд┐рдпрд╛рдВ рд╣реИрдВред

рд╡рд┐рд╢рд╛рд▓ рдкреЗрдЬ рд╕реНрдкреВрдлрд┐рдВрдЧ

рдХрд░реНрдиреЗрд▓ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдореЙрдирд┐рдЯрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдореЗрдореЛрд░реА рдкреЗрдЬ рдХрд╛ рдХрд┐рддрдиреА рдмрд╛рд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ рдкрд░реНрдпрд╛рдкреНрдд рднреМрддрд┐рдХ рдореЗрдореЛрд░реА (рд░реИрдо) рдирд╣реАрдВ рд╣реИ, рддреЛ рдХрд░реНрдиреЗрд▓ рдЕрдзрд┐рдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкреГрд╖реНрдареЛрдВ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд░реИрдо рдЦрд╛рд▓реА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдо рдорд╣рддреНрд╡рдкреВрд░реНрдг (рдХрдо рдмрд╛рд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ) рдкреГрд╖реНрдареЛрдВ рдХреЛ рд╣рд╛рд░реНрдб рдбрд┐рд╕реНрдХ рдкрд░ рд▓реЗ рдЬрд╛рдПрдЧрд╛ред
рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдпрд╣реА рдмрд╛рдд 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 рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬреЛ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рднреАрддрд░ рд╕реЗ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ рдмреАрдЖрд░рдХреЗ рдФрд░ рдПрд╕рдмреАрдЖрд░рдХреЗ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рд╕реЗ рдореЗрдореЛрд░реА рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдпрд╛ рдЙрд╕реЗ рдореБрдХреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред

рд╣рд╛рд▓рд╛рдБрдХрд┐, рдкреНрд░рддреНрдпреЗрдХ рдЖрд╡рдВрдЯрди рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рдореЗрдореЛрд░реА рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рдирд╛ рдЕрдХреНрд╖рдореНрдп рд╣реИ; рдпрд╣ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдХреБрдЫ рдореЗрдореЛрд░реА рдЦрдВрдб рдкрд╣рд▓реЗ рд╣реА рдореБрдХреНрдд рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (free()), рдФрд░ рд╣рдо рдЗрд╕рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред malloc() рдореБрдХреНрдд рдореЗрдореЛрд░реА рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рдЬрдЯрд┐рд▓ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред

рд╕рд╛рде рд╣реА, рд╕рдм рдХреБрдЫ рдЖрдкрдХреЗ рд▓рд┐рдП рдЕрдирдЬрд╛рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЗрд╕рд╕реЗ рдЖрдкрдХреЛ рдЪрд┐рдВрддрд╛ рдХреНрдпреЛрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП? рд▓реЗрдХрд┐рди рдХреНрдпреЛрдВрдХрд┐ рдЪреБрдиреМрддреА free() рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рдирд╣реАрдВ рд╣реИ рдореЗрдореЛрд░реА рдЖрд╡рд╢реНрдпрдХ рд░реВрдк рд╕реЗ рддреБрд░рдВрдд рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рддреА рд╣реИ.

рд╕реНрдореГрддрд┐ рд╡рд┐рдЦрдВрдбрди рдЬреИрд╕реА рдХреЛрдИ рдЪреАрдЬрд╝ рд╣реЛрддреА рд╣реИред рдЪрд░рдо рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдРрд╕реЗ рдвреЗрд░ рдЦрдВрдб рд╣реЛрддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рдХреЗрд╡рд▓ рдХреБрдЫ рдмрд╛рдЗрдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рдмреАрдЪ рдореЗрдВ рд╕рдм рдХреБрдЫ рдореБрдХреНрдд рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (free()).

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

рд╡рд┐рд╢рд╛рд▓рдкреЗрдЬреЛрдВ рдХрд╛ рдЪрдпрдирд╛рддреНрдордХ рдЙрдкрдпреЛрдЧ

рдЗрд╕ рд▓реЗрдЦ рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдкрдиреЗ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░ рд▓рд┐рдпрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рдХреМрди рд╕реЗ рд╣рд┐рд╕реНрд╕реЗ рд╣реНрдпреВрдЧрдкреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рд▓рд╛рднрд╛рдиреНрд╡рд┐рдд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдХреМрди рд╕реЗ рдирд╣реАрдВред рддреЛ рдХреНрдпрд╛ bigpages рдХреЛ рдмрд┐рд▓реНрдХреБрд▓ рднреА рд╕рдХреНрд╖рдо рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП?

рд╕реМрднрд╛рдЧреНрдп рд╕реЗ рдЖрдк рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ madvise()рдХреЗрд╡рд▓ рдЙрди рд╕реНрдореГрддрд┐ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рд▓рд┐рдП рд╣реНрдпреВрдЬрдкреЗрдЬрд┐рдВрдЧ рд╕рдХреНрд╖рдо рдХрд░рдирд╛ рдЬрд╣рд╛рдВ рдпрд╣ рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ bigpages рдореИрдбрд╡рд┐рдЬрд╝() рдореЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЪрд▓ рд░рд╣рд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ рдирд┐рд░реНрджреЗрд╢ рд▓реЗрдЦ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ.

рдлрд┐рд░, рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ 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(), рдЗрд╕ рд╡рд┐рд╖рдп рдореЗрдВ рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд░реВрдк рд╕реЗ рддреАрд╡реНрд░ рд╕реАрдЦрдиреЗ рдХреА рдЕрд╡рд╕реНрдерд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕рдореЗрдВ рдЕрдЪреНрдЫрд╛ рд╣реЛрдиреЗ рдХрд╛ рдЗрд░рд╛рджрд╛ рд░рдЦрддреЗ рд╣реИрдВ, рддреЛ рдХрд┐рд╕реА рднреА рд╕рдХрд╛рд░рд╛рддреНрдордХ рдкрд░рд┐рдгрд╛рдо рдХреА рдЙрдореНрдореАрдж рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдХреБрдЫ рд╣рдлреНрддреЛрдВ рддрдХ рдкрдврд╝рдиреЗ рдФрд░ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреА рддреИрдпрд╛рд░реА рдХрд░реЗрдВред

рдХреНрдпрд╛ рдкрдврд╝рдирд╛ рд╣реИ?

рдПрдХ рд╕рд╡рд╛рд▓ рд╣реИ? рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рд▓рд┐рдЦреЗрдВ!

рд╕реНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╝реЗрдВ