认识CTinspector
简介
CTinspector是天翼云科技有限公司基于ebpf指令集自主创新研发的语言虚拟机运行框架。基于CTinspector运行框架可以快速拓展其应用实例用于诊断网络性能瓶颈点,诊断存储IO处理的热点和负载均衡等,提高系统运行时诊断的稳定性和时效性。
CTinspector未引入云上环境基础底座系统运维与问题分析之前,OVS的运维与ACL的配置效率相对较低,且存在一些功能上不支持的问题:
维人员想要使用的过滤字段正好没有实现,或者与或非的条件表达式不支持;
系统中有很多命令都有类似的过滤需求,比如CT流表,openflow流表,卸载流表,如果针对每种流表开发各自的命令行参数,这是一个很重的开发任务;
基于命令行参数的过滤无法实现有状态过滤:比如查看报文数命中最多的流表。传统的过滤规则都是针对单条流表的,无法建立多条流表间的关联关系。
架构
CTinspector采用一个ebpf指令集的语言虚拟机Packet VM,它最小只有256字节,包含所有虚拟机应有的部件:寄存器,堆栈段,代码段,数据段,页表。Packet VM支持自主的migration,即packet VM内的代码可以调用migrate kernel function,以将packet VM迁移至它自己指定的节点。Packaket VM同时支持断点续执行,即packet VM迁移至下一个节点后可以沿着上一个节点中断的位置继续执行下一条指令。
CTinspector框架总体架构如下图所示:
CTinspecto框架的主要部件包括:
ebpf compiler/JIT: 将C代码编译为ebpf二进制码,JIT则负责将ebpf指令及时编译为机器码。
ebpf linker/loader: 负责加载和链接库函数即kernel functions。
runner: 执行ebpf VM,这包括加载寄存器,代码段,加载堆栈,映射数据段等。
scheduler: 决定何时执行ebpf VM,这包括判断VM的状态,需要等待的数据依赖条件等。
basic kernel functions: 基本库函数,包括迁移,映射内存,fork,join_meeting等核心基本功能。
extended kernel functions: 除了ebpf VM runner提供的核心基本功能外,应用程序的各个hook点都可以提供自定义的库函数。
memory mapper: 将应用程序数据映射进ebpf VM以方便ebpf程序读写应用数据。