ããã«ã¡ã¯ãã¿ããªïŒ ç§ãã¡ã¯ãçããããã§ã«æ°ã«å
¥ã£ãŠããã³ãŒã¹ã®æ°ããã¹ããªãŒã ãç«ã¡äžãç¶ããŠããŸãããããŠä»ãæ°ããã³ãŒã¹ã®ã»ãããéå§ããããšãæ¥ãã§çºè¡šããŸãã
ä»®æ³ãã¡ã€ã« ã·ã¹ãã ã¯ãLinux ã®å²åŠã§ããã¹ãŠããã¡ã€ã«ã§ããããšããããšãå¯èœã«ãããäžçš®ã®éæ³ã®æœè±¡åãšããŠæ©èœããŸãã
ãã¡ã€ã«ã·ã¹ãã ãšã¯äœã§ãã? Linux ã®æåã®è²¢ç®è
ããã³äœè
ã® XNUMX 人ã®èšèã«åºã¥ã
ãã¡ã€ã«ã·ã¹ãã ã®åºæ¬
Linux ã«ãŒãã«ã«ã¯ããã¡ã€ã« ã·ã¹ãã ãšã¿ãªããããšã³ãã£ãã£ã«å¯ŸããŠç¹å®ã®èŠä»¶ããããŸãã ã¡ãœãããå®è£
ããå¿
èŠããããŸã open()
, read()
О write()
ååãæã€æ°žç¶ãªããžã§ã¯ãã®å Žåã ãªããžã§ã¯ãæåã®èŠ³ç¹ããèŠããš
äžèšã®ã³ã³ãœãŒã«ã®äŸãããããããã«ããšã³ãã£ãã£ãéããããèªã¿åã£ãããæžã蟌ãã ãã§ããå Žåããã®ãšã³ãã£ãã£ã¯ãã¡ã€ã«ãšã¿ãªãããŸãã
VFS çŸè±¡ã¯ãããã¹ãŠããã¡ã€ã«ã§ããããšãã Unix ã®ãããªèŠ³å¯ã匷調ããã ãã§ãã äžã® /dev/console ã®å°ããªäŸããã³ã³ãœãŒã«ãå®éã«ã©ã®ããã«åäœãããã瀺ããŠããã®ããã©ãã»ã©å¥åŠã§ãããèããŠã¿ãŠãã ããã ãã®å³ã¯ã察話åã® Bash ã»ãã·ã§ã³ã瀺ããŠããŸãã ã³ã³ãœãŒã«ïŒä»®æ³ã³ã³ãœãŒã«ããã€ã¹ïŒã«æååãéä¿¡ãããšãä»®æ³ç»é¢äžã«æååã衚瀺ãããŸãã VFS ã«ã¯ä»ã«ãããã«å¥åŠãªç¹æ§ããããŸãã ããšãã°ã次ã®ããã«æ€çŽ¢ã§ããŸãã
ext4ãNFSã/proc ãªã©ã®ããç¥ãããã·ã¹ãã ã«ã¯ãC ããŒã¿æ§é ã«æ¬¡ã® XNUMX ã€ã®éèŠãªé¢æ°ããããŸãã read()
XNUMX ã€ã®ãã¡ã€ã« ã·ã¹ãã ã䜿çšããŠã¡ãœããã䜿çšãã write ()
ããŒã¿åºåçšã®å¥ã®ãã¡ã€ã« ã·ã¹ãã ã
åºæ¬ VFS ã¿ã€ãã«å±ããé¢æ°å®çŸ©ã¯æ¬¡ã®ãã¡ã€ã«ã«ãããŸãã fs/
ç¹å®ã®ãã¡ã€ã« ã·ã¹ãã ãå«ãŸããŠããŸãã ã³ã¢ã«ã¯æ¬¡ã®ãããªãšã³ãã£ãã£ãå«ãŸããŠããŸãã cgroups
, /dev
О tmpfs
ãããŒãããã»ã¹äžã«å¿
èŠãšãªããããã«ãŒãã«ãµããã£ã¬ã¯ããªã§å®çŸ©ãããŸãã init/
ã 泚ç®ããŠãã ãã cgroups
, /dev
О tmpfs
ãããã° XNUMXãé¢æ°ãåŒã³åºããªãã§ãã ãã file_operations
ã§ãããã¡ã¢ãªã«å¯ŸããŠçŽæ¥èªã¿æžãããŸãã
以äžã®å³ã¯ããŠãŒã¶ãŒç©ºéã Linux ã·ã¹ãã ã«äžè¬çã«ããŠã³ããããŠããããŸããŸãªã¿ã€ãã®ãã¡ã€ã«ã·ã¹ãã ã«ã©ã®ããã«ã¢ã¯ã»ã¹ãããã瀺ããŠããŸãã æ§é ã¯ç€ºãããŠããŸãã pipes
, dmesg
О POSIX clocks
ãæ§é äœãå®è£
ããŸã file_operations
ãVFS å±€ãéããŠã¢ã¯ã»ã¹ãããŸãã
VFS ã¯ãã·ã¹ãã ã³ãŒã«ãšç¹å®ã®ã³ã³ããŒãã³ãã®å®è£
ã®éã®ãã©ãããŒå±€ãã§ãã file_operations
ãªã© ext4
О procfs
ã æ©èœ file_operations
ããã€ã¹ãã©ã€ããŒãŸãã¯ã¡ã¢ãªã¢ã¯ã»ã¹ããã€ã¹ã®ãããããšå¯Ÿè©±ã§ããŸãã tmpfs
, devtmpfs
О cgroups
䜿ã£ãŠã¯ãããŸãã file_operations
ã§ãããã¡ã¢ãªã«çŽæ¥ã¢ã¯ã»ã¹ããŸãã
VFS ã®ååšã«ããããã¡ã€ã« ã·ã¹ãã ã«é¢é£ä»ããããåºæ¬ã¡ãœããããã¡ã€ã« ã·ã¹ãã ã®çš®é¡ããšã«åå®è£
ããå¿
èŠããªããããã³ãŒããåå©çšããæ©äŒãåŸãããŸãã ã³ãŒãã®åå©çšã¯ãœãããŠã§ã¢ ãšã³ãžãã¢ã®éã§ã¯äžè¬çãªç¿æ
£ã§ãã ãã ããåå©çšå¯èœãªã³ãŒãã«æ¬¡ã®ãã®ãå«ãŸããŠããå Žåã
/tmp: ç°¡åãªãã³ã
VFS ãã·ã¹ãã äžã«ååšããããšãæ€åºããç°¡åãªæ¹æ³ã¯ã次ã®ããã«å
¥åããããšã§ãã mount | grep -v sd | grep -v :/
ãããŠã³ããããŠãããã¹ãŠã®ãã®ã衚瀺ãããŸã (mounted
) ãã£ã¹ã¯åžžé§ããã³é NFS ã§ã¯ãªããã¡ã€ã«ã·ã¹ãã ãããã¯ã»ãšãã©ã®ã³ã³ãã¥ãŒã¿ã«åœãŠã¯ãŸããŸãã ãªã¹ããããŠããããŠã³ãã® XNUMX 〠(mounts
) VFS ã¯ééããªã /tmp
ã æ£ããïŒ
誰ãããã®ã¹ãã¬ãŒãžãç¥ã£ãŠããŸã / tmp
ç©ççåªäœã§ã¯ãçæ°ã§ãïŒ
ãªãä¿ç®¡ããããšãæãŸãããªãã®ã /tmp
ç©çã¡ãã£ã¢äžã§? ãã¡ã€ã«ã /tmp
ã¯äžæçãªãã®ã§ãããã¹ãã¬ãŒãž ããã€ã¹ã¯ tmpfs ãäœæãããã¡ã¢ãªãããäœéã§ãã ããã«ãç©çã¡ãã£ã¢ã¯ã¡ã¢ãªãããäžæžãããããšæ©èãããããªããŸãã æåŸã«ã/tmp å
ã®ãã¡ã€ã«ã«ã¯æ©å¯æ
å ±ãå«ãŸããŠããå¯èœæ§ããããããåèµ·åãããã³ã«ãã¡ã€ã«ãæ¶å»ããããšãéèŠãªæ©èœã§ãã
æ®å¿µãªãããäžéšã® Linux ãã£ã¹ããªãã¥ãŒã·ã§ã³ã®ã€ã³ã¹ããŒã« ã¹ã¯ãªããã¯ãããã©ã«ãã§ã¹ãã¬ãŒãž ããã€ã¹äžã« /tmp ãäœæããŸãã ããªãã®ã·ã¹ãã ã§ãåãããšãèµ·ãã£ããšããŠã絶æããªãã§ãã ããã ããã€ãã®ç°¡åãªæ瀺ã«åŸã£ãŠãã ãã tmpfs
ä»ã®ç®çã«ã¯äœ¿çšã§ããªããªããŸãã èšãæããã°ã巚倧㪠tmpfs ãšãã®äžã«å€§ããªãã¡ã€ã«ãããã·ã¹ãã ã§ã¯ãã¡ã¢ãªãäžè¶³ããŠã¯ã©ãã·ã¥ããå¯èœæ§ããããŸãã ãã XNUMX ã€ã®ãã³ã: ãã¡ã€ã«ã®ç·šéäž /etc/fstab
ãæ¹è¡ã§çµããå¿
èŠãããããšã«æ³šæããŠãã ãããããã§ãªããšã·ã¹ãã ãèµ·åããŸããã
/proc ãš /sys
ã»ãã« /tmp
, LinuxãŠãŒã¶ãŒã«ãšã£ãŠæã銎æã¿ã®ããVFSïŒä»®æ³ãã¡ã€ã«ã·ã¹ãã ïŒã¯ã /proc
О /sys
ã ïŒ/dev
å
±æã¡ã¢ãªã«åžžé§ããŠããã file_operations
ïŒã ãªããã® XNUMX ã€ã®ã³ã³ããŒãã³ããªã®ã§ãããã? ãã®åé¡ã«ã€ããŠèª¿ã¹ãŠã¿ãŸãããã
procfs
ã«ãŒãã«ãšãããç£èŠããããã»ã¹ã®ã¹ãããã·ã§ãããäœæããŸã userspace
ã 㧠/proc
ã«ãŒãã«ã¯ãå²ã蟌ã¿ãä»®æ³ã¡ã¢ãªãã¹ã±ãžã¥ãŒã©ãªã©ãå©çšå¯èœãªãã®ã«é¢ããæ
å ±ãåºåããŸãã ãã®ã»ãã /proc/sys
ã³ãã³ãã§èšå®ãããã©ã¡ãŒã¿ãé
眮ãããŠããå Žæã§ã sysctl
ã 以äžã®ããã«å©çšå¯èœ userspace
ã åã
ã®ããã»ã¹ã®ã¹ããŒã¿ã¹ãšçµ±èšã¯ãã£ã¬ã¯ããªã«è¡šç€ºãããŸã /proc/
.
ãã㯠/proc/meminfo
ã¯ç©ºã®ãã¡ã€ã«ã§ããã貎éãªæ
å ±ãå«ãŸããŠããŸãã
è¡å /proc
ãã¡ã€ã«ã«ã¯ãããŸããŸãª VFS ãã£ã¹ã¯ ãã¡ã€ã« ã·ã¹ãã ãã©ã®ããã«ååšãããã瀺ããŸãã äžæ¹ã§ã¯ã /proc/meminfo
ã³ãã³ãã§è¡šç€ºã§ããæ
å ±ãå«ãŸããŠããŸã free
ã éã«ç©ºããŠããïŒ ã©ã®ããã«æ©èœããã®ã§ãããã? ãã®ç¶æ³ã¯ã次ã®ãããªæåãªèšäºã圷圿ãšãããŸãã /proc
ãå®éã«ã¯ãã¡ã€ã«å
ã«ãããŸã /proc
誰ãèŠãŠããªããšãã¯äœããããŸããã èšãããããã«
空ã£ãœã«èŠãã procfs
ããã«ããæ
å ±ã¯åçã§ãããããããã¯çã«ããªã£ãŠããŸãã ãšã¯å°ãç°ãªãç¶æ³ sysfs
ã ãµã€ãºã XNUMX ãã€ã以äžã®ãã¡ã€ã«ãäœåãããæ¯èŒããŠã¿ãŸãããã /proc
ãš /sys
.
Procfs
ã«ã¯ãšã¯ã¹ããŒããããã«ãŒãã«èšå®ãšãããã¡ã€ã«ã XNUMX ã€ãããŸãããããã¯ããŒãããšã« XNUMX åã ãçæããå¿
èŠãããããäŸå€ã§ãã äžæ¹ã§ã¯ã /sys
倧ããªãã¡ã€ã«ãå€æ°ããããã®å€ãã¯ã¡ã¢ãªã®ããŒãžå
šäœãå æããŸãã éåžžã¯ãã¡ã€ã« sysfs
ãã¡ã€ã«ã®èªã¿åãããåŸãããæ
å ±ã®è¡šãšã¯ç°ãªããæ°å€ãŸãã¯è¡ã XNUMX ã€ã ãå«ãŸããŸãã /proc/meminfo
.
ç®æš sysfs
- ã«ãŒãã«ãåŒã³åºããã®ã®èªã¿åã/æžã蟌ã¿ããããã£ãæäŸããŸã «kobjects»
ãŠãŒã¶ãŒç©ºéã§ã å¯äžã®ç®æš kobjects
ãªã³ã¯ã«ãŠã³ãã§ããkobjectãžã®æåŸã®ãªã³ã¯ãåé€ããããšãã·ã¹ãã ã¯ããã«é¢é£ä»ãããããªãœãŒã¹ã埩å
ããŸãã ããã§ããªããã /sys
æåãªãã®ã®ã»ãšãã©ãå ãã
ã«ãŒãã«ã®å®å®ãã ABI ã«ããã衚瀺ãããå
容ãå¶éãããŸãã /sys
ããã®ç¹å®ã®ç¬éã«å®éã«ååšãããã®ã§ã¯ãããŸããã sysfs ã§ãã¡ã€ã«ã®ã¢ã¯ã»ã¹èš±å¯ããªã¹ããããšãããã€ã¹ãã¢ãžã¥ãŒã«ããã¡ã€ã«ã·ã¹ãã ãªã©ã®èšå®ãã©ã®ããã«æ§æå¯èœã§ããããããããŸãã èšå®ãŸãã¯èªã¿åããå¯èœã§ãã è«ççãªçµè«ã¯ãprocfs ãã«ãŒãã«ã®å®å®ãã ABI ã®äžéšã§ãããšããããšã§ãããããã¯æ瀺çã«ã¯è¿°ã¹ãããŠããŸããã
ã®ãã¡ã€ã« sysfs
åãšã³ãã£ãã£ã® 0 ã€ã®ç¹å®ã®ããããã£ãèšè¿°ããèªã¿åãå¯èœãæžã蟌ã¿å¯èœãââãŸãã¯ãã®äž¡æ¹ãå¯èœã§ãã ãã¡ã€ã«å
ã®ãXNUMXãã¯ãSSD ãåãå€ãããšãã§ããªãããšãæå³ããŸãã
eBPF ããŒã«ãš bcc ããŒã«ã䜿çšã㊠VFS ãç£èŠããæ¹æ³ãã翻蚳㮠XNUMX çªç®ã®éšåãå§ããŸããããçããããã®ã³ã¡ã³ãããåŸ
ã¡ããŠããŸããäŒçµ±çã«æ¬¡ã®ããšãæè¿ããŸãã
åºæïŒ habr.com