hayashi-ay / booklist

1 stars 0 forks source link

[試して理解]Linuxのしくみ ―実験と図解で学ぶOS、仮想マシン、コンテナの基礎知識【増補改訂版 #6

Closed hayashi-ay closed 1 year ago

hayashi-ay commented 1 year ago

https://www.amazon.co.jp/dp/429713148X

hayashi-ay commented 1 year ago

https://github.com/satoru-takeuchi/linux-in-practice-2nd

hayashi-ay commented 1 year ago

第1章 Linuxの概要

知ったこと

hayashi-ay commented 1 year ago

第2章 プロセス管理(基礎編)

知ったこと

hayashi-ay commented 1 year ago

第3章 プロセススケジューラー

知ったこと

実験

sched-1 sched-2 sched-3

1つの論理CPU上で同時に動かすプロセス数を1, 2, 3と増やしていき、それぞれの場合についてタスクの進捗率と経過時間の2軸のグラフを作成した。 1つの論理CPU上で同時に動かけるプロセスは1つだけということが視覚的にも分かる。tasksetで論理CPU0を使うように指定している。 並列度が2のときと比べて3のときの方が各プロセスのタイムスライスは短くなる。タスクの実行順序が入れ替わったり、緑->黄->緑->青みたいになっているところがある。

kernel.ched_latency_nsパラメータについて手元で試したら設定されていなかった。

$  sysctl kernel.sched_latency_ns
sysctl: cannot stat /proc/sys/kernel/sched_latency_ns: No such file or directory

avg-tat throughput

avg-tat throughput

解釈がよく分からない。Gitpod上で検証していて他のプロセスも動いているため、雑音が多いのかもしれない。タスク的にはメモリアクセスは行わない、整数演算ユニットのみを使うのでSMTの効果はなくむしろ逆効果のはず。

論理CPU数は16でSMT(Simultaneous Multi Threading)が有効になっている。 Gitpod上だと当該ファイルがreadonly file systemにmountされていてSMTをoffにできなかった。

$ grep -c processor /proc/cpuinfo
16
$ cat /sys/devices/system/cpu/smt/control 
on

参考

hayashi-ay commented 1 year ago

第4章 メモリ管理システム

知ったこと

実験

Ubuntuのデフォルトではトランスペアレントヒュージページの設定はmadviseになっている。

$ cat /sys/kernel/mm/transparent_hugepage/enabled 
always [madvise] never
hayashi-ay commented 1 year ago

第5章 プロセス管理(応用編)

知ったこと

hayashi-ay commented 1 year ago

第6章 デバイスアクセス

知ったこと

hayashi-ay commented 1 year ago

第7章 ファイルシステム

知ったこと

実験

$ mount
...
sysfs on /sys type sysfs (ro,nosuid,nodev,noexec,relatime)
...
proc on /proc/sys type proc (ro,relatime)
hayashi-ay commented 1 year ago

第8章 記憶階層

知ったこと

L1キャッシュ32(2^5)K, L2キャッシュ512(2^9)K, L3キャッシュ32768(2^15)K。

各キャッシュの上限を境界として階段状に変化することを期待したがいまいち期待通りにならなかった。特にL1キャッシュの境界についてアクセス速度が下がらなかった。バッファサイズが小さい際にはメモリへのアクセスに対して変数のインクリメントなどの命令のコストが無視できなく、バッファサイズが増えることによりそれらが相対的に小さくなりアクセス速度が向上する効果とL2キャッシュに切り替わることによるアクセス速度の低下が打ち消し合って境界ではっきりと階段上にならなかったのではと推測。

$ cat /sys/devices/system/cpu/cpu0/cache/index1/size # L1キャッシュ
32K
$ cat /sys/devices/system/cpu/cpu0/cache/index2/size #L2キャッシュ
512K
$ cat /sys/devices/system/cpu/cpu0/cache/index3/size #L3キャッシュ
32768K
dd if=/dev/zero of=testfile oflag=sync bs=1G count=1
1+0 records in
1+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 4.89322 s, 219 MB/s
$ dd if=/dev/zero of=testfile  bs=1G count=1
1+0 records in
1+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 1.02759 s, 1.0 GB/s
hayashi-ay commented 1 year ago

第9章 ブロック層

知ったこと

hayashi-ay commented 1 year ago

第10章 仮想化機能

知ったこと

hayashi-ay commented 1 year ago

第11章 コンテナ

知ったこと

hayashi-ay commented 1 year ago

第12章 cgroup

知ったこと

hayashi-ay commented 1 year ago

面白かったです。システムコールを呼んだ後のことはあまり分かっていなかったのですが図も豊富にあり理解が深まりました。