レジスタ5Eの検証
<Top Page>

  レジスタ5Eはセカンドキャッシュの設定と言われている。Oh!PC誌98年3月1日号でそう書かれていたのが広まったらしい。
 他にもメモリへのアクセスサイクルを向上させるものだ、という説もある。
 結論から言ってしまおう。どちらも正しいと思われる。メインメモリに作用するビットもあるし、セカンドキャッシュに作用するビットもある。1つのレジスタが1つの役割しか持たない、という考えは誤りなのだ。

 一般に知られている設定は00h、04h、31h、34h、38hと言ったところで、定番は00h又は31hとされており、00hが通らなければ31h、とするのが定説である。

 このレジスタの初期値は35hである。しかし、F5hだ、とした文献も少なからず存在するが、これにはBIOSのリビジョン違い等の要因が考えられよう。ここではあくまで筆者の環境での検証として、先に進もう。このレジスタにはリードオンリービットは存在しない。しかし、ビット6、ビット7のどちらかを立てると、パリティエラーを吐いてフリーズしてしまう。何やら致命的な部分を司っているようだ。エラーを吐く、吐かないに関わらず、この2ビットは弄らないほうが良さそうである。
 

 では検証に入ろう。まずは初期値でのパフォーマンス。

値:35h[00110101b]
Access|  Unbuffered Access[MB/sec]  |  Buffered Access[MB/sec]  
 Size |   Read      Write    RD/M/WR|   Read      Write    RD/M/WR
------+-----------------------------+-----------------------------
   4K |   91.443    61.436    89.591| 2393.179  2388.505   955.402
   8K |   92.248    60.751    90.205| 2390.839  2388.505   953.725
  16K |   93.157    60.883    91.313| 2389.671  2388.505   953.725
  32K |   93.509    61.112    91.109| 2375.168  2333.806   952.101
  64K |   93.676    61.046    91.341| 1590.848   792.958   795.278
 128K |   93.618    61.027    91.434| 1591.074   596.221   795.335
 256K |   93.646    61.077    91.465| 1590.637   530.360   795.234
 512K |   93.639    61.045    56.922|  328.510   109.507   165.792
1024K |   93.687    61.053    47.849|   93.705    78.448    47.873
2048K |   93.705    61.070    44.341|   93.696    68.703    44.350
4096K |   93.716    61.083    42.771|   93.717    64.647    42.777
8192K |   93.701    61.063    42.038|   93.701    62.805    42.014
 

 さて、ここから各ビットの持つ意味を検証していく。

値:00h[00000000b]
Access|  Unbuffered Access[MB/sec]  |  Buffered Access[MB/sec]  
 Size |   Read      Write    RD/M/WR|   Read      Write    RD/M/WR
------+-----------------------------+-----------------------------
   4K |  115.391    61.402   112.307| 2392.945  2388.271   955.308
   8K |  115.929    61.571   111.085| 2390.606  2388.271   953.632
  16K |  115.669    61.383   112.620| 2389.438  2388.271   953.632
  32K |  115.872    61.470   112.926| 2374.935  2333.578   952.332
  64K |  116.383    61.572   112.792| 1590.692   792.880   795.201
 128K |  116.206    61.503   112.943| 1590.918   596.163   795.257
 256K |  116.305    61.543   113.016| 1590.482   530.308   795.156
 512K |  116.297    61.534    68.571|  328.752   110.296   179.788
1024K |  116.307    61.523    57.365|  116.338    79.011    57.300
2048K |  116.321    61.556    52.951|  116.329    69.180    53.001
4096K |  116.323    61.543    51.026|  116.320    65.154    51.007
8192K |  116.330    61.556    50.123|  116.322    63.303    50.104
 

値:01h[00000001b]
Access|  Unbuffered Access[MB/sec]  |  Buffered Access[MB/sec]  
 Size |   Read      Write    RD/M/WR|   Read      Write    RD/M/WR
------+-----------------------------+-----------------------------
   4K |   94.332    61.325    89.584| 2393.184  2388.510   955.404
   8K |   93.518    60.983    90.491| 2390.844  2388.510   953.727
  16K |   92.578    61.451    90.834| 2389.676  2388.510   953.727
  32K |   93.160    61.442    91.462| 2375.172  2333.811   952.427
  64K |   93.607    61.540    91.561| 1590.851   792.959   795.280
 128K |   93.611    61.501    91.416| 1591.077   596.222   795.337
 256K |   93.676    61.523    91.490| 1590.641   530.361   795.236
 512K |   93.710    61.508    60.207|  328.541   110.259   179.516
1024K |   93.697    61.503    51.442|   93.702    79.014    51.433
2048K |   93.708    61.554    47.932|   93.695    69.149    47.930
4096K |   93.707    61.522    46.352|   93.705    65.143    46.352
8192K |   93.698    61.549    45.598|   93.704    63.297    45.594
 

値:02h[00000010b]
Access|  Unbuffered Access[MB/sec]  |  Buffered Access[MB/sec]  
 Size |   Read      Write    RD/M/WR|   Read      Write    RD/M/WR
------+-----------------------------+-----------------------------
   4K |   77.648    61.367    74.627| 2393.184  2388.510   955.404
   8K |   77.503    61.017    76.873| 2390.844  2388.510   953.727
  16K |   78.132    61.375    76.647| 2389.676  2388.510   953.727
  32K |   78.235    61.450    77.047| 2375.172  2333.811   952.427
  64K |   78.169    61.577    76.970| 1590.851   792.959   795.280
 128K |   78.350    61.525    76.941| 1591.077   596.222   795.337
 256K |   78.361    61.506    76.984| 1590.641   530.361   795.236
 512K |   78.368    61.564    53.543|  328.516   110.298   179.640
1024K |   78.376    61.538    46.450|   78.343    79.000    46.458
2048K |   78.369    61.552    43.591|   78.358    69.157    43.599
4096K |   78.370    61.512    42.278|   78.361    65.162    42.273
8192K |   78.371    61.551    41.643|   78.373    63.291    41.654
 

値:04h[00000100b]
Access|  Unbuffered Access[MB/sec]  |  Buffered Access[MB/sec]  
 Size |   Read      Write    RD/M/WR|   Read      Write    RD/M/WR
------+-----------------------------+-----------------------------
   4K |  110.792    60.038   107.827| 2393.184  2388.510   955.404
   8K |  115.892    60.561   111.255| 2390.844  2388.510   953.727
  16K |  115.668    60.986   112.654| 2389.676  2388.510   953.727
  32K |  115.865    60.966   112.656| 2375.172  2333.811   952.427
  64K |  116.311    61.013   113.038| 1590.851   792.959   795.280
 128K |  116.413    61.072   112.868| 1591.077   596.222   795.337
 256K |  116.300    61.031   113.082| 1590.641   530.361   795.236
 512K |  116.305    61.054    64.668|  328.752   109.555   167.355
1024K |  116.332    61.041    53.277|  116.312    78.422    53.275
2048K |  116.303    61.064    48.958|  116.327    68.668    48.956
4096K |  116.327    61.076    47.044|  116.327    64.620    47.045
8192K |  116.331    61.079    46.151|  116.323    62.808    46.150
 

値:08h[00001000b]
Access|  Unbuffered Access[MB/sec]  |  Buffered Access[MB/sec]  
 Size |   Read      Write    RD/M/WR|   Read      Write    RD/M/WR
------+-----------------------------+-----------------------------
   4K |   98.218    61.408    94.121| 2393.184  2388.510   955.404
   8K |   96.800    61.044    94.405| 2390.844  2388.510   953.727
  16K |   98.420    61.420    95.527| 2389.676  2388.510   953.727
  32K |   98.629    61.407    95.609| 2375.172  2333.811   952.427
  64K |   98.386    61.559    96.074| 1590.851   792.959   795.280
 128K |   98.509    61.554    96.059| 1591.077   596.222   795.337
 256K |   98.519    61.538    96.025| 1590.641   530.361   795.236
 512K |   98.551    61.525    62.249|  328.736   110.320   179.727
1024K |   98.488    61.531    52.923|   98.555    79.010    52.927
2048K |   98.536    61.537    49.241|   98.582    69.210    49.236
4096K |   98.556    61.537    47.585|   98.539    65.145    47.583
8192K |   98.569    61.546    46.799|   98.582    63.297    46.798
 

値:10h[00010000b]
Access|  Unbuffered Access[MB/sec]  |  Buffered Access[MB/sec]  
 Size |   Read      Write    RD/M/WR|   Read      Write    RD/M/WR
------+-----------------------------+-----------------------------
   4K |  115.697    61.478   108.170| 2393.184  2388.510   955.404
   8K |  117.622    61.577   111.051| 2390.844  2388.510   953.727
  16K |  115.484    61.444   112.631| 2389.676  2388.510   953.727
  32K |  115.970    61.445   112.411| 2375.172  2333.811   952.427
  64K |  116.041    61.573   112.871| 1590.851   792.959   795.280
 128K |  116.283    61.505   112.936| 1591.077   596.222   795.337
 256K |  116.374    61.525   113.030| 1590.641   530.361   795.236
 512K |  116.305    61.540    68.605|  328.761   110.246   188.294
1024K |  116.297    61.560    57.334|  116.315    79.004    57.361
2048K |  116.330    61.533    52.977|  116.329    69.197    52.962
4096K |  116.323    61.555    51.013|  116.314    65.114    51.056
8192K |  116.317    61.536    50.113|  116.328    63.298    50.132
 

値:20h[00100000b]
Access|  Unbuffered Access[MB/sec]  |  Buffered Access[MB/sec]  
 Size |   Read      Write    RD/M/WR|   Read      Write    RD/M/WR
------+-----------------------------+-----------------------------
   4K |  112.117    61.478   112.004| 2393.184  2388.510   955.404
   8K |  117.852    61.086   113.320| 2390.844  2388.510   953.727
  16K |  115.533    61.434   111.820| 2389.676  2388.510   953.727
  32K |  115.914    61.443   112.896| 2375.172  2333.811   952.427
  64K |  116.236    61.458   112.876| 1590.851   792.959   795.280
 128K |  116.179    61.546   113.040| 1591.077   596.222   795.337
 256K |  116.365    61.553   113.024| 1590.641   530.361   795.236
 512K |  116.324    61.510    68.615|  328.705   110.284   179.771
1024K |  116.304    61.498    57.398|  116.340    78.949    57.295
2048K |  116.311    61.545    53.007|  116.292    69.138    52.984
4096K |  116.306    61.543    51.037|  116.304    65.106    51.061
8192K |  116.302    61.536    50.143|  116.303    63.286    50.122

 
 ビット0、ビット1、ビット3を立てると、メインメモリのリード性能が落ちることがわかる。特にビット1は初期状態以下にまでパフォーマンスが低下している。
 また、ビット5はサイズ4KBのアンバッファードリードを若干低下させる。
 ビット2はサイズ4KBのアンバッファードリードの低下に加え、若干ではあるがすべてのアンバッファードライトと、サイズ512KB以上のバッファードライトを低下させる。そして、ライト性能の低下以上にリード&ライト性能が低下しており、リード動作からライト動作に移る際にも更なるウェイトが挿入されていると推測される。
 いずれにせよ、この5つのビットは速度低下の意味しか持っていないため、パフォーマンスを求めるのであれば立てないほうが良いだろう。

 しかし、ビット4は少々複雑だ。サイズ4KBのアンバッファードリード及びアンバッファードリード&ライトを若干低下させるのと引き換えに、サイズ8KBのアンバッファードリードとサイズ512KBのバッファードリード&ライトを向上させている。
 と、なると、差し引きどちらが速いか、と言う問題になる。現実問題として、サイズ4KBのアンバッファードリードが遅くなる、というのはかなり痛い。小さな演算はほぼこれに引っかかってくるからだ。反面、256KB超512KB以下のバッファードリード&ライトが生ずる状況は、そうそうないと思える。このサイズに収まる演算で、かつそのデータがトライレベルキャッシュに格納されている状況がそうそうあるとは思えない。
 すると、このビットも立てないほうが速いだろう。

 これらを総合すると、最速が00h、次点が10hと言うことになり、以下、04hが続く。

 ちなみによく使われる設定である31h、34h、38hでの結果は次の通り。

値:31h[00110001b]
Access|  Unbuffered Access[MB/sec]  |  Buffered Access[MB/sec]  
 Size |   Read      Write    RD/M/WR|   Read      Write    RD/M/WR
------+-----------------------------+-----------------------------
   4K |   91.721    61.380    89.591| 2393.179  2388.505   955.402
   8K |   93.534    61.037    90.385| 2390.839  2388.505   953.725
  16K |   93.373    61.371    91.474| 2389.671  2388.505   953.725
  32K |   93.461    61.473    90.953| 2375.168  2333.806   952.101
  64K |   93.720    61.513    91.437| 1590.848   792.958   795.278
 128K |   93.611    61.521    91.435| 1591.074   596.221   795.335
 256K |   93.634    61.513    91.481| 1590.637   529.198   795.234
 512K |   93.682    61.543    60.265|  328.770   110.317   188.325
1024K |   93.695    61.527    51.451|   93.679    78.959    51.413
2048K |   93.686    61.507    47.936|   93.678    69.147    47.925
4096K |   93.684    61.521    46.372|   93.691    65.118    46.346
8192K |   93.703    61.508    45.613|   93.689    63.257    45.597
 

値:34h[00110100b]
Access|  Unbuffered Access[MB/sec]  |  Buffered Access[MB/sec]  
 Size |   Read      Write    RD/M/WR|   Read      Write    RD/M/WR
------+-----------------------------+-----------------------------
   4K |  114.914    59.892   112.701| 2393.179  2388.505   955.402
   8K |  116.263    61.133   112.266| 2390.839  2388.505   953.725
  16K |  115.435    61.130   112.395| 2389.671  2388.505   953.725
  32K |  115.908    61.081   112.866| 2375.168  2333.806   952.101
  64K |  116.180    60.958   112.911| 1590.848   792.958   795.278
 128K |  116.307    61.047   113.029| 1591.074   596.221   795.335
 256K |  116.366    61.069   113.024| 1590.637   530.360   795.234
 512K |  116.330    61.064    64.674|  328.540   109.497   165.660
1024K |  116.316    61.059    53.260|  116.296    78.379    53.269
2048K |  116.320    61.050    48.955|  116.328    68.679    48.955
4096K |  116.329    61.050    47.047|  116.333    64.662    47.046
8192K |  116.324    61.047    46.146|  116.330    62.818    46.152
 

値:38h[00111000b]
Access|  Unbuffered Access[MB/sec]  |  Buffered Access[MB/sec]
 Size |   Read      Write    RD/M/WR|   Read      Write    RD/M/WR
------+-----------------------------+-----------------------------
   4K |   95.853    61.374    94.144| 2392.940  2388.266   955.307
   8K |   98.171    60.997    94.461| 2390.601  2388.266   953.630
  16K |   98.002    61.407    95.465| 2389.433  2388.266   953.630
  32K |   98.187    61.437    96.030| 2374.931  2333.573   952.006
  64K |   98.498    61.530    95.882| 1590.689   792.879   795.199
 128K |   98.498    61.535    96.047| 1590.915   596.161   795.256
 256K |   98.451    61.497    96.074| 1590.479   530.307   795.155
 512K |   98.456    61.506    62.221|  328.638   110.220   188.110
1024K |   98.483    61.493    52.924|   98.504    78.951    52.903
2048K |   98.506    61.501    49.230|   98.474    69.140    49.228
4096K |   98.482    61.501    47.576|   98.485    65.103    47.576
 8192K |   98.495    61.506    46.795|   98.538    63.250    46.791 




 ビット4、ビット5が大した影響を持っていない以上、下位4ビットの影響がマトモに出ているのが判る。定番とされている31hでは、雀の涙ほどの効果しかない。逆に、あまり使われていない34hは、意外な拾い物かも知れない。標準状態との差はビット0のみなのにもかかわらず、それ相応のパフォーマンスアップが見られるからだ。04hも通らないときに試してみる価値はあるだろう。



<INTELSATの研究の目次へ>
<研究室入口へ>