Skip to content

Linaro/uadk

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1,821 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

UADK - User Space Accelerator Development Kit

UADK Logo License Build Status Platform

统一、安全、高效的用户空间硬件加速开发框架

快速开始文档示例贡献

📋 目录

🎯 项目简介

UADK(User Space Accelerator Development Kit)是一个为用户应用程序提供硬件加速器访问能力的统一框架 1 。它抽象了硬件特定的细节,提供一致的API接口,使开发者能够轻松利用专用硬件加速器进行加密、压缩和数据处理操作,而无需管理硬件交互的复杂性 2

✨ 核心特性

  • 🔧 统一编程接口 - 跨不同加速设备的一致API
  • 高效资源管理 - 硬件队列和上下文的优化管理
  • 🔍 硬件能力发现 - 自动发现和选择合适的硬件
  • 🔄 同步/异步模式 - 支持同步和异步操作模式
  • 🧠 内存管理优化 - 针对硬件加速器优化的内存池化管理
  • 🌐 多算法支持 - 支持多种加密、压缩和数据处理算法

🛠️ 支持的算法

加密算法

类别 算法
对称加密 AES (ECB, CBC, CTR, XTS, OFB, CFB), SM4, DES, 3DES
消息认证 SHA1, SHA224, SHA256, SHA384, SHA512, SM3, MD5, AES-XCBC, AES-CMAC, AES-GMAC
认证加密 AES-GCM, SM4-GCM, AES-CCM, SM4-CCM
公钥加密 RSA, DH, ECC, SM2, X25519, X448

压缩算法

算法 描述
zlib 带zlib包装的DEFLATE
gzip 带gzip包装的DEFLATE
deflate 原始DEFLATE, lz77_zstd和zstd使用的LZ77算法

💻 硬件支持

HiSilicon Kunpeng 加速器

  • SEC - 安全引擎,用于加密操作
  • HPRE - 高性能RSA引擎,用于公钥操作
  • ZIP - 压缩引擎,用于压缩操作
  • DAE - 数据加速引擎

指令集加速

  • ARM Cryptography Extension (CE) - ARM加密扩展
  • ARM Scalable Vector Extension (SVE) - ARM可伸缩矢量扩展

🚀 快速开始

系统要求

  • Linux 内核 5.10+
  • 支持 SVA 的 IOMMU
  • 兼容的硬件加速器

安装

# 克隆仓库
git clone https://github.com/Linaro/uadk.git
cd uadk

# 配置和编译
./autogen.sh
./configure
make

# 安装
sudo make install

基本使用

#include <wd_comp.h>

int main() {
    // 初始化压缩库
    struct wd_ctx_config config;
    struct wd_sched sched;
    
    wd_comp_init(&config, &sched);
    
    // 分配会话
    handle_t sess = wd_comp_alloc_sess(&setup);
    
    // 执行压缩
    wd_do_comp_sync(sess, &req);
    
    // 清理资源
    wd_comp_free_sess(sess);
    wd_comp_uninit();
    
    return 0;
}

📖 使用示例

压缩示例

#include <wd_comp.h>

int compress_data(struct wd_comp_sess_setup setup,
                  const char* input, size_t input_len, 
                  char* output, size_t* output_len) {
    struct wd_comp_req req;
    handle_t sess;
    int ret;
    
    // 初始化请求
    memset(&req, 0, sizeof(req));
    req.src = (void*)input;
    req.src_len = input_len;
    req.dst = output;
    req.dst_len = *output_len;
    req.data_fmt = WD_FLAT_BUF;
    req.op_type = WD_DIR_COMPRESS;
    req.alg_type = WD_ZLIB;
    
    // 分配会话并执行压缩
    sess = wd_comp_alloc_sess(&setup);
    ret = wd_do_comp_sync(sess, &req);
    
    *output_len = req.dst_len;
    wd_comp_free_sess(sess);
    
    return ret;
}

加密示例

#include <wd_cipher.h>

int encrypt_data(struct wd_cipher_sess_setup setup,
                 const void* plaintext, size_t len,
                 void* ciphertext, const void* key) {
    struct wd_cipher_req req;
    handle_t sess;
    int ret;
    
    // 设置加密请求
    memset(&req, 0, sizeof(req));
    req.src = (void*)plaintext;
    req.src_len = len;
    req.dst = ciphertext;
    req.dst_len = len;
    req.iv = iv;
    req.iv_len = 16;
    req.key = (void*)key;
    req.key_len = 32;
    req.alg = WD_CIPHER_AES;
    req.mode = WD_CIPHER_CBC;
    
    // 执行加密
    sess = wd_cipher_alloc_sess(&setup);
    ret = wd_do_cipher_sync(sess, &req);
    
    wd_cipher_free_sess(sess);
    return ret;
}

⚡ 性能测试

UADK 提供了完整的性能测试工具uadk_tool:

# 运行压缩性能测试
uadk_tool benchmark --alg zlib --mode sva --opt 0 --sync --pktlen 4096 --seconds 5 --thread 1 --multi 1 --ctxnum 1 --prefetch

# 运行加密性能测试
uadk_tool benchmark --alg aes-128-ecb --mode sva --opt 0 --sync --pktlen 1024 --seconds 5 --thread 1 --multi 1 --ctxnum 1 --prefetch

# 其它测试命令查询
uadk_tool benchmark --help

📚 文档

🤝 贡献指南

我们欢迎社区贡献!请遵循以下步骤:

  1. 订阅邮件列表acc@lists.linaro.org
  2. Fork 仓库并创建功能分支
  3. 遵循编码规范
    • 头文件包含顺序:系统头文件 → 库头文件 → 内部头文件
    • 避免在头文件中使用匿名结构体typedef
  4. 提交 Pull Request

编码规范示例

// ✅ 正确的头文件顺序
#include <stddef.h>      // 系统头文件
#include <string.h>      // 系统头文件

#include <wd.h>          // 库头文件
#include <wd_comp.h>     // 库头文件

#include "wd_internal.h" // 内部头文件

// ✅ 正确的结构体定义
struct my_struct {
    int arg1;
    int arg2;
};

📄 许可证

本项目采用 Apache License 2.0 许可证。详情请参见 LICENSE 文件。

🏆 致谢

感谢所有为 UADK 项目做出贡献的开发者和社区成员!

主要维护者


About

UADK (User space Accelerator Development Kit), is a user space framework for using accelerators. Active branch is 'master'.

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages