Windows 7 で NUMA が認識されない件に付いてMicrosoftのサポートに問い合わせてみる

結論:
 NUMAをOS(WindowsやLinuxなど)に認識させる事が必ずしも最良とは言えない事が判りました。
 それは後述しますNode interleavingの効果に一長一短が有る為です。

設定:
BIOS/UEFI設定で下記を行う事でNUMAとしてWindows7/2008R2に認識されると思います。(逆の設定でNUMAを認識させない事も出来ます)
 1:ACPI SRAT Table を ENABLE
 2:Node InterleavingDISABLE
 3:Memory remappingIOMMU を確認する(設定がNUMAに影響する事がある為)
 4:上記で駄目なら BIOS/UEFI を最新にする。
 5:これらの1~4で駄目な場合はRW utilityでACPI SRATを確認します(後述)
 6:それでも駄目ならマザーボードメーカ or パソコンメーカに連絡して下さい
 ※:連絡する前に後述のWindowsでNUMAの前提条件を確認して下さい

BIOS/UEFIによって多少名前が異なったり画面が異なる場合が有りますので注意下さい。
例えば Node Interleaving は Memory Node Interleaving や Node Memory Interleaving と書いてある場合が有ります。
ACPI SRAT Table は ACPI関連の設定画面にある場合と、CPU又はメモリの設定画面にある場合があり単にSRATとしか書いてない場合も有りますしまったく別の名前の場合も有ります。例えば17号機ではNUMAのON/OFFが有り、OFF = SRAT Table の DISABLE と等価な設定に成る様です。

但し、無難な設定は Node Interleaving を ENABLE にしておいた方がNUMAを意識せずとも無難な性能が出ます。
逆に、極限性能を求める場合は Node Interleaving を DISABLE にして、NUMAを意識したプログラミングや設定をする必要が有りそうです。仮想環境の構築にはNUMAを認識させて、仮想マシン単位でNUMAの割り当てをする必要が有りそうです。CGIの様にシングルスレッドのプロセスを多数起動する場合はNUMAの方が高速(OSが自動的にNUMAに適した設定で動作する為)です。古いタイプのNUMAを無視したマルチスレッドアプリは Node Interleaving を ENABLE にして NUMA ではなく SMP 化しておいた方が高速な事が多い様です。

WindowsではNUMAに付いてOS側の設定を変更する事は一切出来ません。
但し、タスクマネージャ等でNUMA-nodeごとの負荷状況を確認したり、各プロセスとNUMA-nodeの関連付けを変更したり、或いはInterrupt-Affinity Policy ツールで個々のデバイスからの割り込みを受け取るNUMA-nodeを個別に設定する事は出来ます。
加えて、アプリケーションはNUMAを意識したプログラミングを行う事が出来ます。

ACPI SRAT :
 ACPI SRAT(Static Resource Affinity Table)は、PCがNUMAである事をOSに認識させる為に最も重要な役割を担っています。
 ACPI SRATは個々のCPUコアと物理メモリアドレスが、どのNUMA NODE(Proximity domain)に所属しているかを表しています。OSはこのデータを読み取ってタスクスケジュールとメモリ割り当ての最適化を行います。
 BIOS/UEFIにバグが有ったり、BIOS/UEFI設定でDisableに成っていたり、或いは後述のNode interleavingが有効ですと、OSはCPUコアと物理メモリがどのNUMA NODEに所属するかが判りませんので、結果としてNUMAではなくSMPとして動作します。
 ACPI SRAT の中身を確認したい場合はRW utilityを使うと簡単に判ると思います。(但しSRATが存在しないシステムではSRAT自体表示されません)

 RW utilityで17号機のSRATテーブルを表示:
 RW_SRAT.png

 OSはACPI SRATに記述されたProximity domainを見てNUMA NODEを判断します。もっと言えばProximity domain = NUMA NODEと言えます。ですから、これが間違っているとNUMAを正しく認識する事が出来ません。具体的にはSRAT自体が存在しない場合や、Proximity domainが1種類のみ(例えば全てのProcessorのProximity domainが全て0の場合など)はNUMAでなくSMPとして判断されます。

 下図は15号機でRW utilityを使ってSRATから得た情報を元にしたCPUと物理メモリアドレスの関連付けです。
 SRAT_S2915_v401d_Bata-3.png

 RAMMapを使うと、物理アドレス上のマッピングが判りますので、上記のSRATと組み合わせて見れば楽しそうです。MSにはRAMMapを次期バージョンでNUMA対応にしてくださいとお願いしておきました。ソースが有れば自分でNUMA対応版を作れるのですが・・・


Node Interleaving :
 NUMAが登場する以前から Memory interleaving は存在しましたが Node interleaving はその拡張版です。
 Memory interleaving がメモリアクセス高速化の目的で複数バンクを同時・並行・交互アクセスしたり、或いは複数チャネルを同時・並行・交互アクセスして高速化させるのと同様に Node interleaving は複数の NUMA NODE にまたがってメモリを同時・並行・交互アクセスする手法で、必然的にSMP的なイメージに近づきます。
 NUMA-NodeInterleaving.png
 この手法のメリットは、複数の NUMA NODE に接続されたメモリに対して同時・並行・交互にアクセスする事でメモリのバス幅を倍増させてパフォーマンスを向上する事ですが、デメリットとして従来のシステムでFSBがボトルネックに成っていたのと同様の事が起きて逆に遅くなってしまうケースが有ります。
