Skip to content

Commit 1a6e691

Browse files
committed
Fix small mistakes
1 parent 0809d99 commit 1a6e691

File tree

2 files changed

+22
-17
lines changed

2 files changed

+22
-17
lines changed

src/paper.tex

Lines changed: 15 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -64,14 +64,14 @@
6464
\begin{abstract}
6565
Concurrency bugs are often hard to find and therefore hard to fix.
6666
In this paper we evaluate different techniques and tools that are currently available to effectively find, fix and avoid concurrency bugs.
67-
These tools should be easy to use, they should bring only a minimal computational and storage overhead and they should have a high coverage with minimal false-positive reports.
67+
These tools should be easy to use, they should operate with a minimal computational and storage overhead and they should have a high coverage with minimal false-positive reports.
6868
In short: These tools should be production-ready and applicable to real-world software projects.
6969
The techniques evaluated are:
7070
\begin{itemize}
7171
\item Dynamic code analysis with record and replay and dynamic data race detection.
72-
\item Concurrency-aware testing with a combined approach of evaluating thread schedules with delta-debugging to automatically pinpoint concurrency bugs.
72+
\item Concurrency-aware testing with the approach of evaluating thread schedules with delta-debugging to automatically pinpoint concurrency bugs.
7373
\item Static code analysis with the methods of sequentialization and model-checking.
74-
\item Language and software design to avoid concurrency bugs when writing software.
74+
\item Programming language and software design to avoid concurrency bugs when writing software.
7575
\end{itemize}
7676
\end{abstract}
7777

@@ -116,18 +116,18 @@ \subsection{Heisenbugs}
116116
The complexity and uncertainty of concurrency bugs is also the reason for many studies that examine how these bugs occur and explore different ways on how to detect, fix and avoid them~\cite{tu2019go}.
117117
Thus, numerous tools and techniques have been developed that propose different solutions to solve the problem of concurrency bugs and accelerate the debugging process.
118118

119-
This paper will evaluate some of these techniques and tools and how they can be used to ease the process of debugging concurrent bugs.
119+
In this paper we evaluate some of these techniques and tools and how they can be used to ease the process of debugging concurrent bugs.
120120
The main focus is to detect bugs efficiently in production, which means that developers should be able to fix bugs with a minimum amount of work and time.
121121
Also, the manifestation of concurrency bugs should be reported immediately with minimal overhead of computational resources.
122122
For all of this it is also desirable to have a maximum amount of coverage with only minimal false-positive reports.
123123

