※当サイトの記事には、広告・プロモーションが含まれます。

Docker Engineで利用されているbbolt(BoltDB のフォーク)は破損し易いらしいが...

gigazine.net

クラウドコンピューティング企業はAIの開発や運用に役立つGPUクラスタを製品として展開しています。そんなクラウドGPUの安定性について、これまでに400万基以上のGPUインスタンスを管理してきたModalが解説しています。

2万基のGPUを同時管理するクラウド企業がGPUクラスタの安定性の低さを解説 - GIGAZINE

Modalは「Amazon Web Services(AWS)」「Google Cloud(GCP)」「Microsoft Azure」「Oracle Cloud Infrastructure(OCI)」といった大手クラウド企業からコンピューティングリソースを調達してGPUクラウドサービスを展開しています。記事作成時点では2万基のGPUを同時に管理しており、過去数年間で管理したGPUの数は400万基を超えています。

2万基のGPUを同時管理するクラウド企業がGPUクラスタの安定性の低さを解説 - GIGAZINE

Modalは「クラウドA」「クラウドB」「クラウドC」「クラウドD」と名前を伏せつつ、各クラウド企業の特徴を以下のように説明しています。

2万基のGPUを同時管理するクラウド企業がGPUクラスタの安定性の低さを解説 - GIGAZINE

クラウドAのインスタンス起動APIは最もシンプルで信頼性が高い。ベアメタルもしくは仮想マシンにリクエストしてHTTP 201が返ってきた場合、99.6%の確率で起動に成功し、起動時間は2~3分と比較的短時間である。
クラウドAのH100で画像生成AIのStable Diffusionを実行した場合、クラウドCやクラウドDと比べてパフォーマンスが50%低くなる。
クラウドCでは2025年の数カ月間にH100が非常に高温になり、90度を超えることもあった。温度が70度後半に達すると処理性能が低下し始める。
クラウドCのH100は他のクラウドより228MiB多くメモリを予約する。このため、ユーザーが使用できるメモリが少なくなる。
クラウドDのA10ではクロック周波数の低下が頻繁に発生する。
クラウドDのアメリカリージョンの1つのA10では修正不可能なECCエラーが頻繁に発生する。
クラウドDはコストパフォーマンスが最も良好。特にベアメタルサーバーは最高である。

2万基のGPUを同時管理するクラウド企業がGPUクラスタの安定性の低さを解説 - GIGAZINE

Metaが発表したLlama3のトレーニングに関するレポートでも「予期せぬ問題の58.7%がGPUに由来するものだった。一方で、CPUに由来する問題は0.5%だった」ということが報告されています。これらの結果をもとに、Modalは「GPUの性能は驚異的ですが、信頼性が足かせとなっています」と結論付けています。

2万基のGPUを同時管理するクラウド企業がGPUクラスタの安定性の低さを解説 - GIGAZINE

⇧ 諸々の「トレードオフ」はあるとは思いますが、「信頼性」が安定しない原因は分からず終いということなんですかね...

「保守・運用」の負担が大きそうですな...

Docker Engineで利用されているbbolt(BoltDB のフォーク)は破損し易いらしいが...

前に、

ts0818.hatenablog.com

⇧ 上記の記事の時に「Docker Engine」の「バージョン」について、

  1. アップグレード
  2. ダウングレード

の正確な「情報」が見当たらない話をしたのだが、「1. アップグレード」については、

docs.docker.com

⇧ 記載されており、「リポジトリ」で「Docker」の「パッケージ」を指定して「インストール」すれば良いとあり、特に注意事項とかも無い。

なのだが、「Docker」は「破壊的変更」の頻度が高いせいなのか分からないが、「バージョン」を変更すると普通に動作しなくなることが多い...

ネットの情報を漁っていたところ、

github.com

⇧ 上記の「issue」によると、「停電」による「接続断」の影響とかも受けるらしい...

で、「Docker Engine」では「bbolt(BoltDB のフォーク)」なるものが利用されているらしく、破損し易いらしい...

 

■Dockerの情報を確認

[vagrant@zabbix-server ~]$ sudo docker info
Client: Docker Engine - Community
 Version:    29.1.3
 Context:    default
 Debug Mode: false
 Plugins:
  buildx: Docker Buildx (Docker Inc.)
    Version:  v0.30.1
    Path:     /usr/libexec/docker/cli-plugins/docker-buildx
  compose: Docker Compose (Docker Inc.)
    Version:  v5.0.1
    Path:     /usr/libexec/docker/cli-plugins/docker-compose

