Okay Medium Rare, I think you have hit on something that either we haven't been interpreting properly or that Karr needs to adjust in his data presentation. Take the following example, which has no unreadable sectors (well, actually it has
one in the area of the white boxes I added, but that is the topic for another post and doesn't materially affect what I am about to say):
The extent of the scan was LBA 0 to 357379 (0x57403). At 75 sectors per second, that works out to 4765.05 seconds (79:25:05). Dividing the 20330 total C1 errors by 4765 seconds yields an average value of 4.266 errors per second. However, K's Probe lists the average as 4.976, 16.6% higher than what I calculate.
I also saved this test as a csv file. The last sample included in the file is at LBA 357379 (0x57403), exactly what K's Probe reports on the chart. Summing the individual sample values in the csv file, I arrive at a total of 20330 C1 errors. Again, this is exactly what K's Probe reports on the chart.
So why does K's Probe report a different average value for C1? The first hint of the answer can be found by noting that the csv file includes 4086 individual samples. Dividing 20330 by 4086 yields 4.976 - exactly what K's Probe reports on the chart. That explains the source of the denominator for the average Karr calculates, but not why the average disagrees with what I calculate by dividing the length of the disc in seconds by the total number of errors.
For the final part of the answer, we need to look at the average interval between samples listed in the csv file. Dividing the last LBA 357379 by 4086 samples we find that, on average, there are 87.46 sectors per sample. The normal 1x CD playback rate is 75 sectors per second. Thus, the average interval between samples within my file is 87.46 sectors / 75 sectors per second = 1.166 seconds. And that, right there, is the source of the 16.6% discrepancy in average values.
Karr is plotting and averaging the number of errors per data sample that he collects rather than the number of errors per second. If the samples were collected exactly on 1-second intervals, then errors per sample and errors per second would be equivalent. But they aren't, at least not on my machine. On my machine on this test, those samples were spaced 16.6% further apart, on average, than the 75 sectors per second of the CD-ROM specification for 1x playback. I think, Medium Rare, that if you also store and analyze a csv file like I did, you will find a similar effect that will account for the incorrect excluded error times you reported above.
Based on what I am seeing, my presumption is that data collection underneath the covers of K's Probe goes something like the following:
1. KProbe sets the desired test speed.
2. KProbe waits for drive to spin up.
3. Testing begins, and the C1/C2 error counters begin to accumulate error totals.
4. KProbe samples the counters at a rate that, given the instantaneous linear speed of the drive, approximates the equivalent of 1-second intervals for 1x reading. In other words, KProbe attempts to sample every 75 sectors.
5. KProbe records the number of errors that have accumulated since the last sample.
6. Continue with steps 4 through 5 until the end of the disc is reached.
Now, anything that slows down KProbe and prevents it from sampling at every 75th sector will increase the integration time over which errors can accumulate, and inflate the value recorded for that sample. I suspect this is why Karr is now recommending, and has made it the default setting, to not show the real-time chart while collecting measurement data. The extra work involved in drawing and scrolling the chart interferes with the ability to sample at regular intervals, and thus degrades the accuracy of the error counts.
What can be done to improve the situation? I don't think there is anything that can reasonably be done to improve KProbe's sampling interval accuracy itself to the point where it can be guaranteed to sample at exactly 1-second equivalent intervals. That would only be possible if the sampling thread was given true real-time priority and preempted all competing threads, and that isn't going to happen. Windows on the desktop wasn't designed to be a RTOS.
Instead, I would suggest post-processing the data to account for the sampling interval variability. Scale each sample's error count by the deviation of that sample's interval from 75 sectors so that errors per second, not errors per sample, are being displayed and used for calculations. Thus, if 100 errors are collected in a sample that spans 90 sectors, don't display a value of 100 on the chart, and don't use 100 for calculating the average. Instead, display and use the value of 100 errors / 90 sectors * 75 sectors per second = 83 errors per second.
Of course, the grand total of errors collected over the entire disc need not and should not be scaled. It is but a simple summation of all errors, and has no rate component by which it needs to be scaled.
Okay, that is enough for this post. Karr, does this make sense? Is it correct as I have explained it, and are my suggestions for correcting it reasonable? I know this has been a long and somewhat detailed post, so, please don't hesitate to ask for clarification.
cfitz