一句话:提出 DebloaterX,利用容器使用模式识别上下文无关对象,大幅加速对象敏感指针分析且精度损失可忽略。
对象敏感指针分析(k obj)精度高,但其上下文构造不加区分地将对象与其上下文组合,导致大型程序中上下文组合爆炸,分析效率低下。已有上下文去膨胀方法通过抑制预选的上下文无关对象来形成新上下文,但其识别集合过于保守,加速效果受限。本文提出 DebloaterX,一种新的上下文去膨胀预分析:基于三种通用容器使用模式,仅当对象可能对 k obj 精度关键时才将其标记为上下文相关。研究发现,不含抽象(开放)类型字段的对象可安全地按上下文不敏感方式分析,精度损失可忽略。作者给出清晰规则与高效算法以识别这些模式,并在 Qilin 框架中实现。在 12 个标准 Java 基准和真实程序上,DebloaterX 平均将 92.4% 的对象选为上下文无关,使 k obj 显著加速(k=2 平均 19.3 倍,k=3 平均 150.2 倍),k=3 时可多扩展 8 个程序,精度损失小于 0.2%;相比 Zipper 在精度与效率上显著更优,相比 Conch 在效率上大幅领先且精度几乎相同。
In this paper, we introduce DebloaterX, a new approach for automatically identifying context-independent objects to debloat contexts in object-sensitive pointer analysis ( k obj). Object sensitivity achieves high precision, but its context construction mechanism combines objects with their contexts indiscriminately. This leads to a combinatorial explosion of contexts in large programs, resulting in inefficiency. Previous research has proposed a context-debloating approach that inhibits a pre-selected set of context-independent objects from forming new contexts, improving the efficiency of k obj. However, this earlier context-debloating approach under-approximates the set of context-independent objects identified, limiting performance speedups. We introduce a novel context-debloating pre-analysis approach that identifies objects as context-dependent only when they are potentially precision-critical to k obj based on three general container-usage patterns. Our research finds that objects containing no fields of ”abstract” (i.e., open) types can be analyzed context-insensitively with negligible precision loss in real-world applications. We provide clear rules and efficient algorithms to recognize these patterns, selecting more context-independent objects for better debloating. We have implemented DebloaterX in the Qilin framework and will release it as an open-source tool. Our experimental results on 12 standard Java benchmarks and real-world programs show that DebloaterX selects 92.4% of objects to be context-independent on average, enabling k obj to run significantly faster (an average of 19.3x when k = 2 and 150.2x when k = 3) and scale up to 8 more programs when k = 3, with only a negligible loss of precision (less than 0.2%). Compared to state-of-the-art alternative pre-analyses in accelerating k obj, DebloaterX outperforms Zipper significantly in both precision and efficiency and outperforms Conch (the earlier context-debloating approach) in efficiency substantially while achieving nearly the same precision.
@article{paperbot1825,
title = {A Container-Usage-Pattern-Based Context Debloating Approach for Object-Sensitive Pointer Analysis},
author = {Dongjie He and Yujiang Gui and Wei Li and Yonggang Tao and Changwei Zou and Yulei Sui and Jingling Xue},
journal = {Proceedings of the ACM on Programming Languages},
volume = {7},
number = {OOPSLA2},
year = {2023},
doi = {10.1145/3622832}
}