120 lines
5.1 KiB
TeX
120 lines
5.1 KiB
TeX
\subsection{Performance Monitor}
|
|
This object implements a performance monitor for SICS. Please note that SICS
|
|
performance is determined not only by processor speed but by a whole range
|
|
of factors:
|
|
\begin{itemize}
|
|
\item Processor speed and memory.
|
|
\item Speed of network connctions to hardware devices.
|
|
\item Number of clients connected.
|
|
\end{itemize}
|
|
|
|
The PerfMonTask is called from the SICS task modules main loop. It will then
|
|
increment a cycle counter and check if a predefined intergration time has
|
|
passed. If so a new
|
|
value for cycle per seconds will be calculated. This is also the main
|
|
output of PerfMon. PerfMon implements a callback interface in order to allow
|
|
automatical notification about system performance.
|
|
|
|
PerfMon has a little datastructure:
|
|
\begin{flushleft} \small
|
|
\begin{minipage}{\linewidth} \label{scrap1}
|
|
$\langle$pdata {\footnotesize ?}$\rangle\equiv$
|
|
\vspace{-1ex}
|
|
\begin{list}{}{} \item
|
|
\mbox{}\verb@@\\
|
|
\mbox{}\verb@ typedef struct __PerfMon {@\\
|
|
\mbox{}\verb@ pObjectDescriptor pDes;@\\
|
|
\mbox{}\verb@ pICallBack pCall;@\\
|
|
\mbox{}\verb@ int iLog; /* flag for@\\
|
|
\mbox{}\verb@ serverlog writing */ @\\
|
|
\mbox{}\verb@ float fCPS; /* cycles per seconds */@\\
|
|
\mbox{}\verb@ int iInteg; /* integration time */@\\
|
|
\mbox{}\verb@ int iCount;@\\
|
|
\mbox{}\verb@ time_t tLast; /* last time calculated */@\\
|
|
\mbox{}\verb@ time_t tTarget; /* next target time */@\\
|
|
\mbox{}\verb@ int iEnd;@\\
|
|
\mbox{}\verb@ }PerfMon;@\\
|
|
\mbox{}\verb@@$\diamond$
|
|
\end{list}
|
|
\vspace{-1ex}
|
|
\footnotesize\addtolength{\baselineskip}{-1ex}
|
|
\begin{list}{}{\setlength{\itemsep}{-\parsep}\setlength{\itemindent}{-\leftmargin}}
|
|
\item Macro referenced in scrap ?.
|
|
\end{list}
|
|
\end{minipage}\\[4ex]
|
|
\end{flushleft}
|
|
The interface consists of the following functions:
|
|
\begin{flushleft} \small
|
|
\begin{minipage}{\linewidth} \label{scrap2}
|
|
$\langle$pInter {\footnotesize ?}$\rangle\equiv$
|
|
\vspace{-1ex}
|
|
\begin{list}{}{} \item
|
|
\mbox{}\verb@@\\
|
|
\mbox{}\verb@ typedef struct __PerfMon *pPerfMon;@\\
|
|
\mbox{}\verb@/*---------------------- live and death ----------------------------------*/@\\
|
|
\mbox{}\verb@ pPerfMon CreatePerfMon(int iInteg);@\\
|
|
\mbox{}\verb@ void DeletePerfMon(void *pData);@\\
|
|
\mbox{}\verb@/*---------------------- increment ---------------------------------------*/@\\
|
|
\mbox{}\verb@ int IncrementPerfMon(pPerfMon self);@\\
|
|
\mbox{}\verb@/*------------------------------------------------------------------------*/@\\
|
|
\mbox{}\verb@ float GetPerformance(pPerfMon self);@\\
|
|
\mbox{}\verb@/*------------------------------------------------------------------------*/@\\
|
|
\mbox{}\verb@ int PerfMonWrapper(SConnection *pCon, SicsInterp *pSics, void *pData,@\\
|
|
\mbox{}\verb@ int argc, char *argv[]);@\\
|
|
\mbox{}\verb@/*-----------------------------------------------------------------------*/@\\
|
|
\mbox{}\verb@ int PerfMonTask(void *pPerf);@\\
|
|
\mbox{}\verb@ void PerfMonSignal(void *pPerf, int iSignal, void *pSigData); @\\
|
|
\mbox{}\verb@@$\diamond$
|
|
\end{list}
|
|
\vspace{-1ex}
|
|
\footnotesize\addtolength{\baselineskip}{-1ex}
|
|
\begin{list}{}{\setlength{\itemsep}{-\parsep}\setlength{\itemindent}{-\leftmargin}}
|
|
\item Macro referenced in scrap ?.
|
|
\end{list}
|
|
\end{minipage}\\[4ex]
|
|
\end{flushleft}
|
|
There is really not much to this.
|
|
|
|
\begin{flushleft} \small
|
|
\begin{minipage}{\linewidth} \label{scrap3}
|
|
\verb@"perfmon.h"@ {\footnotesize ? }$\equiv$
|
|
\vspace{-1ex}
|
|
\begin{list}{}{} \item
|
|
\mbox{}\verb@@\\
|
|
\mbox{}\verb@/*-------------------------------------------------------------------------@\\
|
|
\mbox{}\verb@ P E R F M O N@\\
|
|
\mbox{}\verb@ A performance monitor for SICS. Maintains and calculates a value for@\\
|
|
\mbox{}\verb@ cycles per seconds. @\\
|
|
\mbox{}\verb@@\\
|
|
\mbox{}\verb@ Mark Koennecke, Juli 1997@\\
|
|
\mbox{}\verb@@\\
|
|
\mbox{}\verb@ copyright: see implementation file@\\
|
|
\mbox{}\verb@---------------------------------------------------------------------------*/@\\
|
|
\mbox{}\verb@#ifndef SICSPERFMON@\\
|
|
\mbox{}\verb@#define SICSPERFMON@\\
|
|
\mbox{}\verb@@\\
|
|
\mbox{}\verb@@$\langle$pInter {\footnotesize ?}$\rangle$\verb@@\\
|
|
\mbox{}\verb@#endif@\\
|
|
\mbox{}\verb@@$\diamond$
|
|
\end{list}
|
|
\vspace{-2ex}
|
|
\end{minipage}\\[4ex]
|
|
\end{flushleft}
|
|
\begin{flushleft} \small
|
|
\begin{minipage}{\linewidth} \label{scrap4}
|
|
\verb@"perfmon.i"@ {\footnotesize ? }$\equiv$
|
|
\vspace{-1ex}
|
|
\begin{list}{}{} \item
|
|
\mbox{}\verb@@\\
|
|
\mbox{}\verb@/*--------------------------------------------------------------------------@\\
|
|
\mbox{}\verb@ The P E R F M O N datastructure.@\\
|
|
\mbox{}\verb@@\\
|
|
\mbox{}\verb@ Mark Koennecke, Juli 1997@\\
|
|
\mbox{}\verb@---------------------------------------------------------------------------*/@\\
|
|
\mbox{}\verb@@$\langle$pdata {\footnotesize ?}$\rangle$\verb@@\\
|
|
\mbox{}\verb@@$\diamond$
|
|
\end{list}
|
|
\vspace{-2ex}
|
|
\end{minipage}\\[4ex]
|
|
\end{flushleft}
|