デュアルコア・マルチコア・マルチCPUマシンの安定動作法
|
5年くらい前は、デュアルCPU機の家庭での運用は結構困難であった。なぜかといえば、一言で言ってデバイスドライバやOSの出来が悪かったからである。サーバ用途で使用する、SCSIカードなど業務用途の機器はもちろん問題なく使用できたのだが、テレビキャプチャーカードや消費者級RAIDカードなどはデバイスドライバのデュアルCPU対応の検証がほとんど行われておらず、まともに動作するカードの方が少なかった。
最近はデュアルコアPCが消費者級PCのメインストリームになっている。デュアルコアPCがメインストリームになったことで、マルチCPU運用時の問題点が洗い出され、以前に比べるとマルチコアPC特有の不具合に遭遇する率はぐっと減った。
しかし、旧式デバイスを導入するときや、OS・デバイスドライバのアップデート時にマルチコアCPU機特有の問題が発生することは未だにあり、今後もこの問題に直面する場面があるように思える。
そこで今回はその対処法を記述したいと思う。
PCI Latency timerの調整(除くPCIExpress接続カード)
シングルコア環境でも見た目には同時進行でデバイスにアクセスすることは多い。しかし実際にはCPUが複数のデバイス向けに同時アクセスすることは無く、一定の間隔で各デバイスと通信し、その通信経路としてのバスを複数デバイスで共用している。
1つのデバイスがバスを占有している時間をPCI Latency timerといい、この値が多ければ1通信におけるデータ転送量が多くなるためパフォーマンスが増大する、反面各デバイスへの通信頻度が低くなるため、デバイス内でのオーバーフローエラーが起きやすくなる。逆にこの値が小さい場合、各デバイスの時間当たりアクセス頻度は増すことになるが、データが細切れになってしまいパフォーマンスが低下する。
複数のCPUを持ったシステムでは、この細切れになったデータを異なった複数のCPUで受け取り、またそのデータを再構成するためにCPU間通信を行うため、CPUキャッシュが効果的に使用できず、大きなパフォーマンスダウンとなってしまう場合がある。複数のデバイスで同時に巨大データの送受信を行った場合、このパフォーマンスダウンがドライバの設計想定を上回り、OSの側(デバイスドライバ)でデータ取得のタイムアウトエラーを発生させてしまう。そしてOSがデバイスに対してデータの再送信を要求してしまったりした場合、この渋滞は一生解消できなくなりエラーを吐き出してしまうこととなる。
できの悪いデバイスドライバであれば、レイテンシタイマがデフォルトの設定でもこの現象が発生する場合がある。これを防止するにはデバイスドライバが指定したレイテンシをより長めに設定してやると効果が出ることがある。マルチCPU環境で使用するサーバPCのBIOS上のPCI Latency timerは大抵64がデフォルトで設定されていて、デスクトップPCの場合の32に比べ長めである。一方今度はデバイスドライバが自動で設定するレイテンシだが、筆者が使用しているLANカードIntel PRO1000XT ServerAdapteのドライバはPCのBIOS設定がそのまま設定されてしまうので注意が必要である。Intel PRO1000XTServerAdapterの取り扱い説明書上ではPCI Latency timerを40〜80に設定することと書いてあり、サーバに普通にインストールする場合はもともとサーバのデフォルトレイテンシが64のため全く問題ない。しかし通常のデスクトップPCにインストールするとBIOS上のデフォルトが大抵32に設定されているため、この環境でデバイスドライバをそのまま導入するとPCI Latency timerは32に設定されてしまう。このように製造者が使用者の使用環境を勝手に想定してデバイスドライバを作ってしまっている例も散見されるので不安定なデバイスを発見したらまず最初にPCI Latency timerを確認したい。その際BIOSでレーテンシを確認・設定できる場合があるが、デバイスごとの個別設定はできないため、PCI Latency Toolというソフト(もともとはオーディオカードにバンドルされているソフトだ。)を使って個別に設定する方が便利だ。ただしPCIExpress接続のカードはシリアル転送なのでこれらの設定はない。
最新版のPCI Latency Tool3.1 v2は環境によってはハングアップする可能性があるのでその場合はほぼ同機能のPCI LatencyTool2.0を使用してほしい。
ダウンロードは
2.0
PCI Latency Tool2.0(メーカーページではないので注意が必要)
3.0v2
PCI Latency Tool 3.1 v2(メーカーページではないので注意が必要)
PCI Latency Tool
※PCIExpressは設定できない。またもともとLatencyが000のデバイスはそもそも設定を受け付けていない可能性が高い
試しに設定してみて次回起動時に数値が000のままならそのデバイスのレイテンシはプログラマブルではないということだ
PCI Latency Toolを使って不安定なデバイスのレイテンシ値を現在より大きめに設定しよう。現状が32なら今度は64に、現状が64なら今度は96にといった具合に設定する。そしてAppy on Startupにしておけば再起動時に設定が有効になる。
詳しくは
PCI Latency Toolを使うを参照
※
|
余談だが筆者はPCI Latency Toolとは一切関係なくプラスチックフィルム袋の工場を経営している。仕事でアルミ袋やポリ袋、OPP袋、ラミネート袋、チャック袋、印刷袋、無地袋を使っている読者はお気軽に相談いただきたい。
|
|
プラスチックフィルム袋製造のホームページ
|
デバイスをドライブするCPUを特定の1つに固定する
マルチコアPCの場合、デバイスと通信するCPUがくるくる変わると、CPUキャッシュの効率が落ちたり(それを避けるためマルチCPUのサーバは2ndキャッシュ以外に3rdキャッシュももち、3rdキャッシュも1コアごとに2MBもの大容量を搭載している場合が多い)、デバイスとの通信データを再構成しなければならないなど、パフォーマンスダウンが発生することや、そのパフォーマンスダウンはデバイスドライバの出来によってはシステム全体の安定性に影響することを前項で述べた。その解決策として前項では、PCI Latency Timerを長くすることでCPU・デバイス間、CPU・CPU間(CPU・デバイス間が改善されれば自動的に改善される)の通信効率を上げ破綻を起こさないようにして安定性を改善させる方法を説明した。しかしよく考えるとCPU・デバイス間の通信効率が低すぎて問題が発生しているわけではなく、CPUがくるくる変更してしまうところに問題の本質がある。簡単に言えば、デバイスごとに使用するCPUを固定してしまえばいいわけで実はそれを設定する、マイクロソフトInterrupt Filter Configuration Tool(略してIntFilter)というソフトがある。これを紹介しよう。
ダウンロードは
こちらマイクロソフト IntFilter
マイクロソフト IntFilter
使用するCPUを固定したいデバイスを選択する
特定のデバイスにどのCPUを割り当てるか指定できる
不安定なデバイスが特定されたら、そのデバイスが使用できるCPUをIntFilterを使って1つに限定してしまおう。不安定ではないデバイスであっても、LANカード・SCSIカード・RAIDカードなどはCPUキャッシュヒット率が向上しパフォーマンスが向上する場合がある。またビデオキャプチャーカードやサウンドカードはサンプリングデータの品質が向上する場合もある。ただしハイパースレッディングテクノロジー(Hyper Threading Technology=HTT)が機能するシステムでは0または偶数番号のCPUがフル機能CPUなので、できるだけ0または偶数番号のCPUに割り振ろう。
詳しくは
IntFilterを使うを参照
IRQの重複を避ける
公にはPCIステアリングによってIRQ重複による障害はないとされているが、実際ヘビーな使用をしていると問題が多発する。デバイスマネージャ上で確認できるIRQ19や24といった数字は生のIRQではなくすでにステアリング済みの数字なので、ここで重複がないからといって安心はできない。
デバイスマネージャ上のIRQはステアリング済のIRQなので重複がないからといって安心できない
生のIRQはBIOSの最終画面で表示されることが多い。カラのフロッピーディスク差し込んで起動させわざとブートエラーを起こしてBIOS画面を停止させ、IRQの設定状況を確認しよう。不要な内蔵機能(例COMポート・内蔵USBの2.3・プリンターポート・使っていなければPS/2マウス・IDEなど)をBIOS上で切断したり、PCIカードは挿すPCIスロット位置を変更するなどしてIRQの重複が起きないようにしよう。内蔵サウンドや内蔵USBがどうしても重複してしまう場合、内蔵デバイスを切断して別途それらのカードを導入する手もある。
またどうしても重複する場合、せめて不安定なデバイスだけでも完全に独立したIRQにしておこう。
システムタイマをTSC(タイムスタンプカウンタ)からPMTimer(ACPIパワーマネジメントタイマ)に変更する
システムタイマにデフォルトのTSCを使用した場合、一部のチップセットを使用したPCやAMDのデュアルコアを使用したPCに不具合が出ることが知られている。デバイス自体のバグが原因とされ、現象としてはpingでマイナス時間が表示されたり、各種タイマの基準時間が現実の時間と異なってしまうためタイマを扱うデバイスやアプリケーションでタイムアウトエラーが発生する。例えばハードディスクに読込み不良の領域があり、ハードディスクがリトライでなんとか読込み、代替セクタ処理を進行している間にATAカードが不正なタイマによりタイムアウトしPCからディスクが消滅するといった現象である。これらを回避するためFIXされたデバイスドライバが用意されているが、最近になって固有のデバイスに起因する問題ではなく、例えばハイパースレッディングテクノロジー(Hyper Threading Technology=HTT)搭載のCPUでも現象が確認されるといったマルチコアPC全般の問題であることが認識されつつある。これを回避するには高精細システムタイマをTSCからPMTimerに変更してやる必要がある。ただしPMTimerを使用するとシステムパフォーマンスが10%程度低下する場合があるのでむやみに設定することはお勧めしない。逆に不具合の原因がシステムタイマだった場合、各種の不正処理が適正動作するので、システムは安定しなおかつパフォーマンスが上昇する可能性がある。
設定方法
boot.iniに /UsePMTimer
スイッチを追加する。
例
コントロールパネル→システム→詳細設定→起動と回復→起動システム・起動のオプション→ファイルを手動で編集するには、[編集]をクリック:編集
[boot loader]
timeout=30
default=multi(0)disk(0)rdisk(0)partition(2)\WINDOWS
[operating systems]
multi(0)disk(0)rdisk(0)partition(2)\WINDOWS="Windows Server 2003, Enterprise" /fastdetect /NoExecute=AlwaysOff
/UsePMTimer
/PAE
ファイル→上書き保存→再起動
ちなみに
/NoExecute=AlwaysOffを設定するとDEPが無効になりバッファオーバーランによる悪意のあるプログラム実行を許してしまう。
しかしCPUがハード的にDEP対応していない場合でもOSでエミュレートしてしまうためデフォルトの設定ではシステムパフォーマンスが低下している事実も見逃せない。従って安全が確保されているPCでは、特にCPUが対応していない場合はDEPは常に切断したほうがいい。
ハードディスクのデータ転送密度をコントロールしてシステムバスの占有に起因するタイムアウトを防ぐ
ハードディスクは大量のデータを長時間に渡って転送し続けるので、システムバスを占有しがちである。もちろん占有し続けないようにデバイスドライバは設計されているはずだが、各種デバイスが回復可能な微細エラーを起こしたとき問題が表面化する場合がある。またハードディスクの高速化やキャッシュの増大、RAIDの使用などで、ストレージドライバ設計時のキャパシティーを超えてしまう場合も問題が発生する。この問題は主にサウンドカードやビデオキャプチャーカードなどハードディスク関係以外のデバイスで発現するが、SATAカードなどのアダプタからハードディスクへの送信要求未解決数の上限を引き下げることと一回あたりの転送量上限を引き下げることで解決できる可能性がある。
具体的にはレジストリエディタ(regedit.exe)で
マイ コンピュータ\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\アダプタのドライバーファイル名から.sysを除いたもの\Parameters\Device
にある
MaximumSGList
と
NumberOfRequests
の数字を下げてやる。
例 Sil3124アダプタの場合ドライバ名は
Si3124r5.sys
なので←(デバイスマネージャのドライバ→ドライバの詳細→ドライバファイルで確認できる。)
マイ コンピュータ\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\
Si3124r5
\Parameters\Device
の
MaximumSGListをデフォルト33(十進)→17(十進)など
NumberOfRequestsをデフォルト124(十進)→17(十進・最低16)など
に設定し再起動する。
ちなみにSi3124r5は両方の設定をデフォルトから逆に255(最大)に上げても通常まったく問題ないのでパフォーマンスアップの手法としても利用できるといえるだろう。
ハードディスクの寿命
HDD劣化の原因と対策
不良セクタ・不良ブロックとはなにか
S.M.A.R.T.で障害状況を分析する
不良セクタがあるハードディスクを再利用する
ハードディスク接続ケーブルの問題点
HDD Regenerator(ハードディスクドライブ リジェネレータ)で不良セクタを修復する
ローレベルフォーマット
ケースからあふれたハードディスクの設置方法
ハードディスク増設用にATX電源を改造する
ベランダサーバの作り方
ハードディスク
番長な人に適したPC構成を考える
バックアップを考える
エアコン内蔵可能型屋外PC収納ケース(ハードディスク
番長
シリーズ)
ハードディスク
番長
の使い方
ハードディスク大量搭載用マウンター金具(
番長皿屋敷シリーズ)
番長
皿屋敷の使い方
ハードディスク
番長
実況生中継(WEBカメラ)
このページは理由なきハードディスク拡張をし続ける粋人のために作られた。PCに比類なき多量のハードディスクをいかに設置するかを研究、実験、報告するページである。ここに記載された内容は、筆者本人が信じて疑わないことであるが、世間的に必ずしも正確であるとは言えないことを宣言しておこう。また
このページを参照しての実験はすべて自己責任で行ってほしい。なおその結果について当局は一切関知しないからそのつもりで。リンクについてだが、無断でおおいにやっていただきたい。それはこのページ内に筆者が製造販売している
番長
グッズが存在しているため、宣伝したいからである。よろしくおねがいいたします。
hdd 袋製造 製袋 チャック付きポリ袋 ユニハンディ J-6 ユニパック
チャック付きビニール袋
グラシン ポリ 大袋 アルミ袋 セイニチ
チャック付ポリ袋
チャック袋
ラミジップ 通販
ユニパック i-4
生理 チャック
|