鲲鹏社区首页
中文
注册
我要评分
文档获取效率
文档正确性
内容完整性
文档易理解
在线提单
论坛求助

DAS接口

接口描述

介绍DAS智能预取算法接口。

接口格式

int32_t Rcache_CeateDasModule(DasModuleParam *createInstanceParam);

void Rcache_ExitDasModule(void);

int32_t Rcache_PutDasInfo(DasKvParam *params);

参数释义

参数名

类型

描述

输入/输出

createInstanceParam

用户注册的回调函数结构体指针

需要用户注册的回调函数。

输入

params

用户提交IO信息结构体指针

用户提交IO信息至智能预取算法接口。

输入

ret

整型数

成功返回0,其他失败返回对应错误码。

输出

数据结构

struct DasOPS

成员名

类型

描述

SubmitDasPrefetch

函数指针

预取IO的提交函数。

logFunc

函数指针

DAS内部日志打印函数。

struct DasModuleParam

成员名

类型

描述

ops

struct DasOPS结构体指针

用户注册的回调函数。

logger

指针

用户的日志模块对象。

cacheLineSize

整型数

缓存行大小。

struct DasKvParam

成员名

类型

描述

offset

整型数

预取IO起始位置,字节的整数倍。

len

整型数

预取IO长度,字节的整数倍。

timeStamp

整型数

IO的时间戳,单位:纳秒。

lunID

整型数

IO的逻辑单元号。

使用依赖

ksal/das.h

使用实例

  1. 编写DAS测试代码。
    1. 新建“test.cpp”文件。
      vi test.cpp
    2. “i”键进入编辑模式,添加如下测试代码。
      #include <cstdio>
      #include <vector>
      #include <ksal/das.h>
      
      std::vector<DasKvParam> prefetchInfoLists;
      
      void das_req_prefetch(DasKvParam *params){
          DasKvParam prefetchInfo = {params->offset, params->len, params->timeStamp, params->lunID};
          prefetchInfoLists.push_back(prefetchInfo);
      }
      
      void* ProducerTask(const uint32_t ioNum)
      {
          bool readyToExit = false;
          int32_t ret = 0;
          uint32_t counter = 0;
      
          for(uint32_t i = 0; i < ioNum; i++){
              DasKvParam params;
              params.offset = 4096 * i;
              params.len = 4096;
              params.timeStamp = 0 + i * 10000000;
              params.lunID = 1;
      
              ret = Rcache_PutDasInfo(&params);
          }
      }
      
      int main(int argc, char **argv)
      {
          DasModuleParam *dasInstanceParam = new DasModuleParam();
          dasInstanceParam->cacheLineSize = 8192;
          dasInstanceParam->logger = nullptr;
          DasOPS *regOps = new DasOPS();
          regOps->SubmitDasPrefetch = das_req_prefetch;
          regOps->logFunc = nullptr;
          dasInstanceParam->ops = regOps;
          int32_t ret = Rcache_CeateDasModule(dasInstanceParam);
      
          uint32_t ioNum = 10000;
          ProducerTask(ioNum);
      
          for (int i = 0; i < prefetchInfoLists.size(); ++i) {
              printf("prefetchInfo: lunId[%u], offset[%lu], len[%lu]\n", prefetchInfoLists[i].lunID,
                  prefetchInfoLists[i].offset, prefetchInfoLists[i].len);
          }
      
          Rcache_ExitDasModule();
      
          return 0;
      }
    3. “Esc”键退出编辑模式,输入:wq!并按“Enter”键保存退出文件。
  2. 编译“test.cpp”文件,生成test可执行文件。
    g++ test.cpp -lpthread -ldas -o test
  3. 运行test可执行文件。
    ./test
    执行输出如下。
    config_dasOff: 0
    config_dasMemLimit: 300 MB
    config_prefetchMaxLen: 16 MB
    create DAS module clloector success.
    prefetchInfo: lunId[1], offset[20480], len[65536]
    prefetchInfo: lunId[1], offset[86016], len[65536]
    prefetchInfo: lunId[1], offset[151552], len[65536]
    prefetchInfo: lunId[1], offset[217088], len[65536]
    prefetchInfo: lunId[1], offset[282624], len[65536]
    prefetchInfo: lunId[1], offset[348160], len[65536]
    prefetchInfo: lunId[1], offset[413696], len[65536]
    prefetchInfo: lunId[1], offset[479232], len[65536]
    prefetchInfo: lunId[1], offset[544768], len[65536]
    prefetchInfo: lunId[1], offset[610304], len[65536]
    prefetchInfo: lunId[1], offset[675840], len[65536]
    prefetchInfo: lunId[1], offset[741376], len[65536]
    prefetchInfo: lunId[1], offset[806912], len[73728]
    prefetchInfo: lunId[1], offset[880640], len[73728]
    prefetchInfo: lunId[1], offset[954368], len[81920]
    prefetchInfo: lunId[1], offset[1036288], len[81920]
    prefetchInfo: lunId[1], offset[1118208], len[90112]
    prefetchInfo: lunId[1], offset[1208320], len[90112]
    prefetchInfo: lunId[1], offset[1298432], len[98304]
    prefetchInfo: lunId[1], offset[1396736], len[98304]
    prefetchInfo: lunId[1], offset[1495040], len[106496]
    prefetchInfo: lunId[1], offset[1601536], len[106496]
    prefetchInfo: lunId[1], offset[1708032], len[114688]
    prefetchInfo: lunId[1], offset[1822720], len[114688]
    prefetchInfo: lunId[1], offset[1937408], len[122880]
    prefetchInfo: lunId[1], offset[2060288], len[122880]
    prefetchInfo: lunId[1], offset[2183168], len[131072]
    prefetchInfo: lunId[1], offset[2314240], len[131072]
    prefetchInfo: lunId[1], offset[2445312], len[139264]
    prefetchInfo: lunId[1], offset[2584576], len[139264]
    prefetchInfo: lunId[1], offset[2723840], len[147456]
    prefetchInfo: lunId[1], offset[2871296], len[147456]
    prefetchInfo: lunId[1], offset[3018752], len[155648]
    prefetchInfo: lunId[1], offset[3174400], len[155648]
    prefetchInfo: lunId[1], offset[3330048], len[163840]
    prefetchInfo: lunId[1], offset[3493888], len[163840]
    prefetchInfo: lunId[1], offset[3657728], len[172032]
    prefetchInfo: lunId[1], offset[3829760], len[172032]
    prefetchInfo: lunId[1], offset[4001792], len[180224]
    prefetchInfo: lunId[1], offset[4182016], len[180224]
    prefetchInfo: lunId[1], offset[4362240], len[188416]
    prefetchInfo: lunId[1], offset[4550656], len[360448]
    prefetchInfo: lunId[1], offset[4911104], len[720896]
    prefetchInfo: lunId[1], offset[5632000], len[1441792]
    prefetchInfo: lunId[1], offset[1781760], len[1048576]
    prefetchInfo: lunId[1], offset[2830336], len[1048576]
    prefetchInfo: lunId[1], offset[3878912], len[1048576]
    prefetchInfo: lunId[1], offset[4927488], len[1048576]
    prefetchInfo: lunId[1], offset[5976064], len[1048576]
    das mem used : 316688 Byte
    exit DAS module prefetcher
    exit DAS module collector