论文部分内容阅读
基于软件的数据包转发(软转发)作为SDN和NFV技术的关键技术,受到广泛的关注和重视。转发性能是数据包软转发的核心指标和痛点问题,如何对软转发性能进行测量成为关键问题。对于软转发这种高速的业务处理场景,目前业界通用的性能测量工具存在两个问题:1)粒度粗,检测工具难以有效定位性能瓶颈位置;2)开销大,检测工具影响了业务的正常代码路径,导致检测结果偏差。在此背景下本文对动态插桩的实现方法和性能开销情况进行了深入研究,并基于高效动态插桩技术和perf_event子系统设计实现了一种细粒度软转发性能测量工具,具体工作主要包括以下几方面: 1.动态插桩技术研究与高效动态插桩工具库libstub的设计实现。动态插桩是软件测量中的一项重要技术,按照原理有基于探针和实时编译两种实现类型,而基于探针中的快速断点技术是目前最高效的一种实现方法。本文以快速断点技术为基础实现了一个高效的动态插桩工具库libstub,并通过实验验证,与广泛使用的动态插桩工具Pin、Dyninst相比,当被插桩函数调用次数较少时libstub和Dyninst额外开销较小,调用次数多时libstub和Pin的额外开销较小; 2.函数级细粒度性能测量工具stubperf的设计实现。基于所实现的高效动态插桩库libstub,结合perf_event性能测量子系统,设计实现了一个细粒度性能监测工具stubperf,工具在Linux perf的基础上二次开发而成,主要用于函数粒度的多种性能事件的性能数据采集,具有低延时、高精度、可动态装卸、使用简单快捷等优点,此外还添加了对oflops的支持,既可用于作为被动测量时的收发包源又可用于软转发设备的转发性能测量; 3.stubperf的应用综合评估。本文利用stubperf工具,对路由查找程序进行细粒度测量,并从功能使用、性能开销、测量结果准确度三个方面将stubperf与目前常用的两种测量工具systemtap和Linux perf进行了综合对比。实验结果表明,在测量精度上以及需要对指定函数调用有详细性能信息时stubperf要优于基于采样方式的Linux perf工具;而在对性能的影响方面,基于快速断点动态插桩的stubperf要优于基于uprobe设置探测点的systemtap,其中perf_event事件的测量开销stubperf是systemtap的85%,cycles事件测量开销是systemtap的3%。综合各方面考虑,stubperf在指定性能事件的函数级细粒度性能数据测量上,与相似功能的工具相比有着明显的优势,更适用于数据包软转发这类时延敏感业务的性能调优。