※このブログはタイトルに書いてあります通り“デュアルソケット”を対象にしておりますので4ソケット以上の場合にNode interleavingがどの様に働くのかは未調査ですが、御存知の方がいましたらコメントなど頂けますと幸いです。

Node interleaving と NUMA の効果@15号機
 NUMA_SMP_INTERLEVING2.png
 この様にアプリによって結果が判れます。CPUキャッシュ内で収まるケースでは、ここまで顕著な差は出ませんが、この二つのベンチマークは両者とも円周率の演算ですから多倍長精度演算をしており、比較的大きなメモリ空間を端から端までなめる様に演算しているはずで、従ってメモリ負荷が高まり、NUMAやNodeInterleavingの効果を測定するのに適したベンチと言えそうです。
 HyperPIは、昔の80386時代に製作されたシングルスレッドのベンチマークをベースに、それを多数同時実行していますが、このケースではOSのスケジューラが適切にCPUコアとメモリを個々のプロセスに割り当てた事でインターコネクトのボトルネック(或いはインターコネクトを挟む事による遅延)が回避された結果NUMAが最も良い結果に成ったと思われます。
 逆にy-cruncherはNUMAを想定していないマルチスレッドアプリ(もしくはNUMAに適さないアルゴリズム)の為にNUMAでは最悪の結果になり、逆にNode interleavingによる負荷分散効果が非常に良い方向に出たのだと思われます。具体的には2億5千万桁の演算に必要な連続したメモリ空間を多数のスレッドが共有しつつ同時アクセスしていると思われ、NUMAでy-cruncherの場合はOSのスケジューラがメモリ配置を分散せずに片側ノードに集中してしまったためにメモリ負荷が片方のノードに集中してしまい、そこにボトルネックが発生した可能性が有ります。

NUMAでのチューニング:
 この記事でUSB3.0のUASP(USB Attached SCSI Protocol)で発生するプロトコルオーバーヘッドの負荷をNUMAで最適化する手法を例にチューニング手法を検証しています。

WindowsでNUMAの前提条件:
 ・Windows 7 64Bit/8 64Bit/Server 2008R2/Server 2012
 ・下記のいづれかのCPUソケットかつCPUを実装している事
 ・Socket 940 2CPUソケット以上
 ・Socket F(LGA 1027) 2CPUソケット以上

 ・Socket C32(LGA 1207) 2CPUソケット
 ・Socket G34(1974/1944) 1CPUソケット以上

 ・Socket B(LGA 1366) 2CPUソケット
 ・Socket LS(LGA 1567) 2CPUソケット以上
 ・Socket B2(LGA 1356) 2CPUソケット
 ・Socket R(LGA 2011) 2CPUソケット以上



以下、マイクロソフトに問い合わせた時の状況です。上記のマトメをする以前に書きましたので間違い等が多いかもしれません。


昨日書きました「Windows 7 で NUMA が認識されない件」に付いて、Microsoftの有償サポートを利用して問い合わせてみる事にしました。

自分で調べて解決しようとしたのですが、ネット上でそういった情報には辿り着けませんでした。もちろん英語でも検索してみましたがSQLサーバ関連の情報、NIC関連の情報、それにSP1適用前の情報にしか辿り着けませんでした。(この時に気付けば良かったのですが、SQLサーバのチューニングにNode Interleavingの設定を行っている方が結構居る様でした。SQLサーバは大量のデータを扱う為にメモリ関連のチューニングが非常に重要な位置を占めますから、もう少し詳しく注意深く見ていればマイクロソフトに問い合わせなくとも良かったかもしれませんorz)

NUMAを意識してプログラムを作る様な人達はLinux利用者が多数を占め、その為にWindowsでのNUMA関連の情報が少ないのではないかと思います。更にWindowsでのNUMAサポートが今回の様にいまひとつな状況な事もLinuxへ流れてゆく原因の一つかもしれません。Linuxであれば自分で原因究明して設定を任意に変更する事も可能ですがWindowsですとカーネルソースは非公開ですし設定変更する様なツールも無いので何も手出し出来ません。

といいますか、恐らくWindows7のバグじゃあないかと思っている訳ですが、そうでないのかもしれず、いづれにしろ解決手段を得るまで有償/無償に関わらず調査を進めてみようと思います。そもそもOpteronのマルチCPU構成ではNUMA以外に有り得ない訳ですが・・・

Nehalem以降のIntel CPUも含め、今やワークステーションではNUMAが当然ですし、NUMAを意識したプログラミングが出来ないと最大パフォーマンスを引き出す事が出来ません。

前置きが長くなりましたが、さっそくMicrosoftのサポートへ連絡です。
筆者は個人ユーザですので、最初に個人向けの有償サポート窓口へ電話を入れてみました。
 サ窓口「今回はどういった御用件でしょうか?」
 あっ、アニメ声の女の子に窓口対応させてるのかMSやるな
 「Windows7 が NUMA NODE を正しく認識しないのですが」
 以降、クレジットカード番号と個人情報をガッツリ根こそぎおさえられ有料サポートが開始します。
