á¡á¬ážáá¯á¶ážáááºá¹ááá¬áá«! áááºááŸá
áºáááºáá²á·áá±á¬ áááºáááºážáá»á¬ážá¡ááœáẠááá¯ááºááá¯ááºáá¯ááºááœáŸáá·áºááŸá¯áá»á¬áž áááºáááºáá¯ááºáá±á¬ááºáá»ááºááŸáááŒá®áž ááᯠáááºáááºážá¡áá
áºáá
áºáᯠá
áááºáá±á¬á·áááºááŒá
áºááŒá±á¬ááºáž ááŒá±áá¬ááẠá¡áá»ááºááá¯áá±áá«áááºá
Virtual ááá¯ááºá áá áºáá»á¬ážááẠLinux ááá¿áááœáẠ"á¡áá¬áá¬ááẠááá¯ááºáá áºáá¯ááŒá áºáááº" áá¯ááŒá±á¬ááá¯ááºá á±ááá·áº ááŸá±á¬áºáááºááá·áºá¡áá¬áá áºáá¯á¡ááŒá Ạáá¯ááºáá±á¬ááºáááºá
ááá¯ááºá
áá
áºááá¯áá¬áá¬áá²á Linux áááááá¯á¶ážáá¶á·ááá¯ážáá°áá®áá°ááŸáá·áºá
á¬áá±ážááá¬áá»á¬ážáá²ááŸáá
áºáŠážáá
áá¬ážáá»á¬ážá¡áá±á«áºá¡ááŒá±áá¶áááºá
ááá¯ááºá áá áºá¡ááŒá±áá¶áá»á¬áž
Linux kernel ááœáẠááá¯ááºá
áá
áºáᯠáá°áááá¯ááºáá±á¬ á¡áá¬áá
áºáá¯á¡ááœáẠá¡áá»áá¯á·áá±á¬ ááá¯á¡ááºáá»ááºáá»á¬ážááŸááááºá áááºážáááºážááœá±ááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºááááºá open()
, read()
О write()
á¡áááºááŸááá±á¬ á¡áá¬ááá¹áá¯áá»á¬ážá¡ááœááºá á¡áá¬ááá¹áá¯ááᯠáŠážáááºáá²á· ááŸá¯áá±á¬áá·áºááá±áá«á
á¡áááºá áá»áœááºá¯ááºááá¯á·ááẠá¡áá¬ááá¹áá¯áá
áºáá¯ááá¯á· ááœáá·áºááá¯ááºá áááºááá¯ááºá áá±ážááá¯ááºáá»áŸáẠá¡áááºáá±á¬áºááŒáá« console á០áá»áœááºá¯ááºááá¯á· ááŒááºááœá±á·ááá¯ááºááá²á·ááá¯á· ááá¯á¡áá¬á¡á¬áž ááá¯ááºáá
áºáá¯á¡ááŒá
ẠáááºááŸááºáááºá
VFS ááŒá
áºá
ááºááẠ"á¡áá¬áá¬ááẠááá¯ááºáá
áºáá¯ááŒá
áºáááº" áá°áá±á¬ Unix áá²á·ááá¯á·áá±á¬ á
á°ážá
ááºážááŸá¯ááá¯áᬠá¡áá±ážáá±ážáááºá á¡áá±á«áºá /dev/console á¥ááá¬áá±ážááœá±á console á¡ááŸááºáááẠá¡áá¯ááºáá¯ááºáá¯á¶á áááºáá±á¬ááºáá°ážáááºážáááºááá¯á· áááºáá²á áá¯á¶ááœáẠá¡ááŒááºá¡ááŸááºá¡áá»áá¯ážáááºáá±á¬ááºáá±á¬ Bash á
ááºááŸááºááᯠááŒááá¬ážáááºá ááœááºááá¯ážáẠ(virtual console device) ááá¯á· á
á¬ááŒá±á¬ááºážáá
áºááŒá±á¬ááºáž ááá¯á·ááŒááºážááẠáááºážááᯠvirtual screen áá±á«áºááœáẠááŒááááºá VFS ááœáẠá¡ááŒá¬ážáá±á¬ áá°á
áááºážáá¯ááºááá¹áááá»á¬áž ááŸááááºá á¥ááá¬á¡á¬ážááŒáá·áºá áááºáááºááŸá¬ááœá±áááºááœáá·áºááŒá¯áááºá
ext4á NFS ááŸáá·áº /proc áá²á·ááá¯á·áá±á¬ áááºážááŸá®ážáá±á¬ á
áá
áºáá»á¬ážááẠC áá±áá¬ááœá²á·á
ááºážáá¯á¶ááœáẠá¡áá±ážááŒá®ážáá±á¬ áá¯ááºáá±á¬ááºáá»ááºáá»á¬áž áá¯á¶ážáá¯ááŸááááºá read()
file system áá
áºáá¯ááŒá®ážááẠmethod ááá¯áá¯á¶ážáá«á write ()
áá±áá¬á¡ááœááºá¡ááœáẠá¡ááŒá¬ážááá¯ááºá
áá
áºá
á¡ááŒá±áᶠVFS á¡áá»áá¯ážá¡á
á¬ážáá»á¬ážááŸáá·áº áááºááá¯ááºááá·áº áá¯ááºáá±á¬ááºáá»áẠá¡áááá¹áá«ááºááœáá·áºááá¯áá»ááºáá»á¬ážááẠááá¯ááºáá»á¬ážááœáẠááŸááááºá fs/
á¡áá»áá¯á·áá±á¬ ááá¯ááºá
áá
áºáá»á¬áž áá«áááºáááºá core áá²á·ááá¯á·áá±á¬ entities áá»á¬ážáááºážáá«ááŸááááºá cgroups
, /dev
О tmpfs
boot áá¯ááºáááºážá
ááºá¡ááœááºáž ááá¯á¡ááºááá·áºá¡áá¬áá»á¬ážááᯠkernel subdirectory ááœááºáááºááŸááºáá¬ážáááºá init/
. á¡á²áá«ááᯠáááááŒá¯áá«á cgroups
, /dev
О tmpfs
"ááŒá®ážááŒá®ážáá¯á¶ážáá«áž" áá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááᯠááá±á«áºáá«ááŸáá·áº file_operations
áá«áá±ááá·áº ááŸááºáá¬ááºáá² ááá¯ááºááá¯ááºáááºááŒá®áž á
á¬áá±ážáá«á
á¡á±á¬ááºáá±á¬áºááŒáá«áá¯á¶ááœáẠá¡áá¯á¶ážááŒá¯áá°á¡á¬áá¬áááẠLinux á
áá
áºáá»á¬ážááœáẠáááºáááºáá¬ážáá±á·ááŸááá±á¬ ááá¯ááºá
áá
áºá¡áá»áá¯ážá¡á
á¬ážáá»á¬ážááᯠáááºááá¯á·áááºáá±á¬ááºááŒáá·áºááŸá¯áááºááᯠááŒááááºá ááœá²á·á
ááºážáá¯á¶ááœá± áááŒáá°ážá pipes
, dmesg
О POSIX clocks
ááœá²á·á
ááºážáá¯á¶ááá¯áááºáž á¡áá±á¬ááºá¡áááºáá±á¬áºáá±ážáá±á¬á file_operations
VFS á¡ááœáŸá¬ááŸáááá·áºáááºáá±á¬ááºáááºá
VFS ááẠá
áá
áºáá±á«áºááá¯ááŸá¯áá»á¬ážááŸáá·áº á¡áá»áá¯á·áá±á¬á¡áá±á¬ááºá¡áááºáá±á¬áºááŸá¯áá»á¬ážááŒá¬ážááŸá "wrapper layer" ááŒá
áºáááºá file_operations
ááá¯ááá¯á·áá±á¬á¡ááŒá
Ạext4
О procfs
. áá¯ááºáá±á¬ááºáá»ááºáá»á¬áž file_operations
á
ááºáá
á¹á
ááºážáááá¯ááºáá¬áá»á¬áž ááá¯á·ááá¯áẠáááºááá¯áá®áááºáá±á¬ááºáá¯á¶ážáááááá¬áá»á¬ážááŸáá·áº á¡ááŒááºá¡ááŸáẠáá¯á¶á·ááŒááºááá¯ááºáááºá tmpfs
, devtmpfs
О cgroups
ááá¯á¶ážáá«áá²á·á file_operations
áá«áá±ááá·áº memory ááá¯ááá¯ááºááá¯ááºáááºáá±á¬ááºáá«á
VFS ááááºááŸáááŸá¯áááºáá¯ááºááá¯ááŒááºáá¯á¶ážáááºá¡ááœáá·áºá¡áá±ážáá
áºáá¯áá±ážáááºá á¡áááºááŒá±á¬áá·áºááá¯áá±á¬áºááá¯ááºá
áá
áºáá»á¬ážááŸáá·áºáááºá
ááºáá±á¬á¡ááŒá±áá¶áááºážáááºážáá»á¬ážáááºááá¯ááºá
áá
áºá¡áá»áá¯ážá¡á
á¬ážáá
áºáá¯á
á®ááŸááŒááºáááºá¡áá±á¬ááºá¡áááºáá±á¬áºáááºáááá¯á¡ááºáá±á¬ááŒá±á¬áá·áºááŒá
áºáááºá áá¯ááºááŒááºáá¯á¶ážááŒááºážááẠáá±á¬á·ááºáá²ááºá¡ááºáá»ááºáá®áá¬áá»á¬ážááŒá¬ážááœáẠááŒá
áºááá¯ážááŒá
áºá
ááºáá
áºáá¯ááŒá
áºáááºá ááá¯á·áá±á¬áº ááŒááºáá¯á¶ážááá¯ááºáá±á¬ áá¯ááºááœáẠáá«áá±áá»áŸááº
/tmp: ááá¯ážááŸááºážáá±á¬ á¡ááááºá¡ááŒáœááº
á
áá
áºáá
áºáá¯ááœáẠVFS ááŸááá±ááŒá±á¬ááºážááááŸáááẠááœááºáá°áá±á¬áááºážáááºážááŸá¬ á
á¬ááá¯ááºááŒááºážááŒá
áºáááºá mount | grep -v sd | grep -v :/
mounted á¡á¬ážáá¯á¶ážááá¯ááŒáááá·áº (mounted
) ááœááºáá»á°áá¬á¡áá»á¬ážá
á¯ááœáẠááŸááºáá±á¬ disk-resident ááŸáá·áº NFS ááá¯ááºáá±á¬ ááá¯ááºá
áá
áºáá»á¬ážá á
á¬áááºážááœááºážáá¬ážáá±á¬ áá±á¬ááºáá»á¬ážáá²á០áá
áºáᯠ(mounts
) VFS ááẠáá¶ááááŒá
áºááœááºáááŸááá±á /tmp
áá¯ááºáááºááá¬áž?
áá®ááá¯ááŸá±á¬ááºááŸá¯ááᯠáá°ááá¯ááºážáááá«áááºá / tmp
áá¯ááºááá¯ááºážááá¯ááºáá¬ááŒá¬ážáᶠ- áá°ážááœááºááŸá¯!
áá¬ááŒá±á¬áá·áº ááááºážáááºážááᬠáááá¯áá¬ážáá¬áá²á /tmp
áá¯ááºááá¯ááºážááá¯ááºáá¬áá®áá®áá¬? ááá¯ááºááœá± áá»á¬ážáá±ááá¯á·áá« /tmp
áá¬áá®ááŒá
áºááŒá®áž ááá¯ááŸá±á¬ááºááŸá¯áááááá¬áá»á¬ážááẠtmpfs áááºáá®ážáá¬ážááá·áº áááºááá¯áá®ááẠááŸá±ážááœá±ážáááºá ááá¯á·á¡ááŒááºá áá¯ááºááá¯ááºážááá¯ááºáá¬áá®áá®áá¬ááẠmemory áááºá
á¬áá»áŸáẠoverwrite áá¯ááºáá±á¬á¡áá«ááœáẠááá¯á áá¶ááá¯ááºáááºááŸááááºá áá±á¬ááºáá¯á¶ážááœááºá /tmp ááŸá ááá¯ááºáá»á¬ážááẠá¡áá±ážááŒá®ážáá±á¬ á¡áá»ááºá¡ááẠáá«áááºááá¯ááºáááºá ááá¯á·ááŒá±á¬áá·áº áááºážááá¯á·ááᯠááŒááºáááºá
áááºááá¯ááºážááœáẠáá»á±á¬ááºááœááºááœá¬ážá¡á±á¬áẠááŒá¯áá¯ááºááŒááºážááẠáááŸááááŒá
Ạá¡ááºá¹áá«áááºáá
áºáᯠááŒá
áºáááºá
áá¶ááá±á¬ááºážá
áœá¬ááŒáá·áºá á¡áá»áá¯á·áá±á¬ Linux ááŒáá·áºáá»á®áá±áž áááºáááºááŸá¯ script áá»á¬ážááẠáá¯á¶ááŸááºá¡á¬ážááŒáá·áº storage device ááœáẠ/tmp áááºáá®ážáá«áááºá ááá·áºá
áá
áºááœááºáááºáž ááá¯ááá¯á·ááŒá
áºááœá¬ážáá«á á
áááºáá»ááºááá±áá«ááŸáá·áºá á¡áááºážáááºááá¯ážááŸááºážáá±á¬ááœáŸááºááŒá¬ážáá»ááºáá»á¬ážááŸáá·áºá¡áá°ááá¯ááºáá¬áá«á tmpfs
á¡ááŒá¬ážáááºááœááºáá»ááºáá»á¬ážá¡ááœáẠááááá¯ááºáá«á áá
áºáááºážááá¯ááá±á¬áº áááºážááœáẠá§áá¬á tmpfs ááŸáá·áº ááŒá®ážáá¬ážáá±á¬ááá¯ááºáá»á¬ážáá«ááŸááá±á¬ á
áá
áºáá
áºáá¯ááẠááŸááºáá¬ááºáá¯ááºááœá¬ážáᬠáá»ááºá
á®ážááœá¬ážááá¯ááºáááºá áá±á¬ááºáááºá¡ááááºá¡ááŒáœááº- ááá¯ááºáá
áºáá¯ááᯠáááºážááŒááºáá±á
áẠ/etc/fstab
áááºážááẠááá¯ááºážá¡áá
áºááŒáá·áº á¡áá¯á¶ážáááºááááºááᯠááá±á·áá«ááŸáá·áºá ááá¯á·ááá¯ááºáá«á ááá·áºá
áá
áºááẠá
áááºáááºááá¯ááºáá«á
/proc ááŸáá·áº /sys
á¡ááŒáẠ/tmp
Linux á¡áá¯á¶ážááŒá¯áá°áá»á¬ážááŸáá·áº á¡áááºážááŸá®ážáá¯á¶ážááŒá
áºáá±á¬ VFS (virtual file systems) /proc
О /sys
á (/dev
áá»áŸáá±áá¬ážáá±á¬ ááŸááºáá¬ááºááœáẠáá±ááá¯ááºááŒá®áž áááŸááá«á file_operations
) áá®á¡á
áááºá¡ááá¯ááºážááŸá
áºáá¯á áá¬ááŒá±á¬áá·áºáá²á áá®ááá
á¹á
ááᯠáá±á·áá¬ááŒáá·áºáá¡á±á¬ááºá
procfs
kernel ááá»áŸááºáá
áºááŒááºáá¯á¶áá
áºáá¯á¶ááá¯áááºáá®ážááŒá®ážáááºážááá¯á
á±á¬áá·áºááŒáá·áºááá·áºáá¯ááºáááºážá
ááºáá»á¬áž userspace
á á¡ááá¯áá« /proc
kernel ááẠinterruptsá virtual memory ááŸáá·áº scheduler áá²á·ááá¯á·áá±á¬ áááºážááœááºáááŸáááá¯ááºáá±á¬á¡áá¬áá»á¬ážá¡ááŒá±á¬ááºáž á¡áá»ááºá¡áááºááᯠprint áá¯ááºáá«áááºá á¡á
á¯á¶á /proc/sys
command ááŒáá·áº parameters áá»á¬ážááᯠconfigure áá¯ááºááá·áºáá±áá¬ááŒá
áºáááºá sysctl
, áá»á¬ážá¡ááœááºáááŸáááá¯áẠuserspace
. áá¯ááºáááºážá
ááºáá
áºáá¯áá»ááºážá
á®á á¡ááá·áºá¡áááºážááŸáá·áº á
á¬áááºážááá¬ážáá»á¬ážááᯠáááºááá±á¬ááºáá»á¬ážááœáẠááŒááá¬ážáááºá /proc/
.
áá«áá¬ááŒá
áºáá«ááẠ/proc/meminfo
á¡ááá¯ážáááºá¡áá»ááºá¡áááºáá»á¬ážáá«áááºááá·áº ááá¬ááá¯ááºáá
áºáá¯ááŒá
áºáááºá
á¡ááŒá¯á¡áá° /proc
ááá¯ááºáá»á¬ážááẠVFS disk ááá¯ááºá
áá
áºáá»á¬áž áááºáá²á·ááá¯á· ááœá²ááŒá¬ážááá¯ááºááŒá±á¬ááºáž ááŒááááºá ááááºá /proc/meminfo
command ááŒáá·áº ááŒáá·áºááŸá¯ááá¯ááºáá±á¬ á¡áá»ááºá¡ááẠáá«ááŸááááºá free
. áá
áºáááºááœááºá áá«ááááºááá¯áá»áá¯ážá¡áá¯ááºáá¯ááºááá²? ááá¯á¡ááŒá±á¡áá±ááẠáá»á±á¬áºááŒá¬ážáá±á¬ áá±á¬ááºážáá«ážáá
áºáá¯ááºááᯠá¡ááŸááºááá±áá«áááºá /proc
ááŸáá·áº á¡ááŸááºáááẠááá¯ááºáá»á¬áž /proc
á¡áááºáá°áá»áŸáááŒáá·áºááŸá¯áá±á¬á¡áá«áá¬áá»áŸáááŸáá ááŒá±á¬áá²á·áááá¯áá«áá²á
á¡ááá¹ááᯠáááºááááºá procfs
á¡áá»ááºá¡áááºááẠááœá±á·áá»á¬ážáá±áá±á¬ááŒá±á¬áá·áº á¡áááá¹áá¬ááºááŸááááºá á¡ááŒá±á¡áá±ááŸáá·áº á¡áááºážááẠááœá²ááŒá¬ážáááºá sysfs
. á¡ááœááºá¡á
á¬áž á¡áááºážáá¯á¶áž áá
áºááá¯ááºááŸá ááá¯ááºáááºáá»áŸááŸááááºááᯠááŸáá¯ááºážááŸááºááŒáá·áºááŒáá«á
áá¯á· /proc
ááŸáá·áº /sys
.
Procfs
ááá¯ááºáá
áºáá¯ááŸááááºá ááá¯ááá¯áááºááŸá¬ áááºááá¯á·ááá·áº kernel ááœá²á·á
ááºážááŸá¯áá¯á¶á
á¶á áááºážááẠboot áá
áºáá¯áá»áŸáẠáá
áºááŒáááºáᬠáá¯ááºáá¯ááºááẠááá¯á¡ááºáá±á¬ááŒá±á¬áá·áº ááŒáœááºážáá»ááºááŒá
áºáááºá áá
áºáááºááœááºá /sys
Memory á
á¬áá»ááºááŸá¬áá
áºáá¯áá¯á¶ážááᯠáá°áá±á¬ááºááœá¬ážáá±á¬ ááá¯ááºááŒá®ážáá»á¬ážá
áœá¬ááŸááááºá á¡áá»á¬ážá¡á¬ážááŒáá·áº ááá¯ááºáá»á¬áž sysfs
ááá¯áá²á·ááá¯á·áá±á¬ ááá¯ááºáá»á¬ážááᯠáááºááŒááºážá០áááŸááá±á¬ á¡áá»ááºá¡áááºááá¬ážáá»á¬ážááŸáá·áº ááá°áá² áá¶áá«áẠááá¯á·ááá¯áẠááá¯ááºážáá
áºáᯠá¡ááá¡áá» áá«ááŸááááºá /proc/meminfo
.
áááºááŸááºážáá»áẠsysfs
- kernel áá±á«áºááá¯ááá·áºá¡áá¬á read/write properties ááᯠáá±ážáááºá «kobjects»
userspace ááœááºá áá
áºáá¯áááºážáá±á¬áááºážááá¯áẠkobjects
ááá·áºááºáá±ááœááºáá±áááº- kobject áá
áºáá¯ááá¯á· áá±á¬ááºáá¯á¶ážááá·áºááºááᯠáááºááŸá¬ážááá¯ááºáá±á¬á¡áá«á á
áá
áºááẠáááºážááŸáá·áºáááºá
ááºáá±áá±á¬ á¡áááºážá¡ááŒá
áºáá»á¬ážááᯠááŒááºáááºááá°áááºááŒá
áºáááºá áááºááá¯áá²ááŒá
áºááŒá
áºá /sys
áá¬áááºááŒá®ážá¡áá»á¬ážá
á¯ááᯠáááºáá®ážáááºá
Kernel ááááºááŒáááºáá±á¬ ABI ááẠáá±á«áºáá¬ááá¯ááºááá·áºá¡áá¬ááᯠááá·áºáááºáá¬ážáááºá /sys
á¡á²áá®á¡ááá¯ááºá¡ááá·áºááŸá¬ ááááºááŸááá±áá²á·á¡áᬠááá¯ááºáá«áá°ážá sysfs ááœáẠááá¯ááºááœáá·áºááŒá¯áá»ááºáá»á¬ážááᯠá
á¬áááºážááŒá¯á
á¯ááŒááºážááẠá
ááºáá»á¬ážá áá±á¬áºáá»á°ážáá»á¬ážá ááá¯ááºá
áá
áºáá»á¬áž á
áááºááá¯á·á¡ááœáẠáááºááá¯á·ááœá²á·á
ááºážáá¯á¶ááŒááºáááºááá¯ááºáá±á¬ áááºáááºáá»á¬ážááᯠááá¯ážááœááºážááááŒááºá
á±áá«áááºá ááŒááºáááºáááºááŸááºááá¯ááºááẠááá¯á·ááá¯áẠáááºááá¯ááºáááºá áá¯áá¹áááááá¯á¶ážáá»á¯ááºáá»ááºááŸá¬ procfs ááẠkernel ááááºááŒáááºáá±á¬ ABI ááá
áºá
áááºáá
áºááá¯ááºážáááºážááŒá
áºáááºá áááºážááá¯á¡ááá¡áááºážáá±á¬áºááŒáá¬ážááŒááºážáááŸááá±á
ááá¯ááºáá»á¬áž sysfs
á¡ááŒá±á¬ááºážá¡áá¬áá
áºáá¯á
á®á¡ááœáẠáá®ážááŒá¬ážááá¯ááºááá¯ááºááŸá¯áá
áºáá¯ááᯠáá±á¬áºááŒááŒá®áž áááºááá¯ááºáá±á¬á á
á¬áá±ážááá¯ááºáá±á¬á ááá¯á·ááá¯áẠááŸá
áºáá¯á
áá¯á¶ážááᯠáá±á¬áºááŒáá«á ááá¯ááºááŸá "0" ááá¯áááºááŸá¬ SSD ááᯠáááºááŸá¬ážááááá«á
eBPF ááŸáá·áº bcc áá°ážááºáá»á¬ážááᯠá¡áá¯á¶ážááŒá¯á VFS ááᯠá
á±á¬áá·áºááŒáá·áºáááºážááŒáá·áº áá¬áá¬ááŒááºááŒááºážá áá¯áááá¡ááá¯ááºážááᯠá
áááºááá¯ááºáá¡á±á¬ááºá ááᯠáá»áœááºá¯ááºááá¯á·ááẠááá·áºááŸááºáá»ááºáá»á¬ážááᯠá
á±á¬áá·áºáá»áŸá±á¬áºáá±ááŒá®áž á¡á
ááºá¡áá¬á¡á¬ážááŒáá·áº ááá·áºá¡á¬áž ááááºááŒá¬ážá¡ááºáá«áááºá
source: www.habr.com