美文网首页
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