|
|
|
|
|
by sliken
675 days ago
|
|
My understanding is that it's something like: stripe = read_from_ram(*ptr) # usually between 128k and 256k
blobs[]=do_raid_calc(stripe) # blobs usually 25% to 33% larger than stripe
for i in drives
write(drive=i,blobs[i])
The above should be relatively cache friendly, my Zen 4 desktop (1 gen old) has 128MB of L3 cache, enough for 1000 ish stripes.> upwards of 90% reduction in system DRAM utilization That seems unbelievable, most ram isn't spend for anything I/O related let alone RAID releated. Now if it's 90% reduction in system DRAM utilization by RAID, sure. But that seems like a very small fraction of all ram. Even if 10,000 stripes are in flight simultaneously to 100s of drives that's only 2.5GB or 1% of a servers ram (256GB or more seems common). Especially since 2/3rd of that would be in ram even with hardware RAID. Not like the buffer/page cache which might reach 50% of ram has the extra RAID in data in it. |
|
Sure, if you use X3D chip with the current largest amount of L3 cache accessible to a single core of any option currently available you can dedicate all of it to 128 MB of the write buffer to your disk instead of letting it be offloaded. Valid option, just as cool. I have a non X3D 7950X so jealous though ;).
You've also got the case of needing to transmit up the read of the disk for modifications to sectors not cached by the system so the CPU can perform the parity calc of the whole sector and issue the appropriate writes. Particularly bad for non-sequential IO writes.
> if it's 90% reduction in system DRAM utilization by RAID
Yes, this - not the other. It's achieved by not writing things back to RAM again before they hit the flash pool.