Le NetFPGA
Description
Le NetFPGA est une carte PCI embarquant
- un large FPGA Xilinx Virtex2-Pro 50 (data sheet, development guide) embarquant la logique 'utilisateur' (horloge à 125MHz)
- un petit FPGA Xilinx Spartan II embarquant la logique permettant le contrôle de la carte depuis l'interface PCI
- 4 ports Gigabit Ethernet (Broadcom BCM5464SR)
- 4.5MB (2x18Mb) de SRAM (Static RAM)
- 64 MB de DDR2 DRAM (Double-Date Rate Dynamic RAM). (débit: 1,6 MB/s)
- 2 ports SATA (Serial ATA)
Il a été conçu à l'univeristé de Stanford à Palo Alto, CA.
Le NetFPGA permet aux étudiants et chercheurs de réaliser des prototypes de systèmes réseau à haute vitesse et bénéficiant d'une accélération matérielle. Les étudiants de Stanford ont déjà travaillé à réaliser un routeur IP à l'aide du NetFPGA. Une présentation de leurs travaux est disponible sur le site officiel [NET08].
La carte NetFPGA possède une interface PCI standard et peut donc être connecté à un ordinateur de bureau ou un serveur. Le NetFPGA permet de décharger le processeur de la machine hôte du traitement des données. Le CPU de la machine hôte a accès à la mémoire principale et peut effectuer des opération DMA de lecture et d'écriture des registres et mémoires du NetFPGA. Contrairement aux autres projets open-source le NetFPGA offre une approche matérielle matériellement accélérée. Le NetFPGA fournit une interface matérielle directement connectée aux quatres ports Gigabit et à de multiples banques de mémoire installés sur la carte.
Usages
Des paquets NetFPGA (NFPs) sont disponibles et contiennent du code source (aussi bien pour la partie matérielle que logicielle) implémentant des fonctions réseau. Le "routeur de référence" est un NFP. En utilisant ce routeur comme référence, un développeur a alors trois façon d'utiliser ce NFP.
- Une première méthode est de configurer le FPGA de la carte en routeur et ensuite de modifier la partie logicielle (programme utilisateur, pilote Linux). Dans ce scénario la carte NetFPGA est programmé avec le code IPv4 et l'ordinateur hôte Linux utilise le logiciel 'Router kit' inclut dans le NFP. Router kit clone la table de routage ainsi que la cache ARP de l'ordinateur dans les tables matérielles de la carte. Le développeur peut donc modifier Linux afin d'implémenter de nouveaux protocoles.
- Une deuxième approche est d'utiliser le code FPGA du routeur et d'en étendre ses fonctionnalités en développant un module utilisateur. On commence donc avec le code fourni dans le NFP officiel puis on le modifie en utilisant les modules disponibles dans la bibliothèque du NFP ou en écrivant directement du code Verilog. Enfin on compile le code source à l'aide d'outils industriel de conception. Le fichier 'bitfile' ainsi créée peut être téléchargé dans le FPGA. La nouvelle fonctionnalité peut être complété par du logiciel supplémentaire ou en modifiant le logiciel existant. Un exemple serait d'implémenter une recherche de type Trie LPM (Longest Prefix Match) au lieu du CAM LPM utilisé actuellement. Un autre exemple serait de modifier le route pour ajouter la gestion du NAT ou ajouter des fonctions de pare-feu.
- Finalement il est aussi possible de créer un design FPGA totalement nouveau et d'implémenter sa propre logique et ses propres fonctions de traitement des données directement dans le NetFPGA. En re-écrivant le coeur du FPGA on perd la possibilité (il faut le re-écrire) d'accéder directement à la mémoire du NetFPGA (SRAM et DDR RAM) depuis Linux.
Le NetFPGA et notre projet
A quel niveau allons nous implémenter le code de surveillance ?
Le code étant complexe ( data mining) il serait intéressant d'en implémenter le plus possible en software. Mais en même temps il faut profiter de l'accélération matérielle que nous procure le NetFPGA.
Dans le cas du routeur IP, la table de routage est gérée en logiciel, mais ce qui est couteux en temps, le routage, est lui effectué par la carte. La situation, pour nous, n'est pas aussi facile: si on décide d'implémenter le code d'analyse en logiciel il faut alors faire remonter les données du NetFPGA vers l'ordinateur. Or c'est précisément ce que l'on cherche à éviter car c'est ce qui consomme le plus de ressources. Il faudrait qu'un traitement de gros soit réalisé au niveau du NetFPGA pour ne faire remonter à l'ordinateur qu'une petite quantité de données.
La fonction routeur IP déjà disponible avec le NetFPGA nous est utile pour nous insérer en cours de réseau et transmettre les paquets tout en les analysant. Il paraît donc logique de réutiliser le code FPGA déjà écris et d'en étendre ses fonctionnalités. C'est donc la seconde approche que nous allons utiliser.
Il est intéressant d'étudier d'autres projets utilisant le NetFPGA afin d'analyser leurs approches. Une liste des projets basés sur NetFPGA est disponible sur le site officiel. Dans cette liste le projet NetFlow Probe possède un fonctionnement proche de celui que nous voudrions réaliser. Il effectue en particulier de la surveillance réseau et implémente les fonctions critiques (c'est à dire consommatrice de temps) directement en matériel dans le FPGA.
Liens
[NET08] John W. Lockwood, G. Adam Covington, Jan Kořenek et al. NetFPGA : Tutorial in Brno, Brno, Czech Republic, 5 Septembre 2008. Disponible sur < http://netfpga.org/tutorials/Brno2008/ppt/NetFPGA_Brno_2008_09_04c.pdf>
[NET09a] NetFPGA: Guide [en ligne]. Disponible sur < http://netfpga.org/foswiki/bin/view/NetFPGA/OneGig/Guide> (consulté le 1er Décembre 2009)
[NET09b] NetFPGA: NetFPGA Video Demonstrations [en ligne]. Disponible sur < http://www.netfpga.org/php/videos.php> (consulté le 1er Décembre 2009)
Attachments
-
BlockDiagram.png
(38.1 KB) -
added by bfontain 2 years ago.
Diagramme Bloc du NetFPGA
-
SystemDiagram.png
(118.4 KB) -
added by bfontain 2 years ago.
Diagramme système
-
How_to_Contribute_NetFPGA_Project-MSE09.pdf
(204.5 KB) -
added by bfontain 2 years ago.
How to Contribute to the NetFPGA Project
-
ds083.pdf
(3.0 MB) -
added by tgroleat 2 years ago.
Virtex II Pro 50 Data Sheet
-
xst.pdf
(3.3 MB) -
added by tgroleat 2 years ago.
Xilinx development guide


