Dataram RAMDisk Review

/ / /

I’ve purchased a product called Dataram RAMDISK and am going to do a quick review on it. It’s free for RAM Disk’s up to 4GB in size. Beyond that size and you need to pay $9.99 for a license file that allows you to increase it to whatever amount of free RAM you have in your system up to a maximum of 64GB. My system is a P6T SE with 6 RAM slots, 3x2GB RAM and 3x1GB RAM sticks are installed, giving me 9GB in total. This configuration activates triple-channel mode, so I’m getting the full 192bit of available bandwidth from my memory.
All of my RAM is DDR3 @ 1333MHz (PC3-10600), but Everest is reporting a speed of 800MHz. My theoretical MB/s speed should max out at 32000MB/s, but if Everest is only operating at 800MHz that means my theoretical maximum speed is 19200MB/s. I think the reason I did this is because my triple channel puked at the unmatched channels causing BSOD’s and non-boots, but I’ll investigate later as it’s a huge performance penalty. Everest confirms this is the measured speed I’m running at 19200MB/s
(Everest measures 19198MB/s)
(My unmatched odd sets of RAM pairs. Note, 1333MHz is the lowest my RAM goes, to 1800MHz for the fastest).
With that said, my current theoretical maximum speed my RAM should be able to operate at is 19200MB/s. I’m going to test my RAM first to gauge it’s maximum speed, then test the RAM Disk to see if it matches up.
Everest reports that my actual performance is 11446MB/s Read, 11978MB/s Write and 15376MB/s Copy. The Memory Read benchmark reads a 16 MB sized, 1 MB aligned data buffer from system memory into the CPU. Memory is read in forward direction, continuously without breaks. The Memory Write benchmark writes a 16 MB sized, 1 MB aligned data buffer from the CPU into the system memory.
I will attempt to duplicate these with IO Meter to see how close the RAMDisk can get to the theoretical benchmark.
Before that, he’s Everest Disk Benchmark result (everything is automatic – Linear Read):

With IOMeter I have the following configuration:
Size 1MB
Access 100%
Read 100%
Burst 1
Alignment 1MB
100% Sequential
Align I/O’s 1MB
The results I get are:
5000 I/O per second
5000 MB/s
Swapping Read 100% to 0% (making it 100% Write) I get:
4930 I/O and MB/s
So writes are more intensive then reads, as they usually are, but I cannot get anywhere close to the speed of reading a 16MB sized file in 1MB chunks to the maximum theoretical speed of the RAM. I’m unsure as to why that may be, but I suspect it’s the path the file takes from the RAMDisk -> Driver -> Bus -> CPU…?
To try and maximize the speed of the drive and match up to Everest Linear read to gauge the maximum speed of the disk, I’ll setup IO Meter to match Everest’s description of the Linear Read test:

This test is designed to measure the sustained linear (sequential) reading performance of the storage device by reading all data from the surface of the device.

IOMeter does this easily enough.
Using Procmon, I was able to verify that Linear Read uses a 64KB block size and reads the entire disk. Doing this with IO Meter I achieved the same results as above in the MB/s, but much higher IO/s. I’m unsure why IOMeter is unable to match Everest’s results.
HD Tach was not useful as it would operate at 3000MB/s for various lengths of time each time I reran the test. Sometimes it would operate at 3000MB/s up to 0.5GB then 700MB/s for the rest of the drive, or 3000MB/s up to 2.4GB.
Too inconsistent to make an observation.
To compare this RAMDisk to other HDD’s I turned to Anandtech and used his settings to compare some SSD drives. His results are here.
The results I achieved are:
133362 IOs per second
522 MB/s
Average Write Latency 0.0073
Max Write Latency 0.5526
Compared to the first gen Intel SSD’s the RAM Disk is:
12x faster in IOs per second
12x faster in MB/s
12x faster in Average Write Latency 0.0073
170x faster in Max Write Latency 0.5526
Pretty much an order of magnitude faster as should be expected for a RAM Disk vs. a top of the line SSD.
In the end, I’m unsure if I’ve hit a wall with my numbers, but it feels artificial. Everest does come within 70% of the numbers it achieved in a pure memory test, but even the Everest test tops out at exactly 8192MB/s.
I’ll try changing my memory speeds to something faster and see if this limit is artificial or a limit of my system.
Read More

Remotely wake computers when the network doesn’t pass Magic Packets

/ / /

I’m in a situation where the network we have doesn’t pass the UDP 9 magic packet to WoL (wake-on-LAN) remote computers. I’m not sure why this is, but I’ve developed a solution around it. It requires you to be a domain administrator (or local admin) because it uses PSEXEC and you need to copy a small command-line program to the local machine to execute. To do this in such a way that you can do multiple computers in one pass, you need to create a text file in the same folder as the batch file (upcoming). The text file has the following format:

Note the space between the two. An example:
CAC00700ZZ is off, but it has a MAC address of 00:12:34:56:78
CAC00855FT is on and on the same LAN as CAC00700ZZ. I’m on computer SERVER1 and the link between SERVER1 and CAC00700ZZ doesn’t allow the magic packet to traverse. To wake up CAC00700ZZ, I need to send a WoL packet from CAC00855FT. To do this I create a text file called “computer-list.txt” and put in:

CAC00855FT 00:12:34:56:78

Next I need to create a WAKEUP.CMD file and put in the following:

Lastly, I need to ensure PSEXEC.EXE, MC-WOL.EXE, computer-list.txt and WAKEUP.CMD are in the same folder. MC-WOL.EXE can be downloaded from here. PSEXEC.exe can be downloaded from Microsoft.
If you needed to wake up multiple computers, your computer-list.txt file would look like this:
CAC00700JQ 18A9051BFE68
CAC00700HT 18A9051E2894
CAC00700HQ 18A9051E2B90
Read More

Querying HKEY_CURRENT_USER remotely

/ / /

I’m not sure why MS doesn’t allow this to work with their reg.exe program. On most workstations only a single user is logged in anyways…

The above may have truncated (FYI).
Ok, what this does…
1) Sequentially pull computer names from a file (domain-list.txt)
2) Echo that computer name into our master “list” text file
3) Query the HKEY_USERS via the computer name pulled from step 1 and save to a temporary file
4) Execute a findstr that will only search for user accounts (and not CLASS keys) and save to “temp2.txt”.
5) In Temp2.txt, parse and save as variable “%%Z” and execute our reg query and save to our list1.txt file.
You can replace anything with step 5 to do whatever you need (Reg Add/Delete/Query/etc.)
Read More