ื™ืชืจื•ื ื•ืช ื•ื—ืกืจื•ื ื•ืช ืฉืœ HugePages

ื™ืชืจื•ื ื•ืช ื•ื—ืกืจื•ื ื•ืช ืฉืœ HugePages

ืชืจื’ื•ื ื”ืžืืžืจ ืฉื”ื•ื›ืŸ ืœืชืœืžื™ื“ื™ ื”ืงื•ืจืก "ืžื ื”ืœ ืœื™ื ื•ืงืก".

ื‘ืขื‘ืจ ื“ื™ื‘ืจืชื™ ืขืœ ืื™ืš ืœื‘ื“ื•ืง ื•ืœื”ืคืขื™ืœ ืืช Hugepages ื‘ืœื™ื ื•ืงืก.
ืžืืžืจ ื–ื” ื™ื”ื™ื” ืฉื™ืžื•ืฉื™ ืจืง ืื ื™ืฉ ืœืš ืžืงื•ื ืœื”ืฉืชืžืฉ ื‘ื• ื‘-Hugepages. ืคื’ืฉืชื™ ื”ืจื‘ื” ืื ืฉื™ื ืฉื”ืกื™ื›ื•ื™ ืฉ-Hugepages ื™ืฉืคืจ ืืช ื”ืคืจื•ื“ื•ืงื˜ื™ื‘ื™ื•ืช ื‘ืฆื•ืจื” ืงืกื•ืžื”. ืขื ื–ืืช, hugepaging ื”ื•ื ื ื•ืฉื ืžื•ืจื›ื‘ ื•ืขืœื•ืœ ืœืคื’ื•ืข ื‘ื‘ื™ืฆื•ืขื™ื ืื ื ืขืฉื” ื‘ื• ืฉื™ืžื•ืฉ ืœื ื ื›ื•ืŸ.

ื—ืœืง 1: ืื™ืžื•ืช ืฉ-hugepages ืžื•ืคืขืœื™ื ื‘ืœื™ื ื•ืงืก (ืžืงื•ืจื™ ื›ืืŸ)

ื‘ืขื™ื”:
ืขืœื™ืš ืœื‘ื“ื•ืง ืื HugePages ืžื•ืคืขืœ ื‘ืžืขืจื›ืช ืฉืœืš.

ืคืชืจื•ืŸ:
ื–ื” ื“ื™ ืคืฉื•ื˜:

cat /sys/kernel/mm/transparent_hugepage/enabled

ืชืงื‘ืœ ืžืฉื”ื• ื›ื–ื”:

always [madvise] never