金4,200円也。受付の女性に代わり男性技術者が電話口に・・・
 「どういった御質問でしょうか?」
 「Windows7 が NUMA NODE を正しく認識しないのですが」
 「ヌーマモードですか」
 「いえ、NUMA NODE です。エヌ、オー、ディー、イー、ノードです」
 「NUMAとは何ですか?」
 「そこからですか・・・」
 「はい、判りませんので説明して下さい」
 Windows7の目玉機能の一つとしてNUMA NODEを認識して・・・略」
 「なるほど、続けてください」
 NUMAとは複数CPUを搭載したシステムで個々のCPUがメモリを・・・略」
 「それはWindows7の機能ですか?」
 Windows7の目玉機能の一つとしてNUMA NODEを認識して・・・略」
 「もしかして何かご機嫌が悪いような?」
 「お金を払ってWindows7に付いてサポートを受けようとしているのに、私がWindows7の新機能に付いてサポートの方に詳しく説明をしている状態では、サポートを受ける事が出来るのか少々心配なのですが?」
 「なるほど、少々お待ち下さい」
 ---少し待たされるーーー
 「コンシューマ向けのサポートで受けられる範囲を超えた高度な質問のため・・・」
 タスクマネージャの表示メニューに付いてですからWindows7で使える通常の機能に付いて質問している訳ですが?
 「こういった質問ですと技術者向け窓口に成りまして金額が変わりますが?」
 「納得いきませんが仕方ありません、どちらに連絡すればよいでしょうか?」
 「こちらで電話をまわしますので、しばらくお待ち下さい。」
 ---結構待たされるーーー
 携帯のバッテリー切れるorz

充電器につないで再度電話(挨拶等略)
 サ窓口「技術者向けサポートですと33,390円になりますが宜しいでしょうか?」
 「さ、さっ、さんまんさんぜんさん・・・」
 サ窓口「三万三千三百九十円になります」
 金参萬参千参百九拾円也・・・
 金額もプロ仕様ですが、受付嬢もアニメ声のコンシューマサポートとは異なり、フォーマルな印象です。メイドと女性執事くらいの差でしょうか・・・
 「恐らくWindows7のバグじゃないかと思うのですが3万払ってバグ報告ですか・・・」
 サ窓口「はぁ・・・」
 「バグじゃなかったらスミマセンが・・・解決策を・・・」
 サ窓口「どうしますか?」
 「判りました・・・御願いします。」 あぁ~グラボが1枚買えるよォ~
 サ窓口「最終的には、どういった質問でしょうか?」
 「・・・ Windows7 が NUMA = Non Uniform Memory Access を正しく・・・略」
 サ窓口「ご購入されたパソコンに初めから入っていたWindowsでしょうか?」
 複数台ありまして、パッケージ版、DSP、MSDNライセンス等ごちゃごちゃで・・・
 サ窓口「ご質問のパソコンは、購入時に入っていたWindowsでしょうか?」
 複数台ありまして、パッケージ版、DSP、MSDNライセンス等ごちゃごちゃで・・・
 サ窓口「折り返し技術サポートから電話しますので、ご都合の良い時間を教えて下さい」
 ---時間帯を伝え、電話を切る。---

15:20サポートより電話あり(挨拶等略)
 「NUMA NODEの件ですが基本的にマザーボード側のACPIからの情報で判断しておりますので、BIOSが対応していないとNUMAとして認識できません。」
 おっ、ようやく話が通じる人が来た。
 「ACPIですか・・・NUMAかどうかはCPUで決まると思うのですが・・・」
 「OS側としましてはCPUに関係なく、あくまでもACPIからの情報でNUMAかどうかを判断しております。」
 「それ以外の可能性は?」
 「報告が上がっているものとして256CPU以上の環境でSMPとして誤認識されてしまう現象がありました」
 「それ以外には有りませんか?」
 「基本的にWindowsの認証取得したパソコンですと、そういったテストを予め行っていますが自作用のマザーボードですとちょっと」
 自作はいつもこの手で逃げられる訳だが・・・SIerに成らねば・・・
 「私の所有する5台の異なるNUMA機のうち2台ですから40%の確率で不具合が出ている訳ですが、にもかかわらず全く報告が無いのでしょうか?」
 「はい、それ以外では・・・但し、その他の可能性も無いとは言い切れません」
 「BIOSのACPIが原因か、それともOS側の原因なのかは、どうやって切り分けするのでしょうか?何か調べる手段はありますか?」
 「それを調べるにはBSODを発生させてOSのメモリダンプを取得して頂く必要が御座います。」
 「仮にBIOSのACPIが原因だったとして、OS側の設定等で回避する方法はありますか?」
 「この件に付きましては、OS側の設定で何か出来る訳でなく、あくまでもACPIの情報に従って動作する事に成ります。」
 「つまり、その場合BIOSを修正する以外に解決手段が無いと?」
 「はい、カーネルメモリ上にACPIのテーブルがそのままコピーされていますので、OSはそれを見て判断します。」
 
 と言う事で、今まで安定稼動していた15号機と19号機で強制的にブルースクリーンを発生させて、いったんOSを落さないといけなくなりましたorz

 ブルースクリーンで生成されるカーネルメモリダンプをMicrosoftに送って調査して頂く訳ですが、仮にBIOSのACPIが原因だったとして、自分でBIOSのACPIテーブルを修正するか、それともマザーボードメーカー(両方ともTYAN)に対応してもらうのか、前途多難な気もしてきました、しかも問題が起きてるのは1台でなく2台ありますから・・・

 強制ブルースクリーンは、今まで落ちた事の無いPCではしたくない行為ですが仕方ありません・・・思い切って実行しリブート後にZIP形式でまとめて送りました。後は結果待ちです。

