рд╡рд┐рд╢рд╛рд▓ рдкреГрд╖реНрдард╣рд░реВрдХрд╛ рдлрд╛рдЗрджрд╛рд╣рд░реВ рд░ рд╣рд╛рдирд┐рд╣рд░реВ

рд╡рд┐рд╢рд╛рд▓ рдкреГрд╖реНрдард╣рд░реВрдХрд╛ рдлрд╛рдЗрджрд╛рд╣рд░реВ рд░ рд╣рд╛рдирд┐рд╣рд░реВ

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

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

рднрд╛рдЧ рез: рд▓рд┐рдирдХреНрд╕рдорд╛ рд╡рд┐рд╢рд╛рд▓ рдкреГрд╖реНрдард╣рд░реВ рд╕рдХреНрд╖рдо рдЫрдиреН рднрдиреЗрд░ рдкреНрд░рдорд╛рдгрд┐рдд рдЧрд░реНрджреИ (рдореВрд▓ рдпрд╣рд╛рдБ)

рд╕рдорд╕реНрдпрд╛:
рддрдкрд╛рдИрдВрд▓реЗ рдЖрдлреНрдиреЛ рдкреНрд░рдгрд╛рд▓реАрдорд╛ 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

рднрд╛рдЧ реи: HugePages рдХрд╛ рдлрд╛рдЗрджрд╛ рд░ рдмреЗрдлрд╛рдЗрджрд╛рд╣рд░реВ

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

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

рдо рддрд▓рдХреЛ рд▓рд┐рдЩреНрдХрд╣рд░реВрдорд╛ рдердк рдкреНрд░рд╛рд╡рд┐рдзрд┐рдХ рд╡рд┐рд╡рд░рдг рд╕рдВрд▓рдЧреНрди рдЧрд░реНрдиреЗрдЫреБред

рднрд░реНрдЪреБрдЕрд▓ рдореЗрдореЛрд░реА

рдпрджрд┐ рддрдкрд╛рдЗрдБ рдПрдХ C++ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рд╣реБрдиреБрд╣реБрдиреНрдЫ рднрдиреЗ, рддрдкрд╛рдЗрдБрд▓рд╛рдИ рдерд╛рд╣рд╛ рдЫ рдХрд┐ рдореЗрдореЛрд░реАрдорд╛ рд╡рд╕реНрддреБрд╣рд░реВрдорд╛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдареЗрдЧрд╛рдирд╛рд╣рд░реВ рдЫрдиреН (рд╕реВрдЪрдХ рдорд╛рдирд╣рд░реВ)ред

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

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

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

рдкреГрд╖реНрдард╣рд░реВ рдХреЗ рд╣реБрдиреН?

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

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

рдпреЛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реНрдЯреНрд░рд┐рдо рдкрд╛рд░рджрд░реНрд╢реА рдЫ, рдпрд╕рдХреЛ рдорддрд▓рдм рдпреЛ рдЖрд╡рд╢реНрдпрдХ рдЫреИрди рдХрд┐ HDD/SSD рдмрд╛рдЯ рд╕реАрдзрд╛ рдкрдвреНрдиреБрд╣реЛрд╕реНред рд╕рд╛рдорд╛рдиреНрдп рдкреГрд╖реНрдард╣рд░реВрдХреЛ рдЖрдХрд╛рд░ 4096 рдмрд╛рдЗрдЯ рд╣реЛред рд╡рд┐рд╢рд╛рд▓ рдкреГрд╖реНрдард╣рд░реВрдХреЛ рдЖрдХрд╛рд░ 2 рдореЗрдЧрд╛рдмрд╛рдЗрдЯ рд╣реЛред

рдЕрдиреБрд╡рд╛рдж-рд╕рд╣рдпреЛрдЧреА рдмрдлрд░ (TLB)

