home *** CD-ROM | disk | FTP | other *** search
/ What CD? 20 / WPCFEB98.ISO / HTML / RES / RESOURCE / ESSENTIA / CACHCHK6.ZIP / CACHECHK.DOC next >
Encoding:
Text File  |  1996-12-27  |  18.7 KB  |  375 lines

  1.         CACHECHK 
  2.         v6 12/26/96
  3.     Copyright (c) 1995-96 by Ray Van Tassle.
  4.  
  5.     This is NOT freeware.  This is postcard-ware.  Send me a nice
  6.     picture post card as the registration fee.
  7.     But if you want to, or if this has been VERY valuable to you, a
  8.     money contribution will be gratefully accepted.  You decide if
  9.     you should send money, and how much.  How could I be any more fair??
  10.     Ray Van Tassle
  11.     1020 Fox Run Lane
  12.     Algonquin, Il. 60102 USA
  13.     (847)658-4941
  14.  
  15.  
  16. CACHECHK performs memory access timing tests, to see if you have a 
  17. cache, how many caches, and to check the access speed.
  18. It will also tell you if any of the memory isn't cached, and if any
  19. of the memory is significantly slower that the rest.
  20.  
  21. SAMPLE COMMAND LINES:
  22.     To log information to a file, for posting or printing---
  23.     >del mycpu.log    
  24.     >cachechk My 486, OPTI chipset >>mycpu.log
  25.     >cachechk -w My 486, memory write >>mycpu.log
  26.     >cachechk -f My 486, with cache disabled >>mycpu.log
  27.  
  28.  
  29. There are two kinds of caches,  the on-chip cache (level one, or L1) 
  30. which is in the CPU processor chip, and off-chip cache (level two, or 
  31. L2) which is on the motherboard.
  32.  
  33. Some 386 motherboards have 64KB of off-chip cache.
  34. Some CYRIX 386/486 chips have a very small L1 cache.
  35. Most 486's have an on-chip cache, and most new motherboards also have a L2 
  36. cache.
  37. The Intel 486DX2/66 has 8KB of L1 cache.
  38. The Intel 486DX4/100 has 16KB of L1 cache.
  39. The AMD 486DX4/100 has 8KB of L1 cache.
  40. Intel Pentium has 16KB of L1 cache, 8KB for data and 8KB for code.
  41. The AMD K5 has 24KB of L1 cache, 8KB for data and 16KB for code.
  42.  
  43. The typical 486 MB has 256KB of L2 cache, although many will let you 
  44. install 512KB or even 1MB.
  45.   
  46. Q: HOW MUCH CACHE DO I NEED?
  47. For a 486, get a 256K cache.
  48. All the writeups that I have seen say:
  49.     64KB cache gets a LOT of improvement.
  50.     128KB gets a bit more.
  51.     256KB gets a teeny bit more.
  52.     512KB gets only a teensy weensy bit more.
  53. (Note: these are for DOS and WINDOWS3.  A real OS, like LINUX, OS/2, 
  54. and perhaps WIN-95 and WIN-NT may be different.)
  55. In general, this seems to be the way all caches work---the first bit 
  56. gets a lot of bang, and each additional bit gives smaller and smaller 
  57. improvements.
  58. It is claimed that, as long as you have a decent L2 cache, that an
  59. AMD 486/100 (with an 8k L1) is virtually identical in performance to an
  60. Intel 486/100 (with a 16K L1).
  61.  
  62. At the time this was written (Early 1995) ......
  63. 256K often uses 8-(32K x 8) SRAM chips (8 * 32K = 256KB), in two banks,
  64. and the MB can interleave accesses to the two banks.
  65. 512K often uses 4-(128K x 8) SRAM chips (4 * 128K = 512KB, but this is only 
  66. one bank, so the access time is slower, because the MB can't do bank 
  67. interleaving.
  68. Whether the cache is in one bank or two, depends upon details of the 
  69. motherboard design, and the chips available at the time.  This is expected
  70. to change in the future, as different SRAM configurations enter the market.
  71. Note the careful use of the word "can"; a particular MB might _not_ do
  72. interleaving, even though it could.  Also, depending on the exact MB design,
  73. the interleaving may or may not be done properly (in the sense of attaining
  74. the benefits).
  75.  
  76. Basically, 512K costs a LOT more than 256K and gives only a marginal
  77. improvement in performance, so stick with 256K.
  78.  
  79. Update (Late 1996) .............
  80. The Intel Triton chipset (HX and VX) supports either 256KB or 512KB of L2
  81. cache.  For various technical reasons, the best all-round L2 cache is
  82. "Pipeline-Burst".  At lower bus speeds (less than 66MHZ) "async" is a
  83. bit faster, but it gets slower (extra wait states) above that, whereas
  84. PB stays the same speed.
  85. The current state-of-the-art SRAM (cache) chips available are "3232"
  86. and "3264", 7 ns, in a chip that is about one inch square.
  87. This designation means "32 bits by 32K (or 64K)".  Two of these chips will
  88. give you 256KB (3232) or 512KB (3264) of L2 cache.
  89. Many motherboard manufacturers have come to the conclusion that, given all
  90. this, it makes more sense to just go ahead and install (solder) them
  91. onto the motherboard, rather than to incorporate a COAST socket and use
  92. a plugin cache card.
  93. The prices are around $15 for 256KB and $25-30 for 512KB.  This is so cheap
  94. that you might as well go for 512KB.  I did.
  95.  
  96.  
  97. Q: Why does my main memory show faster with the cache enabled, even
  98. out beyond the cache size?
  99. A: The L1 cache (on a 486) is filled in granularity of 16 bytes (this
  100. is the "cache line size").  When you read a byte, all 16 bytes of that
  101. line are read into the cache, in 4 quadbyte (32 bit) units.  The quadbyte
  102. which is addressed is read from memory first, put into the cache, and
  103. transferred to the CPU.  Then the other 3 quadbytes are read into the cache.
  104. So, if you are accessing the memory in sequential order (like CACHECHK does),
  105. the next bytes have been (or are being) automatically sucked into the cache,
  106. a "read-ahead", if you will.
  107. If the cache is disabled, this read-ahead does not take place.
  108.  
  109. Q: Why is my main RAM memory faster on writing than reading?
  110. A: I don't know.  If somebody can explain it to me, I'll put it in.
  111.  
  112. Q: How much are the timings dependent on sheer CPU speed, as opposed
  113. to the actual memory access speed?
  114. A: Probably not very much.  There is some loop control overhead in the
  115. timing loop, but it is minimal.  Each different data point is executed
  116. for approximately the same length of time (1/2 second). So the 1kb block size
  117. loops for 16 more times than the 16kb block size.  So the loop overhead is
  118. 16 times greater.  But the times are constant (10 us/kb in my system).  If the
  119. instruction overhead was significant, I would expect to see a "tilt" in the
  120. numbers.  But I don't, so it's not.
  121. And remember, the goal of CACHECHK is to
  122. measure the detectible timing improvements of the caching, and not to
  123. measure the raw cpu power.
  124.  
  125.  
  126. Q: How does it measure the CPU speed?
  127. A: By measuring how long it takes to do a particular instruction
  128. 1000 times.
  129.  
  130. Q: No matter how I set the write cache policy (copy-back or write-through),
  131. CACHECHK reports the same speed.  Isn't copy-back (AKA write-back)
  132. supposed to be better?  What gives?
  133. A: It *is* better, but only when reads and writes are intermixed.  By 
  134. design, CACHECHK does not intermix operations.  It either reads in a
  135. sustained burst, or writes in a sustained burst, so the write policy never comes
  136. into play.  CACHECHK is designed to saturate the memory read/write channel and
  137. to report the timings in this condition.  In fact, in order to be able to
  138. detect and time the various stages of the memory system, it is absolutely
  139. necessary to throw as much cr*p at it as it can possibly handle.
  140.  
  141. ===================================================================
  142. CACHECHK will run the access tests using all the memory in your 
  143. machine, so that you can check to make sure that all the memory is 
  144. cached.
  145.  
  146.  
  147. Usage: CACHECHK -tn -4dhfnvwqz? [Optional comments]
  148. Cache memory detector & timer.  Runs only on 80386 (or better) CPU.
  149.     -4  = Override CPU check, treat this as a 486.
  150.     -d  = Show one decimal place in printouts
  151.     -h? = Print this help text.
  152.     -f  = Perform tests with cache disabled.
  153.     -q  = Quick. Faster but not as accurate.
  154.     -qq = Each 'q' is 2 times quicker. But less accurate.
  155.     -tn = Top of memory to test. n = nth MB
  156.     -v  = Verbose.  -vv = positively chatty!
  157.     -xN = Extra tests. N is bitmapped number.  "-x7" does all three
  158.       1 =   --write.
  159.       2 =   --read with cache off.
  160.       4 =   --read with byte offsets.
  161.     -w  = Do memory write (otherwise memory read).
  162.     -z  = Slower.  Like q, but the other direction.
  163.           Probably won't be needed on anything less than a 786DX4/200.
  164.  
  165. The "optional comments" just get logged, so you can identify test information
  166. along with the results.  Mostly useful if you redirect the output to
  167. a file. For example:
  168.     cachechk -q Test with bios set to 1 wait state >before.dat
  169.  
  170. The basic timing loop is 1/2 second per size.  Each 'q' cuts the time 
  171. in half.  Each 'z' doubles the time.  If the timing figures aren't 
  172. steady, you probably have too many q's.
  173.  
  174. You can run the tests with the cache disabled, with the 'f' option (on 
  175. a 486 or Pentium).  Naturally, it is re-enabled again when it's done.
  176. This generally turns off BOTH the L1 and L2 cache.  Your bios setup 
  177. may (or may not) let you individually enable/disable the caches.
  178.  
  179. Times cache & memory access, and figures out cache size(s).
  180. Results are in:
  181.    microseconds per KB, MB per seconds, and nanoseconds per byte.
  182.  
  183. Memory is access in quadbytes, in flat 32-bit protected mode. For base 
  184. memory (first MB, MB#0) only 640KB is accessed. Memory accesses are in 
  185. various block sizes, from 1KB to 2MB. Each megabyte is tested starting 
  186. at the beginning of that megabyte.  CACHECHK will work under a memory 
  187. manager (HIMEM, EMM386, QEMM, Windows, etc.), but the results may be 
  188. inaccurate, the machine might crash, and it won't be able to test all 
  189. of the memory. It will run under WINDOWS, but results are wildly 
  190. inaccurate. For best results, boot clean--on DOS 6 & above, hit F5 
  191. while it boots.
  192.  
  193. It will NOT touch extended memory that is already allocated or in use.
  194. If you have a memory manager installed, it usually occupies the first
  195. portion of the 2nd megabyte, so CACHECHK will not be able to check that.
  196.  
  197.  
  198. SOME TIMINGS I HAVE TAKEN
  199.  
  200. CPU    L1    L1speed    L2    L2speed    Mem    Speeds    (taken from the
  201. type    siz    ns/byte    size    ns/byt    ns/byt    µsec/KB    printout)
  202. ------    ----    -------    ----    ------    ------    ----------
  203. 386/25SL  0    n/a     64k    80.2    108    84.....114    (Laptop)
  204. 386/25      0    n/a     64k    59.2    90    62......94    (Desktop)
  205. 486/33      8k    30.7    128k    43.6    70    31..45..73    (Intel)
  206. 486/66      8k    16.1    0    n/a    50    15......52    (Intel)
  207. 486/100      8k    11.1    0    n/a    46    10......48    (AMD)
  208. 486/100     16k    10.0    256k    18.8    26    10..19..27    (Intel)
  209. P-75      8k    10.2    256k    16.4    24    10..17..24
  210. K5-100      8k     2.5    256k     6.5    10     3.. 7..11    AMD
  211. 6x86-133 16k     1.9    512k     4.2     8     2.. 4.. 8    CyrixP166+
  212.  
  213. Timer
  214. -----
  215. CACHECHK directly accesses the timer chip to get a high-precision timer
  216. (0.838 microsec resolution).  In some motherboards (notibly reported
  217. to be "UMC with fake cache chips"), there is a problem with this timer.
  218. I worked around this in version 2, but there may be some boards where my
  219. work-around still doesn't work.
  220.  
  221.  
  222. Cache basics
  223. ------------
  224. The CPU cache is generally organized in "lines" of 16 bytes.  An access
  225. to any byte which is not in the cache causes a "cache line fill" operation,
  226. which reads in the entire 16 byte chunk.
  227. On a 486, memory is 4 bytes wide (32 bits).  Using burst-mode, the CPU
  228. reads four 32-bit chunks.  The numbers you sometimes see, such as 3-2-2-2
  229. or 2-1-1-1, refer to the number of clock cycles to read these chunks.  The
  230. first one takes longer because of setup time.
  231. The 486 CPU can do "out-of-order line fill".  If you access the 4th chunk,
  232. the memory system will read that chunk in first, pass the addressed bytes
  233. to the CPU, then read in the other 3 chunks.
  234.  
  235. The L1 cache is on the CPU itself (AKA on-chip cache), and is usually
  236. 4-way set associative.  This means that a line can go into any one of four
  237. different places in the cache, using an LRU (least-recently-used) algorithm.
  238. The L2 cache is on the motherboard.  Almost always these are direct-mapped
  239. (or "1-way").  This means that a line can go into just one place in the cache.
  240. Four-way set associative is better.  Actually, the more "ways", the better.
  241. Also, more expensive.  "Fully associative" is the absolute best.  The Cyrix
  242. 686 has a small (256 byte) fully-associative instruction-line cache (for
  243. instructions only), and a 16KB 4-way set associative cache.  The Pentium
  244. has 8KB for instructions and 8KB for data, totalling 16K.
  245.  
  246. The other terms you hear are "write-back" (AKA "copy-back"), and
  247. "write-through".  In write-through, when the CPU changes a byte in memory,
  248. it first writes it into the cache, then that cache line is written to
  249. the RAM.  In write-back, when the CPU changes a byte in memory, it writes
  250. it into the cache, and sets the "dirty-bit" for that cache line.  Later
  251. on, when some other piece of RAM needs to be put in the cache, the memory
  252. system will notice that the line is "dirty", and write it to RAM, before
  253. reading the new data into the cache line.
  254. Write-back is better.
  255. Most motherboards have write-back L2 cache.
  256. The Cyrix CPUs, and the "enhanced" AMD and Intel CPUs have write-back 
  257. L1 cache.  Other AMD and Intel cpus have write-through cache.
  258. Very advanced CPUs and motherboards do other tricks in the write-back stage.
  259. Instead of writing the cache line to RAM, then reading the new data into
  260. the cache, it will move the data from the cache into a write-buffer, then
  261. do the read, then finally write into RAM when there is no read activity.
  262. More of these write buffers will give the memory system more chances to delay
  263. a write cycle in favor of a read cycle.
  264. Again, depending on the exact MB design,
  265. the write-back may or may not be done properly (in the sense of attaining
  266. the benefits).
  267.  
  268. Motherboard Specsmanship
  269. ------------------------
  270. Back in the early days of transistor radios, one selling point was how
  271. many transistors a radio had.  Some manufacturers (especially Korean and
  272. Japanese) would incorporate non-functional transistors, just to be able
  273. to be able to (legitimately) claim a higher count.
  274. The same thing is possible with MB designs.  A "write-back" design without
  275. a dirty-tag-ram, or without posted write buffers, will not perform much
  276. (or any!) better than a write-through.  Ditto for interleaving.
  277.  
  278. Further Reading
  279. ---------------
  280. I have reluctantly provided more technical detail above that I had originally
  281. planned.  However, it's by no means a complete discussion.
  282. Refer to the pc hardware FAQ (PCHWFAQ, filename PCFAQnnn.ZIP) for much
  283. more detailed information.
  284.  
  285. Interpreting the printout
  286. -------------------------
  287.  
  288. CACHECHK v3beta2 11/11/95  Copyright (c) 1995 by Ray Van Tassle. (-h for help)
  289. ****** WARNING *******
  290.     CPU is in V86 mode!    Timings may not be accurate!
  291. CMOS reports: conv_mem= 640K, ext_mem= 15,360K, Total RAM= 16,000K
  292. ### This is the memory size, as listed in the CMOS (via setup)
  293.  
  294. "GenuineIntel" 486DX4 100 MHz
  295. ### The cpu type & speed.  Advanced CPUs will identify themselves. For
  296. ### others, the type is derived.
  297. ### The speed is determined by instruction timing, and is fairly accurate
  298. ### (plus/minus 3 mhz) from 386/16 to P5/120.
  299. ### HOWEVER, some of the new superfast CPU's (Cyrix 6x86, Pentium Pro, etc.)
  300. ### are just so blazingly fast that it is very difficult to calibrate
  301. ### the timing loop, so the reported speed may be wrong (e.q., reporting
  302. ### a 100MHZ Cyrix as 1400 Mhz.
  303.  
  304. Reading from memory.  
  305. MegaByte#:      --------- Memory Access Block sizes (KB)-----
  306.        1    2    4    8   16   32   64  128  256  512 1024 2048 4096 <-- KB
  307.  0:   11   11   11   11   11   20   20   20   20   28   --   --   --    µs/KB
  308. ### "n:" is the megabyte number. 0 = base memory, 1 = 2nd MB, etc.
  309. ### The numbers are how many microseconds it takes to read/write a certain
  310. ### number of bytes.
  311. ### We can see that 1KB through 16KB takes 11us/KB, 32KB through 256KB takes
  312. ### 20us/KB, and 512 KB takes 28us/KB.  This is the base memory, so we can't
  313. ### go beyond 640KB. So we stop at 512KB.
  314. ### The "--" (for blocks of 1MB, 2MB, and 4MB) means that blocks of this size
  315. ### were not tested (because they could not be).
  316. ### I go up to 4MB, because some lucky folks have 1MB of cache, and if I 
  317. ### stopped at a 2MB block, there is only one data point of RAM speed.
  318.  
  319.  2:   11   11   11   11   11   20   20   20   20   28   28   28   28    µs/KB
  320. ### Megabyte #1 is skipped here.  Because I have a memory manager (QEMM)
  321. ### loaded.  It occupies some of the memory at the beginning of MB#1, therefore
  322. ### this MB cannot be allocated, therefore I don't test it.
  323. ### However, I can check a blocksize of 4MB.  This means that it reads from
  324. ### address 0x0200000 through 0x05fffff.
  325. ### We now have 4 data-points of actual RAM speed.
  326. ### By inspection, we see that there are two breakpoints in the memory
  327. ### access speed.  The first at 16kb, the second at 256kb.  This is as it
  328. ### should be, as this is an Intel 486/100 (with 16kb of L1 cache), and 256kb
  329. ### of L2 cache on the motherboard.  An AMD 486/100 has 8KB of L1 cache.
  330. ### A Pentium has 8kb data cache and 8kb of instruction cache.
  331. ### CACHECHK only tests data, so P5's will show 8kb of L1 cache.
  332.  
  333.  3  4  5  6  7  8  9  <--- same as above.
  334. ### The speeds of megabyte 2 thru megabyte 9 are all the same.
  335. ### Actually, this is a small fib.  Since mb#9 is the last full mb being
  336. ### tested, we clearly can't be using block sizes of 2MB or 4MB.  And for
  337. ### mb#8, we can't use block size of 4MB.  Those entries actually have
  338. ### "--".  But the numbers which *are* there are the same.
  339.  
  340.  This machine seems to have both L1 and L2 cache. [read]
  341. ### This is reading.  Writing will say ["write]".
  342.     L1 cache is  16KB -- 103.3 MB/s  10.2 ns/byte  (262%) (186%)   3.9 clks
  343.     L2 cache is 256KB --  55.3 MB/s  19.0 ns/byte  (140%) (100%)   7.2 clks
  344.     Main memory speed --  39.3 MB/s  26.7 ns/byte  (100%) [read]  10.2 clks
  345.     L1 cache is  16KB --    102.8 MB/s  10.2 ns/byte  (261%)  (185%)
  346.     L2 cache is 256KB --     55.3 MB/s  19.0 ns/byte  (140%)  (100%)
  347.     Main memory speed --     39.3 MB/s  26.7 ns/byte  (100%) [read]
  348. ### The L1 cache is 262% (two and a half times) faster than RAM.
  349. ### The L2 cache is 140% (one and a half times) faster than RAM.
  350. ### The L1 cache is 186% faster (almost twice as fast) as the L2 cache.
  351. ### It takes an average of 3.9 clock cycles to read a 32-bit longword from
  352. ### the L1 cache into a 32-bit register, 7.2 cycles from L2, and 10.2 from RAM.
  353.  
  354.     Effective read RAM access time is 106ns (a RAM bank is 4 bytes wide). 
  355. ### This is the *measured* access speed of the RAM.  On a 486, this
  356. ### is 4 times the "main memory speed" (above example is 4 * 26.7), because
  357. ### a 486 has a 32-bit (4 byte) path between RAM and the CPU.  For a P5,
  358. ### this will be 8 times, because the P5 has a 64-bit (8 byte) path.
  359. ### Note that this is NOT the speed of your RAM chips---it is the measure of
  360. ### how fast your RAM is being driven.  
  361. ###
  362. ### This is VERY dependent on the "DRAM Burst Cycle" settings in your BIOS
  363. ### setup.  This computer has an AMI bios, where I can set it to certain
  364. ### values.  The fastest it will allow is 3-2-2-2.  The slowest
  365. ### it will allow is 5-4-4-4.  With this slow setting, I get:
  366. ###    Main memory speed --     24.9 MB/s  42.1 ns/byte  (100%) [read]
  367. ###    Effective read RAM access time is 168ns (a RAM bank is 4 bytes wide). 
  368. ### This is much slower, BUT it might let me use slower (i.e., cheaper) RAM
  369. ### chips.
  370. ### Note that *many* motherboards will NOT let you fiddle with these settings.
  371. ### The 486 (and Pentium) always fill the entire cache line (16 bytes), so
  372. ### it is NOT possible to get just one byte from the memory; it always
  373. ### grabs all 16 bytes in that block.
  374.  
  375.