10月9日午前、サポートより再度電話あり(挨拶等略)
 「カーネルメモリダンプを受け取りました。これから調査に入りまして本日中には一次回答が出来るかと思います。」
 「宜しく御願いします」
 「もしWindows7側の問題でしたら料金は発生しませんので御安心下さい」
 「なるほど」
 「ですがBIOS側の問題でしたら33,390円の技術料が発生しますので御了承下さい」
 つまりバグを疑って報告した場合、Windowsのバグだったら無料、Windows側のバグじゃなかったら有料、確率1/2の賭けって事か・・・
 「その場合はマザーボードメーカーに依頼してBIOSを改修して頂くのが正道というわけですね?或いは自分で治すか・・・」
 ※法的には、こういったケースでインターフェース部分に限ってはリバースエンジニアリングが許容されています。内部のコアな部分は当然リバース禁止なのですが、インターフェースまで禁止にしてしまうと何も前に進まなくなってしまう事を考慮してだと思います。
 「はい、ハードウエア側の問題をWindows側のパッチで対処するというのは最近の方針としてやらない方向になっています」
 「ところでMSCTを参照しているといった内容をメールで頂きましたが、MSCTはACPI 4.0から盛り込まれた仕様の様ですが、と言う事はNUMAではシステム要件がACPI 4.0と言う事でしょうか?」
 「MSCTに付きましてはNUMA distanceの追加情報になりましてMSCTが無くてもNUMAとして認識されます」
 ※10月10日のメールでMSCTはNUMA distanceではないという訂正文が届きました。筆者は鵜呑みにしていましたが、ちゃんと自分で規格書を読むべきだったと反省しています。
 「NUMA distanceに付いてはACPI 3.0で追加に成った様ですか?」
 「そちらはSRAT側の追加情報です」
 ※10月10日のメールでNUMA distanceはACPI 3.0で追加になったSLIT:System Locality Distance Information Tableでしたという訂正文が届きました。筆者は鵜呑みにしていましたが、ちゃんと自分で規格書を読むべきだったと反省しています。というか筆者の指摘の方が正しかった訳ですが・・・
 「SRATはACPI 2.0で追加され2.0aからSpecには御社のホームページへのリンクが書いてありましたが、これがリンク切れでした。それがACPI 3.0からはSpec上に直接詳細に記載される様に成った様ですが?」
 「ACPI 3.0ではSRATに項目が追加されました・・・略」(略としたのは、この記事に書いてある事を読んでいる様な内容でしたので・・・)
 「結局、NUMAのシステム要件としてはACPI 2.0aで問題ないのでしょうか?」
 「はい、ACPI 2.0でNUMAとして認識されます」
 「問題の発生しているマザーボードのBIOSでSRATのEnable/Disableが出来ましてNUMA関連の設定といった説明に成っていました。、それをEnableにしていますが問題が起きています」
 「SRATが有効だとしてもテーブル上でノードが単一の設定に成っていましたらNUMAノードが認識できませんので、そういった可能性もあります」
 「なるほど、いづれにしろカーネルメモリダンプを見てからですね」
 「はい」

と言う事でNUMAのシステム要件はACPI 2.0aという事が明確に成りましたので、一歩前進です。

10月9日午後、サポートより再度電話あり(挨拶等略)
 「カーネルメモリダンプを調査した結果、BIOSのACPIテーブルに問題が見つかりました。詳細はメール致しましたが、ご覧に成りましたか?」
 「すみません、未だ見ていませんが、マザーボードメーカーに不具合を指摘出来る様な資料が頂けますと助かります。」
 「SRAT部分のメモリダンプを添付しましたが、英語でコメントを入れた方が良いかもしれませんね。」
 「はい、よろしければお願いします」
 「具体的にはK10_D(15号機:Tyan S2915A2NRF-E:BIOS v401)のマシンはSRATが存在しません」
 「BIOS画面ではSRATのENABLE/DISABLE設定が可能でENABLEに成っていますが、それでもSRATが無いのですか?」
 「はい、実際にはそうなっていました」
 「なるほど」
 「Bulldozer機(19号機:Tyan S8225AGM4NRF:BIOS v302)はSRATが存在するのですがNUMA NODEが1つしか定義されていません」
 「そうでしたか・・・」

と言う事で、マザーボードメーカ(Tyan)に不具合申請する為の資料(問題箇所をピンポイントで指摘出来る具体的なデータ付きで)を作って頂く事に成りました。データは明日頂けるようです。


以下、問い合わせ後の調査



15号機:Tyan S2915A2NRF-E:BIOS v401に付いて


 Tyan S2915A2NRF-E には BIOS v401 の後にベータ版の BIOS v401d が公開されています。
 更新履歴では SRAT に付いて全く触れられていない事と、ベータ版なのであえて試していなかったのですが、BIOS v401 には SRAT が存在しない事が判りましたので駄目元でベータ版 BIOS 401d を入れてみましたら、あっけなくNUMAとして認識されましたorz