Server:
 Containers: 1
  Running: 0
  Paused: 0
  Stopped: 1
 Images: 4
 Server Version: 29.1.3
 Storage Driver: overlayfs
  driver-type: io.containerd.snapshotter.v1
 Logging Driver: json-file
 Cgroup Driver: cgroupfs
 Cgroup Version: 1
 Plugins:
  Volume: local
  Network: bridge host ipvlan macvlan null overlay
  Log: awslogs fluentd gcplogs gelf journald json-file local splunk syslog
 CDI spec directories:
  /etc/cdi
  /var/run/cdi
 Swarm: inactive
 Runtimes: io.containerd.runc.v2 runc
 Default Runtime: runc
 Init Binary: docker-init
 containerd version: dea7da592f5d1d2b7755e3a161be07f43fad8f75
 runc version: v1.3.4-0-gd6d73eb8
 init version: de40ad0
 Security Options:
  seccomp
   Profile: builtin
 Kernel Version: 4.18.0-553.89.1.el8_10.x86_64
 Operating System: Rocky Linux 8.10 (Green Obsidian)
 OSType: linux
 Architecture: x86_64
 CPUs: 2
 Total Memory: 1.737GiB
 Name: zabbix-server.example.jp
 ID: adc89462-1342-4bb9-873a-8dfe7e0058e5
 Docker Root Dir: /var/lib/docker
 Debug Mode: false
 Experimental: false
 Insecure Registries:
  ::1/128
  127.0.0.0/8
 Live Restore Enabled: false
 Firewall Backend: iptables+firewalld

