ハードディスク大量搭載実験研究サイト ハードディスク番長 ハードディスク大量搭載実験研究サイト ハードディスク番長
 


デュアルコア・マルチコア・マルチ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の設定画面
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を固定する。デバイスを選択する1
マイクロソフト IntFilter

IntFilterでデバイスが使用するCPUを固定する。デバイスを選択する2
使用するCPUを固定したいデバイスを選択する

IntFilterでデバイスが使用するCPUを固定する。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なので重複がないからといって安心できない


生の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なので←(デバイスマネージャのドライバ→ドライバの詳細→ドライバファイルで確認できる。)

ドライバファイルの詳細Si3124r5.sys



マイ コンピュータ\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\
Si3124r5\Parameters\Device

MaximumSGListをデフォルト33(十進)→17(十進)など
NumberOfRequestsをデフォルト124(十進)→17(十進・最低16)など

に設定し再起動する。

ちなみにSi3124r5は両方の設定をデフォルトから逆に255(最大)に上げても通常まったく問題ないのでパフォーマンスアップの手法としても利用できるといえるだろう。



ハードディスクの寿命
外付けハードディスクケース

外付けHDDケース

外付け ハードディスク ケース 自作金具番長皿屋敷紹介ページ 外付けハードディスクケース 金具使用例
ユーザー使用例
↑    ↑    ↑    ↑
まずはこちらをごらんください。
ショップハードディスク番長で購入する
ポートマルチプライア PM5P-SATA2 を使用して ハードディスク ケース を作る。

ハードディスクが長寿命化するハードディスクケース


ハードディスク関連記事

 ハードディスクの寿命
 HDD劣化の原因と対策
 不良セクタ・不良ブロックとはなにか
 S.M.A.R.T.で障害状況を分析する
 不良セクタがあるハードディスクを再利用する
 ハードディスク接続ケーブルの問題点
 HDD Regenerator(ハードディスクドライブ リジェネレータ)で不良セクタを修復する
 ローレベルフォーマット

ハードディスク収納関連記事

 ケースからあふれたハードディスクの設置方法
 ハードディスク増設用にATX電源を改造する

ベランダサーバ関連記事

 ベランダサーバの作り方

その他の記事

 ハードディスク番長な人に適したPC構成を考える
 バックアップを考える

HDD番長東西対決

 HDD番長展示室
 企画HDD番長東西対決

 今月のHDD総番
 西のHDD
番長(60Hz)

 東のHDD
番長(50Hz)

 HDD
番長展示室

製品紹介

 エアコン内蔵可能型屋外PC収納ケース(ハードディスク番長シリーズ)
 ハードディスク番長の使い方

 ハードディスク大量搭載用マウンター金具(番長皿屋敷シリーズ)
 番長皿屋敷の使い方
 ハードディスク
番長実況生中継(WEBカメラ)

趣旨及び注意事項

 このページは理由なきハードディスク拡張をし続ける粋人のために作られた。PCに比類なき多量のハードディスクをいかに設置するかを研究、実験、報告するページである。ここに記載された内容は、筆者本人が信じて疑わないことであるが、世間的に必ずしも正確であるとは言えないことを宣言しておこう。またこのページを参照しての実験はすべて自己責任で行ってほしい。なおその結果について当局は一切関知しないからそのつもりで。リンクについてだが、無断でおおいにやっていただきたい。それはこのページ内に筆者が製造販売している番長グッズが存在しているため、宣伝したいからである。よろしくおねがいいたします。


hdd 袋製造 製袋 チャック付きポリ袋 ユニハンディ J-6  ユニパック
チャック付きビニール袋
グラシン ポリ 大袋 アルミ袋 ジップロック フリーザーバッグ セイニチ  OPP袋 チャック付ポリ袋
チャック袋 ラミジップ 通販 ユニパック i-4



ハードディスク16台搭載可能 自作外付けハードディスクケース


HDD16台搭載可能 自作外付けHDDケース金具


エアコン内蔵可能型屋外ベランダサーバ ハードディスク番長




チャック袋セイニチ「ユニパック」相当品「サンジップ」ならハードディスク番長の工場で




チャック袋-セイニチユニパック相当品「サンジップ」
  Janualy 2007 COPYRIGHT(C) MITUWA Limited Company ALL RIGHTS RESERVED.  goiken@hddbancho.co.jp