SRATを直したなら更新履歴に明記してくれよと言いたいです。それにベータ版BIOSを使うのは少々抵抗が有りますが、これしかNUMA対応出来ないのですから仕方ないですね。未だ試してはいませんがv401でもNode InterleavingをDISABLEにする事でNUMA認識されるかもしれません。
Opteron 2439 SE2



19号機:Tyan S8225:BIOS v302に付いて


 読者様にコメントで教えて頂きまして Memory Node Interleaving (19号機では Node Interleaving)を Auto から DISABLE に変更しましたら NUMA として認識されましたorz
 MSに対してバグとか言ってしまい申し訳なかったと思う反面、MSの3万円サポートからは Node Interleaving に関する情報は一切出てきませんでしたので、なんだろな・・・という気もします。とはいえ Node Interleaving はハード側の事ですから MS が知らなくても(又は、知っていて伝えなくとも)それはそれで仕方の無い事です。
19GNUMA.png



NUMA distanceに付いて


この問題に付いて調べ始めた頃から若干気に成っていたのですが、Windows7がNUMAを認識出来たとしてもNUMA distanceは必ずしも正しく認識していないのではないか?と言う気がしていました。
それに付いて10月9日の回答でACPI 4.0のMSCTを採用していないとNUMA Distanceが認識できないと言っていましたのでその通りなのだと思います。
※10月10日のメールでNUMA DistanceはSLIT(ACPI 3.0で追加された)で設定されていますがWindowsはSLITを無視しているという回答でした。では、どうやってアクセスコストを割り出しているのか?というとWindowsが独自に実測して割り出しているらしく、その値は非公開なのだそうです・・・

以下はNUMAとして認識されているPCでCoreinfo -n -mを実行した時のレポートです。

17号機:
 Logical Processor to NUMA Node Map:
 ****---- NUMA Node 0
 ----**** NUMA Node 1
 Calculating Cross-NUMA Node Access Cost...
 Approximate Cross-NUMA Node Access Cost (relative to fastest):
    00 01
 00: 1.0 1.2
 01: 1.2 1.2

13号機:
 Logical Processor to NUMA Node Map:
 ******------ NUMA Node 0
 ------****** NUMA Node 1
 Calculating Cross-NUMA Node Access Cost...
 Approximate Cross-NUMA Node Access Cost (relative to fastest):
    00 01
 00: 1.0 1.3
 01: 1.4 1.1
 2回目実行時
 Approximate Cross-NUMA Node Access Cost (relative to fastest):
    00 01
 00: 1.1 1.3
 01: 1.2 1.0

11号機:
 Logical Processor to NUMA Node Map:
 **-- NUMA Node 0
 --** NUMA Node 1
 Calculating Cross-NUMA Node Access Cost...
 Approximate Cross-NUMA Node Access Cost (relative to fastest):
    00 01
 00: 1.4 1.5
 01: 1.6 1.0

実行するつど結果が変わりますのでCoreinfoでは実測しているのだと思いますが、念のため後ほど聞いてみようと思います。→聞いてみましたところ、実測値の為、つど変わるという回答でした。


以下、ACPIでのNUMA対応に付いて


なるほど確かにLinuxでも同様にACPIを見てNUMA判定している様です。

ACPI 規格 (Advanced Configuration and Power Interface Specification) にNUMAに関する記述が有りました。

ACPI Revision 2.0
 ACPI Rev 2.0 の時代には NUMA という表現ではなく、processor-memory proximity として記載されていました。そして初期のACPI 2.0ではNUMA関連の仕様にエラッタ(具体的な記述が無い)が有りRev2.0aで修正されていました。つまりNUMA機のシステム要件には最も古い規格に互換性を持たせた場合でもACPI 2.0aと書くべきと思います。その修正内容は http://www.microsoft.com/HWDEV/design/SRAT.htm を参照する形でリンクが追記されたのですが、このページはリンク切れです。リンクの切れたドキュメントは読者の方に教えて頂きこちらで参照可能です。

ACPI Revision 3.0
 ACPI Rev 3.0 では上記のリンクではなく規格書上に明記される形に変更に成りました、その為にリンクが廃止されました(MSサポートからの回答で確認・・・出来ればACPI 2.0a時点の仕様も見たい訳ですが、それが叶いません)。更にACPI 3.0では新しくNUMA Distancingに付いてSLITが追加されています。但しWindows7/Server2008R2は、この情報を無視してアクセスコストを独自に算出し、その値を参照するAPIは無く外部には非公開だそうです。

ACPI Revision 4.0
 Microsoft有償サポートからメールで送られてきた情報によりますと、MSCT(Maximum System Characteristics Table)も関係していると書いてありました。但し関係していると書いてあるのみで必須かどうかは書いてありませんでした。その後の電話対応で必須ではないという回答を頂きました。
 ACPI規格によりますとMSCTはACPI Rev4.0で初登場します。
 実際11号機(SuperMicro H8DCi : K8 Opteron)はNUMAとしてWindows7に正しく認識されておりますがBIOS最終更新が2008年10月、対してACPI 4.0の仕様公開が2009年6月です。ACPI 4.0の発表はWindows7の発売と同時期です。

