《魏勇军-可编程内核技术进展和未来畅想v2.pdf》由会员分享,可在线阅读,更多相关《魏勇军-可编程内核技术进展和未来畅想v2.pdf(14页珍藏版)》请在三个皮匠报告上搜索。
1、可编程内核技术进展和未来畅想华为 OS内核实验室 魏勇军openEuler社区 eBPF SIG committerOpenHarmony社区 Kernel SIG committer问题背景:操作系统高度抽象,导致语义丢失,调用路径长,协同困难语义丢失“千人千面”,定制策略多,架构臃肿腐化,维护成本高模块化导致信息丢失、协同困难,性能不佳抽象化导致调用路径长,开销大,时延高全系统可编程:内核机制服务化,构建多元化场景竞争力全系统可编程内核底座,构建完整的可编程底座内核框架。扩展内核各子系统,包括网络、存储、调度、内存、安全等领域构建可编程能力。消除用户态与内核态,内核态组件间的语义鸿沟,实现
2、不同场景差异化内核策略,达到精准的资源供给消除服务与内核之间的功能壁垒,实现服务下沉的功能,缩短调用路径,提升性能并降低底噪旁路繁杂的内核处理逻辑,实现快慢路径,降低时延与开销可编程底座:基于eBPF扩展内核可编程能力安全加载字节码校验后加载,相比内核模块等不会出现 crash 或其他异常导致系统异常或内核崩溃。CORE+版本兼容KABI提供版本兼容KABI,屏蔽结构体等变更差异,实现各版本内核二进制兼容各系统提供机制和策略各内核模块提供编程机制,扩展接口和数据接口,具备可编程能力管理组件+可编程库提供可编程lib库和管理组件,支持多种高级语言和库函数,方便用户快速二次开发,二进制分发。链路短
3、接sockmapXDP报文过滤转发AF_XDP旁路内核协议栈自定义网络策略可编程网络:基于eBPF的高性能网络快速转发面内核协议栈分层解耦,导致复杂网络场景额外性能开销。XDP快速数据路径,在网络数据包到达网卡驱动层时对其进行处理。提供共享内存方式bypass内核协议栈,复用内核驱动代码。绕过整个 TCP/IP 协议栈,实现socket级数据解析/转发能力。自定义拥塞控制算法自定义网络QOS算法自定义socket选项路由表/链接跟踪表查找/更新网络可编程例:框架服务向内核编程,实现极短路径访问问题背景:分布式内存数据库等场景,使用内核网络协议栈,一次存取需需要多次用户/内核态切换和数据拷贝。优
4、化方案:利用可编程技术,跨节点通信实现Map内存高速缓存,旁路Redis Server用户态复杂的处理逻辑。同节点通信使用sockmap。Redis跨节点请求数提升60%+,平均时延减低40%+。同节点请求数提升40%。NetworkStackNIC DriverdataRedis ServerREPLYSET/GETNetworkStackNIC DriverREPLYGET/SETBPF Memory CacheHIT/UPDATE路径越长,性能越低可编程存储:基于eBPF实现近场数据处理能力随着 NVMe 储存设备的出现,储存设备的访问的延迟逐渐变小。在如此高性能的情况下,内核储存堆栈的
5、开销反而变成了影响应用程序访问储存设备的延迟和吞吐量的主要因素。使用eBPF,将用户定义的依赖关系下移到离设备层更近的地方,比如放在 NVMe 驱动层,那么占单次访问开销的 42%左右的文件系统和 bio 层的开销将被节省下来,大大减小一次搜索的开销。遗留问题:地址转译与安全。XRP按照硬件块来访问数据,文件和偏移量来访问。驱动层能够访问任意数据,需借助文件系统来完成权限和隔离的约束。并发与缓存。在 NVMe 驱动层无法访问文件系统以及内核缓存,page cache会失效FUSE文件系统,一次存取/查询需要多次用户/内核态切换和数据拷贝。使用eBPF实现元数据缓存,减少上下文切换开销。数据面结
6、合网络能力,实现内核态快速路径。存储可编程例:策略适应场景,提供精准的资源供给优化方案:基于可编程的IO特征提取+IO预读策略,在Spark SQL优化平均提升10%,解决方案环境验收平均提升18%。问题背景:Spark SQL场景,每个线程会顺序读整个文件,依赖异步预读将数据从磁盘读到内存。但是多个线程间的交织运行,导致下发到磁盘上的IO变随机。可编程调度:实现面向多场景差异性化内核调度策略hookexport可编程内核底座,剥离内核中的策略与机制,将策略层做为可编程点暴露给用户态编程,提供强大的辅助函数,支持用