ืชืจืื” ืจืฉื™ืžื” ืฉืœ ืืคืฉืจื•ื™ื•ืช ื–ืžื™ื ื•ืช (ืชืžื™ื“, ืžื˜ื•ืจืฃ, ืืฃ ืคืขื), ื•ื”ืืคืฉืจื•ืช ื”ืคืขื™ืœื” ื›ืขืช ืชื”ื™ื” ืžื•ืงืคืช ื‘ืกื•ื’ืจื™ื™ื (ื›ื‘ืจื™ืจืช ืžื—ื“ืœ 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. ืžื›ื™ื•ื•ืŸ ืฉืกื‘ื™ืจ ืœื”ื ื™ื— ืฉืžืืžืจ ืžื•ืจื›ื‘ ื˜ื›ื ื•ืœื•ื’ื™ ื•ืคื“ื ื˜ื™ ื™ื”ื™ื” ืงืฉื” ืœื”ื‘ื ื” ืขื‘ื•ืจ ืื ืฉื™ื ืฉื—ื•ืฉื‘ื™ื ืฉ-Hugepages ื”ื•ื ืชืจื•ืคืช ืคืœื, ืื•ื•ืชืจ ืขืœ ื”ื“ื™ื•ืง ืœืžืขืŸ ื”ืคืฉื˜ื•ืช. ืจืง ื›ื“ืื™ ืœื–ื›ื•ืจ ืฉื”ืจื‘ื” ืžื”ื ื•ืฉืื™ื ื”ื ื‘ืืžืช ืžื•ืจื›ื‘ื™ื ื•ืœื›ืŸ ืžืคื•ืฉื˜ื™ื ืžืื•ื“.

ืฉื™ืžื• ืœื‘ ืฉืื ื—ื ื• ืžื“ื‘ืจื™ื ืขืœ ืžืขืจื›ื•ืช 64-bit x86 ื”ืžืจืฆื•ืช ืœื™ื ื•ืงืก, ื•ืฉืื ื™ ืคืฉื•ื˜ ืžื ื™ื— ืฉื”ืžืขืจื›ืช ืชื•ืžื›ืช ื‘-hugepages ืฉืงื•ืคื™ื (ืฉื›ืŸ ืื™ืŸ ื–ื” ื—ื™ืกืจื•ืŸ ืฉ-hugepages ืœื ืžื—ืœื™ืคื™ื), ื›ืคื™ ืฉืงื•ืจื” ื›ืžืขื˜ ื‘ื›ืœ ืœื™ื ื•ืงืก ืžื•ื“ืจื ื™ืช ืกื‘ื™ื‘ื”.

ืืฆืจืฃ ืชื™ืื•ืจ ื˜ื›ื ื™ ื ื•ืกืฃ ื‘ืงื™ืฉื•ืจื™ื ืœืžื˜ื”.

ื–ื™ื›ืจื•ืŸ ื•ื™ืจื˜ื•ืืœื™

ืื ืืชื” ืžืชื›ื ืช C++, ืืชื” ื™ื•ื“ืข ืฉืœืื•ื‘ื™ื™ืงื˜ื™ื ื‘ื–ื™ื›ืจื•ืŸ ื™ืฉ ื›ืชื•ื‘ื•ืช ืกืคืฆื™ืคื™ื•ืช (ืขืจื›ื™ ืžืฆื‘ื™ืข).

ืขื ื–ืืช, ื›ืชื•ื‘ื•ืช ืืœื• ืื™ื ืŸ ืžืฉืงืคื•ืช ื‘ื”ื›ืจื— ื›ืชื•ื‘ื•ืช ืคื™ื–ื™ื•ืช ื‘ื–ื™ื›ืจื•ืŸ (ื›ืชื•ื‘ื•ืช RAM). ื”ื ืžื™ื™ืฆื’ื™ื ื›ืชื•ื‘ื•ืช ื‘ื–ื™ื›ืจื•ืŸ ื•ื™ืจื˜ื•ืืœื™. ืœืžืขื‘ื“ ืžื•ื“ื•ืœ MMU (ื™ื—ื™ื“ืช ื ื™ื”ื•ืœ ื–ื™ื›ืจื•ืŸ) ืžื™ื•ื—ื“ ื”ืžืกื™ื™ืข ืœืœื™ื‘ื” ืœืžืคื•ืช ื–ื™ื›ืจื•ืŸ ื•ื™ืจื˜ื•ืืœื™ ืœืžื™ืงื•ื ืคื™ื–ื™.

ืœื’ื™ืฉื” ื–ื• ื™ืชืจื•ื ื•ืช ืจื‘ื™ื, ืืš ื”ื—ืฉื•ื‘ื™ื ืฉื‘ื”ื ื”ื:

  • ื‘ื™ืฆื•ืขื™ื (ืžืกื™ื‘ื•ืช ืฉื•ื ื•ืช);
  • ื‘ื™ื“ื•ื“ ืชื•ื›ื ื™ืช, ื›ืœื•ืžืจ, ืืฃ ืชื•ื›ื ื™ืช ืœื ื™ื›ื•ืœื” ืœืงืจื•ื ืžื”ื–ื™ื›ืจื•ืŸ ืฉืœ ืชื•ื›ื ื™ืช ืื—ืจืช.

ืžื” ื–ื” ื“ืคื™ื?

ื–ื™ื›ืจื•ืŸ ื•ื™ืจื˜ื•ืืœื™ ืžื—ื•ืœืง ืœื“ืคื™ื. ื›ืœ ืขืžื•ื“ ื‘ื•ื“ื“ ืžืฆื‘ื™ืข ืขืœ ื–ื™ื›ืจื•ืŸ ืคื™ื–ื™ ืกืคืฆื™ืคื™, ื”ื•ื ื™ื›ื•ืœ ืœื”ืฆื‘ื™ืข ืขืœ ืื–ื•ืจ ื‘-RAM, ืื• ืฉื”ื•ื ื™ื›ื•ืœ ืœื”ืฆื‘ื™ืข ืขืœ ื›ืชื•ื‘ืช ืฉื”ื•ืงืฆืชื” ืœืžื›ืฉื™ืจ ืคื™ื–ื™, ื›ื’ื•ืŸ ื›ืจื˜ื™ืก ืžืกืš.

ืจื•ื‘ ื”ื“ืคื™ื ืฉืืชื” ืขื•ืกืง ื‘ื”ื ืžืฆื‘ื™ืขื™ื ืขืœ ื–ื™ื›ืจื•ืŸ RAM ืื• ืžื•ื—ืœืคื™ื, ื›ืœื•ืžืจ ื”ื ืžืื•ื—ืกื ื™ื ื‘ื›ื•ื ืŸ ื”ืงืฉื™ื— ืื• ื‘-SSD ืฉืœืš. ื”ืงืจื ืœ ืžื ื”ืœ ืืช ื”ืคืจื™ืกื” ื”ืคื™ื–ื™ืช ืฉืœ ื›ืœ ืขืžื•ื“. ืื ื ื™ื’ืฉื™ื ืœื“ืฃ ืžื–ื•ื™ืฃ, ื”ืœื™ื‘ื” ืขื•ืฆืจืช ืืช ื”ืฉืจืฉื•ืจ ืฉืžื ืกื” ืœื’ืฉืช ืœื–ื™ื›ืจื•ืŸ, ืงื•ืจื ืืช ื”ืขืžื•ื“ ืžื”ื›ื•ื ืŸ ื”ืงืฉื™ื—/SSD ืœืชื•ืš ื”-RAM, ื•ืœืื—ืจ ืžื›ืŸ ืžืžืฉื™ืš ื‘ื‘ื™ืฆื•ืข ื”ืฉืจืฉื•ืจ.

ืชื”ืœื™ืš ื–ื” ื”ื•ื ืฉืงื•ืฃ ื‘ื–ืจื, ื›ืœื•ืžืจ ืื™ื ื• ืงื•ืจื ื‘ื”ื›ืจื— ื™ืฉื™ืจื•ืช ืžื”- HDD/SSD. ื”ื’ื•ื“ืœ ืฉืœ ื“ืคื™ื ืจื’ื™ืœื™ื ื”ื•ื 4096 ื‘ืชื™ื. ื’ื•ื“ืœ ื“ืคื™ ืขื ืง ื”ื•ื 2 ืžื’ื” ื‘ื™ื™ื˜.

ืžืื’ืจ ืืกื•ืฆื™ืื˜ื™ื‘ื™ ืœืชืจื’ื•ื (TLB)

ื›ืืฉืจ ืชื•ื›ื ื™ืช ื ื™ื’ืฉืช ืœื“ืฃ ื–ื™ื›ืจื•ืŸ, ื”-CPU ื—ื™ื™ื‘ ืœื“ืขืช ืžืื™ื–ื” ืขืžื•ื“ ืคื™ื–ื™ ืœืงืจื•ื ื ืชื•ื ื™ื (ื›ืœื•ืžืจ, ื™ืฉ ืœื” ืžืคืช ื›ืชื•ื‘ืช ื•ื™ืจื˜ื•ืืœื™ืช).

ืœืงืจื ืœ ื™ืฉ ืžื‘ื ื” ื ืชื•ื ื™ื (ื˜ื‘ืœืช ื“ืคื™ื) ืฉืžื›ื™ืœ ืืช ื›ืœ ื”ืžื™ื“ืข ืขืœ ื”ื“ืคื™ื ืฉื‘ื”ื ื ืขืฉื” ืฉื™ืžื•ืฉ. ื‘ืืžืฆืขื•ืช ืžื‘ื ื” ื ืชื•ื ื™ื ื–ื”, ื ื™ืชืŸ ืœืžืคื•ืช ื›ืชื•ื‘ืช ื•ื™ืจื˜ื•ืืœื™ืช ืœื›ืชื•ื‘ืช ืคื™ื–ื™ืช.

ืขื ื–ืืช, ื˜ื‘ืœืช ื”ื“ืคื™ื ืžื•ืจื›ื‘ืช ื•ืื™ื˜ื™ืช ืœืžื“ื™, ื›ืš ืฉืคืฉื•ื˜ ืื™ื ื ื• ื™ื›ื•ืœื™ื ืœื ืชื— ืืช ื›ืœ ืžื‘ื ื” ื”ื ืชื•ื ื™ื ื‘ื›ืœ ืคืขื ืฉืชื”ืœื™ืš ื ื™ื’ืฉ ืœื–ื™ื›ืจื•ืŸ.

ืœืžืจื‘ื” ื”ืžื–ืœ, ืœืžืขื‘ื“ ืฉืœื ื• ื™ืฉ 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 ืฉืงื•ืจืืช ืžืชื•ืš ื”ืคื•ื ืงืฆื™ื” brk ื• sbrk ืœื‘ืงืฉ ืื• ืœืคื ื•ืช ื–ื™ื›ืจื•ืŸ ืžืžืขืจื›ืช ื”ื”ืคืขืœื”.

ืขื ื–ืืช, ื‘ืงืฉืช ื™ื•ืชืจ ื•ื™ื•ืชืจ ื–ื™ื›ืจื•ืŸ ืขื‘ื•ืจ ื›ืœ ื”ืงืฆืื” ืื™ื ื” ื™ืขื™ืœื”; ืกื‘ื™ืจ ืœื”ื ื™ื— ืฉืงื˜ืข ื–ื™ื›ืจื•ืŸ ื›ืœืฉื”ื• ื›ื‘ืจ ืฉื•ื—ืจืจ (free()), ื•ืื ื—ื ื• ื™ื›ื•ืœื™ื ืœืขืฉื•ืช ื‘ื• ืฉื™ืžื•ืฉ ื—ื•ื–ืจ. malloc() ืžื™ื™ืฉืžืช ืืœื’ื•ืจื™ืชืžื™ื ืžื•ืจื›ื‘ื™ื ืœืžื“ื™ ืœืฉื™ืžื•ืฉ ื—ื•ื–ืจ ื‘ื–ื™ื›ืจื•ืŸ ืžืฉื•ื—ืจืจ.

ื™ื—ื“ ืขื ื–ืืช, ื”ื›ืœ ืงื•ืจื” ืœืš ื‘ืœื™ ืœืฉื™ื ืœื‘, ืื– ืœืžื” ื–ื” ืฆืจื™ืš ืœื”ื“ืื™ื’ ืื•ืชืš? ืืœื ื‘ื’ืœืœ ื”ืืชื’ืจ free() ืœื ืื•ืžืจ ืืช ื–ื” ื”ื–ื™ื›ืจื•ืŸ ืžื•ื—ื–ืจ ื‘ื”ื›ืจื— ืžื™ื“ ืœืžืขืจื›ืช ื”ื”ืคืขืœื”.

ื™ืฉ ื“ื‘ืจ ื›ื–ื” ืคื™ืฆื•ืœ ื–ื™ื›ืจื•ืŸ. ื‘ืžืงืจื™ื ืงื™ืฆื•ื ื™ื™ื, ื™ืฉื ื ืžืงื˜ืขื™ ืขืจืžื” ืฉื‘ื”ื ื ืขืฉื” ืฉื™ืžื•ืฉ ืจืง ื‘ื›ืžื” ื‘ืชื™ื, ื‘ืขื•ื“ ืฉื›ืœ ืžื” ืฉื‘ื™ื ื™ื”ื ืฉื•ื—ืจืจ (free()).

ืฉื™ืžื• ืœื‘ ืฉืคื™ืฆื•ืœ ื–ื™ื›ืจื•ืŸ ื”ื•ื ื ื•ืฉื ืžื•ืจื›ื‘ ืœื”ืคืœื™ื, ื•ืืคื™ืœื• ืฉื™ื ื•ื™ื™ื ืงืœื™ื ื‘ืชื•ื›ื ื™ืช ื™ื›ื•ืœื™ื ืœื”ื™ื•ืช ื‘ืขืœื™ ื”ืฉืคืขื” ืžืฉืžืขื•ืชื™ืช. ื‘ืจื•ื‘ ื”ืžืงืจื™ื, ืชื•ื›ื ื™ื•ืช ืœื ื™ื’ืจืžื• ืœืคื™ืฆื•ืœ ื–ื™ื›ืจื•ืŸ ืžืฉืžืขื•ืชื™, ืืš ืขืœื™ืš ืœื”ื™ื•ืช ืžื•ื“ืข ืœื›ืš ืฉืื ื™ืฉ ื‘ืขื™ื” ืขื ืคื™ืฆื•ืœ ื‘ืื–ื•ืจ ื›ืœืฉื”ื• ืฉืœ ื”ืขืจื™ืžื”, ื“ืคื™ ืขื ืง ื™ื›ื•ืœื™ื ืœื”ื—ืžื™ืจ ืืช ื”ืžืฆื‘.

ืฉื™ืžื•ืฉ ืกืœืงื˜ื™ื‘ื™ ื‘ื“ืคื™ ืขื ืง

ืœืื—ืจ ืงืจื™ืืช ืžืืžืจ ื–ื”, ื”ื—ืœื˜ืช ืื™ืœื• ื—ืœืงื™ื ื‘ืชื•ื›ื ื™ืช ืฉืœืš ื™ื›ื•ืœื™ื ืœื”ืคื™ืง ืชื•ืขืœืช ืžืฉื™ืžื•ืฉ ื‘- Hugepages ื•ืื™ืœื• ืœื. ืื– ื”ืื ืฆืจื™ืš ื‘ื›ืœืœ ืœื”ืคืขื™ืœ ืขืžื•ื“ื™ ืขื ืง?

ืœืžืจื‘ื” ื”ืžื–ืœ ืืชื” ื™ื›ื•ืœ ืœื”ืฉืชืžืฉ madvise()ื›ื“ื™ ืœืืคืฉืจ ืื™ืคื™ื•ืŸ ืขื ืง ืจืง ืขื‘ื•ืจ ืื–ื•ืจื™ ื”ื–ื™ื›ืจื•ืŸ ืฉื‘ื”ื ื–ื” ื™ื”ื™ื” ืฉื™ืžื•ืฉื™.

ืจืืฉื™ืช, ื‘ื“ื•ืง ืฉ-hugepages ืคื•ืขืœ ื‘ืžืฆื‘ madvise() ื‘ืืžืฆืขื•ืช ื”ื•ืจืื•ืช ื‘ืชื—ื™ืœืช ื”ืžืืžืจ.

ืœืื—ืจ ืžื›ืŸ, ื”ืฉืชืžืฉ madvise()ืœื•ืžืจ ืœืงืจื ืœ ื”ื™ื›ืŸ ื‘ื“ื™ื•ืง ืœื”ืฉืชืžืฉ ื‘-hugepages.

#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

ื”ื•ืกืคืช ืชื’ื•ื‘ื”