Microsoftの関連ページ
 NUMAハードウエアデザインに付いて
 NUMAのサポートに付いて
 Windows7 システム要件
 Windows Server2008 R2 システム要件
 64ビットWindowsについて(ACPI 2.0に付いての記述)


以下、NUMAに付いて


NUMA(Non-Uniform Memory Access、ヌマ/ヌーマ)
ところでNUMA=AMD Opteronという誤解が有りそうなので、ここで整理しておこうと思いますがPCではメモコンを内蔵したCPUで複数ソケットの場合にNUMAに成ります。例外としてSocket G34はシングルCPUで既にNUMAです。従いまして64BitのWindows7であればエディションに関係なくNUMA対応していると思います。また広義にはGPGPUもNUMAと言えるかもしれません。

2012年10月現在、下記がNUMAです。
・Socket 940 2CPU以上
・Socket F 2CPU以上

・Socket C32 2CPU
・Socket G34 1CPU以上

・Socket 1366 2CPU
・Socket 1567 2CPU以上
・Socket 1356 2CPU
・Socket 2011 2CPU以上


全てのOpteronとNehalem以降のXEONで2CPU以上ですとNUMAです。例外的にはMagny-CoursとInterlagosが1CPUでNUMAとなります。


以下、NUMAとACPIの時系列に付いて


1999年:
 Micron Technology MTSAM64GZ (SAMURAI64M2 ノースブリッジ2基搭載)
2000年:
 5月:IBM NUMA-Q 2000 (PentiumIII XEON NUMA 最大64CPU)発売
 8月:ACPI Spec Rev2.0発表(SRAT:Static Resource Affinity Table にてNUMAを規定)
2002年:
 ACPI Spec Rev2.0a発表(SRATエラッタを修正しNUMA実装を可能に)
2003年:
 AMD Opteron(Socket 940)発売、x86-64 PC初のNUMA 最大8ノード対応
2004年:
 ACPI Spec Rev3.0発表(NUMA Distancing = SLIT の追加)
2005年:
 AMD Dual-Core Opteron 発売、単1のNUMAノード内に複数コアを持つ複雑な構成に
2006年:
 AMD Opteron(Socket F)発売、仮想化にハード対応
2007年:
 AMD Opteron(K10)発売、NUMAとして2世代目のアーキテクチャ
2008年:
 Intel Nehalem-EP(Socket 1366)発売、Intel製x86-64初のNUMA製品
2009年:
 ACPI Spec Rev4.0発表(MSCT:Maximum System Characteristics Table)
 Windows7/Server2008R2発売 NUMA用API及びタスクマネージャをNUMAに対応。
2010年:
 AMD Magny-Cours(Socket G34)発売、1ソケットで初のNUMA
 Intel Nehalem-EX(Socket 1567)発売、Intel初の複数ノードのNUMAに対応


以下、問題発生機のBIOSの状況


今まではHyperTransport関連のBIOS項目しか見ていなかったのですが、ACPIだとすると・・・BIOS設定でACPI関連の所にNUMAの設定が有るかも?

これから見てみます。↓

15号機(Tyan S2915A2NRF-E)はPhoenix BIOSです。
SRAT(System Resource Affinity Table)の設定がENABLE/DISABLE出来る様に成っていましたがテーブルの中身までは判りません・・・しかし画面右側のHELPにはNUMA用の設定ですよと明記されています。ccNUMAと書いてあるのは Cache Coherent NUMA の略で、つまりCPU内部のL1やL2といったキャッシュをCPU間で整合性を保ったままNUMAを構築するという意味です。
他にMSCT(Maximum System Characteristics Table)も関係している様ですがMSCT関連の設定項目は見当たりません。
DSC01882.jpg

19号機(Tyan S8225)はAMI BIOSです。
ACPIを1.0~3.0で指定出来ますが、その他にNUMA関係の設定項目がありません。
項目が無いからと言ってテーブルまで無いかと言うとそんな事はないと思いますが・・・
元々3.0で使ってましたが、試しに2.0でリブートしてみましたが状況変わらずでした。
DSC01884.jpg

とにかく、NUMAの状態が正確に設定出来ていないとPC全体のパフォーマンスに影響しますし、逆に修正すればアプリの動作が本来の速度にまで高められるというか遅くなっていたのが元に戻る訳です。

けど、これ、いってみれば3万円自腹でBIOSとOSの結合テストしてデバッグしてるだけですよね?

原因はTyanマザーのBIOS-ACPIテーブル構成にバグが有るか、MicrosoftのOS側にバグが有るかの、バグの2択しか有り得ない訳ですが、それを調べるのに筆者は3万支払う訳です・・・
なんでしょね・・・

念の為、BIOSを最新にUPDATEしてみようと思いましたが、既に最新でした・・・
しいて言えば15号機(S2915A2NRF-E)の最新BIOSはBetaなので一つ前の正式版を使ってますがBetaで対応したのはUSB関連とRadeon HD5xxxの相性問題のみでIstanbul対応は15号機に既に搭載されているv401で対応済みです。→にもかかわらずBeta版のv401dで15号機はNUMA対応出来ましたorz

残るは19号機のみです・・・
19号機は読者様の御指摘を頂きましてNode Interleavingの設定変更でNUMAとして認識されましたorz
関連記事
スポンサーサイト

コメントの投稿

非公開コメント

No title

それは大変難儀な話でしたね。

