2009年06月16日

間違いだらけの Windows チューニング その2 (IoPageLockLimit)

結構昔から、IoPageLockLimit は 有効かどうか物議を醸しているので、ちょっと調査してみました。

調べてみたのは、Windows 2000RTM(5.0.2195.1)とWindows 2000SP4(5.0.2195.7133)とWindows XP SP3(5.1.2600.3427) のカーネルです。

以下は NTOSKERNELが参照するすべての Session Manager のレジストリ内容です。(プログラムのソースから抜粋したので多分大丈夫でしょう)
Session Manager
W2KRTMW2KSP4XPSP3
CriticalSectionTimeoutOO
O
Debugger RetriesOOO
EnableTimerWatchdogOOO
ForceNpxEmulationOO 
GlobalFlagOOO
HeapSegmentReserveOOO
HeapSegmentCommitOOO
HeapDeCommitTotalFreeThresholdOOO
HeapDeCommitFreeBlockThresholdOOO
LicensedProcessors OO
ObjectSecurityMode OO
RegisteredProcessors OO
PowerPolicySimulateO
OO
ProtectionModeOO
O
ResourceTimeoutCountOOO
LUIDDeviceMapsDisabled  O
ResourceCheckFlags  O

Session Manager\Memory ManagementW2KRTMW2KSP4XPSP3
ClearPageFileAtShutdownOO
O
DisablePagingExecutiveOOO
IoPageLockLimitO  
LargeSystemCacheOOO
NonPagedPoolQuota OO
O
NonPagedPoolSize O O O
PagedPoolQuota O O O
PagedPoolSize O O O
PagingFileQuota O O O
SecondLevelDataCache O O O
SystemPages O O O
AllocationPreference   O
Mirroring   O
SystemViewSize   O
SessionImageSize   O
DontVerifyRandomDriversOOO
DynamicMemoryOO
O
UnusedFileCacheO  
OverCommitSizeOOO
ModifiedPageLifeOO
O
PoolTagOOO
PoolTagOverrunsOO
O
SnapUnloadsOOO
ProtectNonPagedPoolOO
O
TrackLockedPagesOOO
TrackPtesOOO
VerifyDriversOOO
VerifyDriverLevelOOO
VerifyMode  O
LargePageMinimumOOO
EnforceWriteProtectionOO
O
MakeLowMemoryOOO
WriteWatchOO

SessionViewSize O
O
SessionPoolSize OO
PoolUsageMaximum OO
MapAllocationFragment OO
NonPagedPoolMaximumPercent OO
LargeStackSize  O
LowMemoryThreshold  O
HighMemoryThreshold  O
DeadlockRecursionDepthLimit  O
DeadlockSearchNodesLimit  O
MinimumStackCommitInBytes  O
NodeCount  O
Affinity  O
AffinityShift  O
PageMask  O
PageShift  O

Session Manager\ExecutiveW2KRTMW2KSP4
XPSP3
AdditionalCriticalWorkerThreadsOOO
AdditionalDelayedWorkerThreadsOOO
PriorityQuantumMatrixOOO
MaxTimeSeparationBeforeCorrectOOO

Session Manager\KernelW2KRTMW2KSP4XPSP3
DpcQueueDepthOOO
MinimumDpcRateOOO
AdjustDpcThresholdOOO
IdealDpcRateOOO
XMMIZeroingEnable O 
ObUnsecureGlobalNames OO
ObTracePoolTags  O
ObTraceNoDeregister  O
FastSystemCallDisable  O
PoCleanShutdownFlags  O
ObCaseInsensitive  O

Session Manager\I/O SystemW2KRTMW2KSP4XPSP3
CountOperationsOOO
IoVerifierLevelOOO
LargeIrpStackLocationsOOO
PerfDecreaseAbsoluteModifier  O
PerfIncreaseTimeValue  O

Session Manager\Configuration ManagerW2KRTMW2KSP4XPSP3
RegistryLazyFlushInterval OO
RegistryLogSizeLimit  O
SelfHealingEnabled  O

Session Manager\PowerW2KRTMW2KSP4XPSP3
IdleDefaultMinThrottle  O
IdleThrottleCheckRate  O
IdleThrottleCheckTimeout  O
IdleFrom0Delay  O
IdleFrom0IdlePercent  O
Idle0TimeCheck  O
IdleTimeCheck  O
IdleTo0Percent  O
IdleDefaultDemotePercent  O
IdleDefaultDemoteTime  O
IdleDefaultPromotePercent  O
IdleDefaultPromoteTime  O

