美文网首页
intel ISA-L library 程序库的使用

intel ISA-L library 程序库的使用

作者: 张春重 | 来源:发表于2017-05-06 12:02 被阅读0次

    1. ISA-L 是什么东西?

    intel®-storage-acceleration-library Intel存储加速库,包括两个大类:加密和非加密的。非加密的 crc,izip,erase-code,加密的包括sha512,sha256,md5,sha1等。

    核心技术就是使用intel sse/avx/avx2/avx256的扩展指令,并行运算多个流的方法。单线程比openssl要快2~8倍。

    现在ISA-L已经开源:

    https://github.com/01org/isa-l

    https://github.com/01org/isa-l_crypto

    2. 接口

    并行运算的接口有些像write/writev:

    ssize_t write(int fd, const void *buf, size_t count);

    ssize_t writev(int fd, const struct iovec *iov, int iovcnt);

    struct iovec {

    void *iov_base;  /* Starting address */

    size_t iov_len;  /* Number of bytes to transfer */

    };

    实际接口:

    SHA512_HASH_CTX_MGR *mgr = NULL;

    SHA512_HASH_CTX ctxpool[NUM_JOBS], *ctx = NULL;

    posix_memalign((void *)&mgr, 16, sizeof(SHA512_HASH_CTX_MGR));

    sha512_ctx_mgr_init(mgr);

    // Init contexts before first use

    for (i = 0; i < MSGS; i++) {

    hash_ctx_init(&ctxpool[i]);

    ctxpool[i].user_data = (void *)((uint64_t) i);

    }

    for (i = 0; i < MSGS; i++) {

     sha512_ctx_mgr_submit(mgr, &ctxpool[i], msgs[i], strlen((char *)msgs[i]), HASH_ENTIRE);

    }

    while (1) {

         ctx = sha512_ctx_mgr_flush(mgr);

         if (ctx) {

         t = (unsigned long)(ctx->user_data);

    }

    3. 实际应用

    因为有write到writev的类似的接口,所以单buffer接口到多buffer接口的转化是必须的。

    单线程环境:只有多buffer接口,不能转化成单buffer接口

    1)缓冲多个buffer。

    2)submit buffers。

    3)等待多个buffer结果。

    程序设计成多buffer + lazy load的形式。

    多线程:单buffer接口设计

    1)fifo 缓冲: 多个写buffer线程 《----》fifo 《----》多个算sha256线程。

    2)promise/future 返回

       接口形式: std::future<sha256_digest> cal_sha256(voiud *buf, size_t len);

      使用std::atomic 生成sequence number,内部使用map管理 promise指针。

      map <uint64, std::unique_ptr<std::promise<sha256_digest>>>

    相关文章

      网友评论

          本文标题:intel ISA-L library 程序库的使用

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