edits
parent
479b89f584
commit
a960d26c02
|
@ -3,42 +3,42 @@
|
|||
|
||||
\begin{figure*}
|
||||
\centering
|
||||
\includegraphics[width=.90\linewidth]{figures/graph_jank_allapps.pdf}
|
||||
\includegraphics[width=.87\linewidth]{figures/graph_jank_allapps.pdf}
|
||||
\bfcaption{Display framedrop for apps under different CPU policies (10 runs, 90\% confidence)}
|
||||
\label{fig:jank_allapps}
|
||||
\end{figure*}
|
||||
|
||||
\begin{figure*}
|
||||
\centering
|
||||
\includegraphics[width=.90\linewidth]{figures/graph_energy_allapps.pdf}
|
||||
\includegraphics[width=.87\linewidth]{figures/graph_energy_allapps.pdf}
|
||||
\bfcaption{Energy usage for apps under different CPU policies (10 runs, 90\% confidence)}
|
||||
\label{fig:energy_allapps}
|
||||
\end{figure*}
|
||||
|
||||
\begin{figure*}
|
||||
\centering
|
||||
\includegraphics[width=.90\linewidth]{figures/graph_time_per_freq_yt.pdf}
|
||||
\includegraphics[width=.87\linewidth]{figures/graph_time_per_freq_yt.pdf}
|
||||
\bfcaption{Average time spent per CPU under the default policy for Youtube (Average of 10 runs, 90\% confidence)}
|
||||
\label{fig:time_per_freq_yt}
|
||||
\end{figure*}
|
||||
|
||||
\begin{figure*}
|
||||
\centering
|
||||
\includegraphics[width=.90\linewidth]{figures/graph_time_per_freq_spot.pdf}
|
||||
\includegraphics[width=.87\linewidth]{figures/graph_time_per_freq_spot.pdf}
|
||||
\bfcaption{Average time spent per CPU under the default policy for Spotify (Average of 10 runs, 90\% confidence)}
|
||||
\label{fig:time_per_freq_spot}
|
||||
\end{figure*}
|
||||
|
||||
\begin{figure*}
|
||||
\centering
|
||||
\includegraphics[width=.90\linewidth]{figures/graph_nonidletime_yt.pdf}
|
||||
\includegraphics[width=.87\linewidth]{figures/graph_nonidletime_yt.pdf}
|
||||
\bfcaption{CPU non-idle time for Youtube under different CPU policies (10 runs, 90\% confidence)}
|
||||
\label{fig:nonidle_yt}
|
||||
\end{figure*}
|
||||
|
||||
\begin{figure*}
|
||||
\centering
|
||||
\includegraphics[width=.90\linewidth]{figures/graph_nonidletime_spot.pdf}
|
||||
\includegraphics[width=.87\linewidth]{figures/graph_nonidletime_spot.pdf}
|
||||
\bfcaption{CPU non-idle time for Spotify under different CPU policies (10 runs, 90\% confidence)}
|
||||
\label{fig:nonidle_spot}
|
||||
\end{figure*}
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
|
||||
\begin{figure}
|
||||
\centering
|
||||
\includegraphics[width=.90\linewidth]{figures/graph_missed_opportunities.pdf}
|
||||
\includegraphics[width=.8\linewidth]{figures/graph_missed_opportunities.pdf}
|
||||
\bfcaption{A trace of \schedutil's cpu frequency selections given in blue. The dotted red line shows a energy/latency optimal frequency choice ($\fenergy$).}
|
||||
\label{fig:missed_opportunities}
|
||||
\end{figure}
|
||||
|
|
|
@ -66,7 +66,7 @@ in memory-bound workloads (i.e., with frequent CPU stalls resulting from cache m
|
|||
We note that we did not encounter any significant busy-waiting across all of the apps that we tested.
|
||||
}.
|
||||
|
||||
By comparison, tasks blocked on IO or user input are removed from the runqueue entirely, allowing the CPU to enter an idle state.
|
||||
By comparison, tasks blocked on IO or user input are removed from the runqueue, allowing the CPU to idle.
|
||||
%\todo{add an experiment that shows that tasks blocked on IO or user input or something similar have similar energy profiles.?}
|
||||
We note that CPU utilization is a measure of time spent idling or blocked on IO, and not the time the CPU spends running without doing useful work, supporting our second claim:
|
||||
|
||||
|
@ -93,7 +93,7 @@ All of the time spent in the areas marked Underperformance represents energy was
|
|||
|
||||
\begin{figure*}
|
||||
\centering
|
||||
\includegraphics[width=.90\linewidth]{figures/graph_time_per_freq_fb.pdf}
|
||||
\includegraphics[width=.87\linewidth]{figures/graph_time_per_freq_fb.pdf}
|
||||
\bfcaption{Time per CPU at a given frequency for Facebook, 25s with default policy. (Avg. of 10 runs, 90\% confidence)}
|
||||
\label{fig:time_per_freq_fb}
|
||||
\end{figure*}
|
||||
|
@ -101,13 +101,12 @@ All of the time spent in the areas marked Underperformance represents energy was
|
|||
|
||||
\subsection{Truncated \schedutil}
|
||||
|
||||
To summarize, frequencies strictly below $\fenergy$ (excepting $\fidle$) consume more power per CPU cycle than $\fenergy$, and result in higher latencies.
|
||||
Frequencies strictly below $\fenergy$ (excepting $\fidle$) consume more power per CPU cycle than $\fenergy$, and result in higher latencies.
|
||||
In the absence of CPU stalls, spin-locks, and thermal throttling, frequencies in this range are strictly worse.
|
||||
Based on this observation and two further insights, we now propose our first adjustment to the \schedutil governor.
|
||||
|
||||
First, recall that the only signal used by \schedutil is recent past CPU usage.
|
||||
This signal conveys no information about CPU stalls, and so is not useful for deciding whether the CPU should be set to a frequency in this regime.
|
||||
|
||||
Second, we observe that workloads that trigger the relevant CPU behaviors are typically data-intensive and memory bound, or parallel workloads with high contention.
|
||||
Such workloads are often offloaded to more powerful cloud compute infrastructures; When run at the edge (e.g., for federated learning), it is typically when the device has a stable power source.
|
||||
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
|
||||
\begin{figure*}
|
||||
\centering
|
||||
\includegraphics[width=.90\linewidth]{figures/graph_oscill_cycles.pdf}
|
||||
\includegraphics[width=.87\linewidth]{figures/graph_oscill_cycles.pdf}
|
||||
\bfcaption{Runtime and CPU cyclecount for a fixed compute under different CPU policies (10 runs, 90\% confidence)}
|
||||
\label{fig:cycles_time}
|
||||
\end{figure*}
|
||||
|
@ -40,7 +40,7 @@ Armed with this knowledge, we realize the \systemname governor: a simple policy
|
|||
|
||||
\begin{figure*}
|
||||
\centering
|
||||
\includegraphics[width=.90\linewidth]{figures/graph_nonidletime_fb.pdf}
|
||||
\includegraphics[width=.87\linewidth]{figures/graph_nonidletime_fb.pdf}
|
||||
\bfcaption{CPU non-idle time for Facebook under different CPU policies (10 runs, 90\% confidence)}
|
||||
\label{fig:nonidle_fb}
|
||||
\end{figure*}
|
||||
|
@ -48,7 +48,7 @@ Armed with this knowledge, we realize the \systemname governor: a simple policy
|
|||
|
||||
\begin{figure}
|
||||
\centering
|
||||
\includegraphics[width=.90\linewidth]{figures/graph_jank_perspeed_fb.pdf}
|
||||
\includegraphics[width=.87\linewidth]{figures/graph_jank_perspeed_fb.pdf}
|
||||
\bfcaption{Display framedrop for Facebook under different CPU policies (10 runs, 90\% confidence)}
|
||||
\label{fig:screendrops_per_freq_fb}
|
||||
\end{figure}
|
||||
|
@ -121,7 +121,7 @@ However, even at the CPU's maximum frequency, more work is created than the CPU
|
|||
|
||||
\begin{figure}
|
||||
\centering
|
||||
\includegraphics[width=.95\linewidth]{figures/graph_u_fb.pdf}
|
||||
\includegraphics[width=.87\linewidth]{figures/graph_u_fb.pdf}
|
||||
\bfcaption{Energy consumed for a fixed set of interations, given compute at different speeds \fixme{fullrun set}}
|
||||
\label{fig:u_micro_fb}
|
||||
\end{figure}
|
||||
|
|
Loading…
Reference in New Issue