
OpenOnload API参考手册开发者必备的完整函数调用指南【免费下载链接】onloadOpenOnload high performance user-level network stack项目地址: https://gitcode.com/gh_mirrors/on/onloadOpenOnload是一个高性能的用户级网络协议栈专为Linux系统设计能够显著加速TCP和UDP网络I/O操作。本指南将为您详细介绍OpenOnload的核心API函数帮助开发者充分利用这一强大的网络加速技术。OpenOnload API概述OpenOnload提供了一套完整的扩展API让开发者能够更精细地控制网络加速行为。这些API函数位于src/include/onload/extensions.h文件中涵盖了从基本的socket操作到高级的性能调优功能。核心API功能模块OpenOnload API主要分为以下几个功能模块栈管理API- 控制网络栈的创建和配置文件描述符状态API- 查询和管理加速socket的状态性能调优API- 优化线程行为和网络性能高级发送API- 支持零拷贝和委托发送诊断信息API- 获取详细的TCP连接信息栈管理API详解设置栈名称int onload_set_stackname(enum onload_stackname_who who, enum onload_stackname_scope scope, const char* stackname);这个函数允许您为当前线程或进程设置特定的网络栈名称。通过合理配置栈名称可以实现更精细的网络资源管理。参数说明who: 指定应用范围当前线程或所有线程scope: 指定命名空间范围stackname: 栈名称字符串栈选项配置OpenOnload提供了一组栈选项配置函数让您能够动态调整网络栈的行为int onload_stack_opt_set_int(const char* opt, int64_t val); int onload_stack_opt_get_int(const char* opt, int64_t* val); int onload_stack_opt_set_str(const char* opt, const char* val); int onload_stack_opt_get_str(const char* opt, char* val_out, size_t* val_out_len);这些函数位于src/lib/transport/unix/stackopt.c中支持多种性能调优选项。文件描述符状态API检查加速状态int onload_fd_stat(int fd, struct onload_stat* stat);这个函数是OpenOnload API中最实用的工具之一它返回文件描述符的详细加速状态信息。返回值返回1表示文件描述符已加速返回0表示未加速返回负数表示错误状态结构体struct onload_stat { int32_t stack_id; // 栈ID char* stack_name; // 栈名称 int32_t endpoint_id; // 端点ID int32_t endpoint_state; // 端点状态 };功能特性检查int onload_fd_check_feature(int fd, enum onload_fd_feature feature);这个函数用于检查特定功能是否在给定的文件描述符上可用。支持的功能包括ONLOAD_FD_FEAT_MSG_WARM- 检查是否支持预热消息发送ONLOAD_FD_FEAT_UDP_TX_TS_HDR- 检查UDP发送时间戳头支持ONLOAD_FD_FEAT_TX_SCM_TS_PKTINFO- 检查物理传输接口索引支持性能调优API线程自旋控制int onload_thread_set_spin(enum onload_spin_type type, int spin);OpenOnload允许您为每个线程单独控制自旋行为优化CPU使用和延迟平衡。⚡自旋类型包括ONLOAD_SPIN_UDP_RECV- UDP接收自旋ONLOAD_SPIN_TCP_RECV- TCP接收自旋ONLOAD_SPIN_TCP_SEND- TCP发送自旋ONLOAD_SPIN_EPOLL_WAIT- epoll等待自旋ONLOAD_SPIN_ALL- 控制所有自旋选项高级网络操作API有序epoll等待int onload_ordered_epoll_wait(int epfd, struct epoll_event *events, struct onload_ordered_epoll_event *oo_events, int maxevents, int timeout);这个函数提供了硬件时间戳支持的顺序数据交付确保epoll事件的接收顺序与网络包的到达顺序完全一致。委托发送APIOpenOnload的委托发送API是一组高级函数允许应用程序绕过标准TCP栈直接通过EF_VI接口发送数据enum onload_delegated_send_rc onload_delegated_send_prepare(int fd, int size, unsigned flags, struct onload_delegated_send* out); int onload_delegated_send_complete(int fd, const struct iovec* iov, int iovlen, int flags); int onload_delegated_send_cancel(int fd);这些API在src/include/onload/extensions.h中有详细定义支持零拷贝数据传输显著降低CPU开销。诊断和监控APITCP信息获取int onload_get_tcp_info(int fd, struct onload_tcp_info* info, int* len_in_out);这个函数返回详细的TCP连接信息包括接收/发送缓冲区使用情况、窗口大小等关键指标。信息结构体包含接收缓冲区大小和使用情况发送缓冲区大小和可用数据包数发送窗口和拥塞窗口大小最大段大小MSS特殊socket创建API非加速socket创建OpenOnload提供了几种特殊的socket创建函数用于特定场景int onload_socket_nonaccel(int domain, int type, int protocol); int onload_socket_unicast_nonaccel(int domain, int type, int protocol); int onload_socket_rx_nonaccel(int domain, int type, int protocol);这些函数在src/lib/onload_ext/onload_ext.c中实现允许您创建部分加速或完全非加速的socket。实用工具函数检测OpenOnload存在int onload_is_present(void);这个简单的函数检查OpenOnload是否已加载并可用是应用程序启动时的理想检查点。文件描述符迁移int onload_move_fd(int fd);将文件描述符迁移到当前栈特别适用于从accept()获取的客户端连接迁移到每个线程的独立栈。最佳实践和性能优化预热消息发送使用ONLOAD_MSG_WARM标志可以预热发送路径减少后续关键发送操作的延迟send(fd, buf, len, ONLOAD_MSG_WARM);单包接收模式使用ONLOAD_MSG_ONEPKT标志确保recv()操作在下一个数据包边界停止recv(fd, buf, len, ONLOAD_MSG_ONEPKT);错误处理和调试技巧常见错误代码ENOSYS: 函数不支持或OpenOnload未加载EOPNOTSUPP: 特定功能不支持EINVAL: 无效参数ENOSPC: 缓冲区空间不足调试建议使用onload_fd_stat()验证socket是否已正确加速在关键路径前后检查功能支持监控TCP信息以优化缓冲区大小合理使用线程自旋控制平衡延迟和CPU使用集成示例以下是一个简单的示例展示如何结合使用多个OpenOnload API// 检查OpenOnload是否可用 if (!onload_is_present()) { fprintf(stderr, OpenOnload not available\n); return 1; } // 为当前线程设置栈名称 onload_set_stackname(ONLOAD_THIS_THREAD, ONLOAD_SCOPE_THREAD, my_app_stack); // 创建加速socket int fd socket(AF_INET, SOCK_STREAM, 0); // 验证加速状态 struct onload_stat stat; if (onload_fd_stat(fd, stat) 0) { printf(Socket accelerated on stack: %s\n, stat.stack_name); free(stat.stack_name); } // 设置线程自旋优化 onload_thread_set_spin(ONLOAD_SPIN_TCP_RECV, 1);总结OpenOnload API提供了丰富的功能让开发者能够充分利用用户级网络协议栈的性能优势。通过合理的API使用您可以实现✅显著的延迟降低- 绕过内核协议栈处理 ✅更高的吞吐量- 支持零拷贝和委托发送 ✅精细的性能调优- 线程级自旋控制 ✅更好的可观测性- 详细的TCP连接信息 ✅灵活的部署选项- 支持部分加速和混合模式掌握这些API函数将帮助您构建高性能的网络应用程序充分发挥现代网络硬件的潜力。记住OpenOnload的完整API文档位于src/include/onload/extensions.h而实际的实现在src/lib/onload_ext/和src/lib/transport/unix/目录中。开始使用OpenOnload API让您的网络应用程序飞起来吧【免费下载链接】onloadOpenOnload high performance user-level network stack项目地址: https://gitcode.com/gh_mirrors/on/onload创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考