рдЬрдм рдкреНрд░реЛрдЧреНрд░рд╛рдорд▓реЗ рдореЗрдореЛрд░реАрдХреЛ рдкреГрд╖реНрда рдкрд╣реБрдБрдЪ рдЧрд░реНрдЫ, CPU рд▓реЗ рдХреБрди рднреМрддрд┐рдХ рдкреГрд╖реНрдардмрд╛рдЯ рдбрд╛рдЯрд╛ рдкрдвреНрдиреЗ рднрдиреНрдиреЗ рдерд╛рд╣рд╛ рд╣реБрдиреБрдкрд░реНрдЫ (рдЕрд░реНрдерд╛рдд, рднрд░реНрдЪреБрдЕрд▓ рдареЗрдЧрд╛рдирд╛ рдирдХреНрд╕рд╛ рдЫ)ред

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

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

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

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

рд╡рд┐рд╢рд╛рд▓ рдкреГрд╖реНрдард╣рд░реВ рдЙрджреНрдзрд╛рд░рдорд╛ рдЖрдЙрдБрдЫрдиреН

рддреНрдпрд╕реЛрднрдП рд╣рд╛рдореА TLB рдУрднрд░рдлреНрд▓реЛрдмрд╛рдЯ рдмрдЪреНрди рдХреЗ рдЧрд░реНрди рд╕рдХреНрдЫреМрдВ? (рд╣рд╛рдореА рдорд╛рдиреНрджрдЫреМрдВ рдХрд┐ рдХрд╛рд░реНрдпрдХреНрд░рдорд▓рд╛рдИ рдЕрдЭреИ рдкрдирд┐ рдореЗрдореЛрд░реАрдХреЛ рд╕рдорд╛рди рдорд╛рддреНрд░рд╛ рдЪрд╛рд╣рд┐рдиреНрдЫ)ред

рдпреЛ рдЬрд╣рд╛рдБ рд╡рд┐рд╢рд╛рд▓ рдкреГрд╖реНрдард╣рд░реВ рдЖрдЙрдБрдЫрдиреНред 4096 рдмрд╛рдЗрдЯрдХреЛ рд╕рдЯреНрдЯрд╛рдорд╛ рдХреЗрд╡рд▓ рдПрдЙрдЯрд╛ TLB рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдЪрд╛рд╣рд┐рдиреНрдЫ, рдПрдЙрдЯрд╛ TLB рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рд▓реЗ рдЕрдм рдареВрд▓реЛ 2 рдореЗрдЧрд╛рдмрд╛рдЗрдЯрд▓рд╛рдИ рд╕рдВрдХреЗрдд рдЧрд░реНрди рд╕рдХреНрдЫред рдорд╛рдиреМрдВ TLB рд╕рдБрдЧ 512 рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рд╣рд░реВ рдЫрдиреН, рдпрд╣рд╛рдБ рд╡рд┐рд╢рд╛рд▓ рдкреГрд╖реНрдард╣рд░реВ рдмрд┐рдирд╛ рд╣рд╛рдореА рдорд┐рд▓рд╛рдЙрди рд╕рдХреНрдЫреМрдВ:

4096 bтЛЕ512=2 MB

рддреНрдпрд╕реЛрднрдП рд╣рд╛рдореА рдХрд╕рд░реА рддрд┐рдиреАрд╣рд░реВрд╕рдБрдЧ рддреБрд▓рдирд╛ рдЧрд░реНрди рд╕рдХреНрдЫреМрдВ:

2 MBтЛЕ512=1 GB

рдпрд╣реА рдХрд╛рд░рдгрд▓реЗ рд╡рд┐рд╢рд╛рд▓ рдкреГрд╖реНрдард╣рд░реВ рдЙрддреНрдХреГрд╖реНрдЯ рдЫрдиреНред рддрд┐рдиреАрд╣рд░реВрд▓реЗ рдзреЗрд░реИ рдкреНрд░рдпрд╛рд╕ рдмрд┐рдирд╛ рдЙрддреНрдкрд╛рджрдХрддрд╛ рд╕реБрдзрд╛рд░ рдЧрд░реНрди рд╕рдХреНрдЫрдиреНред рддрд░ рдпрд╣рд╛рдБ рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рдЪреЗрддрд╛рд╡рдиреАрд╣рд░реВ рдЫрдиреНред

