linux

壊して理解する Docker のポータビリティ

Docker のポータビリティにはいくつか注意点がある。 コラム - クラウド時代のオープンソース実践活用 | 第43回 「Dockerイメージ」のポータビリティとLinuxカーネルのABI|CTC教育サービス 研修/トレーニング コンテナってなんだろう― 「コンテナ」の概要を…

Docker コンテナのレイヤー構造について

Docker コンテナのレイヤー構造をざっくりと理解する。その過程で Docker のイメージ構造(Image Manifest V 2, Schema 2)もながめる。 概要 About storage drivers によると、Docker は、ユニオンファイルシステムを利用し、複数のレイヤーを重ね合わせるこ…

docker ビルド時のレイヤー上限は 125

docker ビルド時のレイヤー上限は 125 (暫定) という話。終わり。 動作確認 OS は Ubuntu 、docker は 20.10.2 を利用する。 # docker --version Docker version 20.10.2, build 20.10.2-0ubuntu1~20.04.2 以下のようなファイルを用意してイメージをビルドす…

containerd のイメージ取得はどのように動作するか?

次のコマンドがどのように動作するかを調査する。 # crictl pull alpine Image is up to date for sha256:6dbb9cc54074106d46d4ccb330f2a40a682d49dda5f4844962b7dce9fe44aaec # crictl images IMAGE TAG IMAGE ID SIZE docker.io/library/alpine latest 6db…

containerd をデバッグする手順のメモ

containerd はコンテナランタイムのひとつ。CRI に準拠しており、Kubernetes のコンテナランタイムとして利用できる。 仕事で containerd の調査ができそうな気配があるので(あるかな?)、containerd を動作確認しつつ調査できるようにデバッグ環境を整える。…

よくわかる man の読み方

man の man を読んでください。以上。

nmstate 宣言的なネットワーク管理

この記事は Linux Advent Calendar 2020 の 12 日目です。RHEL 8.2 で Tech Preview として紹介されていた nmstate を軽く調査しました。 検証環境 CentOS 8 と nmstate-0.2.10 を利用する。 # cat /etc/redhat-release CentOS Linux release 8.2.2004 (Core…

NetworkManager の仕組み

Linuxその2 Advent Calendar 2020 の 9 日目です。 この記事は、普段ググりながら適当に使っている NetworkManager について、どういう仕組みなんだっけ?を調べなおすものです。 検証環境 CentOS 8 を利用する。 # cat /etc/redhat-release CentOS Linux re…

TCP/UDP のスループットと RTT の関係性をざっくり理解する

次のような環境を用意し、TCP/UDP のスループットと RTT の関係性を検証する。 検証結果 次の検証結果から、TCP のスループットは RTT が増えると低下することがわかる。なお、これは CUBIC における検証結果なので、輻輳制御アルゴリズムが異なると厳密には…

ファイルがディスクに書き込まれるまで

ファイルがディスクに書き込まれるまでの道のりをまとめた。 stdio buffer バッファリングのモード 性能 バッファサイズのデフォルトについて 注意点 ページキャッシュ 性能 RAID コントローラキャッシュ ディスクキャッシュ 最後に stdio buffer write(2) …

Linux ポート番号と種類

ウェルノウンポートとかエフェメラルポートとかの単語は IPA の NW を勉強したときの知識としては知っているものの、正直よくわからん状態だったので調べました。 ポート番号の定義 ポート番号とその利用用途は IANA が管理している。Internet Assigned Numb…

Linux Tracepoint とは何か?

Tracepoint とは何か? カーネルに埋め込まれたイベントに処理を追加する仕組み。 disabled のときはハンドラが実行されない。 enabledのときはハンドラが実行される。 分岐処理のコストが余分にかかるが、アセンブリレベルで最適化されている。 すでにカー…

taskset と cgroup は何が違うのか

taskset と cgroupは、あるプロセスが利用可能な CPU コアを制限できる技術。どんな違いがあるのかを調べた。なお、本記事の cgroup は cgroup v1 のこと。 taskset は sched_setaffinity システムコールを利用したコマンドラインツール。sched_setaffinity …

SYSCALL_DEFINE マクロは何をしてるのか

はじめに SYSCALL_DEFINE はシステムコールを定義するためのマクロ。引数の数によって SYSCALL_DEFINE0 から SYSCALL_DEFINE6 まであり、例えば次のように利用される。変数の型と名前が引数に別々に取られて独特な形で面食らうが、関数定義とは異なるので仕…

Uprobes の概要と使い方

Uprobes とは 以前に Kprobes を調べたので(Kprobes の概要と使い方 - SIerだけど技術やりたいブログ)、そのユーザ空間版である Uprobes について調べた。まあ大体一緒。 Uprobes はユーザ空間のアプリケーションに処理を差し込むための仕組み。自身が開発し…

Kprobes の概要と使い方

