From 5d5a3a6649efad74e7765bf6c245fd9f35b6bac2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Constantin=20F=C3=BCrst?= Date: Thu, 18 Jan 2024 22:24:40 +0100 Subject: [PATCH] add a first batch of graphics to implementation chapter --- thesis/content/50_implementation.tex | 16 +- .../sequenzdiagramm-waitoncompletion.png | Bin 0 -> 26102 bytes .../sequenzdiagramm-waitoncompletion.xml | 145 ++++++++++++++++++ .../structo-cachedata-waitoncompletion.nsd | 44 ++++++ .../structo-cachedata-waitoncompletion.png | Bin 0 -> 46989 bytes 5 files changed, 204 insertions(+), 1 deletion(-) create mode 100644 thesis/images/sequenzdiagramm-waitoncompletion.png create mode 100644 thesis/images/sequenzdiagramm-waitoncompletion.xml create mode 100644 thesis/images/structo-cachedata-waitoncompletion.nsd create mode 100644 thesis/images/structo-cachedata-waitoncompletion.png diff --git a/thesis/content/50_implementation.tex b/thesis/content/50_implementation.tex index 3672d2b..0d73362 100644 --- a/thesis/content/50_implementation.tex +++ b/thesis/content/50_implementation.tex @@ -40,7 +40,21 @@ The choice made in \ref{subsec:design:cache-entry-reuse} requires thread safe sh It was therefore decided to implement atomic reference counting for \texttt{CacheData} which means providing a custom constructor and destructor wherein a shared (through a standard pointer however) atomic integer is either incremented or decremented using atomic fetch sub and add operations \cite{cppreference:atomic-operations} to increase or deacrease the reference counter and, in case of decrease in the destructor signals that the destructor is called for the last reference, perform actual destruction. The invalid state of \texttt{CacheData} achievable is also avoided. To achieve this, the waiting algorithm requires the handlers to be contained in an atomic pointer and the pointer to the cache memory be atomic too. Through this we may use the atomic wait operation which is guaranteed by the standard to be more efficient than simply spinning on Compare-And-Swap \cite{cppreference:atomic-wait}. Some standard implementations achieve this by yielding after a short spin cycle \cite{atomic-wait-details}. \par -Designing the wait to work from any thread was complicated. In the first implementation, a thread would check if the handlers are available and if not atomically wait \cite{cppreference:atomic-wait} on a value change from nullptr. As the handlers are only available after submission, a situation could arise where only one copy of \texttt{CacheData} is capable of actually waiting on them. Lets assume that three threads \(T_1\), \(T_2\) and \(T_3\) wish to access the same resource. \(T_1\) now is the first to call \texttt{CacheData::Access} and therefore adds it to the cache state and will perform the work submission. Before \(T_1\) may submit the work, it is interrupted and \(T_2\) and \(T_3\) obtain access to the incomplete \texttt{CacheData} on which they wait, causing them to see a nullptr for the handlers but invalid cache pointer, leading to atomic wait on the cache pointer. Now \(T_1\) submits the work and sets the handlers, while \(T_2\) and \(T_3\) continue to wait. Now only \(T_1\) can trigger the waiting and is therefore capable of keeping \(T_2\) and \(T_3\) from progressing. This is undesirable as it can lead to deadlocking if by some reason \(T_1\) does not wait and at least may lead to unnecessary delay for \(T_2\) and \(T_3\) if \(T_1\) does not wait immediately. \par +\begin{figure}[H] + \centering + \includegraphics[width=0.9\textwidth]{images/sequenzdiagramm-waitoncompletion.png} + \caption{Sequence diagram for threading scenario in \texttt{CacheData::WaitOnCompletion}} + \label{fig:impl-cachedata-threadseq-waitoncompletion} +\end{figure} + +Designing the wait to work from any thread was complicated. In the first implementation, a thread would check if the handlers are available and if not atomically wait \cite{cppreference:atomic-wait} on a value change from nullptr. As the handlers are only available after submission, a situation could arise where only one copy of \texttt{CacheData} is capable of actually waiting on them. Lets assume that three threads \(T_1\), \(T_2\) and \(T_3\) wish to access the same resource. \(T_1\) now is the first to call \texttt{CacheData::Access} and therefore adds it to the cache state and will perform the work submission. Before \(T_1\) may submit the work, it is interrupted and \(T_2\) and \(T_3\) obtain access to the incomplete \texttt{CacheData} on which they wait, causing them to see a nullptr for the handlers but invalid cache pointer, leading to atomic wait on the cache pointer (marked blue lines in \ref{fig:impl-cachedata-threadseq-waitoncompletion}). Now \(T_1\) submits the work and sets the handlers (marked red lines in \ref{fig:impl-cachedata-threadseq-waitoncompletion}), while \(T_2\) and \(T_3\) continue to wait. Now only \(T_1\) can trigger the waiting and is therefore capable of keeping \(T_2\) and \(T_3\) from progressing. This is undesirable as it can lead to deadlocking if by some reason \(T_1\) does not wait and at the very least may lead to unnecessary delay for \(T_2\) and \(T_3\) if \(T_1\) does not wait immediately. \par + +\begin{figure}[H] + \centering + \includegraphics[width=0.9\textwidth]{images/structo-cachedata-waitoncompletion.png} + \caption{Code Flow Diagram for \texttt{CacheData::WaitOnCompletion}} + \label{fig:impl-cachedata-waitoncompletion} +\end{figure} To solve this, a different and more complicated order of waiting operations is required. When waiting, the threads now immediately check whether the cache pointer contains a valid value and return if it does, as nothing has to be waited for in this case. Let's take the same example as before to illustrate the second part of the waiting procedure. \(T_2\) and \(T_3\) now both arrive in this latter section as the cache was invalid at the point in time when waiting was called for. They now atomically wait on the handlers pointer to change, instead of doing it the other way around as before. Now when \(T_1\) supplies the handlers, it also uses \texttt{std::atomic::notify\_one} \cite{cppreference:atomic-notify-one} to wake at least one thread waiting on value change of the handlers pointer, if there are any. Through this the exclusion that was observable in the first implementation is already avoided. If nobody is waiting, then the handlers will be set to a valid pointer and a thread may pass the atomic wait instruction later on. Following this wait, the handlers pointer is atomically exchanged \cite{cppreference:atomic-exchange} with nullptr, invalidating it. Now each thread again checks whether it has received a valid local pointer to the handlers from the exchange, if it has then the atomic operation guarantees that is now in sole possession of the pointer. The owning thread is tasked with actually waiting. All other threads will now regress and call \texttt{CacheData::WaitOnCompletion} again. The solo thread may proceed to wait on the handlers and should update the cache pointer. \par diff --git a/thesis/images/sequenzdiagramm-waitoncompletion.png b/thesis/images/sequenzdiagramm-waitoncompletion.png new file mode 100644 index 0000000000000000000000000000000000000000..6523cc6b3839fdd67259a4fee8d30917deed5d63 GIT binary patch literal 26102 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/thesis/images/structo-cachedata-waitoncompletion.nsd b/thesis/images/structo-cachedata-waitoncompletion.nsd new file mode 100644 index 0000000..e799a4b --- /dev/null +++ b/thesis/images/structo-cachedata-waitoncompletion.nsd @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/thesis/images/structo-cachedata-waitoncompletion.png b/thesis/images/structo-cachedata-waitoncompletion.png new file mode 100644 index 0000000000000000000000000000000000000000..d0f3ac05ef3431eb73b2e7c339ac3bee807ac3ce GIT binary patch literal 46989 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�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 ZeLr+dvHWZ5!~z}s40Mdq`C9g&{{dlM{*3?t literal 0 HcmV?d00001