/boot 以äžã«é
眮ããã
config
ãã«ãæã«æå®ããããªãã·ã§ã³ã®æçް
initramfs
èµ·åæã«å©çšããã ramdisk ã€ã¡ãŒãž
sysvers
ã«ãŒãã«ãšã«ãŒãã«ã¢ãžã¥ãŒã«ã export ããŠããã·ã³ãã«ãšãã§ãã¯ãµã ã®äžèЧ
ã¢ãžã¥ãŒã«ã®ãã«ãæã«å©çš
ã¢ãžã¥ãŒã«ã®ããŒãæã« ABI ã®æŽåæ§ããã§ãã¯ããããã«ãå©çš
System.map
ã«ãŒãã«ã®ã·ã³ãã«ããŒãã«ãšã¢ãã¬ã¹ã®äžèЧ
ãããã¡ã€ã©ãªã©ã§å©çš
vmlinuz
ã«ãŒãã«æ¬äœ
z ãã€ããŠããã®ã¯å§çž®ãããŠãããã
uname( {sysname= "Linux" , nodename= " oswald " , release= " 3.10.0-1062.4.1.el7.x86_64 " , version= " #1 SMP Fri Oct 18 17:15:30 UTC 2019 " , machine= " x86_64 " , domainname= " (none) " } ) = 0
詳ãã㯠man 2 uname
man 2 ã¯ã·ã¹ãã ã³ãŒã«ã® man
lsmod
ã«ãŒãã«ã¢ãžã¥ãŒã«ã®è¡šç€º
ããã»ã¹ããšã« /proc 以äžãäœãããŠã¹ã¬ããããšã« /task 以äžãã§ãã
$ ls -d /proc/ * /task/ * | head
ã«ãŒãã«å®è¡ã®æµã
scheduler ãæ¬¡ã®å®è¡ããã¹ã¬ãããæ±ºãã
ããã»ã¹ãéžæããã
ã·ã¹ãã ã³ãŒã«
handler ã«ãã
handler ãã scheduler ã«ãã
ãããã
ããã»ã¹ïŒå³å¯ã«ã¯ã¹ã¬ããïŒãã«ãŒãã«æ©èœãåŒã³åºã
C ã®é¢æ°ãšã«ãŒãã«é¢æ°ã®èŠãç®ã¯ããŸãå€ãããªã
printf ãš fork ãæ¯èŒãããšããã
ãã㯠libc ãã©ãããŒã«ãªã£ãŠãããã
ãªã®ã§ C ã®ããã°ã©ã ã§ã©ã€ãã©ãªã¡ãœããåŒã¶ã®ãšã·ã¹ãã ã³ãŒã«ãåŒã¶ã®ã¯ããŸãå€ãããªã
éã³ã³ãã€ã«ããã `callq` ã§åŒã°ããŠãã
fork çŸåšã®ããã»ã¹ã®ã³ããŒã§ããæ°ããããã»ã¹ãäœæãã execve çŸåšã®ããã»ã¹å
ã§å®è¡ããŠããããã°ã©ã ãæå®ããããã°ã©ã ãšçœ®ãæãå®è¡éå§ãã wait fork ã§äœæããåããã»ã¹ã®çµäºãåŸ
〠exit ããã»ã¹ã®çµäº clone ã¹ã¬ããã®äœæ
strace: Process 15768 attached
read ( 0, ^Cstrace: Process 15768 detached
â read ã·ã¹ãã ã³ãŒã«ã§ãšãŸã£ãŠã
$ sudo cat /proc/15768/stack
[<ffffffffba466c10>] n_tty_read+0x2b0/0xd10 <- ã¿ãŒããã«ãããªã«ããèªãããšããŠããã®ãããã
[ < ffffffffba462330>] tty_read+0x90/0x100
[<ffffffffba248d8f>] vfs_read+0x9f/0x170
[<ffffffffba249c4f>] SyS_read+0x7f/0xf0
[<ffffffffba78bede>] system_call_fastpath+0x25/0x2a
[<ffffffffffffffff>] 0xffffffffffffffff
ïŒãã£ã¡ã®ã»ããã¢ããªã±ãŒã·ã§ã³ããïŒ
1 ãŠãŒã¶ã³ãã³ã 2 ã·ã¹ãã ã³ãŒã«
åŒæ°ã® 0 çªç®ã«ã³ãã³ããå
¥ãããšãå©çš
/proc/hoge/exe ãèŠããšå®è¡ããã³ãã³ããã·ã³ããªãã¯ãªã³ã¯ã§ç¢ºèªã§ãã
å®è¡ããŠããã³ãã³ãã® syscall ã®å
容ãèŠãããšãã§ãã
strace ls
â-eâ
衚瀺ããã·ã¹ãã ã³ãŒã«ãçµã蟌ã
ããã¯ãªããŒã¯ã§é€å€ãã§ãã
â-tâ
â-pâ
ãã§ã«ãããã€ãèŠã
â-kâ
ã¹ã¿ãã¯ãã¬ãŒã¹ã衚瀺ãã
ã·ã¹ãã ã³ãŒã«ã® munmap ãã©ãåŒã°ããŠããããããã
munmap(0x7f5d3b94a000, 4096 ) = 0
> /usr/lib64/libc-2.17.so(munmap+0x7 ) [0xf8e27]
> /usr/lib64/libc-2.17.so(_IO_setb+0x61 ) [0x7cd71]
> /usr/lib64/libc-2.17.so(_IO_file_close_it@@GLIBC_2.2.5+0xaf ) [0x7b14f]
> /usr/lib64/libc-2.17.so(fclose@@GLIBC_2.2.5+0x1b7 ) [0x6e1f7]
> /usr/bin/ls(close_stream+0x19 ) [0x412399]
> /usr/bin/ls(close_stdout+0x14 ) [0x40a994]
> /usr/lib64/libc-2.17.so(__run_exit_handlers+0xd8 ) [0x39ce8]
> /usr/lib64/libc-2.17.so(exit+0x16 ) [0x39d36]
> /usr/bin/ls(main+0x12db ) [0x403beb]
> /usr/lib64/libc-2.17.so(__libc_start_main+0xf4 ) [0x22554]
> /usr/bin/ls(_start+0x28 ) [0x40434c]
CPU äžã§åäœãããããã»ã¹ãã¹ã¬ãããå€ããããšãã³ã³ããã¹ãã¹ã€ãããšåŒã¶
vmstat ã® cs æ¬ãã³ã³ããã¹ãã¹ã€ããã®åæ°
ã¡ãªã¿ã« vmstat ã® 1 è¡ç®ã¯èµ·åããŠããã®å¹³å
in ãã¢ãŒãåæ¿ã®å€
åäžããã»ã¹å
ã®åãæ¿ã=>ã³ã¹ããäœã
ããã»ã¹ããŸããå Žå=>ã³ã¹ããé«ã
ã¢ãŒãåãæ¿ãã¯ãŠãŒã¶ã©ã³ããšã«ãŒãã«ã®åãæ¿ã
tick ã¯ããããã¿ã€ããŒã§ããããã°ãããšã¹ã±ãžã¥ãŒã©ã¯ã¹ã¬ãããåãæ¿ãã
äžå®æéã§ tick ãåŒã°ãã
IO wait ã«ãªã£ãã tick ããªããŠãã¹ã¬ãããåãæ¿ãã
R å®è¡ããŠãããå®è¡åŸ
ã¡ D å²ã蟌ã¿äžå¯ãªã€ãã³ãåŸ
ã¡ïŒ disk åŸ
ã¡ãªã©ïŒ S å²ã蟌ã¿å¯èœãªã€ãã³ãåŸ
ã¡ T ã·ã°ãã«ããããã¬ã§äžæåæ¢äž Z å®è¡ã¯çµäºïŒèŠªããã»ã¹ãžæž¡ãçµäºã¹ããŒã¿ã¹ãç¶æïŒ X çµäº
load average = run queue ã®å¹³åé·
top ã uptime ã§èŠãããšãã§ãã
å·Šãã 1 åã5åã15 å
äŸãã° load ave.ã 2 ãªãåžžã« 2 ã€ã® CPU ã皌åããŠããããšã瀺ããŠãã
18:02:25 up 323 days, 7:22, 1 user, load average: 0.06, 0.03, 0.05
top - 18:07:41 up 323 days, 7:27, 1 user, load average: 0.04, 0.03, 0.05
numactlã taskset ã³ãã³ããªã©ã§èšå®ã§ãã
systemd ã§ããã®ãå®çšç
/proc/<pid>/status ãèŠããšããã
Cgroups ãšããã®ããã
grep Cpus_allow /proc/{pid}/status
root 13 0.0 0.0 0 0 ? S 2018 1:41 [migration/1]
nice
sched_yield
CPU å²åœãäžèŠã«ãªã£ãã®ã§ä»ã®ããã»ã¹ã«ã¹ã±ãžã¥ãŒã«ããŠãããšã¹ã±ãžã¥ãŒã©ã«éç¥ãã
äœãããã«ã¹ã±ãžã¥ãŒã©åŒã³åºãã«ãªãã®ã§æå°ã®ã·ã¹ãã ã³ãŒã«ãšããã
ãã¡ã€ã«ã·ã¹ãã å
ã§ãã¡ã€ã«ã瀺ãèµ·ç¹ã«ãªãããŒã¿ãä¿æ
inode ããåããã°ããŒã¿ã«å°éããããšãã§ãã
ãµã€ãºã䜿çšãããã¯æ°ããªã³ã¯æ°ã®ã«ãŠã³ããã¢ã¯ã»ã¹æš©éã UIDã GID ãªã©ã®ã¡ã¿ããŒã¿
衚çŸã¯ãã¡ã€ã«ã·ã¹ãã ã«ãã£ãŠéã
stat ã³ãã³ãã§ã¿ãããšãã§ãã
Size: 674 Blocks: 8 IO Block: 4096 regular file
Device: fc01h/64513d Inode: 13017 Links: 1
Access: (0644/-rw-r--r--) Uid: (111300/ me) Gid: ( 100/ users)
Access: 2019-09-25 10:31:13.024134209 +0900
Modify: 2019-09-25 10:31:13.024134209 +0900
Change: 2019-09-25 10:31:13.024134209 +0900
ls -i ã§ inode ãšãã¡ã€ã«åã衚瀺ã§ãã
rm ã³ãã³ãã§ã¯ unlink ãããŠããã ã
ã ãããã¡ã€ã«ãµã€ãºã倧ãããã€ã rm ããŠãå®è¡æéã¯ããŸãå€ãããªã
link ã 0 ã«ãªã£ããéæŸãããã¯ã«ãŒãã«æ¬¡ç¬¬
unlinkat(AT_FDCWD, " test " , 0 ) = 0
ããã»ã¹ããšã«ãã¡ã€ã«ãã£ã¹ã¯ãªãã¿ããŒãã«ãšããçªå·ãšãã¡ã€ã«ã®å¯Ÿå¿è¡šãäœããã
ããã»ã¹éã§ãã¡ã€ã«ãã£ã¹ã¯ãªãã¿ããŒãã«ã¯å¥
ãã¡ã€ã«ãã£ã¹ã¯ãªãã¿ã¯æ ã¿ãããªãã
open ã·ã¹ãã ã³ãŒã«ããããš 0 çªã®æ ãã€ãã£ãŠãã ããã£ãŠãã
äœäººãåãæ¬ãèªãã§ãããšãã¡ã€ã«ãã£ã¹ã¯ãªãã¿ïŒæ ïŒããããšäŸ¿å©
lsof ã§ç¢ºèªã§ãã
0u ã¿ãããªã®ããã¡ã€ã«ãã£ã¹ã¯ãªãã¿ã®ã¹ããã
136,0 ã stat ã§è¡šç€ºããã Device ã®ãšå¯Ÿå¿ããŠãã
ãã¡ã€ã«åã®å·Šé£ã inode çªå·ã瀺ããŠã
bash 31451 me 0u CHR 136,0 0t0 3 /dev/pts/0
bash 31451 me 1u CHR 136,0 0t0 3 /dev/pts/0
bash 31451 me 2u CHR 136,0 0t0 3 /dev/pts/0
ls -l /proc/<pid>/fd ããããšãã¡ã€ã«ãã£ã¹ã¯ãªãã¿ãšãã®ãªã³ã¯ãèŠãããšãã§ãã
cat /proc/<pid>/fd/1 ãšããããšãã®ããã»ã¹ã®ãã¡ã€ã«ãã£ã¹ã¯ãªãã¿ã®çªå·ã®å
容ãèŠãã
ãããã¯ããã€ã¹èªäœããã¡ã€ã«ãã£ã¹ã¯ãªãã¿ãååŸã㊠write/read ã§ãã
ããŒãã£ã·ã§ã³ãåããšããšã
ããŒãã£ã·ã§ã³ãåãã·ã¹ãã ã³ãŒã«ã¯ãªã
cat ã«ã€ããŠç¥ããªããšã
$ cat <- å®è¡ãããšæ¢ãŸã£ãŠããçšã«èŠãã
read ( 0, <- readããããšããŠæ¢ãŸã£ãŠããã®ãèŠãã
é垞㯠BufferedIO
ã«ãŒãã«ã® Page Cache ãéã«å
¥ã
ããã»ã¹ -> PageCache -> ãã£ã¹ã¯
DirectI/O
çŽæ¥ã¢ããªã±ãŒã·ã§ã³ã®ãããã¡ããããã¯ããã€ã¹ã«æžã蟌ã
ç¢ºèªæ¹æ³
ããŒããŠã§ã¢ã®ã¢ã¯ã»ã©ã¬ãŒã·ã§ã³
/dev/kvm ãéããŠè¡ã
iocontrol ã·ã¹ãã ã³ãŒã«ã§ãã
ããŒãžãã£ãã·ã¥ã«ã¯ 2 çš®é¡ãã
ããŒã¿ã®å€æŽããã£ã¹ã¯ã«åæ ãããŠããïŒ cleanïŒ
ããŒã¿ã®å€æŽããã£ã¹ã¯ã«åæ ãããŠããªãïŒ dirtyïŒ
æéãçµã€ãšå€æŽã®ãã£ããã£ãã·ã¥ããã£ã¹ã¯ã«ãã©ãã·ã¥ãã
æé㯠5 ç§ïŒ RHEL7ïŒ
dirty ããã¡ããã¡ãå€ããšæéãåŸ
ããã«ãã©ãã·ã¥ãã
ãã©ãã·ã¥ã¯ io request queue ã«ããã
ãããã¯ããã€ã¹ããšïŒ1æ¬ïŒ
[/dev/sda] <- [hoge ã«æžããŠ] <- [huga ã«æžããŠ]âŠ
è¿ä»£ã¯ CPU ãå¢ããŠããã®ã§ queue ã«ããããšãã«ã³ã³ããªã¯ãããªãããã« Lock ãã
io elevetor
queue ãããŒãžãããäžŠã³æ¿ãããããŠæ©ãããããšãããã¶ã€ã³
request queue ã dispatch queue ã«å€ããŠå
¥ãã
multi queue
CPU ããšã«ãªã¯ãšã¹ããã¥ãŒãçšæãã
iostat
request queue ãªã©ã®æ§åã確èªã§ãã
å·ŠãçŸåšã® inode æ°
å³ã¯ããŸããã«çšæããããšãã§ãã inode æ°
$ cat /proc/sys/fs/inode-nr