これを見ちゃうとますますLinuxに流れるのですかね?

とはいえ、windowsが不可避の環境も多いでしょうから
AMDを回避する方向になるのでしょうかね。

そういえば、最近はメーカー製のAMDサーバや
Workstationがラインナップから減った気がします。

Re: No title

> AMDを回避する方向になるのでしょうかね。

IntelもNehalem世代以降の複数CPUは全てNUMAに成りましたのでAMD固有の問題でもなくなっています。

> そういえば、最近はメーカー製のAMDサーバや
> Workstationがラインナップから減った気がします。

減りましたね・・・

K8-Opteron VS Netburst の頃はシェアが50%対50%くらいで拮抗していましたが Core2 の登場以降は苦戦してますね。

とはいえCore2世代のXEONはFB-DIMMという爆熱仕様のメモリが問題となって性能対消費電力でOpteronにもまだ勝算は有りました。

勝敗を決するくらいの決定打をもらったのがNehalm世代からIntelもNUMAを採用した事で、メモリ周りの問題を解決した事です。

ですから今回の件は最近のマルチプロセッサでは、殆どのシステムで問題となる可能性があります。

No title

興味深い問題ですね。
それにしても自腹を切ってまで検証を進め、しかも公表されている管理人様の姿勢には頭が下がります・・・
ところで、自分のS8230&Op6130だとWin7ProSP1で4NUMAノード認識されてます。(上のS8225と同じくNUMA関連の設定項目はありませんでした。MPTableの項目が追加であるくらいです)・・・やはりマザーのACPI関係・・・?

Re: No title

> それにしても自腹を切ってまで検証を進め、しかも公表されている管理人様の姿勢には頭が下がります・・・

アホさ加減を曝け出しているとも言えますが(苦笑)

公開することで、自腹が無駄に成らず同様の問題を抱える方に多少なりともお役に立てばと・・・

> ところで、自分のS8230&Op6130だとWin7ProSP1で4NUMAノード認識されてます。

貴重な情報有難う御座います。
同じTyanの同世代マザーですから、ACPI-BIOSが原因だった場合にTyanと交渉する際のネタに出来そうです。

No title

こんな貴重な情報をただで読ませて頂いてありがたいと思いますし
本当に頭が下がりますorz

ところでTyan製品なら先にそちらに問い合わせれば無料
(TyanがMSに問い合わせる場合にもTyanが費用かぶる)ということに
できそうですけど
それはナシなのですか?

Re: No title

> ところでTyan製品なら先にそちらに問い合わせれば無料

先にWindows7側のバグじゃ?と思った所が出発点だったので、こういう流れに成ったのかなぁ・・・
CPUとかチップセットのドライバ関係が問題じゃないかという先入観が先行して当初はチップセットドライバに付いて調べたりしてました。つまりMSに問い合わせを始めた当初はマザー側の問題とはあまり考えていなかったのでorz

というか確かにそうなんですが、有料サポートなら詳しい情報も入手出来るという面も有り、原因が明確に成り易い事と、優先順位に関係なく対応してもらえそうだという事で、そのままずるずるにサポートを受けていました・・・
実際サポートとのやりとりでACPIに付いて知識が深まりました。

それとSocket C32は見捨てられ感が高いのでTyanに言っても優先度低くてなかなか対応してくれないんじゃ?という気がしているので・・・気がしているだけかもしれませんが・・・

というかPiledriverで●のG34に乗り換え検討中なので、15号機(Tyan S2915A2NRF-E)がベータBIOS v401dで解決した事もあり、なんだったんだろな感もありますorz

最大の収穫はNUMAをOSが認識するにはACPI 2.0aが必須で、NUMA distanceまで正確にOSが認識する為にはACPI 4.0が必要って事です。

貝木泥舟に言わせれば「今回の件から得るべき教訓は・・・」

No title

なるほど良く理解できました
遠回りした分知識が得られるという副次的な効果もあるワケですね
どういう条件で動いてるのかよく分からないけどクレーム付けたら
新しいBIOSが来てなんとなく直ってたよりはずっと素晴らしい
Windows界隈はとかくブラックボックスに陥りやすく
あのハードウエアとこのデバイスドライバの組み合わせが堅いとか
動く(ように見える)組み合わせを知ってくることが知識になりがちですが
きちんと手順を踏んで手持ちのハードウエアが期待通りの動作まで持っていかせたいという情熱には本当に頭が下がります
今後もご活躍を期待しております

Re: No title

> 遠回りした分知識が得られるという副次的な効果もあるワケですね

そうですね、即効性の結果を追求するか、過程を楽しむかということもあるかもしれません。急がば回れ的な意味では結局は近道なのかもしれません。

NUMAはブログの主題に成っているデュアルソケットの要(かなめ)ですから、ブログ的に最も重点を置くべきネタだという事もあります。

無駄に散財してるだけとも言えますがorz

No title

NUMA 使用するには、BIOS の「Memory Node Interleaving」を
『Disable』にする必要があると思うが、設定どうです?

ウチのOp6128 Windows7x64 上で認識されている。

Re: No title

> NUMA 使用するには、BIOS の「Memory Node Interleaving」を
> 『Disable』にする必要があると思うが、設定どうです?

コメント、有難う御座います。

