タグ:メモリ ( 4 ) タグの人気記事
メモリ増設したのに「ハードウェア予約済み」とかで利用できない

元々 2GB*4=8GB のメモリ構成でPCを使ってたんですが、RAMDiskや画像処理でそれでは足りなくなったので、4GB*2+2GB*2=12GB 構成とすることにしました。
買ったのは、CDF販売のElixir品です。

シー・エフ・デー販売 Elixir デスクトップ用メモリ DDR3 W3U1333Q-4G DDR3 PC3-10600 CL9 4GB x 2枚セット


増設後起動すると、以下のように12GB認識されているのに、使用可能なのが6GBになっています。

e0091163_12233537.jpg


リソースモニターで見てみると、残りの6GBが「ハードウェア予約済み」になっています。
e0091163_12234385.jpg


ぐぐると同様の現象は結構起きているみたいで、BIOSの初期化や、msconfig内のブートの最大メモリのチェックを退けるやら、RAMDiskを使っているなら使用をやめるやらいろいろ確認する方法が載ってました。

で、取り敢えず一回電源OFFにし、メモリを挿し直したところちゃんと認識しました。

ということで増設してもうまく認識されないときはまず挿し直しを試してみるといいかもしれませんね

余談ですが今使っているRAMDiskがDataram RAMDiskのフリー版なんで4GBまでしか使えません。
せっかくなので上位版にして6GBくらいにはしたいなぁと思っている今日この頃です。
[PR]
by Jehoshaphat | 2012-05-12 12:24 | ハードウェア | Trackback | Comments(0)
(ハードウェア)突然PCの電源が落ちBIOSエラー。原因は・・・
年をあけてから突然メインPCの電源が落ちるという現象が頻繁に発生してました。

特にハードウェアの構成を変えたというわけではないですが。。
で、PCの電源入れるとBIOSのエラーも頻発。
1つは「BIOS ROM checksum error Keyborad error or no keyboard present」と表示されシステムディスクを入れろみたいなことも言われます。キーボード自体は正常なのですが。。
e0091163_1172038.jpg

もう一パターンは「OC fail, please enter setup to change OC Fail settings」と表示されます。特にオーバークロックもしてないのですがね。
e0091163_1174434.jpg

そういえば、以前にもBIOSでメモリ関係のエラーが出てたなーとおもい、メモリのチェックをしてみました。
メモリテストといえば、Memtest86が定番ですが、今回は MemScope を使ってみました。
下記サイトからダウンロードできます。(一応なんか個人情報入力しないといけないみたいですが、そこは適当に。。)
http://www.micro2000.co.uk/products/microscope/MemScope_Free_Memory_Tester.htm
使い方については、パソコンのメモリが壊れていないかメモリテストを行うフリーソフト「MemScope」で詳しく取り上げられています。

MemScopeでテストすると案の定大量にエラーが。
e0091163_118357.jpg

4枚さしての状態だったので、1枚ずつ試すと今度はどのメモリにもエラーが出ません。
まあ、メモリというのは非常にシビアなので、挿してるメモリの相性でもエラー出たり出なかったりするみたいです。

で、今挿してるメモリのうち2枚はIO-DATA製で、残りの2枚は別メーカーのノーブランドかつ人からのもらい物です。
以前にそのうちの1枚が怪しい挙動だったので、それを取り外して数週間運用してみたら、突然死がぱったりなくなりました。
やっぱ犯人は88L5HDGG,おまえか!(↓)
e0091163_1182437.jpg

e0091163_1183689.jpg


このメモリを取り外すまでは512MB*4枚挿し(DDR400*2,DDR333*2)のデュアルチャネルだったのですが、512MB*3枚(DDR400*2,DDR333*1)になってしまったのでシングルチャネルにダウングレードしてしまいました。
ただでさDDR400がDDR333にダウンしてるのに、さらにシングルチャネルはちょっと厳しいですね。
ということでメモリのベンチマークをしてみました。
DDR400*2 のデュアルチャネルと DDR400*2 + DDR333*1 のシングルチャネルの比較です。
テストに使ったのは CrystalMark 2004R2 [0.9.123.332] です。
e0091163_1185382.jpg


やはりシングルチャネルとデュアルチャネルの差は歴然ですね。

体感速度はそれほど違いは感じませんが、しばらくはこれで運用するしかありません。
今更DDRのメモリ買うのもあれですしね。
この分を次プラットフォーム用資金に回しておいたほうがいいと思うので。。
早くCore i7のメインストリーム向けデュアルコア(Lynnfield)でませんかねー。乗り換えるなら今のところの候補はこれです。
しかし、Core i7のデュアルコア版(Havendale)はなんか延期とかいう話もあがってたんで、大丈夫なんでしょうか。