Session Manager\ThrottleW2KRTMW2KSP4XPSP3
PerfTimeDelta  O
PerfCriticalTimeDelta  O
PerfCriticalFrequencyDelta  O
PerfIncreasePercentModifier  O
PerfIncreaseAbsoluteModifier  O
PerfDecreasePercentModifier  O
PerfIncreaseMinimumTime  O
PerfDecreaseTimeValue  O
PerfDecreaseMinimumTime  O
PerfDegradeThrottleMinCapacity  O
PerfDegradeThrottleMinFrequency  O
PerfMaxC3Frequency  O
PerfBusyAdjmentThreshold  O
PerfEnablePackageIdle  O

Session Manager\Debug Print FilterW2KRTMW2KSP4XPSP3
WIN2000  O
SYSTEM  O
SMSS  O
TUP  O
FS  O
CRASHDUMP  O
CDAUDIO  O
CLASSPNP  O
DBOOK  O
*緑背景は、初期設定でWin2000に存在しないレジストリ。

見てのとおり、XPSP3 やWin2000SP4 では IoPageLockLimit は参照されていません。よって、効果はあるはず無いのです。

ちなみに、効果があるRTMにおける設定だとしても、指定値がほとんどのサイトが間違っています。
NTOSKRNL.exeの ソースを見てみると、デフォルト値は 0x200(512)で 512Kが ロードされます。物理メモリが64MB未満の場合は、物理メモリ-7M(7M引いた値)、64〜512Mの場合は物理メモリ-16M、それ以上のシステムでは(物理メモリ - 64M )が最大のLockLimitになっており、意味が無いと書いています。(ほとんどのサイトはこの減算処理を行っていないです)

後、数値演算系ベンチマークで比較測定しているサイトがありますが、計算系のベンチマークはひとたび走ると、ずっとRAM上に乗りっぱなしなので変化は無いか誤差範囲のはずです。

追記:
1.Windows2000 SP4の全バイナリを検索しましたが、IoPageLockLimit は未使用でした。
2.Windows 2000 RTMのソースを追ってみたのですが、デフォルトで読み込んだ値が4K単位で処理されてるらしい、ただしデフォルト値の 0x200 と バイト単位の処理が内部で混同されてるようで、バグの原因になってる感じがしました。(だから、デフォルトが 512kってのが妖しい)
3.気になったので、Windows NT のCDを引っ張り出してきて、SP6をダウンロードして調べてみました。
NT4 SP1ではIoPageLockLimitは未使用。
NT4 SP4/SP6 では デフォルト値が 0x0080000 になっている(つまり、NT4は確実にバイト単位で指定されている。)が、ちゃんと設定値を MmProbeAndLockPages 関数内で使われているのを確認。
4.Win2000 SP4ではどうなのかを検証してみたところ、MmHighestUserAddress を参照してるような感じ。
どうも処理自体が変わってしまっているようだ。

Win2000RTM
          mov    ebx,[L0047EEE0]
          add    ecx,ebx
          cmp    ecx,[L0047EF24] <- ここにIoPageLockLimitの値が入っている。
          jbe    L0043636C
          mov    cl,[ebp-78h]
          call    [HAL.DLL!KfLowerIrql]
          inc    [L0047EE74]
 L00436362:
          push    C00000A1h
          jmp    L00436223

Win2000SP4
          mov    edx,[ebp-74h]
          jg     L004390A1
          cmp    edx,[MmHighestUserAddress]
          jbe    L004390F8

                    :

 L004390F8:
          inc    [L00485C94]
 L004390FE:
          mov    dl,[ebp-78h]
          push    00000002h
          pop    ecx
          call    ebx   (ebx=KeReleaseQueuedSpinLock)
          mov    dword ptr [ebp-54h],C00000A1h
          jmp    L0043914F

WinXPSP3
 L0044C794:
          mov    ecx,[ebp-40h]
          cmp    ecx,[MmHighestUserAddress]
          jc     L0044C7E7



 L0044C7E7:
          push    00000002h
          pop    ecx
          call    [HAL.dll!KeReleaseQueuedSpinLock]
          inc    [L0048F5D4]
          and    byte ptr [ebx+06h],FDh
          push    C00000A1h
          jmp    L0044C899

関連記事:
間違いだらけの Windows チューニング その1

関連サイト:

