Sunteți pe pagina 1din 30

||


 
"(
)*

"(

  
    
    

|   
      
       

!  "   #$$%&#$$'


m 

1. Introducción
2. IP Forwarding
3. Distribución de Carga Adaptativa
4. Redes Activas
5. Externalización de protocolos (offloading)

  | 

+#$$%&$',
  
 -  .     

(a) CPU
(b) CPU El bus que conecta las KIC
con la CPU se reemplaza por
un conmutador (switch fabric)
KIC KIC A medida que se necesita un
ancho de banda mayor las
Bus E/S KIC se sustituyen por circuitos
Switch integrados de propósito
Fabric específico (ASIC)
Para conseguir más
flexibilidad y eficiencia en
(c) CPU (d) CPU coste los ASIC son
reemplazados con
Interfaz
API con KP procesadores de red (KP)
ASIC KP

Switch Interfaz
Fabric Switch
Fabric

  | 

+#$$%&$',
  
os Procesadores de Red se están extendiendo rápidamente por dar una respuesta
aceptable a los requisitos de:
- Prestaciones
- Adaptabilidad
- Diferenciación
- Corto tiempo de desarrollo de aplicaciones

Se está produciendo un proceso de estandarización de APIs y protocolos por diversas


organizaciones (IETF, Internet Engineering Task Force, www.ietf.org)

Aplicaciones: Funciones de Red Avanzadas:


- Procesamiento de cabeceras
- Envío inteligente (Intelligent Forwarding)
- Procesamiento de datos (Redes Activas)
- Externalización de Protocolos (Offloading)

  | 

+#$$%&$',
m 

1. Introducción
2. IP Forwarding
3. Distribución de Carga Adaptativa
4. Redes Activas
5. Externalización de protocolos (offloading)

  | 

+#$$%&$',
/0 
a recepción y el envío de paquetes IP es una de las funciones más
frecuentes en los sistemas de red y por ello es también uno de los
benchmarks más utilizados para evaluar las prestaciones de los
distintos procesadores de red (ver www.npforum.org)
Realizar el 0  implica:
- Examinar la dirección de destino de los paquetes entrantes
-Determinar la dirección del encaminador siguiente al que enviar
- Enviar el paquete al siguiente encaminador

Para determinar la dirección del siguiente equipo al que enviar el


paquete hay que consultar la Tabla de Enrutamiento almacenada.
Esta tabla la crea y la mantiene el protocolos de encaminamiento
(como por ejemplo el BGP, Border Gateway Protocol)

  | 

+#$$%&$',
/0   12#$$+,
StrongARM: Procesador RISC de 32
bits con caches internas
Microengines (PE): 6 unidades de 32
bits programables y arquitectura RISC,
cada una con un cauce de 5 etapas,
con multihebra (4 contextos) y 256
registros.
Unidad SDRAM: interfaz inteligente
de memoria que se puede utilizar
desde el strongARM, las Microengines,
y los dispositivos en el bus PCI
Unidad SRAM: interfaz inteligente de
memoria accesible desde el
StrongARM y las Microengines
Unidad de Interfaz PCI: interfaz para
acceder al procesador host o a un
dispositivo PCI
Unidad de Bus IX: unidad controlada
por las Microengines para el
movimiento de datos
Otros elementos: unidad de hashing,
FIFOs para transmisión y recepción,..

  | 

+#$$%&$',
/0   12#$$+,

