間違いだらけの 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 W2KRTM W2KSP4 XPSP3
CriticalSectionTimeout O O O
Debugger Retries O O O
EnableTimerWatchdog O O O
ForceNpxEmulation O O  
GlobalFlag O O O
HeapSegmentReserve O O O
HeapSegmentCommit O O O
HeapDeCommitTotalFreeThreshold O O O
HeapDeCommitFreeBlockThreshold O O O
LicensedProcessors   O O
ObjectSecurityMode   O O
RegisteredProcessors   O O
PowerPolicySimulate O O O
ProtectionMode O O O
ResourceTimeoutCount O O O
LUIDDeviceMapsDisabled     O
ResourceCheckFlags     O

Session Manager\Memory Management W2KRTM W2KSP4 XPSP3
ClearPageFileAtShutdown O O O
DisablePagingExecutive O O O
IoPageLockLimit O    
LargeSystemCache O O O
NonPagedPoolQuota  O O 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
DontVerifyRandomDrivers O O O
DynamicMemory O O O
UnusedFileCache O    
OverCommitSize O O O
ModifiedPageLife O O O
PoolTag O O O
PoolTagOverruns O O O
SnapUnloads O O O
ProtectNonPagedPool O O O
TrackLockedPages O O O
TrackPtes O O O
VerifyDrivers O O O
VerifyDriverLevel O O O
VerifyMode     O
LargePageMinimum O O O
EnforceWriteProtection O O O
MakeLowMemory O O O
WriteWatch O O
SessionViewSize   O O
SessionPoolSize   O O
PoolUsageMaximum   O O
MapAllocationFragment   O O
NonPagedPoolMaximumPercent   O O
LargeStackSize     O
LowMemoryThreshold     O
HighMemoryThreshold     O
DeadlockRecursionDepthLimit     O
DeadlockSearchNodesLimit     O
MinimumStackCommitInBytes     O
NodeCount     O
Affinity     O
AffinityShift     O
PageMask     O
PageShift     O

Session Manager\Executive W2KRTM W2KSP4 XPSP3
AdditionalCriticalWorkerThreads O O O
AdditionalDelayedWorkerThreads O O O
PriorityQuantumMatrix O O O
MaxTimeSeparationBeforeCorrect O O O

Session Manager\Kernel W2KRTM W2KSP4 XPSP3
DpcQueueDepth O O O
MinimumDpcRate O O O
AdjustDpcThreshold O O O
IdealDpcRate O O O
XMMIZeroingEnable   O  
ObUnsecureGlobalNames   O O
ObTracePoolTags     O
ObTraceNoDeregister     O
FastSystemCallDisable &nbs
p;
  O
PoCleanShutdownFlags     O
ObCaseInsensitive     O

Session Manager\I/O System W2KRTM W2KSP4 XPSP3
CountOperations O O O
IoVerifierLevel O O O
LargeIrpStackLocations O O O
PerfDecreaseAbsoluteModifier     O
PerfIncreaseTimeValue     O

Session Manager\Configuration Manager W2KRTM W2KSP4 XPSP3
RegistryLazyFlushInterval   O O
RegistryLogSizeLimit     O
SelfHealingEnabled     O

Session Manager\Power W2KRTM W2KSP4 XPSP3
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\Throttle W2KRTM W2KSP4 XPSP3
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 Filter W2KRTM W2KSP4 XPSP3
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

          &nb
sp;         :

 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

おすすめ

14件のフィードバック

  1. Win2k Fan より:

    PC初心者のため、いつもはコメントは控えて
    記事読ませてもらって勉強しておりますが、
    今回のはすごく自分にも分かりやすかったですw
    Io・・の設定はあまり意味なかったのですね。

  2. Win2k Fan より:

    PC初心者のため、いつもはコメントは控えて
    記事読ませてもらって勉強しておりますが、
    今回のはすごく自分にも分かりやすかったですw
    Io・・の設定はあまり意味なかったのですね。

  3. koteitan より:

    トラックバック有り難うございます。
    >ちなみに、効果があるRTMにおける設定だとしても、指定値がほとんどのサイトが間違っています。(ひどいサイトだと単位がバイトになっている…)
    とあるのですが、関連記事のMS公式↓では
    http://technet.microsoft.com/en-us/library/cc959494.aspx
    0x1–0xFFFFFFFF bytes とありますよね。
    これが間違いでソース上はkb指定って意味ですかね。なんにせよややこしいですな。

  4. koteitan より:

    トラックバック有り難うございます。
    >ちなみに、効果があるRTMにおける設定だとしても、指定値がほとんどのサイトが間違っています。(ひどいサイトだと単位がバイトになっている…)
    とあるのですが、関連記事のMS公式↓では
    http://technet.microsoft.com/en-us/library/cc959494.aspx
    0x1–0xFFFFFFFF bytes とありますよね。
    これが間違いでソース上はkb指定って意味ですかね。なんにせよややこしいですな。

  5. blackwingcat より:

    こんにちは
    確かに、公式サイトもそうなってますね(^^;
    プログラム上ではKBで処理されてるんでKBで指定するのが正しいと思うんですが、ちょっと自信が・・・。
    ついでなので、NTのソースコードも現在どうなってるか検証してみましたが、あの説明内容は NTから引用したみたいで、Win2000のRTMの説明としては微妙なようです。

  6. blackwingcat より:

    こんにちは
    確かに、公式サイトもそうなってますね(^^;
    プログラム上ではKBで処理されてるんでKBで指定するのが正しいと思うんですが、ちょっと自信が・・・。
    ついでなので、NTのソースコードも現在どうなってるか検証してみましたが、あの説明内容は NTから引用したみたいで、Win2000のRTMの説明としては微妙なようです。

  7. Y.S.K より:

    今回の記事には目から鱗が落ちました。
    まさか意味がないとは露知らず…。
    意味がないのであれば設定したレジストリの値はさっさと削除してしまった方が良いのでしょうか?

  8. Y.S.K より:

    今回の記事には目から鱗が落ちました。
    まさか意味がないとは露知らず…。
    意味がないのであれば設定したレジストリの値はさっさと削除してしまった方が良いのでしょうか?

  9. blackwingcat より:

    Windows のレジストリ管理の関係で、レジストリは削除しても、その領域が確保されて、サイズは変わらないんです(単に削除済みというマークがつくだけで、メールソフトみたいな感じです)。
    だから、最初から設定しないほうがパフォーマンスは良いのでしょうね(^^;
    (レジストリを圧縮できるなら削除したほうが良いですが)

  10. blackwingcat より:

    Windows のレジストリ管理の関係で、レジストリは削除しても、その領域が確保されて、サイズは変わらないんです(単に削除済みというマークがつくだけで、メールソフトみたいな感じです)。
    だから、最初から設定しないほうがパフォーマンスは良いのでしょうね(^^;
    (レジストリを圧縮できるなら削除したほうが良いですが)

  11. koteitan より:

    レス有り難うございます。
    未使用だという記事は海外のフォーラムで原典付で
    紹介されていました。
    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
    まぁ、この原典自体が間違い(公式サイトのように^^;)だと何を信じたらいいのかわからなくなり、そうなるとやっぱりソースが一番なんでしょうねぇ。
    追調査おつかれさまでした。

  12. koteitan より:

    レス有り難うございます。
    未使用だという記事は海外のフォーラムで原典付で
    紹介されていました。
    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
    まぁ、この原典自体が間違い(公式サイトのように^^;)だと何を信じたらいいのかわからなくなり、そうなるとやっぱりソースが一番なんでしょうねぇ。
    追調査おつかれさまでした。

  13. より:

    いつもためになる情報をありがとうございます。
    トラックバックをいただいたので、早速読んでみると目玉ボヨヨンでした。
    今まで民間療法的にWindows2000の高速化をいろいろと試していましたが、今回のようにきちんと検証された裏づけがあると、納得できますネ。

  14. より:

    いつもためになる情報をありがとうございます。
    トラックバックをいただいたので、早速読んでみると目玉ボヨヨンでした。
    今まで民間療法的にWindows2000の高速化をいろいろと試していましたが、今回のようにきちんと検証された裏づけがあると、納得できますネ。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です