TechNet IoPageLockLimit
IoPageLockLimit値でファイルアクセスの高速化: Automatic
Liga web log: I/Oバッファ・サイズの最適化は効果なし
Thief's Guild Blog: windows(2000,XP)でのパフォーマンス測定
メモ帳 朝の2時間半
电脑所用的185个技巧(中)(转帖)_踏雪_新浪博客
XP终极优化2 - 猫猫的日志 - 网易博客
VistaでIoPageLockLimitの検証:らいっちのPC奮闘記
[IoPageLockLimit]をXPで設定する意味はあるのか?
Windows2000sp4の"IoPageLockLimit"の効果検証: TaMaの日記
IoPageLockLimit: ハイウェイに乗る前に
このページの表示が認められていません: IoPageLockLimitの設定値はやみくもに大きくしないほうがいい
Windows Vista チューニング+高速化 -3 - Windows Live
Windows2000高速化のためディスクキャッシュサイズをいじる。 | 煤式自動連結器
Windows2000のパフォーマンスをアップするメモ:STARDUST can be found
熱湯FAQ:「ファッキュー」と読んだらあきまへん? 少し強引に 〜デバイスドライバが利用できる最大のI/Oバッファサイズをメモリに合わせて最適化〜
ITmedia エンタープライズ:Windows Tips「Windows2000/XPのパフォーマンスを向上させる その2」
PC総合研究所 » Windows XPのメモリチューンアップ
2008-09-12 - ときどき日記(Rev1)
WindowsXP高速化のための設定などを公開してみる - GeekなNooblog
Windows XP、レジストリ、2次キャッシュ - RapidShare



blackwingcat at 11:56│Comments(7)TrackBack(0) この記事をクリップ! トピックイットに投稿する | | Windows2000 | メンテナンス

トラックバックURL

この記事へのコメント