Kprobes とは Kprobes は実行中のカーネルに処理を差し込むための仕組み。おもにカーネルのデバッグやパフォーマンス解析に利用される。カーネル内のデータをいじれるため、テストのために障害注入するという使い方もできる。Kprobes を直接利用することは少…

Linux の挙動を変更する 4 つの方法

Linux カーネルの挙動を変更する次の 4 つの方法について整理する。 名称 概要 設定変更を反映するタイミング カーネルコンフィグ コンパイル時の設定 再ビルド ブートパラメータ カーネル起動時の設定 再起動 モジュールパラメータ モジュールロード時の設…

Linux カーネル ソースコードのマクロを展開する

やりたいこと カーネルのソースコードを読んでいると、まあまあな頻度でマクロに遭遇する。 core_param(pause_on_oops, pause_on_oops, int, 0644); 簡単なマクロならそのまま読めるが、マクロの定義中にマクロが使われてたりする。 #define core_param(name…

Linux プロセス管理を理解したい

プロセスについて学習したことをまとめました。間違いあればコメントください。 検証環境 プロセスとは プロセス空間 プログラムはどのように動作するか タイムシェアリング どうやって実行するプロセスを切り替えるか? いつプロセスを切り替えるか? どの…

認定Kubernetes管理者(CKA)に ほぼ満点 で合格しました

認定Kubernetes管理者 (CKA) に ほぼ満点 で合格しました。 スコアは 98% でした。これはつまり、 Kubernetes 完全に理解した(入門した) という事ですね? この記事は 認定Kubernetes管理者(CKA) の概要と勉強方法を共有します。 認定Kubernetes管理者(CKA) …

iptables で [unsupported revision] が出る

問題 kube-proxy が設定したルールを iptables コマンドで表示すると、[unsupported revision] になる。 ]# iptables -nL -t nat Chain KUBE-SEP-AAJZQ5YHVGUCPI77 (1 references) target prot opt source destination KUBE-MARK-MASQ all -- 10.200.192.87 …

Kubernetes ログを読んで理解する kube-proxy の仕組み

kube-proxy は各ノードで動作するネットワークプロキシ。Service の仕組みの一部(ClusterIP や NodePort など)を実現し、クラスタ内部または外部から Pod にアクセスできるように制御する。 参考 Kubernetes Components 参考 Kubernetes Service Service は …

linux /proc/kallsyms をコードから理解する

検証環境 CentOS 8.1 を利用する。 ]# cat /etc/redhat-release CentOS Linux release 8.1.1911 (Core) ]# uname -a Linux localhost.localdomain 4.18.0-147.3.1.el8_1.x86_64 #1 SMP Fri Jan 3 23:55:26 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux /proc/ka…

Linux メモリ管理 徹底入門(カーネル編)

メモリ管理は、Linux カーネルのコアな機能です。この機能を理解することで、サーバの統計情報の意味がわかるようになったり、トラブル解析ができるようになります。 この記事では、Linux カーネルのメモリ管理について勉強したことを基礎からまとめます。 …

Linux debuginfo って何?

debuginfo は、デバッグ情報が入っているリポジトリ。 検証環境 デバッグ情報とは何か 補足 デバッグ情報の付与のしかた デバッグ情報の効果を確かめる デバッグ情報の中身を見てみる デバッグ情報の問題点 debuginfo gdb での使い方 gdb はどのようにデバッ…

Linux コマンドの多言語対応 ~ tar の「空のアーカイブ作成はご容赦願います」の謎に迫る~

多くの Linux コマンドは、環境変数によってメッセージを切り替えます。 参考 【Linux入門】ローカライゼーションのためのロケール情報設定方法 ]# LANG=C tar -c tar: Cowardly refusing to create an empty archive Try 'tar --help' or 'tar --usage' for…

Linux yum を基礎から理解する

普段なんとなく yum を使っていませんか?私はそうです。 ということで、 yum を基礎からおさらいしました。 検証環境 yum の基礎 パッケージ パッケージの中身の確認 どのように依存関係を解決するか? リポジトリにアクセスする マイナーバージョン リポジ…

Linux システムコール 徹底入門

Linux システムコールについて調べたことをまとめる。システムコールの仕組みを理解すると、 OS とアプリケーションがどのように連携して動いているのかを理解できるようになります。 システムコールは CPU に依存する処理が多いため、 x86_64 に絞ります。 …

Linux procfs 徹底入門

これは Linux Advent Calendar 2019の 15 日目の記事です。procfs について勉強したことをまとめます。 検証環境 procfs とは 代表的なファイル システム全体 /proc/cpuinfo /proc/meminfo /proc/cmdline /proc/filesystems /proc/modules /proc/mounts /pro…

Linux メモリ管理 徹底入門(プロセス編)

Linux カーネルのメモリ管理方法について、勉強したことをまとめる。プロセス編。 カーネル編はこちら。 www.kimullaa.com メモリ管理の特徴 連続したメモリ領域 プロセスごとに独立したアドレス空間 実行例 メモリの効率的な割り当て デマンドページング ス…