For context, a RAM Disk provides fast I/O (read and write) performance, faster than SSDs (Solid State Drives), with wider bandwidth and much lower latencies.
There are plenty of free and paid options for RAM Disk software available. This article is not about finding the fastest RAM Disk software available, so I haven’t gone out and benchmarked a range of products. My goal was to find the best free for commercial use RAM Disk software that works well and meets a list of requirements as laid out below. So I won’t be adding screen shots of output from tools like CrystalDiskMark, etc.
What is the best free for commercial use RAM Disk I hear you ask? The answer is Arsenal Image Mounter (AIM), from Arsenal Recon, which was developed by the legendary Olof Lagerkvist of ImDisk Toolkit fame.
Okay, so I gave away the secret early in this article. But now I’m going to take you on a journey of how I got there, the use cases, the challenges, and the PowerShell scripts I used to deploy and create it.
This article will focus on the journey and use cases. A future article will dive into the challenges, and the PowerShell scripts for how I got it running on non-persistent Citrix Provisioning Services (PVS) session hosts.
I am part of a team that designed and built a high performing Citrix platform within the Mining Industry. It is designed for high end compute and graphical requirements. Many of the applications we host are written for high end workstations and laptops, so certainly not developed for virtualisation or Cloud. These apps often have a mix of two main I/O requirements:
- Fast local temporary storage (scratch space). The app Vendor always states minimum of SSD performance. So we use it to boost I/O performance for storage-bound applications where practical.
- Being able to withstand tens of gigabytes of writes through the users TEMP area in a short period of time. In a Citrix environment this is all about protecting the PVS write-cache, without needing massive write-cache drives to allow for files that grow to a ridiculous size in a short period of time. I’ve witnessed write-cache growing beyond 50GB in minutes, so I’m not joking here!
Many years ago I found a great reliable RAM Disk product from SoftPerfect. We were using the last free version (3.4.8 released 02/10/2016) ) for a few years, but had hit some technical challenges with the move to Windows 10 1809 and Windows Server 2019, when we were then unable to create a RAM Disk greater than 4095MB. This is documented here:
- RAMdisk size became limited to 4095 MB after Windows 10 1809 update
- RAM Disk errors caused by Windows 10 1809 update
That forum post has a cheeky solution towards the end in an attempt to work around the limitation. But to me it’s a hack and not really a solution I could support using in an enterprise level production platform. So I spent quite some time looking for a different product altogether.
The requirements:
- Whilst free is ideal, I wasn’t sure how practical this would be. It’s preferable that it’s cost effective enough to justify. Unfortunately SoftPerfect’s pricing for a Worldwide license at the time was not going to make it easy for me to justify under OPEX costs. It’s not a once off cost if you want to be able to regularly update to newer releases, such as when Cyber pick-up vulnerabilities, or for a newer Windows OS.
- It must use a virtual SCSI adapter (preferably via a Storport miniport driver) to conform to the SCSI standard. This ensures that it will be 100% compatible with Win32 APIs and all applications. SoftPerfect uses a virtual SCSI adapter, although at the time it was not a more modern Storport miniport driver.
- It must have a command line interface or API we can interact with, allowing a RAM Disk to be created from a script at computer startup and via a Scheduled Task. SoftPerfect does have a nice and easy to use command line interface.
I initially found two products that seem to work okay, with initial testing, but as I dug deeper and started testing them, I realised they were not fit for purpose.
- It uses a virtual SCSI adapter, although it’s not a more modern Storport miniport driver.
- Has an SDK that can be used as a command line tool to create and manage the RAM Disk. It does work, but felt I may need to write some C++ code to improve it, as the executable they supply is a bit limiting.
- It’s a legacy product and is therefore an older tool, so I was concerned about its compatibility moving to Windows 11, etc.
- So I decided that it did not meet the requirements.
- This has a native command line and works well.
- It does not install a PnP driver, so you will not see anything for it in Device Manager. Initially, I didn’t realise what this meant under the covers. But as I progressed I leant that it creates simple volumes and does not emulate SCSI disks. Therefore it does not integrate with Volume Mount Manager in Windows so applications that rely on volume management API do not see ImDisk drives. The Win32 API function GetFinalPathNameByHandle, is an example of this. ImDisk is based on a very old design that will never be fixed.
- So whilst it does mount as a drive letter and formats as NTFS, it’s not presented as a disk in Disk Manager.
- Whilst it was getting regular updates, it’s technical flaw meant that it was not going to work.
- Ivaylo Gelov (AKA tmcdos) wrote a really good explanation of the ImDisk issues on his GitHub site.
- I actually wondered why people are still developing and promoting this product. It should be marked for retirement. It was clearly not going to meet the requirements.
Whilst looking into the ImDisk challenges, and following comments from both Olof and Ivaylo, their recommendation was to use Arsenal Image Mounter (AIM) from Arsenal Recon.
The free version can be used in a commercial environment and includes RAM Disk features and supports basic mounting of various disk image formats. It has both a command line and GUI, and an excellent API. The driver is a virtual SCSI adapter (via a Storport miniport driver) conforming to the SCSI standard.
Arsenal Recon specialise in digital forensics. There is a nice post that contains the background and reason for the development of Arsenal Image Mounter. Whilst sometimes I feel it’s cheeky to use a free product commercially like this, I wanted to create this post to help drive more traffic their way in return. I think that perhaps the reason this tool is not talked about enough in the RAM Disk space is because it was not primarily written for that purpose. Due to it’s continued development and use for digital forensics, I’m confident that the product itself will be around for years to come.
I downloaded, installed and tested it. It worked flawlessly, meeting all the requirements and blew away all my expectations for what I could achieve with a free product.
It comes with two readme text files, on for the CLI (readme_cli.txt) and the main readme.txt, which is extensive and covers most of the documentation. The following screen shot is a snippet of the readme.txt file.
I created some logic around what I wanted to achieve so that a RAM Disk with drive letter E: is automatically created at system startup based on the amount of total physical RAM in the system.
- If total physical RAM is greater than or equal to 160GB, it will create a RAM disk of size 32GB.
- If total physical RAM is greater than or equal to 128GB, it will create a RAM disk of size 24GB.
- If total physical RAM is greater than or equal to 64GB, it will create a RAM disk of size 16GB.
- If total physical RAM is greater than or equal to 48GB, it will create a RAM disk of size 8GB.
- If total physical RAM is less than 48GB, it will create a RAM disk of size 4GB.
Yes, we have pools of very high RAM machines due to the large amount of data that the mine models use when loaded and processed in some of these apps. A nice RAM Disk feature of Arsenal Image Mounter is that whilst we are creating a RAM Disk with fixed memory allocation, it allocates memory dynamically, so doesn’t use memory until you start fill it. Therefore we are not consuming RAM by just creating it at system startup. That is so cool and made it easy to justify the above logic.
Stay tuned for upcoming articles that cover the challenges I had with the deployment and implementation, including the PowerShell scripts I created.
Thank you for reading. I hope you find this article of value 🙂