1. Posted by Win2k Fan   2009年06月16日 22:43
PC初心者のため、いつもはコメントは控えて
記事読ませてもらって勉強しておりますが、
今回のはすごく自分にも分かりやすかったですw
Io・・の設定はあまり意味なかったのですね。
2. Posted by koteitan   2009年06月17日 16:14
トラックバック有り難うございます。
>ちなみに、効果があるRTMにおける設定だとしても、指定値がほとんどのサイトが間違っています。(ひどいサイトだと単位がバイトになっている…)
とあるのですが、関連記事のMS公式↓では
http://technet.microsoft.com/en-us/library/cc959494.aspx
0x1–0xFFFFFFFF bytes とありますよね。
これが間違いでソース上はkb指定って意味ですかね。なんにせよややこしいですな。
3. Posted by blackwingcat   2009年06月17日 16:41
こんにちは
確かに、公式サイトもそうなってますね(^^;
プログラム上ではKBで処理されてるんでKBで指定するのが正しいと思うんですが、ちょっと自信が・・・。
ついでなので、NTのソースコードも現在どうなってるか検証してみましたが、あの説明内容は NTから引用したみたいで、Win2000のRTMの説明としては微妙なようです。
4. Posted by Y.S.K   2009年06月17日 17:32
今回の記事には目から鱗が落ちました。
まさか意味がないとは露知らず…。
意味がないのであれば設定したレジストリの値はさっさと削除してしまった方が良いのでしょうか?
5. Posted by blackwingcat   2009年06月17日 18:34
Windows のレジストリ管理の関係で、レジストリは削除しても、その領域が確保されて、サイズは変わらないんです(単に削除済みというマークがつくだけで、メールソフトみたいな感じです)。
だから、最初から設定しないほうがパフォーマンスは良いのでしょうね(^^;
(レジストリを圧縮できるなら削除したほうが良いですが)
6. Posted by koteitan   2009年06月17日 19:44
レス有り難うございます。
未使用だという記事は海外のフォーラムで原典付で
紹介されていました。
http://www.msfn.org/board/index.php?showtopic=25684
This registry key isn't used in Windows 2000 Datacenter Server and is no longer used in Windows 2000 starting with Windows 2000 Service Pack 1
Source: Inside Windows, Third Edition, chapter 7: Memory Management
まぁ、この原典自体が間違い(公式サイトのように^^;)だと何を信じたらいいのかわからなくなり、そうなるとやっぱりソースが一番なんでしょうねぇ。
追調査おつかれさまでした。
7. Posted by    2009年06月18日 09:36
いつもためになる情報をありがとうございます。
トラックバックをいただいたので、早速読んでみると目玉ボヨヨンでした。
今まで民間療法的にWindows2000の高速化をいろいろと試していましたが、今回のようにきちんと検証された裏づけがあると、納得できますネ。

この記事にコメントする

名前:
URL:
  情報を記憶: 評価: 顔   
 
 
 
livedoor プロフィール
My PC
SNOWSTORM(P5E3 Premium)
OS:Win2000AdvancedSv
CPU:Xeon(4Core) 2.83G
Memory:8G
VGA:GeForce9800GTX+
HDD:SSD(32G)
    +SATA(540G+180G)
Crystal SCR:256640
SNOWFOX2(W860CU)
CPU:Core i5-540M(2.53G)
OS:Win2000Pro
Memory:4G
VGA:Geforce GTX285M
HDD:SSD(160G)
Crystal SCR:176460
SNOWMOBILE(N10Jc)
Windows2000/XP Home
Crystal SCR:38316
SNOWLEO(MA206J/A)
OS:OSX 10.4 +
Windows2000Pro(Solo動作)
Crystal SCR:24061
記事検索
訪問者数

    今週のアクセス数

    Win2000お勧め
    お勧め記事
    .NET FrameworkのUninstall
    lolifox 0.3.8.x
    WindowsのシャットダウンTips
    Fox Launcher
    ウィルス感染を手動で見つける方法
    Dependency Walker 日本語化
    Ultra VNC 1.0.6/1.0.8 を日本語化
    IME補完計画
    BSoD(ブルースクリーン)特集
    デフラグ時の4つの心得
    不明なデバイス探し
    SETUPAPI/NTDLLBugFix
    DNSデボルブ用更新[KB957579]
    最新 update.sys!
    4Thread以上のCPU最適化
    Win2000マルチコアで最適化
    Windows 2000の通信速度改善
    内蔵簡易FireWallを使う
    ワームに感染しないインストール
    Remote Desktop Client
    IME 辞書 Tips
    Win2000用セキュリティSOFT
    不要なファイルの削除
    Win2000カスタマイズ
    便利なキーボードショートカット
    9月末まで使える体験版セキュリティ

    非対応ハード動作編
    NVIDIA WHQL Driver
    Intel Chipset 最新 INF
    Sentelic Finger Pad Driver
    ATI Legacy Driver 9.8
    ATI Radeon Driver 8.1x/9.x
    ATI Ahci/Raid Driver
    Intel SATA AHCI Driver
    D21LC(eMobile)
    USB-WSIM
    UVC カメラ
    Logicool Webcam
    Logicool ゲームパッド
    XBOX360用コントローラー
    Logicool Mouse
    Microsoft IntelliPoint
    iPod Touch/iPhone Driver

    非対応アプリ動作編
    Second Life
    雀龍門
    Media Manager for PSP 2.5a
    .NET Framework 3.5SP1
    ATOK 月額版(2010)
    Leaf 愛佳でいくの!!
    VistaのScreenSaver
    会計ソフト弥生シリーズ 10
    Vegas Movie Studio 9
    EyeBall Chat
    ・CanonPowerShot[Soft/DPP]
    Google SketchUp Pro 7
    dance mixer
    Lismo Port
    DivX
    SONY ScreenSaver
    mixi アプリ
    mixi Station
    DivX v7.x
    ニコニコムービーメーカー(動画)
    RC-S330 PaSoRi
    Finale 2009
    ZoneAlarm 8.0
    ルナティア Online
    ストリートギアーズ
    xfy Blog Editor
    Photoshop Elements 7
    Premiere Elements 7
    PowerShell 1.0
    ai sp@ce
    電脳フィギュアARis
    VOCALOID2 ミク・リンレン
    Google Chrome/SRW Iron
    Evernote 3
    Media Player 10
    iTunes 7.6.2
    QuickTime 7.5x/7.6x
    foobar2000 9.5.x/9.6.x
    RealPlayer11
    Safari3/4.0
    ShockwavePlayer10/11
    Windows Live Writer
    Live Messenger
    Veoh Web Player / Web TV
    Level-R

    追加機能・カスタマイズ編
    W2K Update Rollup v2
    XNA/SlimDX
    CPU Core数リミット解除
    OutLook Express 6SP3
    MDAC 2.8 SP2
    GIF/PNGを使えるMSPAINT
    IE5でWindowsUpdate
    MSXML 4.0SP3
    DirectX9.0c(2010/Feb)+拡張
    MS09-062(Gdiplus.dll)更新
    Unicode 制御文字
    Internet Explorer6 Bonus Pack
    夏時間(DaylightSavingTime)
    レジストリバックアップを取る
    IME2007
    Windows Media Bonus Pack
    XPSファイルビューア
    Windows Defender
    文字化け対策(FontLink)
    Meirio(KB927489)
    msconfig
    圧縮フォルダ
    Windows Movie Maker
    IE5.01/5.5/6タブ化
    MediaTypeChanger(EISA構成)
    Win2000 SP4 Support Tool
    kill/tlist with Debugging Tools
    sc.exe with Resource kit
    reg.exe
    TaskTray 256色化
    ISO仮想CD/DVDドライバ
    IE6高速化とWSH 5.7/5.8
    MS Baseline Security Analyzer
    音声認識 API 5.1
    Text Service

    Win2000インストール編
    N10Jc
    ThinkPad X200(7454)
    Quad Core/X48/P5E3
    VAIO VGN Type S
    E6850搭載 サポートPC
    Let'snote CF-R6
    MacMini
    Dell LATITUDE D630
    Core i7 + X58 +ICH10R
    790FX + SB750
    Clevo W860CU
    Categories
    アーカイブ