124124
\subsection{The Go Programming Language}
125-
The increasing demand for parallel programs has also lead to the development of new programming languages which specialize on this task.
126-
The goal of these languages is to ease the usage of parallel programming patterns so developers can use it more often without writing extensively more code.
127-
Additionally they try to avoid the creation of concurrency bugs by their design of language which will be evaluated in \cref{sct:outlook}.
128-
One example for such a language is Go which is a statically typed programming language developed by Google, which compiles down to single native binaries.
125+
The increasing demand for parallel programs has also lead to the development of new programming languages which specialize in this task.
126+
The goal of these languages is to ease the usage of parallel programming patterns, so developers can use them more often without writing extensively more code.
127+
Additionally, they try to avoid the creation of concurrency bugs by their design of language which will be evaluated in \cref{sct:outlook}.
128+
One example for such a language is Go which is a statically typed programming language developed by Google, that compiles down to single native binaries.
129129
Go recently gained a lot of popularity for the purpose of writing highly concurrent programs.
130-
Popular open-source projects like \emph{Kubernetes}\footnote{\url{https://kubernetes.io/}}, \emph{Docker}\footnote{\url{https://www.docker.com/}} or \emph{Prometheus}\footnote{\url{https://prometheus.io/}} are all written in Go.
130+
Popular open-source projects like \emph{Kubernetes}\footnote{\url{https://kubernetes.io/}}, \emph{Docker}\footnote{\url{https://www.docker.com/}} and \emph{Prometheus}\footnote{\url{https://prometheus.io/}} are all written in Go.
131131
The official documentation of Go states: ``[... Go's] concurrency mechanisms make it easy to write programs that get the most out of multicore and networked machines [...]''~\cite{goDocs}.
132132
Go abstracts the creation of threads by using lightweight \emph{goroutines}, which can be created by using the \lstinline{go} keyword followed by a named or anonymous function.
133133
The Go runtime maps these goroutines to normal Kernel threads during execution.
@@ -143,7 +143,7 @@ \subsection{Structure}
143143

144144
The further structure of this paper continues as follows:
145145
\Cref{sct:taxonomy} gives a brief introduction on the different types of concurrency bugs and their main causes.
146-
\Cref{sct:dynamic} covers some techniques to dynamically detect concurrency bugs, reliably reproduce them.
146+
\Cref{sct:dynamic} covers some techniques to dynamically detect concurrency bugs and reliably reproduce them.
147147
\Cref{sct:testing} shows different methods of concurrency-aware testing to detect concurrency bugs automatically in a testing environment.
148148
\Cref{sct:static} covers how to detect concurrency bugs with static code analysis.
149149
And finally, \Cref{sct:outlook} will provide a quick outlook on how the examined tools can be used together as well as other promising technologies that might help avoiding concurrency bugs in the future.
@@ -249,8 +249,7 @@ \subsection{Atomicity and Order Violations}
249249
\end{lstlisting}
250250

251251
Atomicity and order violations are concurrency bugs where the interleaving of threads violates the programmer's intention of atomicity and order.
252-
% TODO: cite test and use
253-
\Cref{lst:order} shows a common order violation bug pattern called ``Test-and-Use''.
252+
\Cref{lst:order} shows a common order violation bug pattern called ``Test-and-Use''~\cite{farchi2003patterns}.
254253
The programmer's intention is to check if a variable is not \lstinline{nil} and then use this variable.
255254
However, due to the thread that was launched before, it could happen that after the \lstinline{if} check in line 7, the thread of the goroutine gets scheduled and the data variable is set to \lstinline{nil}.
256255
To fix this bug, the check and the usage of the variable need to become an atomic operation to enforce the order of execution.
@@ -270,8 +269,7 @@ \subsection{Atomicity and Order Violations}
270269
}
271270
\end{lstlisting}
272271

273-
% TODO: cite load-store
274-
\Cref{lst:atomicity} shows one example of the infamous ``Load-Store'' bug pattern.
272+
\Cref{lst:atomicity} shows one example of the infamous ``Load-Store'' bug pattern~\cite{farchi2003patterns}.
275273
The programmer might have assumed that \lstinline{++} is an atomic operation because it is one literal in Go.
276274
However, after compilation, this is expanded to 3 instructions: LOAD, INCREMENT and finally STORE.
277275
The thread scheduler could switch the context after any of these instructions.
@@ -351,7 +349,7 @@ \subsection{Data Race Detection}
351349
These tools just observe and do not actively try to enforce a manifestation of bugs, so not every thread interleaving might be explored.
352350
Additionally, they depend on the the recognition of these bugs to report them correctly.
353351
Programs that heavily rely on multi-threaded execution like web-servers can also become very inefficient or could even fail due to timeout limitations.
354-
To avoid the overhead in the production environment and to find concurrency bugs in programs that could not be observed easily, it is desirable to prevent concurrency bugs before they can even get into production.
352+
To avoid the overhead in the production environment and to find concurrency bugs in programs that could not be observed easily, it is desirable to find concurrency bugs before they can even get into production.
355353

356354

357355
% ------------------------------------ %
@@ -396,7 +394,7 @@ \section{Concurrency-aware Testing}
396394
This way the test cases can be minimized to semantical correctness checks, which decreases the operational overhead for such a setup.
397395

398396
Concurrency-aware testing is very promising in the regard of extending an existing testing pipeline.
399-
This way concurrency bugs could be detected even before the software is deployed into production.
397+
This way concurrency bugs could be detected even before the software gets deployed into production.
400398
The overhead can be minimized by optimizing the thread schedule generator and by ignoring most uncritical regions of the code.
401399
However, the coverage depends on the quality of the tests that also need to be aware of multi-variable semantic data races.
402400

@@ -479,7 +477,7 @@ \section{Conclusion}
479477

480478
Although there is a variety of tools that try to ease the process of multi-threaded debugging, as shown, none of them really fulfills all requirements for a production-ready drop-in solution.
481479
But there are multiple techniques that can be combined to at least get some support in debugging multi-threaded applications.
482-
In all of this the developers always have to decide if safety or speed is more important for their application and adjust the tools to these needs.
480+
In all of this the developers always have to decide if safety and overall correctness or speed is more important for their application and adjust the tools to these needs.
483481

484482
\bibliographystyle{IEEEtran}
485483
\bibliography{references}

src/references.bib

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -233,6 +233,13 @@ @inproceedings{serebry2011llvm
233233
series = {RV’11}
234234
}
235235

236+
@inproceedings{farchi2003patterns,
237+
author={E. {Farchi} and Y. {Nir} and S. {Ur}},
238+
booktitle={Proceedings International Parallel and Distributed Processing Symposium},
239+
title={Concurrent bug patterns and how to test them},
240+
year={2003},
241+
}
242+
236243
%--EXTRA--%
237244
@article{kernighan1974elements,
238245
title={The elements of programming style},

0 commit comments

Comments
 (0)