madvise(2) - wariua/manpages-ko GitHub Wiki
madvise - λ©λͺ¨λ¦¬ μ¬μ©μ λν μ‘°μΈ μ£ΌκΈ°
#include <sys/mman.h>
int madvise(void *addr, size_t length, int advice);
glibc κΈ°λ₯ νμΈ λ§€ν¬λ‘ μ건 (feature_test_macros(7) μ°Έκ³ ):
-
madvise()
: -
- glibc 2.19λΆν°
_DEFAULT_SOURCE
- glibc 2.19 λ° μ΄μ :
_BSD_SOURCE
madvise()
μμ€ν
νΈμΆμ μ¬μ©ν΄ μ£Όμ addr
μμ μμνκ³ ν¬κΈ°κ° length
λ°μ΄νΈμΈ μ£Όμ λ²μμ λν΄ μ»€λμκ² μ‘°μΈ λ΄μ§ μ§μλ₯Ό νλ€. λλΆλΆμ κ²½μ° κ·Έ μ‘°μΈμ λͺ©μ μ μμ€ν
λ΄μ§ μμ©μ μ±λ₯μ κ°μ νλ κ²μ΄λ€.
μ²μμ μ΄ μμ€ν
νΈμΆμ λ€λ₯Έ μ¬λ¬ ꡬνμμλ μ¬μ© κ°λ₯ν "μ ν΅μ μΈ" advice
κ°λ€μ μ§μνλ€. (μ°Έκ³ λ‘ madvise()
λ POSIXμ λͺ
μΈλμ΄ μμ§ μλ€.) μ΄νμ 리λ
μ€ μ μ© advice
κ°λ€μ΄ μ¬λ¬ κ°μ§ μΆκ°λμλ€.
μμ©μμ μλ λμ΄λ advice
κ°λ€μ μ΄μ©νμ¬ μ΄λ€ λ§΅ λ λ©λͺ¨λ¦¬ μμμ΄λ 곡μ λ©λͺ¨λ¦¬ μμμ μ΄λ»κ² μ¬μ©ν μμ μΈμ§ 컀λμκ² μλ € μ€ μ μλ€. κ·Έλ¬λ©΄ 컀λμμ μ μ ν 미리 μ½κΈ° λ° μΊμ κΈ°λ²μ μ νν μ μλ€. μ΄ advice
κ°λ€μ (MADV_DONTNEED
λ₯Ό μ μΈνκ³ ) μμ©μ λμ κ²°κ³Όμ μν₯μ μ£Όμ§ μμΌλ©° μ±λ₯μλ§ μν₯μ λΌμΉ μ μλ€. μ¬κΈ° λμ΄λ advice
κ°λ€μ λͺ¨λ POSIX λͺ
μΈ ν¨μμΈ posix_madvise(3)μ μ μ¬ν νλͺ©μ΄ μμΌλ©° MADV_DONTNEED
λ₯Ό μ μΈνκ³ κ°μ μλ―Έκ° κ°λ€.
μ‘°μΈμ λνλ΄λ advice
μΈμλ λ€μ μ€ νλμ΄λ€.
MADV_NORMAL
- νΉλ³ν μ²λ¦¬ μμ. κΈ°λ³Έμ΄λ€.
MADV_RANDOM
- μμ μμλ‘ νμ΄μ§ μ°Έμ‘°λ₯Ό ν μμ . (λ°λΌμ 미리 μ½κΈ°κ° νμμλ³΄λ€ μΈλͺ¨κ° μμ μ μλ€.)
MADV_SEQUENTIAL
- μμ°¨ μμλ‘ νμ΄μ§ μ°Έμ‘°λ₯Ό ν μμ . (λ°λΌμ μ§μ ν λ²μμ νμ΄μ§λ€μ μ κ·Ήμ μΌλ‘ 미리 μ½κΈ° ν μ μμΌλ©° μ κ·Ό νμ λ°λ‘ ν΄μ ν μλ μλ€.)
MADV_WILLNEED
- μ‘°λ§κ° μ κ·Όν μμ . (λ°λΌμ νμ΄μ§λ€μ 미리 μ½μ΄ λλ κ² μ’μ μλ μλ€.)
MADV_DONTNEED
-
λΉλΆκ°μ μ κ·Όν μμ μμ. (μμ©μμ νλμ κ·Έ λ²μμ λ³ΌμΌμ΄ μμΌλ―λ‘ μ»€λμμ κ±°κΈ° μ°κ³λ μμμ ν΄μ ν μ μλ€.)
MADV_DONTNEED
λμ μ±κ³΅ νμλ μ§μ ν μμμμμ λ©λͺ¨λ¦¬ μ κ·Ό λμ κ²°κ³Όκ° λ°λλ€. κ·Έ λ²μ λ΄ νμ΄μ§μ λν μ΄νμ μ κ·Όμ΄ μ±κ³΅μ νμ§λ§ (곡μ νμΌ λ§€ν, 곡μ μ΅λͺ λ§€ν, μμ€ν V 곡μ λ©λͺ¨λ¦¬ μΈκ·Έλ¨ΌνΈ κ°μ shmem κΈ°λ° κΈ°λ²μΈ κ²½μ°) κΈ°λ° λ§΅ νμΌμ μ΅μ λ΄μ©μΌλ‘ λ©λͺ¨λ¦¬ λ΄μ©μ λ€μ μ±μ°κ² λκ±°λ, μ΅λͺ λΉκ³΅μ λ§€νμΈ κ²½μ° zero-fill-on-demand νμ΄μ§κ° λλ€.μ°Έκ³ λ‘ κ³΅μ λ§€νμ
MADV_DONTNEED
μ μ© μ λ²μ λ΄ νμ΄μ§λ€μ΄ μ¦μ ν΄μ λμ§ μμ μλ μλ€. 컀λμμ νμ΄μ§ ν΄μ λ₯Ό μμ λ‘μ΄ μ μ ν μμ μΌλ‘ μ°κΈ°ν μ μλ€. νμ§λ§ νΈμΆ νλ‘μΈμ€μ μμ£Ό μ§ν© ν¬κΈ°(RSS)λ μ¦μ μ€μ΄λ λ€.κ³ μ λ νμ΄μ§, κ±°λ TLB νμ΄μ§,
VM_PFNMAP
νμ΄μ§μMADV_DONTNEED
λ₯Ό μ μ©ν μ μλ€. (컀λ λ΄λΆμ©μΈVM_PFNMAP
νλκ·Έλ‘ νμλ νμ΄μ§λ κ°μ λ©λͺ¨λ¦¬ μλΈμμ€ν μ΄ κ΄λ¦¬νμ§ μλ νΉμν λ©λͺ¨λ¦¬ μμμ΄λ€. λ³΄ν΅ μ₯μΉ λλΌμ΄λ²μμ κ·Έλ° νμ΄μ§λ₯Ό λ§λ€μ΄μ μ¬μ©μ 곡κ°μΌλ‘ λ§΅ νλ€.)
λ€μμ 리λ
μ€ μ μ© advice
κ°λ€μ POSIXμ λͺ
μΈλ posix_madvise(3)μ λμ νλͺ©μ΄ μμΌλ©°, λ€λ₯Έ ꡬνμμ μ¬μ© κ°λ₯ν madvise()
μΈν°νμ΄μ€μλ λμ νλͺ©μ΄ μμ μλ μκ³ μμ μλ μλ€. μ°Έκ³ λ‘ μ΄ λμλ€ μ€ μΌλΆλ λ©λͺ¨λ¦¬ μ κ·Όμ λμ κ²°κ³Όλ₯Ό λ°κΎΌλ€.
-
MADV_REMOVE
(리λ μ€ 2.6.16λΆν°) -
μ§μ ν νμ΄μ§ λ²μ λ° μ°κ³λ κΈ°λ° μ μ₯ 곡κ°μ ν΄μ νλ€. κΈ°λ° μ μ₯ 곡κ°μ λμνλ λ°μ΄νΈ λ²μμ ꡬλ©μ λ«λ κ²κ³Ό λλ±νλ€. (fallocate(2) μ°Έκ³ .) μ§μ ν μ£Όμ λ²μλ₯Ό μ΄νμ μ κ·Όνλ©΄ 0μ΄ λ΄κΈ΄ λ°μ΄νΈλ€μ λ³΄κ² λλ€.
μ§μ ν μ£Όμ λ²μκ° κ³΅μ λ§΅μ΄κ³ μ°κΈ° κ°λ₯ν΄μΌ νλ€. κ³ μ λ νμ΄μ§, κ±°λ TLB νμ΄μ§,
VM_PFNMAP
νμ΄μ§μ μ΄ νλκ·Έλ₯Ό μ μ©ν μ μλ€.μ΄κΈ° ꡬνμμλ tmpfs(5)λ§
MADV_REMOVE
λ₯Ό μ§μνλ€. 리λ μ€ 3.5λΆν°λ fallocate(2)FALLOC_FL_PUNCH_HOLE
λͺ¨λλ₯Ό μ§μνλ νμΌ μμ€ν μ΄λ©΄MADV_REMOVE
λ μ§μνλ€. hugetlbfsλEINVAL
λ‘ μ€ν¨νλ©° λ€λ₯Έ νμΌ μμ€ν λ€μEOPNOTSUPP
μ€λ₯λ‘ μ€ν¨νλ€. -
MADV_DONTFORK
(리λ μ€ 2.6.16λΆν°) - μ΄ λ²μμ νμ΄μ§λ€μ fork(2) νμ μμμμ μ¬μ© κ°λ₯νκ² λ§λ€μ§ μλλ€. fork(2) νμ λΆλͺ¨κ° νμ΄μ§μ μ°κΈ°λ₯Ό νλ κ²½μ° copy-on-write λμ λ°©μ λλ¬Έμ νμ΄μ§μ 물리μ μμΉκ° λ°λλ κ²μ λ§λ λ° μ μ©νλ€. (νλμ¨μ΄μμ κ·Έ νμ΄μ§λ‘ DMA νλ κ²½μ°μ κ·Έλ° νμ΄μ§ μ¬λ°°μΉκ° λ¬Έμ λ₯Ό μΌμΌν¨λ€.)
-
MADV_DOFORK
(리λ μ€ 2.6.16λΆν°) -
MADV_DONTFORK
μ ν¨κ³Όλ₯Ό λλλ¦°λ€. fork(2)λ₯Ό κ±°μΉλ©° λ§€νμ λ¬Όλ €λ°λ κΈ°λ³Έ λμ λ°©μμ 볡μνλ€. -
MADV_HWPOISON
(리λ μ€ 2.6.32λΆν°) -
addr
κ³Όlength
λ‘ μ§μ ν λ²μμ νμ΄μ§λ€μ μ€μΌ νμλ₯Ό ν΄μ κ·Έ νμ΄μ§λ€μ λν μ΄ν μ°Έμ‘°λ₯Ό νλμ¨μ΄ λ©λͺ¨λ¦¬ μ€μΌμ²λΌ μ²λ¦¬νλ€. μ΄ λμμ νΉκΆ(CAP_SYS_ADMIN
) νλ‘μΈμ€μλ§ μ¬μ© κ°λ₯νλ€. μ΄ λμμΌλ‘ μΈν΄ νΈμΆ νλ‘μΈμ€κ°SIGBUS
λ₯Ό λ°κ³ νμ΄μ§ λ§΅μ΄ μ κ±°λ μλ μλ€.μ΄ κΈ°λ₯μ λ©λͺ¨λ¦¬ μ€λ₯ μ²λ¦¬ μ½λ ν μ€νΈλ₯Ό μν κ²μ΄λ€. 컀λμ
CONFIG_MEMORY_FAILURE
λ‘ κ΅¬μ±νμ λλ§ μ¬μ© κ°λ₯νλ€. -
MADV_MERGEABLE
(리λ μ€ 2.6.32λΆν°) -
addr
κ³Όlength
λ‘ μ§μ ν λ²μμ νμ΄μ§λ€μ 컀λ λμΌ νμ΄μ§ λ³ν©(KSM: Kernel Samepage Merging) κΈ°λ₯μ μΌ λ€. λ³ν© κ°λ₯νλ€κ³ νμλ μ¬μ©μ λ©λͺ¨λ¦¬ μμλ€μ 컀λμ΄ μ κΈ°μ μΌλ‘ μ‘°μ¬ν΄μ λ΄μ©μ΄ λμΌν νμ΄μ§λ€μ μ°Ύλλ€. κ·Έλ¦¬κ³ κ·Έ νμ΄μ§λ€μ μ°κΈ° λ°©μ§ νμ΄μ§ ν κ°λ‘ κ΅μ²΄νλ€. (μ΄ν νλ‘μΈμ€μμ νμ΄μ§ λ΄μ©μ κ°±μ νλ € νλ©΄ νμ΄μ§κ° μλμΌλ‘ 볡μ¬λλ€.) KSMμ λΉκ³΅μ μ΅λͺ νμ΄μ§(mmap(2) μ°Έκ³ )λ§ λ³ν©νλ€.KSM κΈ°λ₯μ κ°μ λ°μ΄ν°μ μΈμ€ν΄μ€λ₯Ό μ¬λ¬ κ° μμ±νλ μμ©λ€(κ°λ Ή KVM κ°μ κ°μν μμ€ν )μ μν κ²μ΄λ€. νλ‘μΈμ± λ₯λ ₯μ λ§μ΄ μλͺ¨ν μ μμΌλ―λ‘ μ‘°μ¬ν΄μ μ¨μΌ νλ€. λ μμΈν λ΄μ©μ 컀λ μμ€ νμΌ
Documentation/admin-guide/mm/ksm.rst
λ₯Ό 보λΌ.MADV_MERGEABLE
λ°MADV_UNMERGEABLE
λμμ 컀λμCONFIG_KSM
μΌλ‘ ꡬμ±νμ λλ§ μ¬μ© κ°λ₯νλ€. -
MADV_UNMERGEABLE
(리λ μ€ 2.6.32λΆν°) - μ§μ ν μ£Όμ λ²μμμ μμ
MADV_MERGEABLE
λμμ ν¨κ³Όλ₯Ό λλλ¦°λ€.addr
κ³Όlength
λ‘ μ§μ ν μ£Όμ λ²μμμ KSMμΌλ‘ λ³ν©νλ νμ΄μ§κ° μμΌλ©΄ λ€μ λΆλ¦¬νλ€. -
MADV_SOFT_OFFLINE
(리λ μ€ 2.6.33λΆν°) -
addr
κ³Όlength
λ‘ μ§μ ν λ²μμ νμ΄μ§λ€μ μ°μ± μ€νλΌμΈ μ²λ¦¬νλ€. μ§μ ν λ²μμ κ° νμ΄μ§μ λ©λͺ¨λ¦¬κ° κ·Έλλ‘ μ μ§λλ€. (μ¦, λ€μ μ κ·Ό λ κ°μ λ΄μ©μ΄ 보μΈλ€. νμ§λ§ μ 물리μ νμ΄μ§ νλ μμ μλ κ²μ΄λ€.) κ·Έλ¦¬κ³ μλ νμ΄μ§λ μ€νλΌμΈμ΄ λλ€. (μ¦, λλ μ μ°μ΄κ³ ν΅μμ μΈ λ©λͺ¨λ¦¬ κ΄λ¦¬μμ λΉ μ§λ€.)MADV_SOFT_OFFLINE
λμμ ν¨κ³Όλ νΈμΆ νλ‘μΈμ€μκ² λ³΄μ΄μ§ μλλ€. (μ¦, νΈμΆ νλ‘μΈμ€μ λμμ΄ λ°λμ§ μλλ€.)μ΄ κΈ°λ₯μ λ©λͺ¨λ¦¬ μ€λ₯ μ²λ¦¬ μ½λ ν μ€νΈλ₯Ό μν κ²μ΄λ€. 컀λμ
CONFIG_MEMORY_FAILURE
λ‘ κ΅¬μ±νμ λλ§ μ¬μ© κ°λ₯νλ€. -
MADV_HUGEPAGE
(리λ μ€ 2.6.38λΆν°) -
addr
κ³Όlength
λ‘ μ§μ ν λ²μμ νμ΄μ§λ€μ μλ κ±°λ νμ΄μ§(THP: Transparent Huge Pages) κΈ°λ₯μ μΌ λ€. νμ¬ μλ κ±°λ νμ΄μ§ κΈ°λ₯μ λΉκ³΅μ μ΅λͺ νμ΄μ§(mmap(2) μ°Έκ³ )λ‘λ§ λμνλ€. κ±°λ νμ΄μ§ νλ³΄λ‘ νμλ μμλ€μ 컀λμ΄ μ κΈ°μ μΌλ‘ μ‘°μ¬ν΄μ κ±°λ νμ΄μ§λ‘ κ΅μ²΄νλ€. λν 컀λμμ ν λΉνλ μμμ΄ κ±°λ νμ΄μ§ ν¬κΈ°μ μμ°μ€λ½κ² μ λ ¬λμ΄ μμΌλ©΄ (posix_memalign(3) μ°Έκ³ ) λ°λ‘ κ±°λ νμ΄μ§λ₯Ό ν λΉνκ² λλ€.μ΄ κΈ°λ₯μ΄ μ£Όλ‘ λ Έλ¦¬λ κ²μ ν° λ°μ΄ν° λ§€νμ μ¬μ©νκ³ κ·Έ λ©λͺ¨λ¦¬μ ν° μμλ€μ μΌμμ μ κ·Όνλ μμ©λ€(κ°λ Ή QEMU κ°μ κ°μν μμ€ν )μ΄λ€. μ΄ κΈ°λ₯μ λ©λͺ¨λ¦¬λ₯Ό λλΉνκΈ°κ° μμ£Ό μ½λ€. (κ°λ Ή 2MBμ§λ¦¬ λ§€νμμ ν λ°μ΄νΈλ§ μ κ·Όνλ κ²½μ° 4KBμ§λ¦¬ νμ΄μ§ νλκ° μλλΌ λ©λͺ¨λ¦¬ 2MBκ° μ°κ²°λλ€.) λ μμΈν λ΄μ©μ 리λ μ€ μ»€λ μμ€ νμΌ
Documentation/admin-guide/mm/transhuge.rst
λ₯Ό 보λΌ.MADV_HUGEPAGE
λ°MADV_NOHUGEPAGE
λμμ 컀λμCONFIG_TRANSPARENT_HUGEPAGE
λ‘ κ΅¬μ±νμ λλ§ μ¬μ© κ°λ₯νλ€. -
MADV_NOHUGEPAGE
(리λ μ€ 2.6.38λΆν°) -
addr
κ³Όlength
λ‘ μ§μ ν μ£Όμ λ²μμ λ©λͺ¨λ¦¬κ° κ±°λ νμ΄μ§λ‘ λμΉμ§ μκ² νλ€. -
MADV_DONTDUMP
(리λ μ€ 3.4λΆν°) -
addr
κ³Όlength
λ‘ μ§μ ν λ²μμ νμ΄μ§λ€μ μ½μ΄ λ€νμμ μ μΈνλ€. μ½μ΄ λ€νμμ μΈλͺ¨κ° μλ 컀λ€λ λ©λͺ¨λ¦¬ μμμ κ°μ§ μμ©μ μ μ©νλ€.MADV_DONTDUMP
μ ν¨κ³Όκ°/proc/[pid]/coredump_filter
νμΌ(core(5) μ°Έκ³ )λ‘ μ€μ ν λΉνΈ λ§μ€ν¬λ³΄λ€ μ°μ νλ€. -
MADV_DODUMP
(리λ μ€ 3.4λΆν°) - μμ
MADV_DONTDUMP
μ ν¨κ³Όλ₯Ό λλλ¦°λ€. -
MADV_FREE
(리λ μ€ 4.5λΆν°) -
addr
κ³Όlength
λ‘ μ§μ ν λ²μμ νμ΄μ§λ€μ μμ©μμ λλ νμλ‘ νμ§ μλλ€. λ°λΌμ 컀λμμ κ·Έ νμ΄μ§λ€μ ν΄μ ν μ μλλ°, λ©λͺ¨λ¦¬ μλ°μ΄ μμ λκΉμ§ ν΄μ κ° λ―Έλ€μ§ μλ μλ€. κ·Έλ¦¬κ³ ν΄μ νκ² νμκ° λμμ§λ§ μμ§ ν΄μ λμ§ μμ νμ΄μ§μ νΈμΆμκ° μ°κΈ°λ₯Ό νλ©΄ ν΄μ λμμ΄ μ·¨μλλ€.MADV_FREE
λμ μ±κ³΅ νμ 컀λμμ νμ΄μ§λ₯Ό ν΄μ ν λ μ΅μ μ΄ μλ λ°μ΄ν°(μ¦ λλ¬μμ‘κ³ κΈ°λ‘ μ λ νμ΄μ§)κ° μμΌλ©΄ κ·Έλ₯ μ¬λΌμ§κ² λλ€. νμ§λ§ λ€μ΄μ΄ κ·Έ λ²μμ νμ΄μ§μμ μ°κΈ°μ μ±κ³΅νκ³ λλ©΄ 컀λμ΄ κ·Έ λλ¬μμ§ νμ΄μ§λ₯Ό ν΄μ ν μ μκ³ , κ·Έλμ νΈμΆμλ μΈμ λ λ°©κΈ κΈ°λ‘ν λ°μ΄ν°λ₯Ό λ³Ό μ μλ€. μ΄μ΄μ§λ μ°κΈ°κ° μμΌλ©΄ 컀λμμ κ·Έ νμ΄μ§λ₯Ό μ΄λ λλ ν΄μ ν μ μλ€. κ·Έ λ²μμ νμ΄μ§κ° ν΄μ λκ³ λλ©΄ νΈμΆμλ μ΄μ΄μ§λ νμ΄μ§ μ°Έμ‘°μμ zero-fill-on-demand νμ΄μ§λ₯Ό λ³΄κ² λλ€.MADV_FREE
λμμ λΉκ³΅μ μ΅λͺ νμ΄μ§(mmap(2) μ°Έκ³ )μλ§ μ μ©ν μ μλ€. 리λ μ€ 4.12 μ μμ μ€μμ΄ μλ μμ€ν μμ νμ΄μ§λ₯Ό ν΄μ ν λλ λ©λͺ¨λ¦¬ μλ°κ³Ό μκ΄μμ΄ μ§μ ν λ²μμ νμ΄μ§λ₯Ό μ¦μ ν΄μ νλ€. -
MADV_WIPEONFORK
(리λ μ€ 4.14λΆν°) -
fork(2) ν μμ νλ‘μΈμ€μκ² μ΄ λ²μμ 0μΌλ‘ μ±μ΄ λ©λͺ¨λ¦¬λ₯Ό μ€λ€. μλ²μμ λΆκΈ°νλ©΄μ λ―Όκ°ν νλ‘μΈμ€λ³ λ°μ΄ν°(κ°λ Ή PRNG μλ, μνΈνμ λΉλ°κ° λ±)κ° μμ νλ‘μΈμ€μκ² μ λ¬λμ§ μλλ‘ νλ λ° μ μ©νλ€.
MADV_WIPEONFORK
λμμ λΉκ³΅μ μ΅λͺ νμ΄μ§(mmap(2) μ°Έκ³ )μλ§ μ μ©ν μ μλ€.fork(2)λ‘ μμ±ν μμμμ μ§μ ν μ£Όμ λ²μμ
MADV_WIPEONFORK
μ€μ μ΄ κ·Έλλ‘ μ μ§λλ€. execve(2) κ³Όμ μμλ μ΄ μ€μ μ΄ μ¬λΌμ§λ€. -
MADV_KEEPONFORK
(리λ μ€ 4.14λΆν°) - μμ
MADV_WIPEONFORK
μ ν¨κ³Όλ₯Ό λλλ¦°λ€.
μ±κ³΅ μ madvise()
λ 0μ λ°ννλ€. μ€λ₯ μ -1μ λ°ννλ©° errno
λ₯Ό μ μ ν μ€μ νλ€.
EACCES
-
advice
κ°MADV_REMOVE
μΈλ° μ§μ ν μ£Όμ λ²μκ° μ°κΈ° κ°λ₯ν 곡μ λ§€νμ΄ μλλ€. EAGAIN
- 컀λ μμμ΄ μΌμμ μΌλ‘ λΆμ‘±νλ€.
EBADF
- λ§΅μ΄ μ‘΄μ¬νμ§λ§ κ·Έ μμμ νμΌ μλ λκ°κ° λ§΅ λμ΄ μλ€.
EINVAL
-
addr
μ΄ νμ΄μ§μ μ λ ¬λμ΄ μμ§ μκ±°λlength
κ° μμμ΄λ€. EINVAL
-
advice
κ° μ ν¨νμ§ μλ€. EINVAL
-
advice
κ°MADV_DONTNEED
λMADV_REMOVE
μΈλ° μ§μ ν μ£Όμ λ²μμ κ³ μ λ νμ΄μ§λ κ±°λ TLB νμ΄μ§,VM_PFNMAP
νμ΄μ§κ° ν¬ν¨λΌ μλ€. EINVAL
-
advice
κ°MADV_MERGEABLE
μ΄λMADV_UNMERGEABLE
μΈλ° 컀λμCONFIG_KSM
μΌλ‘ ꡬμ±νμ§ μμλ€. EINVAL
-
advice
κ°MADV_FREE
λMADV_WIPEONFORK
μΈλ° μ§μ ν μ£Όμ λ²μμ νμΌμ΄λ κ±°λ TLB,MAP_SHARED
,VM_PFNMAP
λ²μκ° ν¬ν¨λΌ μλ€. EIO
- (
MADV_WILLNEED
μμ) μ΄ μμμ νμ΄μ§λ€μ λ€μ΄λ©΄ νλ‘μΈμ€ μ΅λ μμ£Ό μ§ν© ν¬κΈ°λ₯Ό μ΄κ³Όνκ² λλ€. ENOMEM
- (
MADV_WILLNEED
μμ) λ©λͺ¨λ¦¬κ° λΆμ‘±ν΄μ νμ΄μ§λ₯Ό λ€μ΄λ λ° μ€ν¨νλ€. ENOMEM
- μ§μ ν λ²μμ μ£Όμκ° νμ¬ λ§΅ λμ΄ μμ§ μκ±°λ νλ‘μΈμ€μ μ£Όμ κ³΅κ° λ°μ μλ€.
EPERM
-
advice
κ°MADV_HWPOISON
μΈλ° νΈμΆμκ°CAP_SYS_ADMIN
μλ₯μ κ°μ§κ³ μμ§ μλ€.
리λ
μ€ 3.18λΆν° κΈ°λ° μμ€ν
νΈμΆ μ§μμ΄ μ νμ μ΄λ€. CONFIG_ADVISE_SYSCALLS
κ΅¬μ± μ΅μ
μ€μ μ λ°λΌ μ ν΄μ§λ€.
madvise()
λ μ΄λ νμ€μλ λͺ
μΈλμ΄ μμ§ μλ€. λ€μν advice
κ°λ€μ ꡬνν μ΄ μμ€ν
νΈμΆμ μ¬λ¬ λ²μ μ΄ λ€λ₯Έ μ¬λ¬ ꡬνλ€μ μ‘΄μ¬νλ€. λ³΄ν΅ λ€λ₯Έ ꡬνλ€μμλ μ μ΄λ μ ν΅μ μΈ μ‘°μΈ κ°μ λμ΄λ νλκ·Έλ€μ ꡬννκ³ μμ§λ§ μλ―Έμ μ½κ°μ μ°¨μ΄κ° μλ€.
POSIX.1-2001μ κΈ°μ νλ posix_madvise(3)μλ μμ POSIX_MADV_NORMAL
, POSIX_MADV_RANDOM
, POSIX_MADV_SEQUENTIAL
, POSIX_MADV_WILLNEED
, POSIX_MADV_DONTNEED
λ±μ΄ μλλ° μμ λμ΄λ λΉμ·ν μ΄λ¦μ νλκ·Έλ€κ³Ό λμ λ°©μμ΄ λΉμ·νλ€.
리λ
μ€ κ΅¬νμμλ μ£Όμ addr
μ΄ νμ΄μ§μ μ λ ¬λμ΄ μκΈ°λ₯Ό μꡬνλ©° length
κ° 0μΈ κ²μ νμ©νλ€. μ§μ ν μ£Όμ λ²μμ μΌλΆκ° λ§΅ λμ΄ μμ§ μμ κ²½μ° λ¦¬λ
μ€ λ²μ madvise()
λ κ·Έ λΆλΆμ 무μνκ³ λλ¨Έμ§μ νΈμΆ λ΄μ©μ μ μ©νλ€. (νμ§λ§ μμ€ν
νΈμΆμ μλ κ·ΈλμΌ νλ λλ‘ ENOMEM
μ λ°ννλ€.)
getrlimit(2), mincore(2), mmap(2), mprotect(2), msync(2), munmap(2), prctl(2), posix_madvise(3), core(5)
2019-03-06