と、まあ話がそれましたが、やはりメモリはメーカー製に限りますね。
[PR]
by jehoshaphat | 2009-02-02 01:19 | ハードウェア | Trackback | Comments(0)
32bitアーキテクチャでのメモリ環境
前からもかる~く知っていた話ですが、同僚からWinXP(32bit)にメモリ4GB置いても4GBは認識されないとか聞いたので、詳しいことについていろいろ調べてみました。

実はこれにはいろいろ深い話がついて回るみたいです。
OSの制限、アーキテクチャ自体の制限、etc..

アーキテクチャの制限
まずアーキテクチャ自体の制限からです。

前提として32bitアーキテクチャでは物理メモリは最大4GB、つまり物理メモリアドレスも4GBまでしかサポートされていません。

ところで、データの入出力、保存(ビデオカードetc)などを行う装置はおおむねIOメモリと呼ばれるデータ置き場を持っており、CPUはその装置に何かして欲しい(とソフトに書いてあった)時は装置への命令やデータを書き込みます。

このIOメモリは普通のメモリを完全に別系統にしてしまう Port Mapped IO(PMIO) と、普通のメモリアドレス空間を用いIOメモリをまるで普通のメモリの一部であるかのようにCPUに思い込ませる Memory Mapped IO(MMIO) とがあります。
(このMMIOが主流になったのはi386の時代からみたいです)

MMIOはIOを行うデバイスごとにメモリ空間を消費します。
そしてMMIOは3-4GB付近のアドレス空間を予約して使用しています。(デバイスの数や種類等でどれくらい使われているかは変わってくるらしいですが...)

つまりOS側から見ると3-4GB付近は既にデバイスへのIO用として使用されている領域になっているのです。

確かにデバイスマネージャで各でデバイスのプロパティ->リソースからリソースの種類が"メモリの範囲"という部分の予約メモリアドレス見ると4GB付近を利用していることがわかります。

Intelのサイトにはこう書いています。
http://www.intel.co.jp/jp/support/motherboards/desktop/4gb_memory_issue.htm"
---------------------------
I/O インターフェイス用に確保されたアドレスと物理メモリーのアドレスが重複して使用されるとシステムに不具合が生じるため、I/O インターフェイス用に確保されたアドレス部分のメモリー領域は、物理メモリー側では使用されません。
---------------------------
この制限があるために3GB以上のメモリがあっても3GB以上(環境によってしきい値は異なりますが)の領域は使用されない無駄な領域となってしまいます。
悲しきかな32bitとIO周りの限界。。

この制限をクリアするには32bit、64bitとも(64bitでもMMIOは4GB付近のことがある) BIOS で Memory Remap を使えれば、重複したメモリアドレスを4GB以降に押しやり (Memory Remap)、4GB以降のアドレス(/PAE)が可能となるようです。(64bitなら/PAE不要)

この場合 boot.ini への /PAE オプションが必要なのですが、それをサポートしてるのは Windows Server2003 の EnterPrise と DetaCenter だけだった気がします。
(正確には 32bit XP(SP2以降) , Vista でも PAE オプションはサポートしてるけど、OS内部のメモリアドレス空間4Gしかないため、PAE 有効にしても結局無駄ということです。32bit Windows Server 2008 については調査してないので不明ですが、おそらく32bit Vistaと同じでしょう。)

この点についてはやはりVista SP1でも3GBの壁問題は解決されないの記事を参照。
実際にVistaでPAEをONで試したことが、Windows Vista(32bit)+ 4GB RAM + PAE有効で実験の記事で書かれていますが、やはり無理だったようです。
またCPU,チップセット等の対応が必要です。
よって32bitのXPやVistaには手がありません。。

OSの制限
次にOSの制限です。。

Windows XP とかだと(Vistaは不明)、仮想アドレス空間は2Gまではユーザモード、2Gから4Gまではカーネルが使用します。
これには回避策があるらしく、boot.ini で /3GB というオプションを入れると3GBまでの空間がユーザモードで使えるようです。
ちっと調査不足な面もあると思うんで、暇があったらじっくり調べてみたい論題ですね。
特にWindowsのメモリ管理はなかなか扱っているところが少ないのが残念です。

参考URL:
Core2duo and decrease memory price
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1311721048 MMIOの説明が簡単にのってます。
メモリ サポートと Windows オペレーティング システム PAEやOSの内部メモリアドレス空間、/3GBスイッチについての公式な情報です。
[PR]
by jehoshaphat | 2008-08-22 13:27 | 豆知識 | Trackback | Comments(1)
メモリ使用量の調査。用語メモ書き…

