如何在 C++ 中修剪原始设备地址区域?

问题描述

我使用‘/dev/nvme1’作为我的数据路径,现在我想告诉 SSD 我不再需要 [offset,len],是否有 posix API 来做到这一点?向 SSD FTL 发送修剪命令。

解决方法

经过一番研究,我在这里找到了一段代码:

int block_device_discard(int fd,int64_t offset,int64_t len)
{
    uint64_t range[2] = {(uint64_t)offset,(uint64_t)len};
    int ret = ioctl(fd,BLKSECDISCARD,range);
    if (ret < 0) {
        return errno;
    }

    return 0;
}

请注意,如果您的设备不支持 BLKSECDISCARD,该命令将返回错误。

不确定是否有效,稍后更新结果。

参考文献: