\chapter{Software}\label{ch:software}
Neben der bereits erwähnten Hardware muss es natürlich auch Software, wie das Betriebssystem oder die Anwendungen geben, damit ein Cluster verwendet werden kann.
Im folgenden soll zunächst auf das Betriebssystem beziehungsweise die Anforderungen an ein Betriebssystem eingegangen werden.
Des Weiteren ist auch das Remote Management wichtig.
Danach sollen noch zwei Tools vorgestellt werden, mit denen der gesamte Einrichtungs- und Administrierprozess eines Clusters vereinfacht werden soll.
Als letztes wird noch darauf eingegangen, für welche Art von Software ein HPC genutzt werden kann und was die Software für Anforderungen erfüllen muss.

\section{Betriebssystem}\label{sec:betriebssystem}
%TODO CentOS
%TODO Lightweight Kernel
Für High Performance Cluster wird in den meisten Fällen ein Linux Derivat verwendet.
Viele Betreiber der HPC setzen auf RHEL, das von Redhat für den kommerziellen Markt entwickelt wird und dadurch zum Teil auch stabiler als andere Derivate läuft.
Des Weiteren wird in HPC meistens keine \glqq normale\grqq Consumer-Hardware verwendet, sondern spezielle Hochleistungskomponenten, die vom Kernel unterstützt werden sollte\cite{rhel}.
Die Linux-Derivate beziehungsweise deren Kernel haben gegenüber Windows oder anderen Betriebssystemen den Vorteil, dass sie beliebig angepasst werden können und in den Rechenzentren dann eine speziell modifizierte Version genutzt werden kann.
In der Liste Top500 werden die offiziell 500 schnellsten Supercomputer aufgelistet.
Anhand von Abbildung~\ref{fig:top500_os} wird deutlich, das Windows, Mac und BSD bis maximal 2016 in wenigen HPCs genutzt wurden, heutzutage wird aber ausschließlich Linux verwendet\cite{top500list}.
\begin{figure}
    \centering
    \includegraphics[width=\textwidth]{images/Operating_systems_used_on_top_500_supercomputers.svg}
    \caption{Verbreitung einiger Betriebssysteme unter den Top500 HPCs\cite{top500image}}
    \label{fig:top500_os}
\end{figure}

In den HPC werden oftmals Lightweight Kernel verwendet.
Lightweight Kernels sind dafür optimiert, mit verteiltem Speicher und tausenden von Prozessoren zusammen zu arbeiten.
Des weiteren sind die Kernel sehr effizient und versuchen einer Applikation möglichst viele Ressourcen (CPU, RAM, Netzwerk-Bandbreite, \ldots) zuzuweisen, damit die Berechnungszeit der Anwendung minimiert wird\cite{lightweightKernel}\cite[S. 19f]{gerofi2019operating}.

\section{Remote Management}\label{sec:remote-management}
% https://www.engr.siu.edu/staff1/ahmed/mywebpage/Maxwell_SIUC_HPC_Description_Tutorial.pdf
% https://www2.latech.edu/~box/hapc/Chapter-1.pdf
% - Oftmals keine Möglichkeit, direkt am Node zu arbeiten, weil wenig Platz im Rack/Cluster
% - Local oftmals nur für Development, Production eher im Rechenzentrum, bessere Infrastruktur (Internet, USV, Stromversorgung, Sicherheit [Access Control], Klimaanlage, ...)
% - Reset/Power on off
% - Automatisierung
% - ResourceManagement -> Jobs auf Cluster verteilen (meist nicht nur ein Nutzer, sondern mehrere, die gleichzeitig arbeiten wollen)
% - Zentralisierte Authentifizierung
% - Healthcheck
% - Überwachung
%    - CPU Usage
%    - Temperatur
%    - ...
%TODO Important
Remote Management, also das Steuern und Überwachen von Geräten aus der Ferne, ist für Server und HPC extrem wichtig.
Ein HPC, dass oftmals aus mehreren Racks besteht, kann natürlich nicht mit dem privaten Desktop-PC oder Laptop verglichen werden, auf die man relativ einfach pyhsischen Zugriff erlangen kann.
Durch verschiedene Sicherheitsmechanismen wird der Zutritt zum Rechenzentrum und damit auch zur HPC-Hardware erschwert und oftmals steht das Rechenzentrum auch gar nicht in der Nähe des Anwenders sondern zum Beispiel in der Nähe eines großen Internet-Knotenpunktes.
Aber n
Damit das HPC trotzdem konfiguriert, gewartet und genutzt werden kann, wird viel Remote, über das Internet, gearbeitet.
Der Administrator

