EN JA
SMP(4)
SMP(4) FreeBSD Kernel Interfaces Manual SMP(4)

名称

SMPFreeBSD 対称性 (symmetric) マルチプロセッサカーネルの説明

書式

options SMP

解説

SMP カーネルは、対称性マルチプロセッサのサポートを実装しています。

互換性

マルチプロセッサシステムのサポートは、 FreeBSD 上のすべての Tier-1 アーキテクチャのために存在しています。現在、これは、amd64、i386、ia64 および sparc64 を含んでいます。サポートは、 options SMP を使用することで可能にされます。 SMP が備えられていないマザーボード上で SMP カーネル設定を使用するのは許されています。

I386 注

i386 システムのために、 SMP カーネルは、インテル MP 規格バージョン 1.4 に続くマザーボードをサポートしています。 i386 は、 options SMP に加えて、 device apic を必要とします。 mptable(1) コマンドは、マルチプロセッササポートの状態を見るために使用することができます。

システムによって検出された CPU の数は、読み込み専用の sysctl 変数 hw.ncpu で参照可能です。

FreeBSD は、マルチプロセッサシステム上の特定の CPU を無効にすることができます。 hint.lapic.X.disabled 調整変数を使用して、これを行うことができます、ここで X は、CPU の APIC ID です。この調整変数を 1 に設定すると、対応する CPU を無効にする結果となります。

sched_ule(4) スケジューラは、CPU トポロジ検出を実装して、近代的なマルチコア CPU をよりよく利用するスケジューリングアルゴリズムを調整します。 sysctl 変数 kern.sched.topology_spec は、解析可能な XML 形式で検出された CPU ハードウェアを反映します。トップレベルの XML タグは、個別の CPU グループに関するデータを含む 1 つ以上の <group>タグを囲む、<groups>です。 CPU グループは、通常、単一のマルチコアプロセッサのコアとなることによって、共に "close"となることが検出される CPU を含みます。 <group>タグで利用可能な属性は、CPU グループと "cache-level"の入れ子のレベルに対応し、グループ中の CPU によって共有された CPU キャッシュのレベルに対応する、"level"です。 <group>タグは、<cpu>と <flags>タグを含んでいます。 <cpu>タグは、グループ中の CPU について記述します。その属性は、グループと "mask"中の CPU の数に対応し、グループに属する CPU を意味する 1 に設定された各ビット位置の整数バイナリマスクに対応している、"count"です、 <cpu>タグの内容 (CDATA) は、("mask"属性から、派生する) CPU インデックスのコンマで区切られたリストです。 <flags>タグは、(もしあれば) グループ中の CPU の関係を記述する特別なタグを含んでいます。指定可能なフラグは、現在、ハードウェアマルチスレッド化の様々な実装に対応する、"HTT"と "SMT"です。次の 2 つのクアッドコアプロセッサから成るシステムのための topology_spec 出力の例は、次の通りです:

<groups> 
  <group level="1" cache-level="0"> 
    <cpu count="8" mask="0xff">0, 1, 2, 3, 4, 5, 6, 7</cpu> 
    <flags></flags> 
    <children> 
      <group level="2" cache-level="0"> 
        <cpu count="4" mask="0xf">0, 1, 2, 3</cpu> 
        <flags></flags> 
      </group> 
      <group level="2" cache-level="0"> 
        <cpu count="4" mask="0xf0">4, 5, 6, 7</cpu> 
        <flags></flags> 
      </group> 
    </children> 
  </group> 
</groups>

この情報は、共に密接にグループ化される CPU で関連するタスクをスケージュールするカーネルによって内部的に使用されます。

FreeBSD は、i386 と AMD64 プラットフォームの Intel CPU でハイパースレッディングをサポートします。論理的な CPU を使用すると、特定の負荷の下で性能の不利益が引き起こされるので、 machdep.hyperthreading_allowed 調整変数を 0 に設定することによって論理的な CPU を無効にすることができます。

歴史

SMP カーネルの初期の歴史は、(適切に) 記録されていません。それは、3.0-current にマージされた時点である、 1997 年 4 月 26 日まで、個別の CVS ブランチで開発されていました。この日付までに 3.0-current は、Lite2 カーネルコードが既にマージされていました。

FreeBSD 5.0 は、新しい同期プリミティブ (基本) のホスト、 Giant カーネルロックでの信頼よりむしろきめの細かに近づくカーネルロックをサポートします。 SMP のプロジェクトは、 BSD/OS で見つけられたきめの細かい SMP 実装からソースコードの参照を提供され、 BSDi のサポートに大きく依存しています。

また、 FreeBSD 5.0 は、ia64 と sparc64 アーキテクチャで SMP のサポートを導入しました。

作者

Steve Passe <fsmp@FreeBSD.org>
May 7, 2008 FreeBSD