posix_fadvise(2) - wariua/manpages-ko GitHub Wiki
posix_fadvise - νμΌ λ°μ΄ν° μ κ·Ό λ°©μμ 미리 μ μΈνκΈ°
#include <fcntl.h>
int posix_fadvise(int fd, off_t offset, off_t len, int advice);glibc κΈ°λ₯ νμΈ λ§€ν¬λ‘ μ건 (feature_test_macros(7) μ°Έκ³ ):
-
posix_fadvise(): _POSIX_C_SOURCE >= 200112L
νλ‘κ·Έλ¨μμ posix_fadvise()λ₯Ό μ¬μ©ν΄ ν₯ν νΉμ ν¨ν΄μΌλ‘ νμΌ λ°μ΄ν°μ μ κ·Όνκ² λ€λ μλλ₯Ό μ μΈν μ μλ€. κ·Έλ¬λ©΄ 컀λμ΄ μ μ ν μ΅μ νλ₯Ό μνν μ μκ² λλ€.
fdκ° κ°λ¦¬ν€λ νμΌ λ΄μμ offsetμμ μμν΄ len λ°μ΄νΈλ§νΌ (lenμ΄ 0μ΄λ©΄ νμΌ λκΉμ§) μ΄μ΄μ§λ (κΌ μ‘΄μ¬ν΄μΌ νλ κ²μ μλ) μμμ adviceλ₯Ό μ μ©νλ€. adviceμλ ꡬμλ ₯μ΄ μμΌλ©° κ·Έμ μμ© μ
μ₯μμμ μμμΌ λΏμ΄λ€.
adviceμ λ€μ κ°μ΄ κ°λ₯νλ€.
POSIX_FADV_NORMAL- μ§μ ν λ°μ΄ν°μ λν μ κ·Ό ν¨ν΄μ κ΄ν΄ μμ©μμ ν΄ μ€ μ‘°μΈμ΄ μμμ λνλΈλ€. μ΄λ¦° νμΌμ μ무 μ‘°μΈλ μ£Όμ§ μμΌλ©΄ κΈ°λ³ΈμΌλ‘ μμ νλ κ°μ΄λ€.
POSIX_FADV_SEQUENTIAL- μμ©μμ μ§μ ν λ°μ΄ν°μ μμ°¨μ μΌλ‘ (μ€νμ μ΄ μμ λ°μ΄ν°λ₯Ό λ¨Όμ μ½λ μμΌλ‘) μ κ·Όν μμ μ΄λ€.
POSIX_FADV_RANDOM- μ§μ ν λ°μ΄ν°μ μμ μμλ‘ μ κ·Όνλ € νλ€.
POSIX_FADV_NOREUSE-
μ§μ ν λ°μ΄ν°μ ν λ²λ§ μ κ·Όνλ € νλ€.
2.6.18 μ μ 컀λμμ
POSIX_FADV_NOREUSEλPOSIX_FADV_WILLNEEDμ λμμ΄ κ°μλ€. λ²κ·Έμλ κ² κ°λ€. 컀λ 2.6.18λΆν° μ΄ νλκ·Έλ no-opμ΄λ€. POSIX_FADV_WILLNEED-
μ§μ ν λ°μ΄ν°μ μ‘°λ§κ° μ κ·Όνλ € νλ€.
POSIX_FADV_WILLNEEDλ μ§μ ν μμμ νμ΄μ§ μΊμλ‘ μ½μ΄ λ€μ΄λ λ ΌλΈλ‘ λμμ κ°μνλ€. κ°μ λ©λͺ¨λ¦¬ λΆνμ λ°λΌ μ½λ λ°μ΄ν° μμ 컀λμ΄ μ€μΌ μλ μλ€. (λ³΄ν΅ λͺ λ©κ°λ°μ΄νΈ μ λλ μμ ν μΆ©μ‘±λκ³ κ·Έ μ΄μμΌλ‘λ μ μ°μ§ μλλ€.) POSIX_FADV_DONTNEED-
μ§μ ν λ°μ΄ν°μ λΉλΆκ°μ μ κ·Όνμ§ μμ κ²μ΄λ€.
POSIX_FADV_DONTNEEDλ μ§μ ν μμκ³Ό μ°κ³λ μΊμ± λ νμ΄μ§λ€μ ν΄μ μλνλ€. μλ₯Ό λ€μ΄ ν° νμΌμ μ€νΈλ¦¬λ° ν λ μ μ©νλ€. νλ‘κ·Έλ¨μμ μ΄λ―Έ μ¬μ©ν λ°μ΄ν°λ₯Ό μΊμμμ ν΄μ νλΌκ³ μ£ΌκΈ°μ μΌλ‘ 컀λμκ² μμ²ν μ μκ³ , κ·Έλ¬λ©΄ μΊμ λ΄μ λ μ μ©ν νμ΄μ§λ€μ΄ νκΈ°λμ§ μμ μ μλ€.νμ΄μ§ μΌλΆλ§ νκΈ°νλ μμ²μ 무μνλ€. λΆνμν λ°μ΄ν°λ₯Ό νκΈ°νλ κ²λ³΄λ€ νμν λ°μ΄ν°λ₯Ό 보쑴νλ μͺ½μ΄ μ€μνλ€. λ°μ΄ν° νκΈ°λ₯Ό κ³ λ €νκ² νλ €λ©΄
offsetκ³Όlenμ΄ νμ΄μ§μ μ λ ¬λμ΄ μμ΄μΌ νλ€.μ§μ μμ λ΄μ λ³κ²½λ νμ΄μ§λ€μ ꡬνμ²΄κ° κΈ°λ° μ₯μΉλ‘ κΈ°λ‘νλ € μλν μλ μλ€. νμ§λ§ μ΄λ₯Ό 보μ₯νμ§λ μλλ€. κΈ°λ‘ μ λ λ³κ²½ νμ΄μ§κ° μμΌλ©΄ ν΄μ λμ§ μμ κ²μ΄λ€. λ³κ²½λ νμ΄μ§κ° ν΄μ λκ² νκ³ μΆμΌλ©΄ μμ©μμ λ¨Όμ fsync(2)λ fdatasync(2)λ₯Ό νΈμΆν΄μΌ ν κ²μ΄λ€.
μ±κ³΅ μ 0μ λ°ννλ€. μ€λ₯ μ μ€λ₯ λ²νΈλ₯Ό λ°ννλ€.
EBADF-
fdμΈμκ° μ ν¨ν νμΌ λμ€ν¬λ¦½ν°κ° μλλ€. EINVAL-
adviceμ μ ν¨νμ§ μμ κ°μ μ§μ νλ€. ESPIPE- μ§μ ν νμΌ λμ€ν¬λ¦½ν°κ° νμ΄νλ FIFOλ₯Ό κ°λ¦¬ν€κ³ μλ€. (POSIXμμ λͺ
μΈνλ μ€λ₯λ
ESPIPEμ΄μ§λ§ 컀λ λ²μ 2.6.16 μ μ 리λ μ€λ μ΄ κ²½μ°EINVALμ λ°ννλ€.)
리λ
μ€ 2.5.60μμ 컀λ μ§μμ΄ μ²μ λ±μ₯νλ€. κΈ°λ° μμ€ν
νΈμΆμ μ΄λ¦μ΄ fadvise64()μλ€. glibc λ²μ 2.2λΆν° λνΌ ν¨μ posix_fadvise()λ₯Ό ν΅ν΄ λΌμ΄λΈλ¬λ¦¬ μ§μμ΄ μ΄λ€μ‘λ€.
리λ
μ€ 3.18λΆν° κΈ°λ° μμ€ν
νΈμΆ μ§μμ΄ μ νμ μ΄λ€. CONFIG_ADVISE_SYSCALLS κ΅¬μ± μ΅μ
μ€μ μ λ°λΌ μ ν΄μ§λ€.
POSIX.1-2001, POSIX.1-2008. μ°Έκ³ λ‘ POSIX.1-2003 TC1μμ len μΈμμ νμ
μ΄ size_tμμ off_tλ‘ λ°λμλ€.
리λ
μ€μμ POSIX_FADV_NORMALμ 미리 μ½κΈ° μλλ₯Ό κΈ°λ° μ₯μΉλ³ κΈ°λ³Έκ°μΌλ‘ μ€μ νλ€. POSIX_FADV_SEQUENTIALμ λ λ°° ν¬κΈ°λ‘ λ§λ€κ³ POSIX_FADV_RANDOMμ νμΌ λ―Έλ¦¬ μ½κΈ°λ₯Ό μμ ν λλ€. μ΄λ° λ³κ²½μ μ§μ ν μμλ§μ΄ μλλΌ νμΌ μ 체μ μν₯μ λΌμΉλ€. (λ¨, λμΌ νμΌμ λν λ€λ₯Έ μ΄λ¦° νμΌ νΈλ€μ μν₯μ λ°μ§ μλλ€.)
proc(5)μμ κΈ°μ νλ /proc/sys/vm/drop_caches μΈν°νμ΄μ€λ₯Ό ν΅ν΄ 컀λ λ²νΌ μΊμ λ΄μ©μ λΉμΈ μ μλ€.
νμΌμ μ΄μ΄μ mmap(2)μΌλ‘ λ§΅ νκ³ μ κ·Έ λ§€νμ mincore(2)λ₯Ό μ μ©νλ©΄ νμΌμ μ΄λ νμ΄μ§λ€μ΄ λ²νΌ μΊμ μμ μμ£Όνκ³ μλμ§μ λν μ€λ μ·μ μ»μ μ μλ€.
C λΌμ΄λΈλ¬λ¦¬μ λνΌ ν¨μ μ΄λ¦μ΄ posix_fadvise()μ΄λ€. κΈ°λ° μμ€ν
νΈμΆμ μ΄λ¦μ fadvise64()μ΄λ€. (μΌλΆ μν€ν
μ²μμλ fadvise64_64()μ΄λ€.) λ μμ€ν
νΈμΆμ μ°¨μ΄λ μ μμμ len μΈμμ νμ
μ΄ size_tλΌκ³ μμ νλ λ°λ©΄ νμμμλ loff_tλ₯Ό κΈ°λνλ€λ μ μ΄λ€.
μ΄λ€ μν€ν
μ²μμλ 64λΉνΈ μΈμλ₯Ό μ μ ν λ μ§μ€ν° μμ λ§μΆ° λ£μ΄μΌ νλ€. (μμΈν λ΄μ©μ syscall(2) μ°Έκ³ .) κ·Έλ° μν€ν
μ²μμ SYNOPSISμ μλ posix_fadvise() νΈμΆ μκ·Έλμ²λ fdμ offset μΈμ μ¬μ΄ ν¨λ©μΌλ‘ λ μ§μ€ν° νλλ₯Ό λλΉνκ² λ§λ€ κ²μ΄λ€. κ·Έλμ κ·Έλ° μν€ν
μ²λ€μμλ μΈμ μμλ₯Ό μ μ ν λ°κΎΈκ³ λλ¨Έμ§λ posix_fadvise()μ μ ννκ² λμΌν λ²μ μ μ μνλ€.
μλ₯Ό λ€μ΄ 리λ μ€ 2.6.14λΆν° ARMμλ λ€μ μμ€ν νΈμΆμ΄ μλ€.
long arm_fadvise64_64(int fd, int advice,
loff_t offset, loff_t len);μΌλ°μ μΌλ‘ μμ©μκ²λ μ΄λ° μν€ν
μ²λ³ μΈλΆ μ¬νμ΄ κ°μΆ°μ Έ μλ€. glibcμ posix_fadvise() λνΌ ν¨μμμ μ μ ν μν€ν
μ²λ³ μμ€ν
νΈμΆμ λΆλ¬ μ€λ€.
컀λ 2.6.6 μ μμλ lenμ 0μΌλ‘ μ§μ νλ©΄ μ΄λ₯Ό "νμΌ λκΉμ§ μ 체 λ°μ΄νΈ"λ‘ ν΄μνμ§ μκ³ λ§ κ·Έλλ‘ "0λ°μ΄νΈ"λ‘ ν΄μνλ€.
fincore(1), mincore(2), readahead(2), sync_file_range(2), posix_fallocate(3), posix_madvise(3)
2018-03-06