美文网首页
NVM代码总结

NVM代码总结

作者: CPinging | 来源:发表于2021-07-04 15:23 被阅读0次

    Optane非易失性内存代码实测:

    使用PMDK中的obj封装好的库进行:

    #include <stdio.h>
    #include <string.h>
    #include <libpmemobj.h>
    #include <fstream>
    #include <iostream>
    #include <math.h>
    #include <mutex>
    #include <stdint.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <time.h>
    #include <unistd.h>
    #include <vector>
    #include <libpmem.h>
    using namespace std;
    
    POBJ_LAYOUT_BEGIN(lastfm_dataset);
    POBJ_LAYOUT_ROOT(lastfm_dataset, struct MY_ROOT); //必须要定义才能够使用
    // POBJ_LAYOUT_TOID(lastfm_dataset, LN) // 如何需要用其他结构体,需要在这里定义好
    POBJ_LAYOUT_END(lastfm_dataset);
    #define MAX_BUF_LEN 10
    
    struct MY_ROOT {
        int a;
        int buf[MAX_BUF_LEN];
    };
    static inline int file_exists(char const *file) { return access(file, F_OK); }
    int main(int argc, char *argv[])
    {
        char* persistent_path = "/mnt/pmem/recNVM/data/lastfm";
        PMEMobjpool *pop; // 预先分配好空间
        if (file_exists(persistent_path) != 0) {
            pop = pmemobj_create(persistent_path, "lastfm_dataset", 8000000000,
                                0666); // 创建NVM的池子
            if (pop == NULL)
            {
                perror("pmemobj_create failed\n");
                exit(0);
            }
        } else {
            pop = pmemobj_open(persistent_path, "lastfm_dataset"); //如果已经创建则直接打开
        }
    
        TOID(struct MY_ROOT) root = POBJ_ROOT(pop, struct MY_ROOT); // 创建胖指针
        int buf[10];
        for(int i=0; i<10; i++)
            buf[i] = (i);
        TX_BEGIN(pop) {
            TX_MEMCPY(D_RW(root)->buf, buf, sizeof(float) * 10); //调用事务,原子性地将数据写入,其中D_RW将胖指针root转成常用瘦指针,不然不能操作
        } TX_END
    
        for(int i=0; i<10; i++){
            cout<<D_RO(root)->buf[i]<<" "; // D_RO表示读数据
        }
    
        pmemobj_close(pop);
    
        return 0;
    }
    
    

    相关文章

      网友评论

          本文标题:NVM代码总结

          本文链接:https://www.haomeiwen.com/subject/yhomultx.html