%****************************************************************************
%** Copyright 2002 by Lukas Ruf, ruf@topsy.net
%** Information is provided under the terms of the
%** GNU Free Documentation License http://www.gnu.org/copyleft/fdl.html
%** Fairness: Cite the source of information, visit http://www.topsy.net
%****************************************************************************
%****************************************************************************
%** Last Modification: 2005-07-11 1600
%** 2005-07-11	Bernhard Tellenbach
%**							This is an addapted version of the Introduction.tex file
%**							Added table example (footnotes,multicolumn)
%**							Examples for different text sizes
%**							Updated eps file inclusion example for use with graphicx pkt.
%****************************************************************************

\chapter{\label{problem}Aufgabenstellung}
Während die Aufgabenstellung im Anhang \ref{originalproblem} auf die vorzunehmenden Arbeiten im Detail eingeht, bleibt die Zielarchitektur weitgehend unerwähnt. Die Gemeinsamkeiten, noch mehr aber die Unterschiede zwischen der IXP1200- und der IXP2400-Plattform waren jedoch für die Erfüllung dieser Aufgabe von zentraler Bedeutung. Die folgenden Abschnitte geben deshalb einen Überblick über die relevanten Eigenschaften des eingesetzten IXP-Prozessors und der PCI-Karte mit Bezug auf diese Arbeit. Anschliessend vergleichen wir die eingesetzte Hardware mit derjenigen unserer Vorgängerarbeit, um eine solide Entscheidungsrundlage für die im Kapitel \ref{design} gewählten Vorgehensweisen zu schaffen.

\section{\label{platform}Die IXP2400-Plattform RadiSys ENP-2611}
\subsection{\label{platform:ixp2400}Der Intel IXP2400 Netzwerkprozessor}
Der Intel IXP2400 ist ein Mitglied der zweiten Generation von Intels Netzwerkprozessorserie. Er wurde Mitte 2002 auf den Markt gebracht und ist primär für den sowohl durchsatz- als auch rechenintensiven Netzwerkeinsatz ausgelegt. Dieser 32bit-Prozessor enthält neben dem ARMv5-kompatiblen XSCALE-Core \cite{armarm} acht synchron getaktete, autonome Paketprozessoren, die zur Entlastung des Core-Prozessors repetitive Aufgaben wie Paket- und Datenstromklassifizierung, Ver- und Entschlüsselung, Überprüfung auf Viren oder vergleichbare Aufgaben übernehmen können. Diese Paketprozessoren werden in der Intel-Terminologie \emph{Microengines} genannt und verfügen über unabhängige Instruktions- und Datenspeicher, Unterstützung für Hardware-Multithreading und werden im proprietären MEv2-Instruktionssatz \cite{patterson} programmiert. \\
Die für den IXP2400 angegebenen Kenndaten \cite{ixp2k4prodbrief} sind in Tabelle \ref{tab:ixp2400} zusammengefasst. 

\begin{table}
\begin{center}
\begin{minipage}{\textwidth}
\begin{tabular}{| l | p{190pt} |}
\hline
Leistungsaufnahme (max.)& 16W\\
\hline
\multicolumn{2}{| l |}{\textbf{integrierter XScale Core: }} \\
\hline
Instruktionssatz & ARMv5TE\\
\hline
Taktfrequenz (max.) & 600MHz \footnote{Übertaktung ist offenbar nicht nur möglich, sondern sogar vorgesehen. Für den standardkonformen Betrieb der offiziell unterstützten UTOPIA-Interfaces wird von Intel ein benötigter Prozessortakt von 613MHz vorgeschrieben \cite{ixp2xxxhrm}.} \\
\hline
Instruktionscache & 32kb\\
\hline
Datencache & 32kb\\
\hline
Mini-Datencache & 2kb\\
\hline
\multicolumn{2}{| l |}{\textbf{integrierte Paketprozessoren: }} \\
\hline
Instruktionssatz & Intel MEv2\\
\hline
Taktfrequenz (max.) & 600MHz, synchron zum Core\\
\hline
Instruktionsspeicher& 8x 4k Instruktionen\\
\hline
Integrierter Datenspeicher& 8x 2.5kB\\
\hline
\end{tabular}
\end{minipage}
\caption{Kenndaten des Intel IXP2400}
\label{tab:ixp2400}
\end{center}
\end{table}

Ausserdem wurden etliche leistungsfähige, für unsere Arbeit aber unwesentliche, Hardwarebausteine in den IXP2400 integriert, unter anderem eine Hardware-Hashing-Einheit und programmierbare Interfaces für den Anschluss anderer Hochleistungsnetzwerkgeräte. Andere Komponenten sind mehrfach ausgeführt, beispielsweise das RAM-Interface (zweifach, für SRAM und SDRAM) oder die vier Hardware-Timer.\\
Nebst des Prozessors selbst werden von Intel auch zyklentreue Software-Simulatoren für Core und Packetprozessoren, Linux-SDKs und weitere, den Entwickler unterstützende, Werkzeuge angeboten. Da allerdings auf Grund der restriktiven Lizenzierungspolitik von Intel schon die Prozessor-Referenzmanuals \cite{ixp2k4prm} \cite{ixp2k4hrm} einem Non-Disclosure Agreement unterlagen, verzichteten wir auf diese Hilfsmittel und verwendeten als Hilfsmittel für die Portierung ohne Ausnahme die Open Source-Alternativen, die in der Aufgabenstellung vorgeschrieben wurden.

\subsection{\label{platform:enp2611}RadiSys ENP-2611}

\begin{figure}[ht]
	\includegraphics[width=0.6\textwidth]{ENP2611.eps}
	\caption{Die RadiSys ENP-2611-PCI-X-Karte}
	\label{figure:enp2611}
	
\end{figure}

Für unsere Semesterarbeit wurde uns die IXP2400-Plattform RadiSys ENP-2611 \cite{enp2611prodbrief} zur Verfügung gestellt, die in Abbildung \ref{figure:enp2611} abgebildet ist. Nebst dem Netzwerkprozessor umfasst diese PCI-X-Karte drei 1000base-SX-Anschlüsse, einen 100base-TX-Anschluss für Debugging und Control-Plane-Datenverkehr, 512MB SDRAM, 16MB schnelles SRAM und die nötige Logik zur Verschaltung der Komponenten. Tabelle \ref{tab:enp2611} liefert einen Überblick.

\begin{table}
\begin{center}\begin{minipage}{\textwidth}
\begin{tabular}{| l | p{190pt} |}
\hline
\multicolumn{2}{| c |}{\textbf{RadiSys ENP-2611: }} \\
\hline
Prozessor & Intel IXP2400\\
\hline
Taktfrequenz & 600MHz\\
\hline
Rechenleistung (theor. max.) & (1+8)x 600MIPS = 5.4GIPS\\
\hline
DDR SDRAM& 512MB\\
\hline
QDR SRAM& 2x 8MB\\
\hline
Speicher-Bandbreite SDRAM (theor. max)& 19.2 Gbps\\
\hline
Speicher-Bandbreite SRAM (theor. max)& 2x 12.8 Gbps\\
\hline
Leistungsaufnahme (max.)& 25W\\
\hline
\end{tabular}
\end{minipage}
\caption{Kenndaten der RadiSys ENP-2611-PCI-X-Karte}
\label{tab:enp2611}
\end{center}
\end{table}

Diese Karte ist als Entwicklungsplattform nicht dafür vorgesehen, das Betriebssystem dauerhaft im nichtflüchtigen Speicher zu halten. Deshalb wird über das PCI-Host-Interface bei jedem Systemstart als erstes das Betriebssystem-Image vom integrierten Bootloader in den Speicher geladen. Genauere Angaben dazu finden sich im Abschnitt \ref{coding:boot}. Ausserdem liefert der Hersteller zusammen mit der Hardware ein Softwarepaket, das Hilfssoftware für das Intel IXA SDK, den Bootloader, Debug- und Monitor-Utilities im Flash ROM der Karte und eine detaillierte Dokumentation umfasst \cite{enp2611prodbrief}. 

\subsection{\label{platform:comparison}Vergleich mit der IXP1200-Plattform}
Als Ausgangspunkt für unsere Arbeit diente die Semesterarbeit 'Porting TOPSY to the IXP1200' unserer Vorgänger Silvio Dragone und David Reist \cite{sddr}. Im Rahmen dieser Arbeit wurde TOPSY bereits auf einen IXP-Netzwerkprozessor der ersten Generation portiert. Da die Datenblätter dieses Prozessors und der Bericht über die betreffende Arbeit selbst ausführliche Beschreibungen aller relevanten Eingenschaften des IXP1200 enthalten, verzichten wir auf eine detaillierte Beschreibung und präsentieren stattdessen die wichtigsten Unterschiede, die wir diesen Quellen entnehmen konnten \cite{ixp2k4prodbrief,ixp1k2prodbrief,sddr}:
\begin{itemize}
	\item Der offensichtlichste Unterschied zwischen der IXP1200- und der IXP2400-Plattform besteht in der Veränderung des \emph{Core-Instruktionssatzes}. Während die Prozessoren der ersten IXP-Generation einen StrongARM-Core und damit den ARMv4-Instruktionssatz einsetzten, verwendet der IXP2400-Core den ARMv5TE-Instruktionssatz. Während diese Änderung für den in C verfassten Code relativ belanglos war, verlangte sie die Überprüfung aller und Änderungen einiger Assemblermodule, angefangen bei der start.S-Routine (siehe \ref{coding:starts}).
  \item Mit der Einführung des neuen Cores wurden auch die integrierten Subsysteme angepasst, und dabei war für uns der Coprozessor 15 von besonderem Interesse. Diese Prozessorerweiterung bildet die \emph{Schnittstelle zum Memory Management} und war in ähnlicher Form bereits im ARMv4-Standard integriert, wurde aber hinsichtlich Funktionsumfang und Ansteuerung überarbeitet. Die Inbetriebnahmen der Memory Management Unit (MMU) setzte damit die Anpassung dieser Codebausteine voraus, und diese Teilaufgabe wird im Abschnitt \ref{coding:mmu} erläutert.
  \item Da die in der IXP1200-Arbeit vorgenommene Ansteuerung der \emph{Hardware-Timer} nicht mit der IXP2400-Plattform kompatibel war, zog dies auch Änderungen im Interrupt Handling und im Thread Management nach sich. Auf diese Änderungen wird in \ref{coding:interrupt} und \ref{coding:threads} eingegangen.
  \item Ausserdem wurden in der IXP-1200-Arbeit Karten von Intel verwendet, während die IXP-2400-Karte von RadiSys gefertigt wurde und beide Systeme unterschiedliche, proprietäre \emph{Bootloader} einsetzen.
\end{itemize}

