\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}