I'll start by saying this is not something I am doing in a production system, just a personal project and just writing coding to learn and try and find challenging tasks.
So NVMe drives are used in computers for storing information and they have controllers and perform a set of standard operations and I have been reading through the specification (https://nvmexpress.org/developers/) trying to figure out if there is any way to use them in a way that would actually be getting them to compute information. I have been reading through the specifications, and there are a lot of different commands they can do. But I haven't found anything where someone has already tried this yet, but maybe I'm just using the wrong search terms. I wanted to check if anyone knows if this is something that has been done, using NVMe storage as a compute device?
Some of the things I thought I might be able to find where?
- Maybe a write option equivalent to a logical OR where it would write 1s over 0s but not change other values?
- Maybe a way to compare values as they were overwritten, so if there was a status code that was tracking wear levelling or if the data actually changed on a write, then it might have been possible to know if the value written to was already set to the value I just wrote?
- Maybe a check if data is blank or all zeros command?
- Maybe a command to return the hash or parity bit for the data instead of the data?
- I was hoping to find some combination or Move or BitShift or Logical operators that be chained together to do calculations on data without returning it.
- Or possibly a status code on an operation that would give me information about the data.