New WinRK release, and memory timings...
Well, I’ve just completed v3.1.2 of WinRK. This release is all about stability and reliability, and has quite a few important stability fixes. It has taken a little longer than I had hoped, but I do believe the result is worth the wait.
The bulk of the changes in this release revolve around replacements for several key low level data structures and container classes. Because of the reasonably heavy multi-threaded demands that WinRK produces, I chose to revisit several of the key low level classes used in WinRK. This led to either rewrites or tweaks of these classes after some careful validation against heavy SMP access.
The rest of the work has been to eliminate any and all synchronisation issues between threads (race conditions etc.), and to eliminate Windows Handle leakage.
The result of all this work, is that WinRK no longer displays annoying stability issues! Now I can concentrate on the functionality and features for future releases.
One other interesting story to come out of the last fortnight is a cautionary tale about memory timings…
Before starting on this new release I had the opportunity to build myself a new development PC (required in order to work on a client’s job). This new PC has a Phenom X4 and 4GB of DDR2-1066, although as I was to discover the 1066 speed was not terribly reliable. In fact it turns out that WinRK proved to be a very good stability test (especially when running 4 threads in maximum profile).
In order to better work on the stability issues for this release, I expanded my normal regression test set, and automated the testing process. The resulting test has been fantastic in illuminating stability issues because it works WinRK very hard for an extended period of time without any breaks. However the frustrating thing I found earlier this week was that WinRK was still unable to complete this test without issue even after I fixed all the stability issues.
The only culprit remaining was the new PC’s memory. This lead me to try dedicated memory testing programs. The first was memtest86+, which only gave a single error after running for 8 hours (even one error is too much though!). Then I found the far superior HCI memtest which gave an error report in a few minutes!
After some googling (and a lot of trial and error testing with memory timings), I found that the Phenom processors have a hard time driving too many loads at 1066MHz, and it just so happens that the 2x2GB I had was considered too much.
The moral of the story? Run a memory tester on a new PC as a matter of course! :)
Anyway, I hope you all enjoy the new release, and I look forward to your comments!
Malcolm