Automatically detecting and fixing concurrency bugs in go software systems

Automatically detecting and fixing concurrency bugs in go software systems
复制标题

自动检测并修复Go软件系统中的并发错误

DOI:
10.1145/3445814.3446756
复制
发表时间:
2021
期刊:
Proceedings of the 26th ACM International Conference on Architectural Support for Programming Languages and Operating Systems
影响因子:
--
通讯作者:
Song, Linhai
Song, Linhai
中科院分区:
--
文献类型:
--
作者:
Liu, Ziheng;Zhu, Shuofei;Qin, Boqin;Chen, Hao;Song, Linhai

文献摘要

参考文献

被引文献

相似文献

Go是一种静态类型的编程语言,设计用于高效和可靠的并发编程。为此,Go提供了轻量级的goroutines,并建议使用通道传递消息,作为一种不太容易出错的线程通信方式。近年来,Go变得越来越流行,并已被用于构建许多重要的基础设施软件系统。然而,最近的一项实证研究表明,并发错误,特别是那些由于滥用通道,广泛存在于Go中。这些漏洞严重损害了Go并发系统的可靠性。为了解决由于通道滥用而导致的Go并发错误,本文提出了一个静态并发错误检测系统GCatch和一个自动并发错误修复系统GFix。在解开输入Go程序后,GCatch使用一种新的约束系统对Go中的复杂通道操作进行建模,并应用约束求解器来识别阻塞错误。GFix使用Go的通道相关语言功能自动修补GCatch检测到的阻塞错误。我们将GCatch和GFix应用于21个流行的Go应用程序,包括Docker,Kubernetes和gRPC。GCatch总共发现了149个以前未知的由于滥用通道而导致的阻塞错误,GFix成功修复了其中的124个。我们已经向开发人员报告了所有检测到的错误并生成了补丁。到目前为止,开发人员已经根据我们的报告修复了125个阻止滥用通道的错误。其中,87个错误是通过直接应用GFix的补丁修复的。
Go is a statically typed programming language designed for efficient and reliable concurrent programming. For this purpose, Go provides lightweight goroutines and recommends passing messages using channels as a less error-prone means of thread communication. Go has become increasingly popular in recent years and has been adopted to build many important infrastructure software systems. However, a recent empirical study shows that concurrency bugs, especially those due to misuse of channels, exist widely in Go. These bugs severely hurt the reliability of Go concurrent systems. To fight Go concurrency bugs caused by misuse of channels, this paper proposes a static concurrency bug detection system, GCatch, and an automated concurrency bug fixing system, GFix. After disentangling an input Go program, GCatch models the complex channel operations in Go using a novel constraint system and applies a constraint solver to identify blocking bugs. GFix automatically patches blocking bugs detected by GCatch using Go’s channel-related language features. We apply GCatch and GFix to 21 popular Go applications, including Docker, Kubernetes, and gRPC. In total, GCatch finds 149 previously unknown blocking bugs due to misuse of channels and GFix successfully fixes 124 of them. We have reported all detected bugs and generated patches to developers. So far, developers have fixed 125 blocking misuse-of-channel bugs based on our reporting. Among them, 87 bugs are fixed by applying GFix’s patches directly.
DOI: 10.32388/a6gmkq
发表时间: 2020-02
期刊: Surgery, gynecology & obstetrics
影响因子: --
作者:
通讯作者: --
隔离 go:基于频道的节目的活跃度和安全性
DOI: 10.1145/3009837.3009847
发表时间: 2016
期刊: Proceedings of the 44th ACM SIGPLAN Symposium on Principles of Programming Languages
影响因子: --
作者:
J. Lange;Nicholas Ng;Bernardo Toninho;N. Yoshida
通讯作者: N. Yoshida
Go 程序的静态竞争检测和互斥安全性和活性(扩展版)
DOI: --
发表时间: 2020
期刊: European Conference on Object-Oriented Programming
影响因子: --
作者:
Julia Gabet;N. Yoshida
通讯作者: N. Yoshida
MPI 应用程序中用于死锁检测的持久集的健全减少
DOI: 10.1007/978-3-642-33296-8_15
发表时间: 2012
期刊: Proceedings of the 36th ACM SIGPLAN Conference on Programming Language Design and Implementation
影响因子: --
作者:
Subodh Sharma;G. Gopalakrishnan;G. Bronevetsky
通讯作者: G. Bronevetsky
DFix:自动修复分布式系统中的计时错误
DOI: --
发表时间: 2019
期刊: ACM-SIGPLAN Symposium on Programming Language Design and Implementation
影响因子: --
作者:
Guangpu Li;Haopeng Liu;Xianglan Chen;Haryadi S. Gunawi;Shan Lu
通讯作者: Shan Lu