現在開発中のアプリをパフォーマンスをチェックするため、Windows付属のパフォーマンスログを使いチェックしてみました。

瞬間的なメモリ使用量はタスクマネージャでもみれます。
特にWindowsXPのタスクマネージャは表記がかなり不親切です。

まずデフォルトで出てくる「メモリ使用量」。
これはプロセスのワーキングセットを表しています。(ワーキングセットについては後述)
(パフォーマンスカウンタの Process/Working Setと同じ)

そして、「列の選択」で表示を追加できる「仮想メモリサイズ」。
これはプロセスによってコミットされたサイズ、つまりプライベートバイトを表しています。
(パフォーマンスカウンタの Process/Private Bytesと同じ)

参考:(MSDN)CLR徹底解剖 メモリの問題を調べる。

ちなみにVistaではタスクマネージャのデフォルト表示項目が変わっています。
「メモリ(プライベートワーキングセット)」となっています。
これは共有DLLなどが使用するメモリーを除いた、プロセス本体が使用するメモリー量(つまりワーキングセットから共有オブジェクト等を引いたもの)だそうです。
参考:タスクマネージャに表示されるメモリ使用量
また、XP時代にタスクマネージャで「仮想メモリ」表示されていた項目はVistaでは「コミットサイズ」になっているようです。(プライベートバイト)
参考:Vista で "private bytes" の意味って本当に変わったの?
Vista表記になれるまで時間かかりそう。。


さて、作成アプリのパフォーマンス計測時にメモリ関連項目に注意してみるべき点ですが、パフォーマンスカウンタには非常に多くのカウンタがあり、わけがわからなくなってしまいます。おもに重要だと思われる項目だけあげてみました。

■Process
Private Bytes
実際にプロセスが必要しており、他のプロセスと共有できないサイズです。そのプロセスがどれくらいメモリを消費するのかの一番の目屋です。なお、この項目はハードディスクにスワップされているページや物理メモリ上の領域を問いません。(つまり物理メモリで使用中+HDDスワップ中ということになります)
なお、XPのタスクマネージャでは「仮想メモリサイズ」と表現されています。

Working Set
そのプロセスで使用しているメモリサイズ(仮想メモリ含む)のうち実際のメモリ上で確保されている領域です。メモリに余裕がある場合(正確には空きメモリ領域のしきい値)は、使用中でなくても実メモリ上に残る仕様見たいです。(キャッシュ的な感じ?)

Working Set -Private-(Vistaのみ)
上記にて説明済みですが、ワーキングセット - 共有オブジェクト の値となります。実メモリ上のそのプロセスonlyな確保している空間です。
Vistaのタスクマネージャのデフォルトです。

Page Faults/sec
プロセッサがページフォルトを処理する全体の割合を表し、その値は秒あたりに発生するページフォルト数で測定します。
この値はハードページフォルト(ディスクアクセスを伴うもの)と、ソフトページフォルト(ページフォルトが物理メモリの他の場所に検出される) の両方を含むようです。
HDD上のページファイルに対して、スラッシングしているかどうかの正確な値はこのカウンタがソフトページフォルトを含んでいることから難しいかもしれません。HDD上ページファイルへのページングを見るには Memory¥Pages/sec を見たほうがよさそうです。(ただこれだと、そのプロセスに対してというのが見れませんが。)


■Memory
Available Mbytes
物理メモリの空きサイズです。
これが足りないとスラッシングになってしまい、激しくパフォーマンスが低下します。

Pages/sec
MSからのコピペになりますが。。
ハード ページフォルトを解決するためにディスクとの間で読み書きされるページの数を表します (ハードページフォルトは、プロセスにおいて必要なコードまたはデータが作業セットまたは物理メモリの他の場所にも存在せず、ディスクから取得しなければならないときに発生します)。
その値は、Memory: Pages Input/sec と Memory: Pages Output/sec との合計です。


Commited Bytes
システム全体で利用されているメモリの使用量(HDD上のページファイル含む)です。
これが物理メモリより大きくなればなるほどページングが頻繁に発生します。

以上最低限見ておきたい項目をまとめてみました。
メモリ管理、結構手間ですね。

NyaRuRuさんのブログには非常に細かい情報が載っているので大助かりです。

参考:NyaRuRuのメモリがらみが多く書いてる月
MS:パフォーマンスカウンタについて
OS統計情報の取得(Windows以外のOSについても載ってます)
OS小論:OSの構造をもう少し考えてみる(15)(かなり濃い内容です。時間あるときに。。)
パフォーマンスモニタの監視項目(パフォーマンス低下を見極める値も載っているので助かります)
[PR]
by jehoshaphat | 2008-06-10 18:12 | .Net開発 | Trackback | Comments(0)