\section{xCAT}\label{sec:xcat}
xCAT (Extreme Cloud Administration Toolkit) ist ein, von IBM entwickeltes, open-source Tool, dass zur Erstellung, Administration und zum Deployment von verteilten Systemen genutzt wird.
Vor allem das erstellen und managen von Clustern erfordert, wie in Kapitel~\ref{sec:remote-management} bereits erwähnt, viel administrativen Aufwand.
Die Software wird auf dem Management Node installiert und kann danach mit vergleichsweise wenig Aufwand die einzelnen Nodes im Netzwerk finden und einrichten
Um die Last des Management Nodes zu reduzieren, können auch Compute Nodes als Service Nodes verwendet werden, die dann ähnliche Aufgaben wie der Managament Node übernehmen, aber trotzdem noch vom Management Node gesteuert werden (siehe Abbildung~\ref{fig:xcat_architektur}).
Das ist vorallem wichtig, wenn die Speicher-Voraussetzungen von IBM beachtet werden: ein kleines Cluster, mit weniger als 16 Nodes, braucht schon ca. 5GB RAM.
Wenn das Cluster dann aber zum Beispiel 158.976 Nodes hat, so wie das aktuell schnellste HPC, steigt der RAM Verbrauch und wird vermutlich die 32GB RAM pro Node deutlich übersteigen\cite{xCAT_docs, top500list}.
\begin{figure}
    \centering
    \includegraphics[width=\textwidth]{images/Xcat-arch}
    \caption{xCAT Architektur\cite{xcatimage}}
    \label{fig:xcat_architektur}
\end{figure}


\section{OpenHPC}\label{sec:openhpc}
Ähnlich wie xCAT gibt es auch noch OpenHPC.
OpenHPC ist ebenfalls eine open-source Anwendung, die von der Linux Foundation entwickelt wird.
Die Software wird nur in CentOS getestet, aber durch die starken Ähnlichkeiten zu zum Beispiel RHEL, sollte sie auch dort funktionieren.
Auch OpenHPC hat es sich zur Aufgabe gemacht, die Einrichtung eines HPCs zu vereinfachen, was natürlich dann auch zu reduzierten Betriebskosten des HPCs führt.
Durch einen einzigen Software-Stack mit standardisierten, getesteten Komponenten, hat der Administrator die Möglichkeit ohne großen Konfigurationsaufwand das Cluster einzurichten und zu nutzenn.
Der Software-Stack besteht aus vielen verschiedenen einzelnen Tools, die in einzelne Kategorien eingeteilt werden können\cite{openhpc_docs}:
\begin{itemize}
    \item Administration
    \item Compiler
    \item Entwicklung
    \item I/O
    \item Parallelisierung
    \item Performance Management
    \item Resource Management
    \item \ldots
\end{itemize}

Wie bei xCAT wird die Software zunächst nur auf dem Master-Node installiert, der dann später die Compute-Nodes mit der entsprechenden Software versorgt und auch die Aufgaben verteilt.

Auch wenn OpenHPC von der Linux Foundation entwickelt wird, sind viele große Unternehmenm wie Dell, Fujitsu, Lenovo, Intel oder HP an der Entwicklung beteiligt.
Diese Unternehmen setzen die Software dann zum Teil auch in Clustern ein\cite{openhpc_presentation}.

\section{Anwendungssoftware}\label{sec:anwendungssoftware}
% [1] https://www.google.de/books/edition/Operating_Systems_for_Supercomputers_and/le62DwAAQBAJ
% Containerisierung [1, S.12]
% AI, ML, DL, Big Data, Cloud [1, S.13]