рд╡рд┐рд╢рд╛рд▓ рдкреГрд╖реНрдард╣рд░реВ рд╕реНрдкреВрдлрд┐рдВрдЧ

рдХрд░реНрдиреЗрд▓рд▓реЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдкрдорд╛ рдкреНрд░рддреНрдпреЗрдХ рдореЗрдореЛрд░реА рдкреГрд╖реНрда рдХрддрд┐ рдкрдЯрдХ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреНрдЫ рднрдиреЗрд░ рдирд┐рдЧрд░рд╛рдиреА рдЧрд░реНрджрдЫред рдпрджрд┐ рддреНрдпрд╣рд╛рдБ рдкрд░реНрдпрд╛рдкреНрдд рднреМрддрд┐рдХ рдореЗрдореЛрд░реА (RAM) рдЫреИрди рднрдиреЗ, рдХрд░реНрдиреЗрд▓рд▓реЗ рдзреЗрд░реИ рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рдкреГрд╖реНрдард╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдХреЗрд╣реА RAM рдЦрд╛рд▓реА рдЧрд░реНрди рд╣рд╛рд░реНрдб рдбрд┐рд╕реНрдХрдорд╛ рдХрдо рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг (рдХрдо рдмрд╛рд░рдореНрдмрд╛рд░ рдкреНрд░рдпреЛрдЧ рд╣реБрдиреЗ) рдкреГрд╖реНрдард╣рд░реВ рд╕рд╛рд░реНрдиреЗрдЫред
рд╕рд┐рджреНрдзрд╛рдиреНрддрдорд╛, рддреНрдпрд╣рд┐ Hugepages рдорд╛ рд▓рд╛рдЧреВ рд╣реБрдиреНрдЫред рдпрджреНрдпрдкрд┐, рдХрд░реНрдиреЗрд▓рд▓реЗ рд╕рдореНрдкреВрд░реНрдг рдкреГрд╖реНрдард╣рд░реВ рдорд╛рддреНрд░ рд╕реНрд╡реИрдк рдЧрд░реНрди рд╕рдХреНрдЫ, рд╡реНрдпрдХреНрддрд┐рдЧрдд рдмрд╛рдЗрдЯрд╣рд░реВ рд╣реЛрдЗрдиред

рдорд╛рдиреМрдВ рд╣рд╛рдореАрд╕рдБрдЧ рдпрд╕реНрддреЛ рдХрд╛рд░реНрдпрдХреНрд░рдо рдЫ:

char* mymemory = malloc(2*1024*1024); // ╨Т╨╛╨╖╤М╨╝╨╡╨╝ ╤Н╤В╨╛ ╨╖╨░ ╨╛╨┤╨╜╤Г Hugepage!
// ╨Ч╨░╨┐╨╛╨╗╨╜╨╕╨╝ mymemory ╨║╨░╨║╨╕╨╝╨╕-╨╗╨╕╨▒╨╛ ╨┤╨░╨╜╨╜╤Л╨╝╨╕
// ╨б╨┤╨╡╨╗╨░╨╡╨╝ ╨╝╨╜╨╛╨│╨╛ ╨┤╤А╤Г╨│╨╕╤Е ╨▓╨╡╤Й╨╡╨╣,
// ╨║╨╛╤В╨╛╤А╤Л╨╡ ╨┐╤А╨╕╨▓╨╡╨┤╤Г╤В ╨║ ╨┐╨╛╨┤╨╝╨╡╨╜╨╡ ╤Б╤В╤А╨░╨╜╨╕╤Ж╤Л mymemory
// ...
// ╨Ч╨░╨┐╤А╨╛╤Б╨╕╨╝ ╨┤╨╛╤Б╤В╤Г╨┐ ╤В╨╛╨╗╤М╨║╨╛ ╨║ ╨┐╨╡╤А╨▓╨╛╨╝╤Г ╨▒╨░╨╣╤В╤Г
putchar(mymemory[0]); 

рдпрд╕ рдЕрд╡рд╕реНрдерд╛рдорд╛, рдХрд░реНрдиреЗрд▓рд▓реЗ рддрдкрд╛рдИрд▓рд╛рдИ рдПрдЙрдЯрд╛ рдмрд╛рдЗрдЯ рдкрдвреНрдирдХреЛ рд▓рд╛рдЧрд┐ рд╣рд╛рд░реНрдб рдбреНрд░рд╛рдЗрдн/рдПрд╕рдПрд╕рдбреАрдмрд╛рдЯ реи рдореЗрдЧрд╛рдмрд╛рдЗрдЯ рдЬрддрд┐ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди (рдкрдвреНрди) рдЖрд╡рд╢реНрдпрдХ рдкрд░реНрджрдЫред рдирд┐рдпрдорд┐рдд рдкреГрд╖реНрдард╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐, рд╣рд╛рд░реНрдб рдбреНрд░рд╛рдЗрдн/рдПрд╕рдПрд╕рдбреАрдмрд╛рдЯ рдорд╛рддреНрд░ 2 рдмрд╛рдЗрдЯрд╣рд░реВ рдкрдвреНрди рдЖрд╡рд╢реНрдпрдХ рдЫред

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

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

рдореЗрдореЛрд░реАрдорд╛ рдЖрд╡рдВрдЯрди

рдпрджрд┐ рддрдкрд╛рдЗрдБ C рд▓реЗрдЦреНрдиреБрд╣реБрдиреНрдЫ рднрдиреЗ, рддрдкрд╛рдЗрдБрд▓рд╛рдИ рдерд╛рд╣рд╛ рдЫ рдХрд┐ рддрдкрд╛рдЗрдБ рдордирдорд╛рдиреЗ рд░реВрдкрдорд╛ рд╕рд╛рдиреЛ (рд╡рд╛ рд▓рдЧрднрдЧ рдордирдорд╛рдиреЗ рд░реВрдкрдорд╛ рдареВрд▓реЛ) рдореЗрдореЛрд░реА рдХреЛ рд╣рд┐рдк рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдЕрдиреБрд░реЛрдз рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред malloc()ред рдорд╛рдиреМрдВ рддрдкрд╛рдИрдВрд▓рд╛рдИ рдореЗрдореЛрд░реАрдХреЛ 30 рдмрд╛рдЗрдЯ рдЪрд╛рд╣рд┐рдиреНрдЫ:

char* mymemory = malloc(30);

рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░рдХреЛ рд▓рд╛рдЧрд┐, рддрдкрд╛рдИрд▓реЗ рдЕрдкрд░реЗрдЯрд┐рдЩ рд╕рд┐рд╕реНрдЯрдордмрд╛рдЯ 30 рдмрд╛рдЗрдЯ рдореЗрдореЛрд░реАрдХреЛ "рдЕрдиреБрд░реЛрдз" рдЧрд░реНрджреИ рд╣реБрдиреБрд╣реБрдиреНрдЫ рд░ рдХреЗрд╣реА рднрд░реНрдЪреБрдЕрд▓ рдореЗрдореЛрд░реАрдорд╛ рдкреЛрдЗрдиреНрдЯрд░ рдлрд░реНрдХрд╛рдЗрд░рд╣рдиреБрднрдПрдХреЛ рджреЗрдЦрд┐рдиреНрдЫред рддрд░ рд╡рд╛рд╕реНрддрд╡рдорд╛ malloc () рдХреЗрд╡рд▓ рдПрдХ рд╕реА рдкреНрд░рдХрд╛рд░реНрдп рд╣реЛ рдЬреБрди рдкреНрд░рдХрд╛рд░реНрдп рднрд┐рддреНрд░рдмрд╛рдЯ рдХрд▓ рдЧрд░реНрджрдЫ 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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдердкреНрди