Diary/2022-10-16
Linxuのしくみ
積読になってしまいそうなので,ざっと試しながら一通り読了.
Go,Python,Bashスクリプトを使って分かりやすい例をうまく作ってるなあ,と感心させられた.
内容は知っていたような,分かっていなかったような,っていうような感じ.
sarを使ってあれこれ調べるのは面白かった.
Linux上の何かを測定する時にひっぱり出すといい,かな.
- シグナルハンドラ
p.36あたり,シグナルハンドラの話でSIGKILLは挙動を変更できない,を試す.
#!/usr/bin/python3 import signal # try to ignore SIGKILL signal # 1st arg is target signal to assign handler # 2nd arg is signal handler signal.signal(signal.SIGKILL, signal.SIG_IGN) while True: pass
実行すると,
Traceback (most recent call last): File "killignore.py", line 9, in <module> signal.signal(signal.SIGKILL, signal.SIG_IGN) File "/usr/lib/python3.8/signal.py", line 47, in signal handler = _signal.signal(_enum_to_int(signalnum), _enum_to_int(handler)) OSError: [Errno 22] Invalid argument
なるほど.
- スケジューラ
p.55あたり.
sysctl kernel.sched_latency_ns
で,レイテンシターゲットの設定がみえると書いてあるが,
手元の環境(Ubuntu 20.04.5, Linux 5.15.0-48-generic)では見えない.
で調べると,https://forum.endeavouros.com/t/sysctl-output-changed-from-kernel-5-10-to-5-13-why/17097 に解が.
sudo cat /sys/kernel/debug/sched/latency_ns
として 24000000 が見えた.
- メモリ管理システム
p.81 図04-10 の 物理メモリ側は,仮想アドレス空間じゃなくて物理アドレス空間,かな
mmapの例,確保領域のサイズは開始位置がずれる,のか.実行した結果は,たとえば,
7fb031a90000-7fb033e01000 rw-p 00000000 00:00 0 -> 7faff1a90000-7fb033e01000 rw-p 00000000 00:00 0
こんな感じで,計算すると
(/ (- (- #x7fb031a90000 #x7fb033e01000) (- #x7faff1a90000 #x7fb033e01000)) 1024.0 1024.0) => 1024.0
たしかに1GiB増えてる
- デバイスアクセス
p.135あたりのloop device使うあたり,開放はしなくていいのかな??
fallocate -l 1G loopdevice.img sudo losetup -f loopdevice.img losetup -l ... losetup -d /dev/loop0 # loop0だったとして losetup -l rm loopdevice.img