Node Interleaving は Auto 設定でしたが、これを Disable にしましたら Bulldozer機でもNUMAとして認識されました。

有難う御座いました。

後ほど、記事の本文に書こうと思いますが、NUMAにした方が早いケースと、NUMAではなく強制的にSMPに設定した方が早い事があるというのが各種ベンチで判ってきまして、これらの情報とともに記事にしようと思います。

No title

なんというか執念を感じます・・・
個人で有償サポートを利用するとか実際に見聞きしたのは初めてです。
尊敬というしか(^^;

Re: No title

こちらでは、お久しぶりですw

> 個人で有償サポートを利用するとか実際に見聞きしたのは初めてです。

以前、個人でMSDNに参加していた時に3インシデント(つまり3回まで有償サポートを受けられる)が付属してきまして、何度か利用した経験があり、ある種の癖になっているのかも?しれません。

ただ、今回はMSDNに参加していませんでしたので直接料金請求されまして、その金額に若干躊躇したのですが、これまた以前の話ですが、IT系の開発プロジェクトのマネジメントをしていた頃からIT技術者の人件費というものを肌で感じておりまして実は安い!とも感じていたのです・・・

相手の技術担当の方には数日間対応して頂きブログには書いてない様な情報も色々教えて頂きました。IT技術者の会計上の人件費(社会保険やボーナスなど含む)を日割り換算しますと1日に3~6万程に成りますので一日越えた時点でMS的には赤字なはずですが、問題解決まで御付き合い頂いて感謝しています。こちらからも或る程度情報を渡してMS側からも感謝された様な状況で円満解決といったところでしょうか・・・

NUMAは、デュアルソケットの要(かなめ)ですから他のネタよりも力が入るっていうのもありますね。

人件費

人件費から逆算とか、こんな考え方をする人ばかりだと世の中もっと良くまわると思うんですけどねぇ・・・
物質的なものが無ければ原価はタダだとさえ思っている人も少なからず居るわけで・・・

それにしても、このようなハイパーユーザー(一般的には契約のあるベンダーが担うわけですが(^^; )のおかげでMSに情報が集まり品質向上に繋がるわけですね。
ありがたやありがたや。

Re: 人件費

> 人件費から逆算とか、こんな考え方をする人ばかりだと世の中もっと良くまわると思うんですけどねぇ・・・

商店街がシャッター街に成り、Amazonで注文すると知らない人が安い輸入品を持ってくる。そんなドライな世界を作ったのは消費者の総意ですからね。

マネタリーベースとか、マスコミの偏向報道とか、そういった事も大衆は気付きませんしね。

そういう何も知らない人達と、ある程度知って判ってる人達の一票が同じ価値の一票なので多数決するって事は、何も知らない人達が・・・

No title

http://web.archive.org/web/20030418013255/http://www.microsoft.com/hwdev/platform/proc/SRAT.asp

web上の古いドキュメントは「http://web.archive.org/」で見つけることが出来るかもしれません。

Re: No title

おれさま様

良情報、有難う御座います。

こちらで公開時の魚拓が見れました
http://web.archive.org/web/20001217165600/http://www.microsoft.com/hwdev/design/SRAT.htm

初代Opteronの発売3年前には既にNUMAを想定した仕様を公開していた様ですね。
もっとも、Opteronもこの頃には仕様がある程度は決まっていたと思いますし、もっと多種多様な大規模システムを想定していたのだと思いますが。

しかしこのドキュメントに限らず、今後も色々とこのサイトを利用させて頂きます。

本当に有難う御座いました。
m(_ _)m
プロフィール

DualSocketTheWorld

Author:DualSocketTheWorld
自作を始めて20台目くらいになりますが、最初からデュアルソケット限定(始めた当時はデュアルスロット)で自作しており、近年になってAMD K6を試したくなりSocket7でK6-2+のシングル構成で組んだのがシングル初です。

シングルマザー(含:シングルソケットマルチコア)や4ソケット以上の自作は基本的にしませんし、メーカー製PCの改造も基本的にはしません(ノートPCのSSD化くらいはしますが・・・)

基本路線はワークステーションと呼ばれる分野での自作で、OSもWindows系であればProfesionalが主な対象に成ります。

ゲーマーの様なOverClockは行わず、WS路線としてハイエンドCPUとハイエンドGPUの組み合わせで定格或いはDownClockで発熱を抑えつつ、その時のアーキテクチャに置いて爆速かつ静音を目指し、30年以上の長期に渡り稼動状態をキープする事を目指します。

※基本的にリンクフリーです。どこでも自由にどうぞ。

※画像は時々変ります。

※お決まりの文章ですが、改造は個人の責任で行ってください。ここに記載された情報は間違いを含んでいる可能性が有り、それを元に製作や改造などをして失敗しても筆者は一切責任持てませんので悪しからず。

筆者略歴:
小学生時代にゴミ捨て場で拾ったジャンクテレビ数台を分解して部品を取り出し真空管アンプを自作、中学生時代にPC8801mkⅡsrでZ80アセンブラを始める。社会人になって初のプログラムは弾道計算、後に医療系・金融系プログラマ~SEを経て100~200人規模プロジェクトのジェネラルマネジャを数年経験、独立して起業。現在は不動産所得で半引退生活。
(人物特定を避ける目的で一部経歴を変更しています)

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
アクセスカウンター
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR