ライト・アロケート(Write Allocate 以下WA)の機能について。 |
WAは、L1ライトバックキャッシュにヒットしていないデータの書き込みが発生した場合のメモリーへの書き込み動作を変更します。
WAが有効でない場合、先の条件において、L1キャッシュを変更することなくメモリーへ直接書き出される、「ライトスルーの動作となります。」
WAが有効な場合、同じ条件において、まずそのアドレスを含む1ライン分のデータ( 32Byte )がL1キャッシュにバーストリードサイクルで読み込まれ、そのキャッシュされたデータに対して、データの書き込みが発生し「ライトバックの動作となります。」
これにより、メインメモリーへの単発のノン・バーストライトサイクルを減らしバーストライトサイクルで書き込むことにより、メモリー転送効率を上げるように動作します。
WAは、どの様なときに効果が無いのか? |
一般的に、ソフトウェアの性質において、メモリーの書き込みが互いの近接内で起こる傾向があり(局所性の原則)、WAで読み込まれたキャッシュラインへの書き込みヒット率は高いと予測されます。
しかし、一部のベンチマークなどで、データをバーストサイクルで連続的に書き込む様な場合、WAの設定の有無は、結果として現れません。
また、メモリーリードのみのベンチにおいても、結果は現れません。また、32Byte 以上離れたメモリーに、とびとびで書き込みが、発生する場合もキャッシュされたデータが再利用されず、バスのトラフィクが増えるだけで、性能の低下を招くだけとなります。
WAは、どの様なメモリー(種類)に対して、一番有効か、 |
64bite のデータを 32Byte 分書き込んだ時の動作を想定した時のクロック数(BASE 66Mz)
L1にもL2にもヒットしていない書き込み、
1-1) EDO-DRAM(6-2-2-2) WA Off WA On 6+6+6+6 24 6+2+2+2+6+2+2+2 24
1-2) S-DRAM(7-1-1-1) WA Off WA On 7+7+7+7 28 7+1+1+1+7+1+1+1 20 L1にはヒットしていないがL2にはヒットしているメモリーへの書き込み
2-1) EDO-DRAM(6-2-2-2) B-SRAM(3-1-1-1) WA Off WA On 6+6+6+6 24 3+1+1+1+6+2+2+2 18
2-2) S-DRAM(7-1-1-1) B-SRAM(3-1-1-1) WA Off WA On 7+7+7+7 28 3+1+1+1+7+1+1+1 16 EDO-DRAMでは、L2キャッシュにヒットしない書き込みが連続的に続く場合1-1)の様にWAの有効でも無効でも大差がないことが、想像されます。スーパーpiの様に大量にメモリーに書き込みが生じる場合ここらあたりがネックになるかも知れません。
L2キャッシュにヒットしいて、そのデータをの書換が起こる場合は、EDO-DRAMでも多少処理は効率化されます。
レイテンシの大きいS-DRAMの場合は、EDO-DRAMに比べWAは、有効に働くようです。しかしこれは、一部のメモリーアクセスをかいつまんで紙の上だけで推測した物で、実際のメモリーアクセスはもっと複雑で、もっと多くの組み合わせが出てきますので、上の表などほとんどあてにならないことをご了承下さい。
K6.SYS/K5.SYS使用時 Windows98 インストール時の注意
CONFIG.SYS に K6.SYS 又は K5.SYS を組み込んだ状態で、Windows98 をインストールすると、ハングアップします。
これは、Windows 98 の SETUP が、CONFIG.SYSの内容を書き換えて、K6.SYS 又は K5.SYSの行を EMM386..EXE 等の後に 持ってくるからで、Windows98との愛称の問題では無さそうです。SETUP中リセットがかかった後 K6.SYS 又は K5.SYSにてハングしてしまうますので、その様な自体におちいった場合、K6.SYS 又は K5.SYSの実行をタイミング良くスペースキーでキャンセルしていただくかWin98修復FDでPCを立ち上げた後エディター等で、CONFIGSYSの内容を以下のように"rem"を追加してドライバーを起動させないようにして下さい下さい。device=C:\WINDOWS\himem.sys
device=C:\WINDOWS\EMM386.EXE RAM
:
rem device=C:\K6.sys /WA=64
一番良いのは、インストール前にK6.SYS 又は K5.SYSの行を削除するなどして無効にしておいてから、インストールしましょう。
AMD純正AMDMSR.EXE を K6 Model7 、K6-2 で、使うには。
WA012.LZH に含まれる、AMDMSR.EXE のファイルの先頭をアドレス0として、アドレス1626hから1628hにある25 FF 0F を B8 61 05 に替えるとAMDMSR.EXE が K6-2 で使えるようになります。
(数値は全てHex ですので間違えないように)
ただし、K6専用になることと、 -p オプションで得られるCPU ID は、
561 に固定されます。
AMD K6-2 NEW CORE
AMD K6-2 の CPUID Fam:5 Mod8 Stp 8〜F (資料による表示は Model 8[F:8] )の物は、新設計のCPUコアを使用しているようで、各種設定等も大きく変更されました。又、新機能が一部追加になっています。このコアは、なななか耐性が良いらしく、300Mz版でも400Mzで動いたと言う実例もあるようです。
CPUIDでの判別では、外観からModel 8[F:8] であるか見分けが付かないようですが、CPUのセラミックの角に刻印してある数字が「26351」以上ならModel 8[F:8] である可能性は高いようです。
AMDK6-2 Model 8[F:8} の新機能
WA可能なメモリエリアは508MByte から、4GByte(32Bit Address フル)に増えました。
Write Merge Buffer 8Byte(64bit) が追加になり、Memory Type Range Registers により、(UC):Uncacheable「キャッシュされないエリア」ないしは(WC)Write-Combining「ライトマージで書き込みできるエリア」を2エリアもてるようになりました。
(EWBEC)EWBE Control と、(DPE)Data Prefetch Enable を Extend Feature Enable Register により制御できるようになりました。
(Extend Feature Enable Register には、そのほかに、System Call Extension 機能を有効にするbitがK6 Model7で追加になっています。)
(WC)Write-Combining K6-2 Model 8[F:8]
(WC) Write-Combining はメモリーエリアの属性の一つです。
このWC属性に設定されたメモリーエリアは、キャッシュされませんが、複数の小容量の書き込み(1Byteとか2Byte)を、Write Merge Buffer に蓄え CPU の書き込み単位である8Byte(64bit)にまとめて書き込まれます。
一般的に否キャッシュエリアのビデオメモリへの書き込みは1ピクセル単位である場合が多く、8bitや16bitのアクセスが発生してしまいます。隣り合ったメモリーに順次アクセスする場合でも、同一メモリーライン上に複数回のメモリーアクセスが発生してしまいます。
Write Merge Bufferは8Byte(64bit)あって、これらの小容量のアクセスを1つにまとめにし、1ライン( 64bit )/1回で済ます事ができます。その結果WC属性に設定された否キャッシュエリアのメモリーアクセスは、「無効」 や UC属性より改善されます。
WC属性のエリアは、ビデオフレームメモリー領域に割り当てられるのが、一般的だと考えられます。ビデオフレーム領域は、AT互換機の場合VGAが000A:0000h から128KByte と私が使っているG200( 8M )ならDF00:0000 から8Mか、D700:0000 から16M 割り当てるのではないかと考えていますが、各PCの設定やビデオボードによっても違いますので、デバイスマネージャー等で調べてみて下さい。
WC属性を設定するための基本要素は、そのエリアの大きさとエリアの先頭アドレスとエリアの属性をK6-2 Model 8[F:8] のMTRRに設定することによりできます。K6-2 Model 8[F:8] は、MTRRを2組(MTRR0/MTRR!1)持っていて、各要素を個別に設定することができます。
ただし、設定の大きさと先頭アドレスには規則性があり、大きさの倍数が先頭アドレスになるようにしか設定できません。例を出すと、一般的なAT互換機のVGAフレームアドレスは、000A0000h (640K) から000BFFFFhまでの128Kbyte あります。この場合640KByteは128KByteで割ることができます。先頭アドレス000A:0000h エリアの大きさ128KByte エリアの属性WC に設定すれば、VGAフレームバッファはWC属性に設定できます。では、先頭アドレス000A0000hがそのままで、256KByteのエリアを設定できるでしょうか?640KByteは256KByteは、答えが整数になるようには割り切れません、と言うことはこの組み合わせは設定できないことになります。
・先頭アドレスは、0000:0000h 〜FFFE:0000hまで、128Kbyte(0001:FFFFh)を最低単位として設定できます。[初期値は0000:0000h]
・大きさは、128K 256K 512K 1M 2M 4M 8M 16M 32M 64M 128M 256M 512M 1G 2G 4G (単位 Byte) のいずれかです。[初期値は4GByte]
・属性は、何も設定しない「無効」、(WC) Write-Combining、(UC):Uncacheable のいずれかです。[初期値は「無効」]
WA MonitorUVer0.52 においてMTRR0 MTRR1 の設定は、上記のことを参考にして下い。WA MonitorUVer0.52の各MTRRの設定は、大きさと先頭アドレスの整合性をいつも取っていますので、大きさをSize 128Kbyteに先に設定しないと、思った先頭アドレスBase Address が設定できないかもしれません。Size 4GByte の時Size優先からBaseAddress優先に変えましたので、トラックバーを押した時点でSize は、128KByteに設定されます。
(EWBEC)EWBE Control K6-2 Model 8[F:8]
(EWBEC) External Write Buffer Empty Control は、(EFER)Extended Feature Enable Regster に追加された新しい機構の一つで、CPUのEWBE#ピン(入力) の信号の代わりを仮想的に制御するようです。<-実際の所は不明
EWBE#ピンは、チップセット等の外部回路によりメモリーやPCIバスへの書き込みを効率化させる機能であるExternal Write Buffer(ライトバックと同じ様な働きをするバッファ)が、空になったことを知るための入力です。M/BがEWBE#信号をサポートしていない場合、EWBECを3段階に設定することにより、メモリーへの書き込みを、命令の順番通りやるかどうかの制御を行います。 順番通りやらない[ 性能は高い]、Extended Feature, UC/WC以外は順番通り [中間] 、 すべて順番通り[ 性能は低い (default)] の何れかを選択できます。「多くのシングルプロセッサシステムはEWBE#信号をサポートしていない。この場合は最高性能)を薦める」と書いてあります。[ 性能は高い]を試してだめだったら[中間] 'を試してみる、と言うことになると思います。
WA MonitorUVer0.52 において、EWBEC は、EFER の項目のExtended Feature のゲージにおいて設定できます。
MAX が[ 性能は高い] 、MIN が、[ 性能は低い (default)] で その中間で[中間]になります。
(DPE)Data Prefetch Enable K6-2 Model 8[F:8]
(DPE)Data Prefetch Enable は、データの読み込み時にミスキャッシュが起きた場合、通常は1回のバーストライトアクセスで、32bit読み込まれますがそれを、64byte先読みを行うよう設定できます。
(デフォルトで有効です。)
(WC)Write-Combining の効果が分からない
「WCをグラフィックカードのフレームバッファに設定したにも関わらず ,Windows98/95/NT上で効果が分からない。」と言う疑問をお持ちの方に、ある程度の理由付けがまとまりました。
この場合、CPUはWCエリア(グラフィックカードのフレームバッファ)に8 〜 32bit/ピクセル のデータを64bitにまとめ、1回で書き込みを行うので、グラフィックの描写は、速くなるであろうと思われます。
事実、DOS VGAでの実験では、かなり効果があることが、分かっています。
しかし、Windows上では、テスト内容にもよりますが、あまり効果が現れません。なぜなら、WC エリアの設定に対して効果があるのは、CPUを返して書き込みを行った場合のみだからです。つまり、今までWCを設定してもベンチマークに変化がない場合、それは CPU を返した処理ではなくほとんどグラフィックボードのアクセラレータ機能の性能を測っていたことになります。
又、現在のところほとんどのマザーボードの PCI/AGP バス幅は32bitです。(規格としては64bitもあります)
いくら、CPU側で64bitにまとめたとしても、グラフィックボード上のフレームバッファには32bitずつに分けられてしまいWCの効果が分かりにくくなることも考えられます。
Windows上でどうすれば、WCの効果を調べることが出来るかと言いますと。システムのプロパティ -> パフォーマンス -> グラフィックス で、ハードウエアアクセラレータをなしに設定して、色数を256色(8bit カラー)に落としてからベンチマーク等で調べてみて下さい。WCの有効/無効での違いが出てくると思います。
以上は、理論的に考えた上での想像です。