[18531]  Win2Kのパフォーマンスアップ
投稿者:first さん   2001-10-01 20:07:52
カーネルをすべて物理メモリに常駐させる事により、多少のパフォーマンスアップが
望めるとの記事があり、DisablePagingExecutiveに値「1」(半角)を設定しました。
再起動後、タスクマネージャーにて「カーネルメモリ(KB)」を確認したところ
合計37664、ページ29092、非ページ8564(数値はタイミングが異なるためおおよその値)
となっております。確認はページの値が0近くになるのかなと思ってましたが違うのでし
ょうか?また、どこで確認すれば宜しいでしょうか?
mem:256MBですが、メモリの容量によりDisablePagingExecutiveを設定してもある程度
スワップが設定されるのでしょうか?
よろしくお願いします。
  1. first さん   2001-10-01 20:14:05
    すみません、補足です。
    同時にLargeSystemCache(1)、IoPageLockLimit(65536)も設定しました。
  2. ほんだ さん   2001-10-01 23:55:25
    窓の手を使ってみては?
    ちなみにページファイル0MBは設定できなかったと思います。
    DLL等はSWAPに置いて複数のコマンドで共有させる方がメモリの節約にも繋がるという
    のを聞いた事があります。今はメモリが激安なのでそのような考え方も少々古いかも
    しれませんが。
  3. first さん   2001-10-02 00:34:23
    返答有難うございます。窓の手も利用して試して見ます。

    すみません、一部日本語変でした(^^;
    誤:スワップが設定されるのでしょうか?
    正:カーネルの一部ががページに設定されるのでしょうか?

    >DLL等はSWAPに置いて複数のコマンドで共有させる方がメモリの節約にも繋がる
    9X系ではそうだったと思いますが、2000では同じDLLを異なるプログラムで呼んだ場合でも
    被害を最小にとどめ安定を計る為にそれぞれに呼ばれるみたいです<多分(^^;
  4. McBenie さん   2001-10-02 01:40:02
    >>9X系ではそうだったと思いますが、2000では同じDLLを異なるプログラムで呼んだ場合でも
    >>被害を最小にとどめ安定を計る為にそれぞれに呼ばれるみたいです<多分(^^;

    いえ、NT系でもDLLは共有されます。
    32ビットプログラムであれば 9X系、NT系に関わらず違いはありません。
    ただDLLをプロセス間で共有するための仕組みがNT系、9X系でかなり異なります。
  5. first さん   2001-10-02 02:36:27
    >32ビットプログラムであれば 9X系、NT系に関わらず違いはありません。
    McBenie さん、ご指摘有難うございます。個人的に仕組みに興味があるために参考に
    なされたサイトや本を教えていただけると助かります。

    私が参考に読んだ本を探し出すことが出来ましたので書かれていた部分を一部抜粋します。
    「WindowsサブシステムのKERNELの部分だけは、保護されないリング3のメモリ領域に配置
    されますが、各アプリケーションのメモリ空間ごとに専用のKERNELが配置されるため
    1つのアプリケーションがKERNELを破壊したとしても、他のアプリケーションの
    動作には影響しません。DLLも、アプリケーションのメモリ空間ごとにそれぞれ配置され
    ます。これは、複数のアプリケーションでライブラリを共用してメモリを節約するという、
    DLL本来の目的からすると無駄ではありますが、安定性を重視してこのような方式になって
    います。」(PC USER No.115 12/24号 見て分かるパソコン解体新書)
    これ以上の詳細はかかれていませんでしたので、これ以上の事は分かりませんでした。
    また、私を含めた一般的な人への説明のため多少あいまいな部分があるのかもしれません。
  6. McBenie さん   2001-10-02 04:13:37
    NTの内部仕様についての詳しい知識はありません(^^;;;
    Windowsプログラミングを学ぶうちに知った程度です。

    一般的なDLLの利点については以下マイクロソフトサイトのMSDNライブラリより
    http://www.microsoft.com/japan/developer/library/vccore/_core_the_advantages_of_using_dlls.htm

    より専門的なところでは英語ですが、マイクロソフトのオンラインMSDNライブラリから
    たどれるドキュメントにあります。本は知らない(^^;;; リソースキットとかかな?

    http://www.microsoft.com/japan/developer/library/vccore/_core_the_advantages_of_using_dlls.htm

    プロセス毎に全てのDLLを全部メモリ(仮想アドレス空間)にロードしてたら大変。
    そうならないようにチューニングされているはずです。あ、いやワカランが(^^;;;
    例えば、notepad を 100個立ち上げると単純計算で 約300MBぐらいのメモリを食うはずです(NT4の場合)。
    しかし、タスクマネージャを見れば分かりますが、実際の半分以下ぐらいしかコミットされないはず。
    じゃぁDLLが落ちたとき、そのDLLを共有しているアプリが全部落ちてしまうんじゃないの?
    という疑問はあると思います。その辺の疑問は私も持っているんです(^^;;;

  7. Blau-Ritter さん   2001-10-02 21:19:38
    >DLLを共有しているアプリが全部落ちてしまう
    えー、私の乏しい経験から行くと、大体落ちます。
    よくあるのが、IEがこけたときに他の窓のみならずエクスプローラ自体も落ちるケースです。
    ま、NT系OSの場合はエクスプローラだけは自動復帰してくれることが多いんで、あまり大事には至りませんが。

    …ちょくちょくそういう経験してるのって、ひょっとして私だけ?
  8. かげまる さん   2001-10-03 01:20:10
    いえ、私もです。
    やはり、OSごと逝かないのが救いですね。
  9. じろ さん   2001-10-03 21:43:13
    DLLは共有している、それとも、していない?
    どちらが正しいのか??
    別メモリで実行とかLargeSystemCacheとの関係はあるのかな?
  10. Blau-Ritter さん   2001-10-03 21:53:06
    アドビシステムズのソフトは自社製共有DLLのエラーでまとめて落ちることが多いですね。
    大体あそこのソフトはメモリ喰いなんで同時起動してること自体が間違いだって話もありますが…
  11. じろ さん   2001-10-03 22:39:15
    DisablePagingExecutiveについての解説は
    http://www.microsoft.com/WINDOWS2000/techinfo/reskit/en/Regentry/29931.htm
    なんだけど、どうも0と1の意味が逆転しているように読める。
    誤植なのか、それともこれが正しいのか、さっぱり分からない。
  12. McBenie さん   2001-10-04 01:38:13
    >>DLLは共有している、それとも、していない?
    >>どちらが正しいのか??

    DLLが共有されているかどうかを実際に確認するには
    PlatformSDK付属の PVIEW.EXE(Process Viewer)である程度確認できます。(NT系のみ)
    この中の "Memory Detail"を確認すれば、プロセスに割り当てられたメモリ空間のうち、
    ロードされているDLLがどの位のメモリを食っているか確認できます。
    これを見るとそのプログラムに必要なすべてのDLLがアプリのメモリ空間に全部ロード
    されているわけではない、ということが分かると思います。

    ただ、ダイナミックリンク(とDLL)という技術(仕様?)は、共有されいるのか、いないのか?
    というだけの単純な仕組みではない、ということは確かだと思います。

    #う〜ん、で結局答えになってないっすね(^^;;; ごめんなさい
  13. first さん   2001-10-04 02:03:21
    皆さん、有難うございます。
    >DLLは共有している、それとも、していない?
    高そうな本を少し立ち読みしたりしてみましたが、分かりませんでした。というより理解
    出来ませんでした。<プログラムのこともあまり分かってないので(^^;
    McBenieさんが言われるように共有しているようにも思いますし、かといって全て共有して
    たら安定性に欠けるような気もします。私には理解できない範疇になってしまいました。
    きっと素人の私には理解できないくらいすごい仕組みで部分的に共有してるのかな
    クラスとかレイヤーとか出てきてチンプンカンプンなんでひとまず断念します。
  14. TOM(知) さん   2001-10-04 05:15:45
    皆様、殆どはじめましてなTOM(知)です。
    (初ではないのですが、かなり前に少々、書き込ませてもらった程度ですので)
    本職の方もいらっしゃると思うので、正解はそちらの方に譲るのですが、
    解決しないようなので、私も少々知っている情報からご協力させて頂こうかと思います。
    全くのうろ憶えなのですが、皆さんのおっしゃる事は概ね正しいように思います。
    というのも、NT(2000)では共有/固有どちらも行うらしいです。
    具体的にどの部分がそうなのかは、その当時に見た文献が絵付きでWin9xとの違いを説明した
    ど素人向けのものだったので、はっきりとしません。
    しかし、その絵と共に説明されていた文面では、Win9xは基本的に共有出来るものは共有する方向で配置され、
    NT(2000)は基本的には非共有だが、一部は(部分的にシステムも含むらしい)共有するものもあると言う事でした。
    ここで基本的と書いたのは方向性と言うか考え方としてと、いう風に解釈したのですが如何でしょうか?
    厳密のは違うのでしょうが、あくまでど素人向けのものだった事をお含み置きください。
  15. first さん   2001-10-04 20:46:44
    皆様、有難うございます。
    DisablePagingExecutiveについてレジストリを色々やって見ましたがタスクマネージャー>
    パフォーマンスのカーネルメモリ(KB)の非ページの値は変わりませんでした。確認方法が
    悪いのか仕様が変わったのかは分かりませんが・・・・
    じろさんの紹介してくださったサイトは本等にかかれている内容と逆になっているようですね。後は、ツール等を試してみます。でも、体感出来るほどパフォーマンス上がらないので
    あればそれ程気にする必要がないのかもしれません(^^;
  16. JunkTime さん   2001-10-06 21:12:38
    私見ですが・・・

    カーネルメモリ(KB)の非ページ→メモリ管理機構を含むカーネル本体が使用しているコードおよびデータ領域である。スワップファイルへの退避やリストアを担当している部分でもあるため、そもそもスワップアウトされることはない。よって、DisablePagingExecutiveをいじくっても変化はしない。 DisablePagingExecutiveでスワップされなくなるのは、カーネルメモリのうちページ領域である。メモリを128MBytes以上搭載しているのならば、カーネルをスワップアウトすることは、よほどのことがない限りないはずです。逆に64MBytes程度しかない場合には、メモリが逼迫しているためにカーネルをもスワップアウトしないと実メモリが足りない状況になります。もちろん、パフォーマンスは低下します。スワップによるパフォーマンスの低下を気にするなら、パラメータをいじる前に素直に256MBytes以上のメモリを搭載すべきです。XPに乗り換えることを考えているなら、512MBytes程度搭載していても多くはないでしょう。快適に使用したければ、MSの推奨環境の2倍程度のメモリは必要です。

    NT系のDLL共有→完全にコード領域だけを共有。DLLのクライアント間のデータの共有はファイルのメモリへのマッピングにより擬似的に行っている。Win16アプリについては、Win3.x,9xのDLL共有と同様の手法をとっているため、Win16アプリが落ちると、他のWin16アプリも落ちる可能性がある。この場合でも、Win32アプリには影響がない。ただし、Win16ーWin32アプリ間で通信をしている場合には、通信をしているWin32アプリには、何らかの影響がある。比較的どうでもいいようなソフトやWin16である必要があるソフトは、NT系でもWin16アプリのままになっていることが多いです。

    Win3.x,9xのDLL共有→9x系では、NT系のDLL共有も行えるが、互換性のためにコードもデータ領域も共有している。共有しているデータ領域を破壊されるとアプリのダウンの連鎖が発生する。
  17. JunkTime さん   2001-10-06 21:19:06
    比較的どうでもいいようなソフト→すでに動作するプログラムがあり、費用をかけてまでWin32にする必要がないようなソフトです。(念のため。)