Diagrama de bloques
El procesador StrongARM es el
del sistema
responsable de cargar las memorias de
instrucciones de los PE (microengines)
as instrucciones del StrongARM se
captan desde la DRAM
Existe una memoria interna (4 KB on-
chip scratch memory) para la
sincronización y el control de los PE
as colas FIFO se utilizan para
enviar/recibir paquetes de los puertos de
red conectados al bus IX.
a |
3 está conectada con un camino de datos de 64 as colas FIFO son en realidad bancos de
bits a 88 MHz ('45&) y se utiliza como 5   registros de 16 slots (registros) de 64
  . bits. El programador es el responsable de
a 
3 almacena la 5     y los utilizar esos registros como si fueran una
estados de flujo necesarios. Tiene un ancho de banda de 32 cola
x 88 MHz = #645

  | 

+#$$%&$',
/0   12#$$+,

Diagrama de    7    


bloques del sistema     3
 %5 +3,
(1)
(1) Cuando se recibe un paquete IP (en un
puerto MAC) se divide en MPs, se marca
(2) (primero, intermedio, o único MP) y se pasan a
(3) la cola FIFO de entrada
(4)
(2) Un contexto de un PE (Microengine) mueve
los MPs de cada paquete desde la FIFO al buffer
en DRAM
(3) Cuando el paquete está listo para ser
enviado, otro contexto de un PE (posiblemente
distinto del anterior) lee los MPs del buffer en
DRAM los marca con el puerto MAC de salida y
los almacena en la FIFO de salida
(4) El circuito MAC correspondiente (al puerto
MAC de salida) lee los MP de la FIFO de salida

               3


   8#5     
Como cada transferencia mueve 32 bytes como máximo, transferir un MP (64 bytes)
entre las FIFO de entrada y de salida necesita 4 transferencias (2 FIFO-DRAM y 2
DRAM-FIFO): #9%':#9'';#$$  (2<2#   con PEs a 177 MHz)

  | 

+#$$%&$',
/0   12#$$+=,
a transferencia de un MP (64 bytes) entre FIFO de entrada y de salida necesita 1,12
microseg (con PEs a 177 MHz):   9   -     - 
6>8?+2   %5 &22#,
Si los 24 contextos pudieran funcionar a pleno rendimiento en paralelo, se tendrían
#2%3.
  5<   5    |
3:
('45&+%@65 &  ,,&#;'%'3

Se divide por 2 dado que cada paquete hay que escribirlo y leerlo de la DRAM
Diagrama de
bloques del sistema
(1)

(2)

(3) (4)

  | 

+#$$%&$',
/0   12#$$+=,
  12#$$ /0   
   A
Hay que gestionar dos conjuntos de recursos paralelos (los 24 contextos y los 32 slots de
las FIFOs)
as posibles colisiones en los puertos (dos o más paquetes de entrada asignados a un
mismo puerto de salida). Para evitar problemas se asigna un contexto para la entrada de
paquetes desde los puertos a la DRAM y otro contexto diferente para la salida de la DRAM
hacia los puertos de salida.
#% 9  -    +2 
 //"   6   ,A así
hay un número entero de contextos por puerto, un número
entero de Microengines asignados a la entrada y a la salida y
hay el doble trabajo para la entrada que para la salida.
 .        
//"A se definen 8 parejas de slots en cada FIFO; a cada
contexto de salida se asigna una pareja slots de la FIFO de
salida y un puerto; y a cada dos contextos de entrada se
asigna una pareja de slots de la FIFO de entrada y un puerto.

3<  5    <.6
+  ,        
  . Estas direcciones apuntan a los paquetes en los
Componentes principales utilizados para el IP Forwarding (8buffers de la DRAM.(donde se implementa el buffer para los
puertos Ethernet de 100 Mbps, es decir 800 Mbps) paquetes

  | 

+#$$%&$',
/0   12#$$+=,
   5      25    A

(4 bytes) con la dirección IP fuente
|
 (4 bytes) con la dirección IP destino
|.
(6 bytes) con la dirección Ethernet destino
B (1 byte) para seleccionar la cola a utilizar
/  (1 byte) para seleccionar la función a aplicar al paquete)

  9    C     que, estáticamente, se asignan para contener las
cabeceras de los paquetes ( DE ) y a una entrada de la tabla de enrutamiento ( D)

  | 

+#$$%&$',
/0   12#$$+=,
 D  D-+<, chequea (busy loop) si hay datos
 es un contexto asignado al puerto  disponibles en el puerto  y, en ese caso, hace que el MP
correspondiente pase al slot de la FIFO asignado al contexto 
Cada bucle se ejecuta una vez por cada MP recibido
DB es el campo B de la línea de la tabla
de enrutamiento que está almacenado en las registros del
contexto asignados a las líneas de dicha tabla.
DE |
 es la dirección de destino de la cabecera
IP que se encuentra en los registros.
|
3FG dirección  en la DRAM
En la DRAM se define un buffer cíclico, de forma que el buffer
para un paquete se selecciona como una función del puerto 
(dirección D5 )
 inserta la dirección del buffer que tiene el paquete
en la cola de paquetes del puerto de salida
.. es una función implementada en hardware que no
requiere accesos a memoria.
D/ +, incluye las modificaciones de contenidos o
cabeceras de paquetes específicas del protocolo (checksum,
set MAC address de destino,...)

a salida se realiza de forma similar a la entrada: los  D"DH  indica al contexto que se ha recibido todo el
MP pasan de la DRAM a la FIFO. paquete y que se puede insertar en la cola de transmisión (el
movimiento se produce para todos los MP, la condición una vez
por paquete)

  | 

+#$$%&$',
/0   12#$$+=,
Se comprueba si hay datos disponibles en el puerto p.
Cuando los haya el contexto c se encargará de moverlos a la
cola FIFO de entrada (a los slots asignados a c)

Se mueven los datos desde los slots de la cola FIFO


asignados a c al buffer en DRAM (a la dirección que se le ha
asignado al contexto

Se mueve la cabecera a los registros del contexto


correspondientes

Se busca en la tabla de enrutamiento (mediante la función


hash aplicada a la dirección de destino que está en los
Se aplica la función que estaba en la registros del contexto) la línea que correspondería al
línea de la tabla de enrutamiento mensaje
(ahora en el registro
correspondiente del contexto) a la
Se mueve la línea de la tabla de enrutamiento desde la SRAM
cabecera del mensaje
hasta los registros del contexto

Si se ha recibido todo el paquete (y después de haber realizado el procesamiento de la


cabecera en las anteriores instrucciones) un puntero al paquete se introduce en la cola de
transmisión (en la DRAM) cuya dirección está en el registro correspondiente del contexto
(se había leído de la tabla de enrutamiento

  | 

+#$$%&$',
/0   12#$$+1,

El contexto de salida c, que está asignado al puerto p


comprueba si hay datos para enviar a través de ese puerto

Si es el comienzo del envío de los datos habrá que


determinar en que dirección de la DRAM empieza el paquete.
Para ello se utiliza el puntero que está en la cola de
transmisión asignada al puerto p

Se mueven los MP desde la dirección correspondiente de la


DRAM a los slots de la cola de salida que se han asignado al
puerto p (y al contexto c)

Se da la orden para que empiece la transferencia entre la


cola FIFO de salida (los slots asignados al puerto p y al
contexto c) y el puerto MAC p.

  | 

+#$$%&$',
/0   12#$$+1,

 3 %5     I |


3
+%      ,
Para cada paquete, la cabecera debe pasar a los registros del
contexto, modificarse y volverse a escribir en memoria.
a asimetrís en el número de accesos (1 lectura y dos escrituras) se
debe a que el número de bytes de cabecera Ethernet+ IP al
comienzo de cada paquete es de 8%5  y     
8#5     para las transferencias DRAM: no hay que
copiar toda la cabecera Ethernet en los registros (solo una lectura a
DRAM) pero sí hay que copiar la cabecera Ethernet (una vez
construida) para el paquete de salida (2 escrituras)

. 5  |
3A 5.01 Gbps (transferencias de 64
bytes) y 4.16 Gbps (transferencias de 32 bytes)
3x64 bytes =1536 bits a 5.01 Gbps
1x32 bytes =256 bits a 4.16 Gbps
I: Instrucciones D: Accesos a DRAM ;#I23
S: Accesos a SRAM : Accesos a memoria local

    se realizan para implementar


Hay que tener en cuenta que se consideran 8 puertos operaciones de sincronización, para acceder a los registros de
Ethernet de 100 Mbps: 6$$35 control,.. etc.:       
Considerando paquetes de 64 bytes: 2'3 (aunque se podrían pasar estas operaciones a la SRAM)

  | 

+#$$%&$',
/0   12#$$+1,
!      
os 3     (PE) están pensados para procesar a la velocidad de la línea de
12#$$
datos pueden dedicar a procesar paquetes aquellos ciclos que no consume con la
Pentium recepción/envío de paquetes.
Cada Microengine tiene su memoria de instrucciones (ISTORE) con capacidad para
1024 instrucciones y puede programarse independientemente de los restantes.
StrongARM En el arranque el procesador StrongARM inicializa las 350 instrucciones
correspondientes al movimiento de paquetes (código de infraestructura de
enrutamiento) y deja las restantes para las actividades de procesamiento que se
Microengines requieran (se cargan en el arranque o una vez está operando previa desactivación
por parte del StrongARM).
a modificación de la ISTORE conlleva   a memoria por instrucción.

os PE (microengines) controlan las situaciones correspondientes al tráfico usual (el caso común). as situaciones
excepcionales (fallos en la tabla de erutamiento, con necesidad de más procesamiento) se pasan al procesador StrongARM.
El procesador StrongARM puede acceder directamente a la DRAM y puede actuar sobre un paquete almacenado en la
misma en cuanto un Microengine le informe de que está disponible el paquete (mediante una interrupción o através de
memoria compartida, que puede ser sondeada por el StrongARM en determinados momentos).
El StrongARM debe verse como un séptimo PE (ya que compite con los otros seis por acceder a la memoria DRAM).

 < 


3A
- Controla los microengines (actualizando la tabla de enrutamiento y cargando nuevo código en los procesadores).
- Procesa paquetes excepcionales (con funciones de envío/recepción IP conocidad)
- Sirve de conexión con el procesador Pentium (carga MPs y los pone en el bus PCI,....)

  | 

+#$$%&$',
/0   12#$$+1,
!      
12#$$ En el nivel más alto de la jerarquía está el procesador de propósito general. Por
ejemplo, un Pentium (en el trabajo de Spalink et al.).
Pentium
Este procesador ofrece una capacidad de cómputo considerable, pero hay que
tener en cuenta el tiempo que tarda la información en hacerse accesible.
Una vez se conoce la velocidad a la que los paquetes pueden llegar al
StrongARM
procesador, se puede estimar el número de ciclos disponible para procesar los
paquetes que llegan.
Microengines

Mitad de la media armónica

Velocidades de transferencia en el
bus PCI

  | 

+#$$%&$',
m 

1. Introducción
2. IP Forwarding
3. Distribución de Carga Adaptativa
4. Redes Activas
5. Externalización de protocolos (offloading)

  | 

+#$$%&$',
|  5   
 -+,

Muchas aplicaciones de red necesitan distribuir las tareas de procesamiento


de datos entre varios servidores o unidades de procesamiento.
Ejemplo: las agrupaciones de servidores Web (Web server farms)

a distribución equilibrada y adaptativa de carga entre varios servidores no es


trivial:
ƥ Gran volumen de tráfico y el desconocimiento de sus características
ƥ Kecesidad de mantener la conectividad de los paquetes activos en
distintos hosts
ƥ Kecesidad de minimizar la información de estado almacenada

Esta aplicación es un ejemplo de lo que se denomina -     


(    0 )

  | 

+#$$%&$',
|  5   
 -+,
El servidor de destino de un
paquete se determina mediante
una función hash que tiene en
cuenta las capacidades de
procesamiento de los servidores
y es adaptativa dado que
considera la evolución de su
carga.
Para eso se utilizan dos
funciones de hash: Hold y Hnew
as funciones hash utilizan una
parte del paquete que es
constante durante la duración
del flujo (por ejemplo la
dirección de la fuente)
Ross, K.W.:ơHash routing for
collections of shared web cachesơ.
El procedimiento minimiza la información de estado que hay que IEEE Ketwork, pp.37-44, Kov-Dic,
almacenar. 97.
El número de instrucciones a ejecutar depende del número de Kencl, .; e Boudec, J.-Y.:ơAdaptive
servidores, m: 20m+75 para m<=8 y para m>8 el número crece oad Sharing for Ketwork
Processorsơ Proc. IKFOCOM,
logarítmicamente con m
pp.545-554, Junio, 2002.

  | 

+#$$%&$',
|  5   
 -+,

 -     A


Colaboración entre CPU y procesador de red
Implementación rápida de las funciones hash en campos disjuntos
en los encabezamientos
Implementación de esquemas de clasificación con multicampo y
actualización rápida de las reglas de los clasificadores multicampo
Distribución uniforme de las funciones de hash

  | 

+#$$%&$',
m 

1. Introducción
2. IP Forwarding
3. Distribución de Carga Adaptativa
4. Redes Activas
5. Externalización de protocolos (offloading)

  | 

+#$$%&$',

 -+,
as redes activas constituyen una aproximación a la arquitectura de red en
la que los nodos de la red realizan tareas específicas sobre los mensajes
que se transmiten a través de dicha red.

Esta aproximación está motivada tanto por las necesidades de


determinadas aplicaciones de usuario como por el surgimiento de las
tecnologías de código móvil que buscan la capacidad de innovación
dinámica de los de servicios de red

as redes activas suponen un cambio en la visión tradicional de las


aplicaciones de red (networking) desde una perspectiva en la que la
programabilidad estaba determinada por la definición de los protocolos y
estaba limitada a sus funciones, a una situación en la que los paquetes
pueden dar lugar a la ejecución de código a medida que viajan a través de
la red

  | 

+#$$%&$',

 -+,

Hay dos aproximaciones:


Incluir código en los paquetes para que se vaya ejecutando a medida que
pasa de nodo a nodo (  .)
Mantener el formato de los paquetes y conseguir la programabilidad a
través de programas que se cargan dinámicamente y se ejecutan a medida
que llegan los paquetes ( J .)

a primera aproximación lleva a la necesidad de encapsular programas en


byte-code (como java) para asegurar la neutralidad frente a distintas
arquitecturas y la seguridad

  | 

+#$$%&$',

 -+,

 -     A

a interpretación de los programas en byte-code es un cuello de


botella (se puede aliviar mediante el uso de la compilación JIT, just-
in-time, del código activo)

Acceso (especialmente la escritura) eficiente a la memoria de


instrucciones del KP

Procesamiento eficiente de la parte de datos de los paquetes


(payload)

Acceso y programación de la información de envío (forwarding) de


paquetes

  | 

+#$$%&$',
m 

1. Introducción
2. IP Forwarding
3. Distribución de Carga Adaptativa
4. Redes Activas
5. Externalización de protocolos (offloading)

  | 

+#$$%&$',
9  K  +,

Se trata de implementar todo (o la mayor parte) del trabajo


relacionado con el procesamiento de los protocolos en las interfaces
de red. En este caso, en el procesador de red.

Esta técnica está recibiendo gran atención, fundamentalmente por la


posibilidad de relevar a la CPU del procesamiento de los protocolos
dejando libres los correspondientes ciclos para otras aplicaciones.

El interés de esta opción es mayor a medida que las conexiones de


gigabits por segundo se están generalizando

Además, la externalización de los protocolos permite la


implementación de determinadas aplicaciones de red (cortafuegos,
distribuidores de carga de servidores a nivel de aplicación, etc.) fuera
de la CPU.

  | 

+#$$%&$',
9  K  +,
a externalización de protocolos de transporte fiables (como TCP) plantea las
siguientes dificultades:
Mantenimiento eficiente de un contexto de estado para cada onexión
Disponer de un servicio de temporización para los temporizadores de los
protocolos
Iplementar los servicios de segmentación, reensamblado y retransmisión
necesarios para el almacenamiento (buffering) intermedio de los paquetes de
cada contexto
Gestión eficiente del tamaño de la memoria para que no limite la
funcionalidad extensiva de algunos protocolos
Disponer de una API que permita una integración eficiente con las demás
aplicaciones
Colaboración eficiente entre CPU y procesador de red
Procesamiento eficiente de la parte de datos de los paquetes y cálculos de
CRC y demás códigos

  | 

+#$$%&$',
   

Haas, R.; et al.:ơCreating Advanced Functions on Ketwork Processors: Experience


and Perspectivesơ. IEEE Ketwork, pp.46-54. Julio/Agosto, 2003.

Spalink, T.; Karlin, S.; Peterson, .:ơEvaluating Ketwork Processors in IP


Forwardingơ. Koviembre, 2000
http://www.cs.princeton.edu/research/techreps/TR-626-00

http://www.npforum.org

  | 

+#$$%&$',

S-ar putea să vă placă și