Hi.
Thx for a great app!
SUGGESTION:
RAM is always at a premium and in use (Superfetch etc)
GPU RAM is not.
Most all GPU memory is free and idle except when playing games etc.
GpuRamDrive
allows you to make a RAM Disk in GPU memory using ImDisk's Proxy feature:
Intro and
For Nvidia:
https://github.com/prsyahmi/GpuRamDrive
For AMD:
https://github.com/brzz/GpuRamDrive/releases
(the above version creates a RAM Disk in system RAM, not GPU VRAM)
Wish List:
1:
It would be great if GpuRamDrive was fully integrated into ImDisk so that the VRAM disk could be easily auto created and loaded with files at every boot.
2:
It would be even nicer if said disk was auto mounted as a VHD at boot, so that various disk caching apps (StoreMI, Primocache, Readyboost, HDDTurbo etc) could/would auto use it.
3:
Dynamic resizing would be great!?
4:
The Ram Disk created by GpuRamDrive is dissapointingly slow.
Apparently the software is Proof of Concept with much room for improvement and ImDisk's Proxy feature isn't exactly blisteringly fast either!? :)
It wou be really great if the whole lot were optimised for better speed.
Perhaps multi cored memory access like SoftPerfect's RAM Disk uses??
This would be a great and unique feature for ImDisk..!?
4:
As I understand, GPU VRAM isn't as easily accessible as main RAM. Factor in PCIEx link speeds, changing GPU/VRAM speeds/power saving/GPU load and you get a totally unpredictable performance. And if it's some notebook - I bet suspend/resume and inreased power draw will be among the issues you'll meet.
I just tested 3 scenarios on Nvidia 1070 (MSI afterburner all way down, both frequencies and power limit), idle power 10W:
launched gpuramdrive-cuda, created 6000MB exfat, waited like 30s for GPU/mem speeds to go down before each test.
1) "fresh":
CrystalDiskMark 8.0.1 x64 (C) 2007-2021 hiyohiyo
Profile: Real
Test: 4 GiB (x4) [R: 0% (0/5998MiB)]
Mode: [Admin]
Time: Measure 5 sec / Interval 5 sec
OS: Windows 10 Pro for Workstation [10.0 Build 19042] (x64)
[Read]
SEQ 1MiB (Q= 1, T= 1): 978.009 MB/s [ 932.7 IOPS] < 1071.39 us>
RND 4KiB (Q= 1, T= 1): 69.954 MB/s [ 17078.6 IOPS] < 58.23 us>
[Write]
SEQ 1MiB (Q= 1, T= 1): 1019.970 MB/s [ 972.7 IOPS] < 1026.74 us>
RND 4KiB (Q= 1, T= 1): 79.224 MB/s [ 19341.8 IOPS] < 51.38 us>
Power draw: 14.4W, GPU load 20-30%, frequencies don't go up from idle, bus interface load close to 30% - that is hypothetically 3x speeds can be achieved under some conditions (faster CPU/main ram or some other way).
2) Under GPU load (GPU-Z PCIEx render test, 1500MHz GPU/3300MHz VRAM)
[Read]
SEQ 1MiB (Q= 1, T= 1): 848.847 MB/s [ 809.5 IOPS] < 1234.33 us>
RND 4KiB (Q= 1, T= 1): 6.930 MB/s [ 1691.9 IOPS] < 590.49 us>
[Write]
SEQ 1MiB (Q= 1, T= 1): 845.372 MB/s [ 806.2 IOPS] < 1237.97 us>
RND 4KiB (Q= 1, T= 1): 17.487 MB/s [ 4269.3 IOPS] < 233.81 us>
Power draw: 90W - notice 10x drop in random read IOPS
3) hardly reproducible - gpu frequencies didn't drop yet but there's no GPU load
[Read]
SEQ 1MiB (Q= 1, T= 1): 1604.766 MB/s [ 1530.4 IOPS] < 652.97 us>
Power draw was like 40W
4) Compare to "usual" ImDisk ramdrive, and it doesn't get affected by GPU load as much:
[Read]
SEQ 1MiB (Q= 1, T= 1): 4362.111 MB/s [ 4160.0 IOPS] < 240.02 us>
RND 4KiB (Q= 1, T= 1): 68.100 MB/s [ 16626.0 IOPS] < 59.92 us>
[Write]
SEQ 1MiB (Q= 1, T= 1): 5741.130 MB/s [ 5475.2 IOPS] < 182.33 us>
RND 4KiB (Q= 1, T= 1): 69.784 MB/s [ 17037.1 IOPS] < 58.47 us>
So, it's worth using only in the case when you can't expand RAM and really have lots of GPU ram coupled with power availability
Hey Paul
Thx for the 'Under load' tests. The drop in R4K is eye opening!
But I don't use GPURamDrive and games etc at the same time
I cannot speak for everyone; only my often used on client systems use case:
The client/s has a notebook with a dedicated GPU/VRAM that they never use/game and a HDD.
I set up GPURamDrive and then eBoostr to use the otherwise wasted VRAM as a cache for frequently used R4K data.
This works very well, with a noticeable uplift in the speed with which browsers and software load.
My workstation (AMD 3900x, 16GB DRAM, 8GB 5700xt GPU:
I have enabled prefetch and Superfetch so my DRAM is always used to the full.
I use the VRAM drive for unzipping downloads to and installing software etc.
Basically as a scratch disk to save writes to my SSD.
I would certainly use it as a disk cache if I were not already running a NVMe SSD and eBoostr on an Optane 800p, which is 4x faster than GPURamDrive at R4K, and 58 GB in size.
Personally, I think having the choice to use GPU RAM for a/the RamDrive is a very nice feature to have.
Improving Performance: (currently implementable)
1:
RAM physically uses 4KB 'sectors' or data blocks.
Setting your FS's cluster size to the same 4KB speeds things up.
ie:
Format parameters: /fs:exfat /q /a:4096
(This advice is valid for all RamDrive implementations)
2:
Download and Message Signal Interrupt utility v3 :
https://forums.guru3d.com/threads/windows-line-based-vs-message-signaled-based-interrupts-msi-tool.378044/
Try Msi
Try 'interupt priority' on high.
3:
Set the priority of GPURamDrive .exe to above normal in Device Manager.
NB:
That 'above normal' leaves the I/O priority at normal whereas 'high' changes the I/O priority to 'above normal'.
Changing I/O priority can get your drives' (priority) out of sync and actually slows things down...
Last edit: Neville Cawood 2023-07-13