Le 13/11/2019 à 20:00, Michel Py a écrit :
>> Radu-Adrian Feurdean a écrit :
>> 3) la mise a jour : imagine deja la mise a jour d'un /16 (65K entrees a
>> mettre a jour), ou encore pire d'un /10 :)
> Certes, mais à comparer avec ce que çà fait gagner, 85 cycles d'horloge à 
> chaque paquet.
> Comparativement à plusieurs millions de paquets par seconde, la mise à jour 
> est très rare.
>
> En plus, la DDR c'est lent sur des accès individuels, mais pas pour les gros 
> blocks. DDR4 récente c'est au moins 40 GO par seconde en écriture.
> Un /10 avec 8 Octets par IP çà représente 32 MO de mémoire, moins de 1ms en 
> théorie. Il doit bien y avoir des instructions pour gérer çà en DMA ou autres 
> sans même avoir une boucle bourrin.
>
> Michel.
>
Je partage un graphique, ce sont des chiffres intéressants sur les
différentes grandeurs
qui ont cours aujourd'hui: http://i.imgur.com/k0t1e.png
(même la RAM coûte cher en perf, et c'est pas le média le plus lent !).

Ecrire dans la RAM va vite sur un bloc contigu de mémoire. Si ce n'est
pas contigu,
ça se transforme vite en des accès aléatoire (patricia est orienté
lecture plutôt
qu'être optimisé délai pour mettre à jour l'arbre).

L'autre problème qui me semble important c'est qu'il y a
plusieurs consommateurs (les core qui routent) et un core qui va
mettre à jour la RAM, il faut donc un système qui permet de verrouiller
la mémoire le temps de la mise à jour. Ces systèmes là sont lents.
Mais les routes ne sont pas les seuls éléments à stocker, il y a aussi
de la config, des compteurs, des interfaces, des adresses MAC,
des neighbors IPv6, des pointeurs... Si avant chaque accès il faut
demander l'usage exclusif de la ressource, les perfs s'écroulent.

Est-ce qu'il ne faudrait pas alors avoir n copie de la FIB (et de tous
les autres éléments)
avec n le nombre de core ? (et en archi NUMA).
Il me semble que c'est le principe de DPDK, affecter des core à une
fonction unique et précise.
Et qu'il soit capable de faire ce job le plus indépendamment possible,
en évitant de faire
du context switching.

Globalement il faut se passer un maximum de la RAM, utiliser un maximum
le cache (qui aujourd'hui est énorme, on peut en stocker des infos dans
24 Mo. Et même bientôt 128 Mo).

Qu'en pensez-vous, est-ce que 24 Mo peut stocker 1 millions de route
IPv4 (sous forme d'arbre, pas
juste 1 000 000 x 4 octets !) avec les index des interfaces et les MAC
des nexthop ?
Quelle est la taille minimale nécessaire ?

A cela il faut rajouter les problèmes de pipeline (mauvaises
prédictions) ... et c'est l'enfer.


Jérôme

-- 

Jérôme Marteaux


---------------------------
Liste de diffusion du FRnOG
http://www.frnog.org/

Répondre à