玩式草子─ソフトウェアとたわむれる日々

第87回 Linuxの成長過程をふりかえる[その5]

この記事を読むのに必要な時間:およそ 4 分

前々回に引き続き,今回はlinux-2.3シリーズの成長過程を検討します。

linux-2.2を元にした開発版シリーズであるlinux-2.3は,1999年5月に公開されたlinux-2.3.0から始まり,2000年3月のlinux-2.3.51でいったん開発は終了しました。

2年強の開発期間がかかった2.1シリーズに比べると,2.3シリーズの開発期間は1年弱と短かかったものの,2.3.51の後にデバッグやテスト用に公開された2.3.99-preX2.4.0-testXXの期間が9ヵ月近く続き,最終的に次の安定版であるlinux-2.4.0が公開されたのは,2001年1月4日でした。

カーネルサイズの変遷グラフからlinux-2.2と2.3の部分を取り出して描くと,図1のようになります。

図1 linux-2.2.xとlinux-2.3.xのサイズの変遷

図1 linux-2.2.xとlinux-2.3.xのサイズの変遷

この結果を見ると,linux-2.2シリーズは「安定版」として公開されたものの,かなりの期間2.3シリーズと併走するようにサイズが増加し続け,ソースコードの増加が収まるのは次の安定版である2.4シリーズが公開されてからです。

回を改めて紹介する予定ですが,2.4シリーズも公開されてからずいぶん長い間サイズが増加し続けており,linux-2.xでは開発版で追加された新機能が安定版に随時反映されていたようです。

linux-1.xでは,80386CPUに依存したコードを全面的に書き改めたり,SMPに対応するためにカーネルの内部構造が大きく変更されるなど,開発版と安定版の間の互換性が低かったのに対し,2.xではそれら大規模な変更が落ちついてきた結果,開発版の新機能を安定版に取り込むことが可能になりました。

ディレクトリサイズの変化

それではlinux-2.3シリーズでどのような機能が追加されてきたのか,ディレクトリサイズの変化から検討してみることにします。今回チェックしたのは2.3.02.3.182.3.332.3.51の4つのバージョンです。この4バージョンについてサイズの大きい6つのディレクトリを比較したのが図2です。

図2 linux-2.3シリーズのディレクトリサイズの変遷(1)

図2 linux-2.3シリーズのディレクトリサイズの変遷(1)

図2を見るとarchdriversディレクトリはlinux-2.3シリーズ全体に渡ってかなり速いペースで増加し続けており,この期間中も積極的に新しいCPUへの対応が行われていたことがわかります。

具体的にどのようなCPUに対応してきたのかをarchディレクトリのサイズから調べると,下表のようになりました。なお,表中の数字の単位はKB(キロバイト)です。

表1 linux-2.3シリーズの対応CPUとarchディレクトリのサイズ

2.3.02.3.182.3.332.3.51
alpha968928936996
arm584110012001200
i3861200120013001300
ia64 - - - 920
m68K2200250025002400
mips948130013001400
mips64 - - - 700
ppc1500200023002400
sh - - 240272
sparc1500150015001300
sparc641600150015001600
total11000120001300015000

この結果を見ると,組込み用に広く使われていたSH系のCPUに2.3シリーズの中ごろで対応し,後期ではIA64MIPS64といった64ビットCPUに対応するなど,種類も用途もさまざまに異なるCPUに貪欲に対応していったことがうかがえます。

実はこの傾向は2.3.51から2.4.0の間でも続き,linux-2.3.99-preXの段階でIBMの汎用機であるS390用のコードが,linux-2.4.0-testXの段階でHPがワークステーション用に開発していたPA-RISC用のコードが,それぞれarchディレクトリにマージされています。

バージョン付けの慣例に従うなら,2.3.99-preXというバージョンは2.3系で追加した新機能を落ちつかせる安定化段階用,2.4.0-testXは2.4.0に向けたRC(Release Candidate)として最終調整用とするものですが,この時期のlinuxはそのような慣習を無視して,「安定版」のリリース直前まで新機能を追加し続けていました。

一方,サイズが小さいディレクトリの変遷を示したのが図3です。これらのディレクトリには,各種CPUやドライバが共通に利用するコードや,カーネルのコアにあたる部分のコードが収められています。

図3 linux-2.3シリーズのディレクトリサイズの変遷(2)

図3 linux-2.3シリーズのディレクトリサイズの変遷(2)

先に見たarchやdriversディレクトリほど急速ではないものの,これらのディレクトリも2.3シリーズ全体に渡って増加しており,機能の追加や改善が続いていたことが見てとれます。たとえばlinux-2.3.0と2.3.51のmmディレクトリを比較してみると,bootmem.c,highmem.c,numa.cの3つのファイルが増えています。

$ diff -u <(ls -1 linux-2.3.0/mm/) <(ls -1 linux-2.3.51/mm/)
--- /dev/fd/63  2016-11-08 08:17:25.882034749 +0900
+++ /dev/fd/62  2016-11-08 08:17:25.882034749 +0900
@@ -1,11 +1,14 @@
 Makefile
+bootmem.c
 filemap.c
+highmem.c
 memory.c
 mlock.c
 mmap.c
 mmap_avl.c
 mprotect.c
 mremap.c
+numa.c
 page_alloc.c
 page_io.c
 slab.c

bootmem.cは起動時に実際に存在する物理メモリを調べて割りあてる機能,highmem.cはx86の32ビットな仮想メモリ管理機能をx86_64アーキテクチャ用に拡張する機能,numa.cはSMPを効率化するNUMA(Non-Uniform Memory Access)アーキテクチャ用のメモリ管理機能を提供します。これらはSMPやマルチアーキテクチャ化の進化に伴ない必要となった機能で,linux-2.3では対応アーキテクチャの増加と共に,それらを支える基盤部分の強化も図られていたことがわかります。

著者プロフィール

こじまみつひろ

Plamo Linuxとりまとめ役。もともとは人類学的にハッカー文化を研究しようとしていたものの,いつの間にかミイラ取りがミイラになってOSSの世界にどっぷりと漬かってしまいました。最近は田舎に隠棲して半農半自営な生活をしながらソフトウェアと戯れています。

URLhttp://www.linet.gr.jp/~kojima/Plamo/index.html

コメント

コメントの記入