WARNING: Support for cgroup v1 is deprecated and planned to be removed by no later than May 2029 (https://github.com/moby/moby/issues/51111)

 

で、「Docker」が「iptables」に勝手に設定を追加してくれてしまっているらしいので、一応、確認。

docs.redhat.com

qiita.com

tex2e.github.io

⇧ 上記サイト様によりますと、2種類の確認コマンドがある模様。

Google Gemini」に質問してみたところ、以下のような回答が返ってきた。

 

 

■Dockerが勝手にiptablesに設定を追加してるので確認

[vagrant@zabbix-server ~]$ sudo iptables-save
# Generated by iptables-save v1.8.5 on Sun Jan 25 23:01:04 2026
*filter
:INPUT ACCEPT [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
:DOCKER - [0:0]
:DOCKER-FORWARD - [0:0]
:DOCKER-BRIDGE - [0:0]
:DOCKER-CT - [0:0]
:DOCKER-INTERNAL - [0:0]
:DOCKER-USER - [0:0]
-A FORWARD -j DOCKER-USER
-A FORWARD -j DOCKER-FORWARD
-A DOCKER ! -i docker0 -o docker0 -j DROP
-A DOCKER-FORWARD -j DOCKER-CT
-A DOCKER-FORWARD -j DOCKER-INTERNAL
-A DOCKER-FORWARD -j DOCKER-BRIDGE
-A DOCKER-FORWARD -i docker0 -j ACCEPT
-A DOCKER-BRIDGE -o docker0 -j DOCKER
-A DOCKER-CT -o docker0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
COMMIT
# Completed on Sun Jan 25 23:01:04 2026
# Generated by iptables-save v1.8.5 on Sun Jan 25 23:01:04 2026
*security
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
COMMIT
# Completed on Sun Jan 25 23:01:04 2026
# Generated by iptables-save v1.8.5 on Sun Jan 25 23:01:04 2026
*raw
:PREROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
COMMIT
# Completed on Sun Jan 25 23:01:04 2026
# Generated by iptables-save v1.8.5 on Sun Jan 25 23:01:04 2026
*mangle
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
COMMIT
# Completed on Sun Jan 25 23:01:04 2026
# Generated by iptables-save v1.8.5 on Sun Jan 25 23:01:04 2026
*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:DOCKER - [0:0]
-A PREROUTING -m addrtype --dst-type LOCAL -j DOCKER
-A POSTROUTING -s 172.17.0.0/16 ! -o docker0 -j MASQUERADE
-A OUTPUT ! -d 127.0.0.0/8 -m addrtype --dst-type LOCAL -j DOCKER
COMMIT
# Completed on Sun Jan 25 23:01:04 2026
[vagrant@zabbix-server ~]$

 

■Dockerが勝手にiptablesに設定を追加してるので確認

[vagrant@zabbix-server ~]$ sudo iptables -nL --line-numbers
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination

Chain FORWARD (policy DROP)
num  target     prot opt source               destination
1    DOCKER-USER  all  --  0.0.0.0/0            0.0.0.0/0
2    DOCKER-FORWARD  all  --  0.0.0.0/0            0.0.0.0/0

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination

Chain DOCKER (1 references)
num  target     prot opt source               destination
1    DROP       all  --  0.0.0.0/0            0.0.0.0/0

Chain DOCKER-FORWARD (1 references)
num  target     prot opt source               destination
1    DOCKER-CT  all  --  0.0.0.0/0            0.0.0.0/0
2    DOCKER-INTERNAL  all  --  0.0.0.0/0            0.0.0.0/0
3    DOCKER-BRIDGE  all  --  0.0.0.0/0            0.0.0.0/0
4    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0

Chain DOCKER-BRIDGE (1 references)
num  target     prot opt source               destination
1    DOCKER     all  --  0.0.0.0/0            0.0.0.0/0

Chain DOCKER-CT (1 references)
num  target     prot opt source               destination
1    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0            ctstate RELATED,ESTABLISHED

Chain DOCKER-INTERNAL (1 references)
num  target     prot opt source               destination

Chain DOCKER-USER (1 references)
num  target     prot opt source               destination

 

■Docker Engineが利用しているであろうbbolt(BoltDB のフォーク)

[vagrant@zabbix-server ~]$ sudo find /var/lib/docker/ -type f -name "*.db" -exec ls -la {} \;
-rw-------. 1 root root 32768 Jan 25 10:39 /var/lib/docker/volumes/metadata.db
-rw-r--r--. 1 root root 65536 Jan 25 19:39 /var/lib/docker/network/files/local-kv.db
-rw-------. 1 root root 131072 Jan  3 18:31 /var/lib/docker/buildkit/history_c8d.db
-rw-------. 1 root root 131072 Jan 25 19:39 /var/lib/docker/buildkit/cache.db
-rw-------. 1 root root 131072 Jan  3 18:32 /var/lib/docker/buildkit/containerd-overlayfs/metadata_v2.db
[vagrant@zabbix-server ~]$ sudo find /var/lib/docker/ -type f -name "*.db" -exec sh -c '
>   ls -la "$1"
>   xxd -l 4 "$1"
>   echo "----"
> ' sh {} \;
-rw-------. 1 root root 32768 Jan 25 10:39 /var/lib/docker/volumes/metadata.db
00000000: 0000 0000                                ....
----
-rw-r--r--. 1 root root 65536 Jan 25 19:39 /var/lib/docker/network/files/local-kv.db
00000000: 0000 0000                                ....
----
-rw-------. 1 root root 131072 Jan  3 18:31 /var/lib/docker/buildkit/history_c8d.db
00000000: 0000 0000                                ....
----
-rw-------. 1 root root 131072 Jan 25 19:39 /var/lib/docker/buildkit/cache.db
00000000: 0000 0000                                ....
----
-rw-------. 1 root root 131072 Jan  3 18:32 /var/lib/docker/buildkit/containerd-overlayfs/metadata_v2.db
00000000: 0000 0000                                ....
----
[vagrant@zabbix-server ~]$ sudo strings /var/lib/docker/volumes/metadata.db | head
volumes
python{"Name":"python","Driver":"local","Labels":{"dev.container.volume":"true"},"Options":null}vscode{"Name":"vscode","Driver":"local","Labels":null,"Options":null}
[vagrant@zabbix-server ~]$ sudo xxd -s 4096 -l 16 /var/lib/docker/volumes/metadata.db
00001000: 0100 0000 0000 0000 0400 0000 0000 0000  ................
[vagrant@zabbix-server ~]$ sudo xxd -s 4096 -l 16 /var/lib/docker/network/files/local-kv.db
b
00001000: 0100 0000 0000 0000 0400 0000 0000 0000  ................
[vagrant@zabbix-server ~]$ sudo xxd -s 4096 -l 16 /var/lib/docker/buildkit/cache.db
00001000: 0100 0000 0000 0000 0400 0000 0000 0000  ................
[vagrant@zabbix-server ~]$

 

■その他のDocker Engineに関わってそうな情報

[vagrant@zabbix-server ~]$ sudo ls -la /usr/lib/systemd/system | grep -e "container" -e "docker"
-rw-r--r--.  1 root root  1242 Dec 19 03:49 containerd.service
-rw-r--r--.  1 root root  1263 Nov  4 17:24 container-getty@.service
-rw-r--r--.  1 root root  1268 Dec 12 23:48 docker.service
-rw-r--r--.  1 root root   295 Dec 12 23:48 docker.socket
    
[vagrant@zabbix-server ~]$ sudo ls -la /var/run/ | grep docker
drwx------.  4 root           root            100 Jan 25 19:39 docker
-rw-r--r--.  1 root           root              4 Jan 25 10:39 docker.pid
srw-rw----.  1 root           docker            0 Jan 25 10:39 docker.sock
[vagrant@zabbix-server ~]$ sudo ls -la /var/lib/docker/
total 8
drwx--x---. 11 root root  156 Jan 25 10:39 .
drwxr-xr-x. 47 root root 4096 Jan  3 11:18 ..
drwx--x--x.  5 root root   99 Jan  3 12:33 buildkit
drwx--x---.  3 root root   78 Jan  8 17:20 containers
-rw-------.  1 root root   36 Jan  3 11:08 engine-id
drwxr-x---.  3 root root   19 Jan  3 11:08 network
drwx------.  3 root root   17 Jan  3 11:08 plugins
drwx--x---.  3 root root   23 Jan  3 12:30 rootfs
drwx------.  2 root root    6 Jan 25 10:39 runtimes
drwx------.  2 root root    6 Jan  3 11:08 swarm
drwx------.  2 root root    6 Jan 25 10:39 tmp
drwx-----x.  4 root root   78 Jan 25 10:39 volumes

[vagrant@zabbix-server ~]$ sudo ls -la /var/lib/containerd
total 8
drwx------. 13 root root 4096 Jan  3 12:30 .
drwxr-xr-x. 47 root root 4096 Jan  3 11:18 ..
drwxr-xr-x.  4 root root   33 Jan 25 10:39 io.containerd.content.v1.content
drwx------.  2 root root   18 Jan  3 11:08 io.containerd.grpc.v1.introspection
drwx--x--x.  2 root root   21 Jan  3 11:08 io.containerd.metadata.v1.bolt
drwx--x--x.  3 root root   18 Jan  3 12:30 io.containerd.runtime.v2.task
drwx------.  2 root root    6 Jan  3 11:08 io.containerd.sandbox.controller.v1.shim
drwx------.  2 root root    6 Jan  3 11:08 io.containerd.snapshotter.v1.blockfile
drwx------.  2 root root    6 Jan  3 11:08 io.containerd.snapshotter.v1.btrfs
drwx------.  2 root root    6 Jan 25 10:39 io.containerd.snapshotter.v1.erofs
drwx------.  3 root root   23 Jan  3 11:08 io.containerd.snapshotter.v1.native
drwx------.  3 root root   42 Jan  3 12:30 io.containerd.snapshotter.v1.overlayfs
drwx------.  2 root root    6 Jan  8 17:01 tmpmounts
[vagrant@zabbix-server ~]$

⇧ まぁ、公式の「ドキュメント」で「bbolt(BoltDB のフォーク)」を使っているという話がヒットしないのよね...

とりあえず、「Docker Engine」の「設計」の「思想」が分からないので何とも言えないのだが、「破壊的変更」の頻度が高いので「データベース」の「データ」の互換性があるのかどうかが分からない...

そもそも、「正常」でない状態の/var/lib/docker/network/files/local-kv.dbが分からないので、破損しているのかどうかを判断する方法が皆目見当が付かない...

つまり、「Docker Engine」を構成するファイル群の、

  • 何が?
  • どこに?
  • どのように?

影響するのかが分からないのよね...

 

ちなみに、「Docker Engine」の「構成概要図」について、

softwareengineering.stackexchange.com

⇧ 上記のようなものが公式の「ドキュメント」から削除されているっぽいのよね...

日本語版の古い「ドキュメント」だと、残っているっぽいが...

docs.docker.jp

Docker Engine とは何ですか?

Docker Engine は3つの主なコンポーネント(構成要素)を持つクライアント・サーバ型アプリケーションです。

  • サーバはデーモン・プロセスと呼ばれる長期間実行するプログラムの種類
  • インターフェースを規定する REST API は、プログラムがデーモンと通信に使うものであり、何をするか指示
  • コマンドライン・インターフェース(CLI)クライアント

Docker 概要 — Docker-docs-ja 1.13.RC ドキュメント

 

まぁ、「Docker」の仕組みが「ブラックボックス」であることには変わりがないのだけど...

ちなみに、

docs.docker.com

⇧ 上記の「トラブルシューティング」の「情報」も少な過ぎて全く役に立たないのよね...

 

毎度モヤモヤ感が半端ない…

今回はこのへんで。