\subsubsection{Pseudofs proc} % ---------------------------- \begin{frame} \frametitle{Basics} \begin{itemize} \item most important pseudofs \item mount-point: /proc \item early mount required \item stable Kernel API extension \begin{itemize} \item process/thread information \item kernel extension \begin{itemize} \item modules \item drivers \end{itemize} \item system state/utilization (e.g. loadavg, interrupts) \begin{itemize} \item loadavg \item interrupts \end{itemize} \item system behavior (e.g. memory over-commit) \begin{itemize} \item memory over-commit \item network \item irq affinity \end{itemize} \end{itemize} \end{itemize} \end{frame} % The pseudo filesystem proc is an important API-extension of the linux % kernel. It provides access to informations about the processes and % threads, as well as other kenel-internal information, extensions and % behaviour. The proc filesystem must be mounted as early as possible, right % after userspace gets control from kernel. % ---------------------------- \begin{frame} \frametitle{Process information} \begin{itemize} \item one directory for each process \item PID as directory name \item /proc/self: link to process' own information \item per process: \begin{itemize} \item maps: memory mappings \item status/stat: process status (human/machine readable) \item fd/fdinfo: (open) file descriptors \item map\_files: mmap-ed files \item mounts: filesystem mounts \item task/: information about each thread \end{itemize} \item tools accessing process information in proc \begin{itemize} \item ps \item top \end{itemize} \item prevent tool output parsing \item direct access to process information is preferred \end{itemize} \end{frame} % The informations about processes are provides in separate subdirectories, % one for each process. The directory name is the PID number of the process. % The link /proc/self can be used by processes to access its own process % information. % The file "maps" shows the memory mappings of a process. It lists all % mappings, text segment, dynamic libraries, heap and stack. % The file "status" contains informations about the process status in a % human-readable form. The same information, but in machine readable form, % is in file "stat". % The directory "fd" and fd_info" contains information about the open file % handles of the process. % The directory "tasks" contain infomration about the threads of a process. % ---------------------------- \begin{frame} \frametitle{Kernel extensions} \begin{itemize} \item system-wide information \item all files shows the current state of loaded extensions \item extensions: \begin{itemize} \item modules: \\ a list of loaded modules \item devices: \\ major-number-to-driver mapping \item filesystems: \\ all currently supported filesystems \end{itemize} \end{itemize} \end{frame} % The kernel code can be extended by loadable modules. Ther are files in % /proc, which informs about the currently loaded extensions. Each time an % extension is added or removed, the content of these files may change. % The file "modules" shows all modules, which are currently loaded. It also % contains the start address of the text segment in memory, reference count % and used-by information. The tool lsmod make use of this information. % The file "devices" shows the mappings between the major numbers and the % related device driver, separate for character and block devices. % The file "filesystems" show all supported filesystems at the moment. % ---------------------------- \begin{frame} \frametitle{System State/Utilization} \begin{itemize} \item system-wide information \item system state \begin{itemize} \item uptime: time since system start \item config.gz: kernel configuration \end{itemize} \item system utilization \begin{itemize} \item loadavg: average system load (with some history) \item interrupts: histogram of all interrupts (total and per CPU) \item meminfo: memory information \item buddyinfo: information about contiguous free pages \end{itemize} \end{itemize} \end{frame} % The system state and utilization is also available via filehandles in % /proc. % The file "loadavg" shows how many processes are schedulable at the same % time and the history of this value. % The file "interrupts" contains the histogram for all interrupts (total and % per CPU). % The file "meminfo" contains information about the system memory, the file % "buddyinfo" contains a list of contiguous free pages in memory zones. % The file "config.gz" contains the configuration, with which the kernel has % been build. The file is compressed an can be extracted e.g. by zcat or % zless. % ---------------------------- \begin{frame} \frametitle{System Behavior} \begin{itemize} \item System behavior: sub-directory /proc/sys \begin{itemize} \item use tool \textbf{sysctl} to change the values \item settings at system start: \textbf{/etc/sysctl.conf} or \textbf{/etc/sysctl.d} \end{itemize} \item Interrupt routing: sub-directory /proc/irq \begin{itemize} \item system-wide affinity mask \item per IRQ affinity mask \item IRQs are only routed to the CPUs, which are set in the affinity mask bitfield \end{itemize} \end{itemize} \end{frame} % The subdirectory "sys" contains a large number of file handles, which can % be used for fintune the system behaviour. The filehandles can be accessed % directly, but it is highly recommended to use the tool "sysctl" instead. % Most distributions supports settings at system start via /etc/sysctl.conf % or /etc/sysctl.d. % The subdirectory "irq" can be used, to configure the iterrupt routing to % CPUs. % ---------------------------- \subsubsection*{} \begin{frame} \frametitle{Resources} \begin{itemize} \item \href{https://www.kernel.org/doc/Documentation/filesystems/proc.txt}{Kernel: Documentation/filesystems/proc.txt} \item \href{http://man7.org/linux/man-pages/man5/proc.5.html}{man 5 proc} \item \href{http://man7.org/linux/man-pages/man8/sysctl.8.html}{man 8 sysctl} \item \href{http://man7.org/linux/man-pages/man5/sysctl.conf.5.html}{man 5 sysctl.conf} \end{itemize} \end{frame}