Escolar Documentos
Profissional Documentos
Cultura Documentos
E. T. S. DE INGENIERA INFORMTICA
Ingeniera Informtica
ndice
RESUMEN..................................................................................................9
CAPTULO I. INTRODUCCIN............................................................11
1. 1 Introduccin..............................................................................................................................11
1. 2 Propsito del proyecto..............................................................................................................12
1. 3 Planificacin..............................................................................................................................13
1. 4 Estructura de la memoria........................................................................................................13
B. 1 Modificacin de atributos......................................................................................................153
B.1.1 Acceso a la tabla de atributos.........................................................................................153
B.1.2 Aadir un nuevo atributo...............................................................................................154
B.1.3 Aadir valores a un atributo ya creado.........................................................................154
B. 2 Adicin de nuevas estadsticas AQM....................................................................................156
Resumen
La utilizacin de tcnicas del mundo de la automtica para lograr un ptimo control de la
congestin en las redes IP es algo asombroso. En el presente proyecto se detalla el estudio de
diferentes tcnicas de control de procesos, partiendo del conocido control PID clsico, hasta el ms
novedoso Control Predictivo basado en modelo. Dichas estrategias sern implementadas haciendo
uso de la potente herramienta de simulacin OPNET, la cul nos dar infinidad de posibilidades
para modelar, experimentar y comparar resultados.
Abstract
Using techniques from the world of automatics, to achieve an optimal control for IP networks
congestion, is something amazing. This project, details the study of different process control
techniques, starting from the well-known classical PID control (implemented in several ways), until
the newest based on model Predictive Control. These strategies will be implemented using the
powerful simulating tool, OPNET, which will give us infinity of posibilities for modeling,
experimenting and comparing results.
Captulo I
Introduccin
1. 1 Introduccin
La congestin de la red es el problema que surge cuando sta genera ms trfico del que se puede
cursar. Para lidiar con ello se han ido sucediendo diferentes tcnicas y propuestas a lo largo de
tiempo, partiendo de sencillos algoritmos generalistas muy aceptables, a otros mucho ms
complejos optimizados en determinadas circunstancias. El objetivo de este texto es exponer una
serie de tcnicas innovadoras para conseguir controlar esa congestin de forma eficiente.
El control de procesos se relaciona con el control de plantas industriales mediante la
optimizacin y actuacin sobre distintas variables y magnitudes que nos permiten obtener unos
resultados satisfactorios. Y, a cuento de qu viene esto? Muy fcil, utilizaremos tcnicas de
control de procesos para controlar la congestin en las colas del router.
Quizs el lector se sienta un poco confundido en el tema, por ello y a modo de introduccin
partiremos del smil mostrado en la Figura 1. 1.
Este ejemplo nos permitir entender el control de procesos y el por qu nos resulta tan interesante.
Controlar un proceso, a grandes rasgos, se puede resumir en controlar el valor de una o varias
variables de salida en funcin de una o varias variables de entrada. El caudal de entrada de agua,
en el caso del tanque, se correspondera con el flujo de paquetes de datos de entrada en el caso del
router. El depsito en s sera equivalente a la cola en la que los paquetes esperan para ser
procesados. Los paquetes procesados por el router se liberan, de forma similar al lquido que sale
del tanque. Guardando las distancias, se podra asemejar una mayor o menor velocidad de
procesamiento a abrir o cerrar ms el grifo. Aunque de momento no lo justifiquemos, en ambos
procesos distinguimos:
Planta
Variables de entrada
Variables de salida
DEPSITO
Caudal de salida
ROUTER
Tamao de la cola
Como visin inicial es suficiente, ms adelante se tratar el mismo ejemplo de manera ms tcnica.
12
1. INTRODUCCIN
1. 3 Planificacin
Realmente la planificacin de este proyecto no ha sido tarea sencilla. Compaginar su desarrollo con
otros trabajos ha sido, en muchas ocasiones, complicado. Muchas tareas han sufrido demoras de
tiempo muy por encima de lo esperado inicialmente. En la Figura 1. 2 podemos ver el diagrama de
Gantt que nos muestra la evolucin del proyecto a lo largo de su tiempo de desarrollo. Aunque no
haya una relacin explcita entre las distintas tareas, su posicin a lo largo del tiempo indica su
posible vnculo.
1. 4 Estructura de la memoria
A modo de rpido vistazo, explicar a continuacin en unas pocas lneas el contenido de cada uno
de los captulos en los que se ha dividido la presente memoria.
14
Captulo II
Introduccin a las redes de
ordenadores
2. 1 Introduccin
Internet, ese trmino tan desconocido, tan exclusivo de la gente moderna hace apenas 10 aos y
tan integrado en nuestras vidas a da de hoy. Actualmente, por lo menos en mi caso, es poco o
nada concebible la vida sin la red de redes. Desde primera hora de la maana ya estoy
consultando mi smartphone para enterarme de las ltimas noticias, mientras camino hacia mi
puesto de trabajo miro los ltimos tweets escritos por mis followings. Una vez en la oficina
accedo a la red corporativa y comienzo a desarrollar software, sincronizo mis cambios en ficheros
con los del resto de mi equipo a travs de SVN, despliego las aplicaciones en diferentes entornos,
consulto libros y documentacin online... Por fin se hace la hora de volver a comer a casa, por el
camino decido utilizar la aplicacin de ese famoso restaurante para pedir ese plato que tanto me
gusta. Tras reposar la comida me pongo a trabajar en el presente proyecto, veo que mi licencia de
la herramienta OPNET ha caducado, me conecto al servidor de licencias y la renuevo para unos
meses y as comienzo con mi quehacer vespertino. El cielo se va oscureciendo, una notificacin
de Whatsapp llega a mi telfono, mi grupo de amigos ha decidido salir a tomar unos pinchos y
caas y quieren que me apunte, para desconectar del duro da de trabajo decido marchar, actualizo
mi estado de facebook y acudo raudo y veloz. Durante la reunin un colega me ensea la nueva
aplicacin de su smartphone y cmo gracias a ella puede estar al tanto de los resultados y
horarios de los eventos deportivos que le interesan. Finalmente llego a casa, contesto varios emails y pujo en eBay por esa figura que llevo tanto tiempo queriendo conseguir. Es hora de irse a
la cama, escribo un tweet de buenas noches y cierro los ojos.
El da que acabo de describir no hubiese transcurrido de igual forma de no ser por internet.
Aunque no lo creamos estamos expuestos al trnsito de datos y, por extensin, de la informacin
durante todo el tiempo (Figura 2. 1).
Evidentemente, esta situacin no se ha dado de la noche a la maana. Las mejoras tanto en la
infraestructura como en la lgica de las redes ha ido mejorando notablemente con el transcurso de
los aos. El creciente consumo de datos ha venido acompaado de una mejora en la eficiencia de
la red.
Existen varios puntos y niveles desde los cuales se pueden contribuir a optimizar el trfico de
datos. En el presente proyecto he querido abordar la problemtica de la congestin de paquetes en
los router y para ello se ha realizado la implementacin y estudio de diferentes propuestas.
Para situarnos en el contexto que nos atae, se ha escrito este captulo introductorio para
explicar conceptos importantes relacionados con las redes de ordenadores.
2. 2 Pila de protocolos
Para reducir la complejidad de su diseo, la mayora de las redes estn organizadas como una pila
de capas o niveles, cada una construida a partir de la que est debajo de ella. El nmero de capas,
as como el nombre, contenido y funcin de cada una de ellas difieren de red a red. El propsito de
cada capa es ofrecer ciertos servicios a las capas superiores, a las cuales no se les muestran los
detalles reales de implementacin de los servicios ofrecidos.
Este concepto es muy conocido y utilizado en el campo de la informtica, donde se conoce de
diversas maneras, como ocultamiento de informacin, tipos de datos abstractos, encapsulamiento
de datos y programacin orientada a objetos. La idea bsica es que una pieza particular de software
(o hardware) proporciona un servicio a sus usuarios pero nunca les muestra los detalles de su
estado interno ni sus algoritmos. [Tan03]
Existe un modelo basado en una propuesta desarrollada por la ISO para estandarizar los
protocolos en un modelo de capas. Su nombre es modelo OSI y est formado por siete capas. En la
Figura 2. 2 se puede observar un esquema del modelo.
La capa fsica: En esta capa es donde se transmite la informacin, ya como bits, a travs
del canal de comunicacin. Los aspectos de diseo implican asegurarse de que cuando un
lado enva un bit 1, ste se reciba en el otro lado con valor 1. Las cuestiones a resolver en
este nivel estn relacionadas con valores de tensin, muestreos, conectores de red... Los
aspectos de diseo, por tanto, tienen que ver mucho con interfaces mecnicas, elctricas y
de temporizacin, adems del medio fsico de transmisin, que est justo por debajo de
esta capa.
La capa de enlace: Se encarga de transformar los datos del emisor en tramas
(normalmente, de algunos cientos o miles de bytes) y transmitirlas de forma secuencial.
En un servicio confiable el receptor enva una trama de confirmacin. A parte, esta capa
tambin se encarga de controlar el flujo de informacin para no saturar a receptores lentos.
La capa de red: Encargada de controlar las operaciones de la subred. Cmo aspecto muy
importante est el enrutamiento entre redes. Esta capa es la que ms nos importa en el
presente proyecto, en ella es donde se gestiona el control de la congestin (con permiso
de la capa de transporte) en los puntos donde se producen cuellos de botellas que colapsan
la red.
La capa de transporte: Esta capa tiene como principal objetivo fragmentar los datos que
le llegan de la capa superior y asegurarse de que stos se reciben correctamente en el
destino (control extremo a extremo).
17
2. 3 TCP / IP
El modelo OSI es slo una referencia, slo nos da las pautas y normas en la creacin de una pila de
protocolos. TCP/IP es una implementacin real multicapa extendida mundialmente. Como se
puede ver en la Figura 2. 3 se define un modelo de cuatro capas. En la Figura 2. 4 se muestran los
protocolos presentes en cada una de esas las capas.
18
2.3.1 Protocolo IP
IP se encarga de realizar el encaminamiento entre redes, no entre nodos. Podemos numerar varias
de sus caractersticas ms importantes:
Directo: El nodo destino y el que encamina estn en la misma red. IP no interviene. Con
algunos mtodos como el flooding, no hay nada que encaminar, pero an as es necesario
conocer la direccin del destinatario. Para eso se utiliza ARP. El nmero de equipos
activos en una red en un momento dado cambia constantemente, mantener la tabla
completa en memoria es poco eficiente; y por ello ARP actualiza su tabla slo con los
equipos activos.
Indirecto: De un equipo de una red a otro de una red diferentes. Se utilizan tablas IP. Las
tablas de los gateways cambian de forma dinmicamente.
19
Direccionamiento: Utiliza puertos. El campo del identificador TCP permite hasta 65.536
direcciones (puertos) TCP diferentes, lo que parece ms que suficiente para cualquier red.
[CEB10]
Control del dilogo extremo a extremo.
20
21
Captulo III
El problema del control de la
congestin
3. 1 Introduccin
Cuando hay demasiados paquetes presentes en la subred (o en una parte de ella), hay una
degradacin del desempeo. Esta situacin se llama congestin. En la Figura 3. 1 se muestra este
sntoma. Cuando la cantidad de paquetes descargados en la subred por los hosts est dentro de su
capacidad de conduccin, todos se entregan (excepto unos pocos afligidos por errores de
transmisin) y la cantidad entregada es proporcional al nmero enviado. Sin embargo, a medida
que aumenta el trfico, los routers ya no pueden manejarlo y comienzan a perder paquetes. Esto
tiende a empeorar las cosas. Con mucho trfico el desempeo se desploma por completo y casi no
hay entrega de paquetes. [Tan03]
23
La congestin se puede deber a varias causas. Si los paquetes llegan a partir de varias lneas de
entrada, por ejemplo, cuatro clientes conectados a un router, y ste dispone de una nica lnea de
salida sobre la que redireccionar los paquetes, se puede dar el caso de que la cola se empiece a
llenar. Si no hay suficiente memoria para encolar todos los paquetes que llegan stos se perdern.
Una cola de tamao infinito tampoco sera solucin, ya que para cuando muchos paquetes
llegaran al principio de la cola su temporizador (TCP) ya habra expirado varias veces, lo que a su
vez hubiese generado nuevos reenvos de duplicados de esos paquetes. Estos paquetes, ya
inservibles, sern reenviados a lo largo de la red, aumentado la carga de forma muy notable.
Es bastante evidente que un procesador lento tambin puede causar congestin. Si la CPU es
lenta realizando las tareas de administracin necesarias, en la cola se irn acumulando paquetes a
la espera de ser procesados. Del mismo modo, lneas con poco ancho de banda, tambin pueden
ocasionar problemas de congestin. Hay que buscar un equilibrio entre todos los componentes de
la red, en caso contrario no se conseguir ms que localizar el cuello de botella en otra parte de la
red.
Se pueden utilizar varias mtricas para monitorizar la subred buscando congestiones. Las
principales son el porcentaje de paquetes descartados debido a falta de espacio de buffer, la
longitud media de las colas, la cantidad de paquetes para los cuales termina el temporizador y se
transmiten de nueva cuenta, el retardo promedio de los paquetes y la desviacin estndar del
retardo de paquete. En todos estos casos, un aumento en las cifras se traduce en un aumento en la
congestin. El segundo paso del ciclo de retroalimentacin es la transferencia de informacin
relativa a la congestin desde el punto en que se detecta hasta el punto en que puede hacerse algo al
respecto.
La manera ms obvia es que el router que detecta la congestin enve un paquete al origen (u
orgenes) del trfico, anunciando el problema. Por supuesto, estos paquetes adicionales aumentan
la carga precisamente en el momento en que no se necesita ms carga, es decir, cuando la subred
est congestionada.
Por suerte, existen otras opciones. Por ejemplo, en cada paquete puede reservarse un bit o
campo para que los routers lo llenen cuando la congestin rebase algn umbral. Cuando un router
detecta este estado congestionado, llena el campo de todos los paquetes de salida, para avisar a los
vecinos.
Otra estrategia es hacer que los hosts o routers enven de manera peridica paquetes de sondeo
para preguntar explcitamente sobre la congestin. Esta informacin puede usarse para enrutar el
trfico fuera de reas con problemas. Un smil sera, por ejemplo, una emisora de radio, la cul
tiene helicpteros sobrevolando por una ciudad, desde all se detectaran las calles con mayor
24
trfico y se informara por radio a los conductores sobre la situacin, para que stos no circulen por
las vas conflictivas.
En todos los esquemas de feedback, la esperanza es que el conocimiento sobre la congestin
haga que los hosts emprendan acciones adecuadas con el propsito de reducir la congestin. Para
operar de forma correcta, la escala de tiempo debe ajustarse cuidadosamente. Si el router grita
ALTO cada vez que llegan dos paquetes seguidos, y SIGA, cada vez que est inactivo durante 20
seg, el sistema oscilar sin control y nunca converger. Por otra parte, si un enrutador espera 30
minutos para asegurarse antes de tomar una decisin, el mecanismo de control de congestin
reaccionar tan lentamente que no ser de utilidad. Para funcionar de forma ptima se requiere
encontrar la constante de tiempo correcta, pero ste no es un asunto trivial.
Se conocen muchos algoritmos de control de congestin. A fin de organizarlos lgicamente,
Yang y Reddy (1995) han desarrollado una taxonoma de los algoritmos de control de congestin.
Empiezan dividiendo los algoritmos por lazo abierto y lazo cerrado, de la misma forma que se
ha indicado anteriormente. Dentro del primer grupo, se podran destacar dos subcategoras, los
algoritmos que actan en el origen y los que lo hacen en el destino. Los algoritmos de lazo cerrado
tambin se dividen en dos subcategoras: retroalimentacin explcita e implcita. En los algoritmos
de retroalimentacin explcita, regresan paquetes desde el punto de congestin para avisar al
origen. En los algoritmos implcitos, el origen es el que intuye la existencia de una congestin
haciendo observaciones locales, como el tiempo necesario para que regresen las confirmaciones de
recepcin.
La presencia de congestin significa que la carga es (temporalmente) superior (en una parte
del sistema) a la que pueden manejar los recursos (coloquialmente, un cuello de botella). Existen
dos soluciones iniciales que se nos pueden ocurrir: aumentar los recursos o disminuir la carga. Por
ejemplo, la subred puede comenzar a utilizar lneas de acceso telefnico para aumentar de manera
temporal el ancho de banda entre ciertos puntos. La divisin del trfico entre varias rutas en lugar
de usar siempre la mejor tambin aumenta efectivamente el ancho de banda. Por ltimo, a fin de
contar con mayor capacidad, los routers de repuesto que normalmente sirven slo como respaldo
(para hacer que el sistema sea tolerante a fallas), pueden ponerse en lnea cuando aparece una
congestin severa. Sin embargo, a veces no es posible aumentar la capacidad, o sta ya ha sido
aumentada al mximo. Entonces, la nica forma de combatir la congestin es disminuir la carga.
Existen varias maneras de reducir la carga, como negar el servicio a algunos usuarios, degradar el
servicio para algunos o todos los usuarios y obligar a los usuarios a programar sus solicitudes de
una manera ms predecible.
Capa
Polticas
Transporte
Poltica de retransmisin
Poltica de almacenamiento en cach de paquetes fuera de orden
Poltica de confirmaciones de recepcin
Poltica de control de flujo
Determinacin de terminaciones de temporizador
Red
25
Enlace
Poltica de retransmisiones
Poltica de almacenamiento en cach de paquetes fuera de orden
Poltica de confirmacin de recepcin
Poltica de control de flujo
fichero, supongamos que consta de 12 paquetes y que el nmero 3 se pierde, esto crear un hueco
en la recepcin que puede hacer necesaria la retransmisin de los paquetes del 3 al 12, en este caso
es preferible deshacerse de paquetes viejos que de los nuevos (crear menos retransmisiones). Un
caso opuesto es el de la transferencia de contenido multimedia, aqu es ms importante recibir
primero lo ms nuevo.
Puede existir la posibilidad en la que exista una diferenciacin de paquetes. Las aplicaciones
pueden marcar los paquetes con una prioridad en base a su importancia. El router eliminar de sus
colas los paquetes en funcin de su prioridad (importancia).
La razn podra ser monetaria, siendo ms barato el envo de paquetes de baja prioridad que el
de los de alta prioridad. Como alternativa, los emisores podran tener permitido enviar paquetes de
alta prioridad bajo condiciones de carga ligera, pero a medida que aumente la carga, los paquetes
podran descartarse, lo que hara que los usuarios ya no siguieran envindolos. Este caso podra
coincidir guardando las distancias con el de servicios de almacenamiento masivo de ficheros
(por ejemplo Rapidshare o el malogrado Megaupload), cuentas premium VS cuentas gratuitas.
Captulo IV
AQM en OPNET
4. 1 Introduccin
En este captulo queremos estudiar a fondo los elementos de red que nos proporciona OPNET y
que tienen relacin directa con el control de la congestin. En el Apndice A existe un gua
extendida de OPNET que nos permite conocer a fondo la herramienta. En caso de que el lector no
est familiarizado con esta aplicacin es recomendable leer primero dicho texto.
En primera instancia se ir viendo paso a paso y nivel a nivel como se utiliza/implementa la
gestin activa de colas para, despus, aadir las modificaciones pertinentes para ampliar la
funcionalidad del simulador (esto ser ms adelante, en los captulos 5 y 6).
A nivel de topologa de red, los nodos de OPNET que nos interesan sern el nodo QoS y el
nodo Router.
30
funciones para la gestin de colas, entre ellas, las funciones especficas utilizadas en el control de la
congestin.
En el apartado en el que se predefinen las funciones es importante fijarse en la siguiente
attr_def_fifo_profiles_info_parse, la cul recoge los atributos guardados en el atributo compuesto
FIFO Profiles.
Variables de Estado
A destacar la variable my_objid (de tipo Objid), que servir como referencia para acceder a los
distintos atributos.
Variables Temporales
Sern utilizadas, como ya se ha visto, nicamente dentro del modelo de procesos. Son variables
auxiliares para el manejo e identificacin de objetos.
Enter Executives
Las acciones realizadas en esta porcin de cdigo son las siguientes:
31
32
33
34
En este estado tenemos dos posibilidades de transicin, bien al estado inactive (en
el caso de que todas las intefaces IP del nodo se encuentren fuera de servicio) o
bien al estado init_too, en el caso de que existan interfaces activas.
Al transitar al estado init_too, se ejecuta la funcin
ip_dispatch_distribute_routing_info(), que activa los distintos protocolos de
enrutamiento configurados en el router.
Este estado termina con la inicializacin del mdulo, en l se crean varios procesos
hijos encargados de realizar tareas especficas. Dentro de los exit executives
encontramos la llamada ip_dispatch_cleanup_and_create_child_processes(), esta
funcin es la que desencadena el procesamiento de las interfaces IP.
35
ip_rte_qos_information_process
static void ip_rte_qos_information_process (void)
{
List qos_ifaces_list;
IpT_Qos_Info*intf_qos_info;
IpT_QoS_Iface_Config * qos_iface_config_ptr;
IpT_Rte_Iface_QoS_Data * interface_qos_data_ptr;
/** Crea los procesos hijos para procesar paquetes en la cola de salida.
Se genera un proceso hijo por cada interfaz. Cada uno modela un mecanismo
de encolado como FIFO, WFQ o PQ, adems de mecanismos de control de
congestin como RED/PID/MPC. **/
/* Guarda en la memoria compartida informacin acerca de cada interfaz*/
module_data.shared_mem.iprmd_ptr = &module_data;
/* Almacena en memoria compartida handles para paquetes enviados y
descartados. Tambien se comparten otras variables de estado con el modelo
de proceso de la interfaz de salida para tener en cuenta el trafico
background en las estadisticas de esa interfaz de salida.*/
module_data.shared_mem.locl_pk_dropped_hdl_ptr =
&module_data.locl_num_pkts_dropped_hndl;
module_data.shared_mem.globl_pk_dropped_hdl_ptr =
&module_data.globl_num_pkts_dropped_hndl;
module_data.shared_mem.locl_num_pkts_sent_hdl_ptr =
&module_data.locl_tot_pkts_sent_hndl;
36
37
En esta funcin hay una llamada a la funcin oms_pr_process_discover, que es la que determina si
existe o no un atributo QoS global. Recordar que en el estudio del nodo QoS se haba registrado
llamando a la funcin oms_pr_process_register.
ip_qos_info_process [ip_qos_support.ex.c]
OMSC_EXPORT void ip_qos_info_process (void * data_ptr, List *
qos_ifaces_lptr)
{
Compcode status;
Objid attr_objid, iface_info_objid, sub_iface_info_objid, ith_attr_objid,
h_subiface_objid;
int num_rows, num_sub_ifaces, i, j;
List policies_list;
IpT_Rte_Module_Data * module_data_ptr;
IpT_QoS_Profiles_Dbase * profiles_dbase_ptr;
/** Procesamiento de la informacin de las interfaces IP. **/
38
}
/* Liberar memoria */
ip_qos_local_profiles_memory_free (profiles_dbase_ptr, &policies_list);
FOUT;
}
En esta funcin se recoge toda la informacin introducida por el usuario relacionada con las
interfaces del nodo router (Interface Information, Figura 4. 7). Hemos obviado el procesamiento de
subinterfaces porque no las llegamos a utilizar.
39
iface_qos_info_ptr->scheduling_info = OPC_NIL;
iface_qos_info_ptr->red_info = OPC_NIL;
iface_qos_info_ptr->in_shaping_info = OPC_NIL;
iface_qos_info_ptr->out_shaping_info = OPC_NIL;
40
FOUT;
}
compuesto,
se
utiliza
la
funcin
resaltada
ip_qos_iface_attribute_sort [ip_qos_support.ex.c]
static void ip_qos_iface_attribute_sort (IpT_QoS_Profiles_Dbase *
profiles_dbase_ptr, IpT_QoS_Iface_Info * iface_qos_info_ptr, Objid
qos_attr_objid, Objid qos_scheme_objid, List * policies_lptr)
{
Compcode status;
Objid jth_attr_objid;
int j, num_entries;
char scheme_name [256];
IpT_QoS_Scheme_Type scheme_type;
IpT_QoS_Mechanism_Info * qos_mechanism_info_ptr;
/* Esta funcin clasifica la informacin QoS configurada dentro de la
interfaz en una de las siguientes categoras: scheduling,in/out CAR y
RED. Slo se muestra el cdigo perteneciente al caso que nosotros
tenemos: FIFO y AQM */
FIN (ip_qos_iface_attribute_sort (iface_qos_info_ptr,... ));
num_entries = op_topo_child_count (qos_scheme_objid, OPC_OBJTYPE_GENERIC);
for (j = 0; j < num_entries; j++){
jth_attr_objid = op_topo_child (qos_scheme_objid,
OPC_OBJTYPE_GENERIC, j);
/* Recoge los atributos Type y Name*/
op_ima_obj_attr_get (jth_attr_objid, "Type", &scheme_type);
41
}
}
FOUT;
}
En estas funciones no se estn asignando muchos valores porque ya han sido configurados
anteriormente de manera global. Por esta razn parte del cdigo no se ha incluido.
ip_qos_iface_profiles_create [ip_qos_support.ex.c]
static void
ip_qos_iface_profiles_create (IpT_QoS_Profiles_Dbase * profiles_dbase_ptr,
IpT_QoS_Iface_Config ** qos_iface_config_pptr,
IpT_QoS_Iface_Info * iface_qos_info_ptr, Objid qos_attr_objid)
{
char * profile_name;
IpT_Queuing_Scheme queuing_scheme;
IpT_QoS_Mechanism_Info *qos_mechanism_ptr, *red_info_ptr;
OmsT_Qm_Attributes *qm_attr_ptr = OPC_NIL;
IpT_QoS_Iface_Config qos_iface_config, *qos_iface_config_ptr = OPC_NIL;
Boolean is_config_needed = OPC_FALSE;
/* Esta funcin crea perfiles QoS para las interfaces IP */
/* basada en la infomacin contenida en iface_qos_info_ptr.*/
FIN (ip_qos_iface_profiles_create (profiles_dbase_ptr,
qos_iface_config_ptr,
...));
/* Asignar el nombre de la interfaz. */
qos_iface_config.iface_name = iface_qos_info_ptr->iface_name;
qos_iface_config.qm_attr_ptr = OPC_NIL;
/* Ver si hay configuracin de QoS scheduling en la interfaz. */
if(iface_qos_info_ptr->scheduling_info != OPC_NIL){
qos_mechanism_ptr = iface_qos_info_ptr->scheduling_info;
/* Coger la informacin RED. */
42
red_info_ptr = iface_qos_info_ptr->red_info;
profile_name = qos_mechanism_ptr->profile_name;
/* Obtener queuing scheme basndose en el tipo de perfil configurado */
switch (qos_mechanism_ptr->type)
{
case IpC_QoS_FIFO:
queuing_scheme = IpC_FIFO_Queuing;
qm_attr_ptr = ip_qos_fifo_profile_get (profiles_dbase_ptr,
iface_qos_info_ptr->hold_q_capacity,
qos_mechanism_ptr,red_info_ptr,qos_attr_objid);
break;
}
/* Guardar varios valores en la estructura qos_iface_config*/
qos_iface_config.queuing_scheme = queuing_scheme;
qos_iface_config.bandwidth_type = iface_qos_info_ptr->bandwidth_type;
qos_iface_config.reserved_bandwidth=
iface_qos_info_ptr->reserved_bandwidth;
qos_iface_config.buffer_size = iface_qos_info_ptr->buffer_size;
qos_iface_config.qm_attr_ptr = qm_attr_ptr;
/* Guardar el nombre del perfil */
qos_iface_config.q_profile_name = (char *) op_prg_mem_alloc
(sizeof (char) * (strlen (profile_name) + 1));
strcpy (qos_iface_config.q_profile_name, profile_name);
is_config_needed = OPC_TRUE;
}
if (is_config_needed){
/* Reservar memoria para configuracin de interfaz QoS. */
qos_iface_config_ptr = (IpT_QoS_Iface_Config *)
op_prg_mem_alloc (sizeof (IpT_QoS_Iface_Config));
*qos_iface_config_ptr = qos_iface_config;
*qos_iface_config_pptr = qos_iface_config_ptr;
}
FOUT;
}
ip_qos_fifo_profile_get [ip_qos_support.ex.c]
En esta funcin se comprueba la existencia de perfiles FIFO. En caso de que ya existiera (se ha
configurado de manera global con el nodo QoS), lo agrega a la interfaz del router de manera local.
En caso contrario crea uno por defecto.
static OmsT_Qm_Attributes * ip_qos_fifo_profile_get
(IpT_QoS_Profiles_Dbase * profiles_dbase_ptr, int hold_q_capacity,
IpT_QoS_Mechanism_Info * qos_mechanism_ptr,
IpT_QoS_Mechanism_Info * red_info_ptr, Objid qos_attr_objid)
{
void * tmp_ptr;
char * profile_name;
Boolean red_from_policy = OPC_FALSE;
OmsT_Qm_Attributes * qm_attr_ptr = OPC_NIL ;
43
IpT_QoS_Profile_Entry * profile_entry_ptr;
OmsT_Qm_IP_Queue_Configuration * qconfig_ptr = OPC_NIL;
OmsT_Qm_RED_Queue_Params * red_params_ptr = OPC_NIL;
/* Obtener el nombre del perfil. */
profile_name = qos_mechanism_ptr->profile_name;
/* Comprobar si el perfil ya existe en la base de datos local. Si es as,
salimos de la funcin. Si es default, creamos el perfil por defecto */
profile_entry_ptr = (IpT_QoS_Profile_Entry *) ip_qos_profile_dbase_access
(profile_name, profiles_dbase_ptr, IpC_QoS_Scheduling_Profile,
IpC_FIFO_Queuing, OPC_NIL);
44
45
Que dispara una interrupcin ante cada llegada de un paquete. En este punto ser cuando se decida
qu hacer con el paquete en caso de congestin, cuando el procesador del router se encuentra
ocupado.
Ficheros externos
Son importantes ip_qos_support.ex.c y oms_qm.ex.c.
STD
En la Figura 4. 10 podemos ver el diagrama de estados de este modelo de procesos. Ahora mismo
nos encontramos en el punto al que queramos llegar, estamos en el modelo sobre el que tenemos
que disear y adaptar nuestros nuevos algoritmos de control de la congestin. Es aqu donde se
describe el comportamiento de la interfaz IP.
46
47
En primer veremos la manera de distribuir los buffers, para ello vamos a ojear el cdigo que
han implementado los desarrolladores de OPNET en la funcin allocate_buffers.
allocate_buffers
static void allocate_buffers (void)
{
IpT_Rte_Iface_QoS_Data* iface_qos_data_ptr;
OmsT_Buffer_Pool_Handle buffer_pool_handle;
char new_name [200], int f_name[128];
double processing_rate;
FIN (allocate_buffers ());
buffer_pool_handle = (OmsT_Buffer_Pool_Handle) op_pro_argmem_access ();
/* Registro de funciones en una tabla global */
ip_qos_sup_functions_register ();
/* Obtener los datos QoS de la interfaz. */
iface_qos_data_ptr = shared_mem_ptr->
iprmd_ptr->interface_qos_data_pptr[interface_index];
FOUT;
}
ip_qos_sup_functions_register [ip_qos_support.ex.c]
Esta funcin registra varias funciones en la tabla global OmsI_Arch_Specific_Func_Table
relacionadas con la gestin de colas. Las distintas posiciones de la tabla se asocian a macros. Ms
adelante veremos la llamada a la funcin registrada ip_qos_packet_enqueue_test.
OMSC_EXPORT void ip_qos_sup_functions_register (void)
{
OmsI_Arch_Specific_Func_Table [OmsC_Qm_IP][OmsC_Qm_Enqueue_Test_Func]=
(OmsT_Qm_Arch_Void_Func ) ip_qos_packet_enqueue_test;
OmsI_Arch_Specific_Func_Table[OmsC_Qm_IP][OmsC_Qm_Drop_Policy_Vars_Create_Func]=
(OmsT_Qm_Arch_Void_Func ) oms_qm_red_vars_create;
OmsI_Arch_Specific_Func_Table[OmsC_Qm_IP][OmsC_Qm_Drop_Policy_Vars_Update_Func]=
(OmsT_Qm_Arch_Void_Func ) oms_qm_red_variables_update;
OmsI_Arch_Specific_Func_Table[OmsC_Qm_IP][OmsC_Qm_Drop_Policy_Vars_Delete_Func]=
(OmsT_Qm_Arch_Void_Func ) oms_qm_red_variables_delete;
48
La palabra reservada extern eleva la variable a un mbito global para que sea accesible desde
diferentes funciones.
Podemos ver un ejemplo de macro asociada a esta tabla en el siguiente fragmento:
#define OMS_ENQ_TEST_FUNC (arch_type) ((OmsT_Qm_Enqueue_Test_Func)\
OmsI_Arch_Specific_Func_Table [arch_type] [OmsC_Qm_Enqueue_Test_Func])
De esta manera, se crea un acceso unificado a las funciones, por si hubiese distintas arquitecturas
con diferentes funciones. De esta forma, en vez de cambiar la llamada a la funcin, se hacen nuevas
asignaciones a la tabla y seguimos accediendo a ella utilizando la misma macro.
La funcin oms_qm_qscheme_specific_functions_register acta de forma similar a la que
acabamos de explicar. Asocia funciones sobre la tabla OmsI_Qscheme_Specific_Func_Table,
declarada en oms_qm.h. Esta tabla contendr funciones especficas para cada una de las disciplinas
de cola. Por ejemplo, esta asignacin se correspondera con la estructura FIFO:
OmsI_Qscheme_Specific_Func_Table [OmsC_Qm_FIFO_Queuing]
[OmsC_Qm_Pkt_Deq_Complete]
= (OmsT_Qm_Qscheme_Void_Func) OPC_NIL;
OmsI_Qscheme_Specific_Func_Table [OmsC_Qm_FIFO_Queuing]
[OmsC_Qm_Queue_Select]
= (OmsT_Qm_Qscheme_Void_Func) Oms_Qm_FIFO_Queue_Select;
Al igual que en el caso anterior, la invocacin de las funciones asociadas se realizar utilizando
macros. En oms_qm.h podemos ver:
#define OMS_PKT_DEQ_COMPLETE_FUNC(qscheme)
((OmsT_Qm_Pkt_Deq_Complete_Func)\
OmsI_Qscheme_Specific_Func_Table [qscheme][OmsC_Qm_Pkt_Deq_Complete])
#define OMS_QUEUE_SELECT_FUNC(qscheme) ((OmsT_Qm_Queue_Select_Func)\
OmsI_Qscheme_Specific_Func_Table [qscheme][OmsC_Qm_Queue_Select])
49
Oms_Qm_Info_create [oms_qm.ex.c]
Se encarga de inicializar la estructura OmsT_Qm_Info. Esta estructura contiene toda la informacin
relevante relativa a la interfaz, desde el mximo nmero de paquetes hasta la estructura en s en la
que se almacenarn los paquetes.
OMSC_EXPORT OmsT_Qm_Info * Oms_Qm_Info_Create (int interface_index, double
speed, OmsT_Qm_Info_Assign_Func_Ptr assign_function_ptr,
OmsT_Buffer_Pool_Handle buffer_pool, OmsT_Qm_Queuing_Scheme q_scheme,
Prohandle qm_invoker_prohandle, OmsT_Qm_Arch_Type qm_client_type, void*
arch_info)
{
static Pmohandle qm_info_pmh = OPC_PMO_INVALID;
OmsT_Qm_Info *qm_info = OPC_NIL;
char intf_name [64];
oms_qm_qscheme_specific_functions_register ();
sprintf (intf_name, "Interface #%d", interface_index);
/* Inicializacin y reserva de memoria para la estructura OmsT_Qm_Info.*/
qm_info = (OmsT_Qm_Info *) op_prg_pmo_alloc (qm_info_pmh);
Seguidamente, partiendo de la funcin enqueue_packet() iremos viendo a travs del cdigo los
distintos cometidos que se van desencadenando.
enqueue_packet
Almacena el paquete recibido en una de las listas de la estructura qm_info. Si el procesador de la
interfaz est libre, se procesa y es enrutado.
static void enqueue_packet (void)
{
Packet * pkptr = OPC_NIL;
int queue_id = -1;
Ici *qos_ici_ptr = OPC_NIL;
OmsT_Qm_Signal qm_signal;
OmsT_Qm_Queue_Pool*q_pool_ptr = OPC_NIL;
OmsT_Qm_Classifier_Func_Ptr classify_func_ptr = OPC_NIL;
50
/* Obtener el paquete.*/
pkptr = (Packet *) op_pro_argmem_access ()) == OPC_NIL
/*Asigna clasificacion por defecto*/
classify_func_ptr = ip_qos_classifier;
/* Procesa el paquete que llega a la interfaz */
Oms_Qm_Packet_Process (pkptr, qm_info, classify_func_ptr, &q_pool_ptr,
&queue_id);
/* En este punto ya se sabe lo que hacer con el paquete. Se han aplicado
los algoritmos pertinentes y el paquete se procesa conforme a ello. */
qm_signal = qm_info->signal;
/* Registrar estadsticas */
output_iface_stats_register(q_pool_ptr, queue_id);
if (qm_signal == OmsC_Qm_Dropped_Packet)
{
/* Cuando hay congestion el paquete se descarta. Se actualizan */
/* las estadsticas y se imprime un warning. */
qos_ici_ptr = op_pk_ici_get (pkptr);
/* Destruir el paquete */
ip_qos_classifier [ip_qos_support.ex.c]
Esta funcin obtiene el criterio para conceder prioridad al paquete que llega, accediendo a la
informacin de dicho paquete y basndose en el ToS. De esta manera se permite al procesador
51
En nuestros experimentos siempre tomaremos los valores por defecto, recordad que elegimos el
perfil FIFO y por tanto todos los paquetes sern tratados de manera similar sin distincin alguna.
52
Oms_Qm_Packet_Process [oms_qm.ex.c]
Esta funcin determinar el clasificador y enviar el paquete a su procedimiento correspondiente de
encolado.
OMSC_EXPORT void Oms_Qm_Packet_Process (Packet *pkptr, OmsT_Qm_Info*
qm_info,
OmsT_Qm_Classifier_Func_Ptr classify_func_ptr,
OmsT_Qm_Queue_Pool** sel_pool_pptr, int *enqueue_id_ptr) {
OmsT_Qm_Queue_Pool*qpool_ptr = OPC_NIL;
OmsT_Qm_Pkt_Info pkt_info;
int enq_id = OMSC_UNASSIGNED;
/* Primero mira la disciplina de cola usada */
switch (qm_info->queue_processing_scheme)
{
case OmsC_Qm_FIFO_Queuing:
{
qpool_ptr = qm_info->child_queue_pool_ptr;
/* Encontrar la cola a la que este paquete pertenece */
pkt_info = classify_func_ptr (pkptr, &qpool_ptr, &enq_id);
*enqueue_id_ptr = enq_id;
/* Basndose en el status del procesador, guardar o enviar el paquete */
Oms_Qm_Incoming_Packet_Handler (pkptr, qm_info, qpool_ptr, enq_id,
pkt_info);
if(OMS_QSCHEME_VARS_UPDATE_ENQ_FUNC
(qm_info->queue_processing_scheme) != OPC_NIL)
(OMS_QSCHEME_VARS_UPDATE_ENQ_FUNC (qm_info->queue_processing_scheme))
(pkptr, qm_info, qpool_ptr, enq_id);
break;
}
case OmsC_Qm_No_Queuing:
{
qm_info->signal = OmsC_Qm_Send_Packet;
break;
}
default:break;
}
FOUT;
}
Oms_Qm_Incoming_Packet_Handler [oms_qm.ex.c]
Esta funcin gestionar los paquetes recibidos. Comprobar la existencia de espacio en la cola para
almacenar el paquete. Tambin actualiza estadsticas y variables de tiempo para futuros cmputos
como por ejemplo retrasos en la red.
static void Oms_Qm_Incoming_Packet_Handler (Packet* pkptr, OmsT_Qm_Info*
qm_info, OmsT_Qm_Queue_Pool* qpool_ptr, int enqueue_q_id, OmsT_Qm_Pkt_Info
pkt_info)
53
{
double current_time;
Ici*oms_qm_ici_ptr = OPC_NIL;
double insertion_time;
char qm_trace [64], mu_sim_trace [64];
OmsT_Qm_Queue_Info *q_info_ptr = OPC_NIL;
if(insert_ok == OPC_FALSE){
/* El buffer se desborda. Descartar el paquete*/
qm_info->signal = OmsC_Qm_Dropped_Packet;
/* Destruir el paquete. */
}else{
/* Almacenar el paquete */
qm_info->signal = OmsC_Qm_Queued_Packet;
}
FOUT;
}
Oms_Qm_Packet_Enqueue [oms_qm.ex.c]
Comprueba que no haya congestin para almacenar el paquete en la cola correcta. Se aplica el
algoritmo correspondiente para determinar la existencia o no de congestin (Drop Tail, RED). Se
devolver OPC_TRUE si el paquete se puede encolar u OPC_FALSE en caso contrario.
OMSC_EXPORT Boolean Oms_Qm_Packet_Enqueue (Packet* pkptr, OmsT_Qm_Info*
qm_info, OmsT_Qm_Queue_Info* q_info_ptr, OmsT_Qm_Pkt_Info pkt_info, double
insert_time, int PRG_ARG_UNUSED (enqueue_q_id)){
if ((OMS_ENQ_TEST_FUNC (qm_info->arch_type))
(qm_info, q_info_ptr, pkptr, pkt_info)==OmsC_Buffer_Insert_After){
if (oms_buffer_enqueue (q_info_ptr->buffer_handle, pkptr,
OPC_NIL, insert_time) != OmsC_Buffer_Enqueue_Success) {
FRET (OPC_FALSE);
}
}else{
FRET (OPC_FALSE);
}
FRET (OPC_TRUE);
}
ip_qos_packet_enqueue_test [ip_qos_support.ex.c]
Como se ha visto en pginas anteriores, la macro OMS_ENQ_TEST_FUNC se haba definido en
oms_qm.h y se haba asignado a esta funcin a travs de ip_qos_sup_functions_register de manera
que al aparecer esa macro en el texto, se invoca ip_qos_packet_enqueue_test.
54
Esta funcin se encargar de ver si hay espacio en la cola para el paquete. En primera
instancia, si la cola est llena, el paquete ser descartado incondicionalmente, en caso de que no
est llena, si se est aplicando algn algoritmo de control de la congestin, por ejemplo RED, es
posible que este mecanismo dicte que el paquete tenga que ser descartado o encolado (o
simplemente marcado).
OMSC_EXPORT OmsT_Buffer_Insert ip_qos_packet_enqueue_test (OmsT_Qm_Info*
qm_info, OmsT_Qm_Queue_Info* q_info_ptr, Packet* pkptr, OmsT_Qm_Pkt_Info
qm_pkt_info){
int max_number_of_pkts, max_subqueue_size;
int current_total_number_of_pkts, current_number_of_pkts;
double current_total_number_of_bytes, packet_size;
int queue_id;
IpT_Pkt_Infoip_pkt_info;
Boolean pkt_drop = OPC_FALSE, red_drop_status = OPC_FALSE
IpT_Dgram_Fields* ip_dgram_fields_ptr = OPC_NIL;
OmsT_Qm_RED_Vars* red_vars_ptr = OPC_NIL;
OmsT_Qm_Attributes* ip_attribs_ptr = OPC_NIL;
OmsT_Buffer_Pool_Handle buffer_pool;
OmsT_Qm_IP_Queue_Configuration* queue_config_ptr = OPC_NIL;
ip_pkt_info = qm_pkt_info.ip_pkt_info;
queue_id = ip_pkt_info.queue_id;
ip_attribs_ptr = q_info_ptr->parent_queue_pool_ptr->attributes_ptr;
buffer_pool = qm_info->buffer_pool_handle;
queue_config_ptr = (OmsT_Qm_IP_Queue_Configuration *)
ip_attribs_ptr->queue_configuration [queue_id];
/* Obtener el valor del mximo nmero de paquetes en la cola.*/
max_number_of_pkts = ip_attribs_ptr->max_total_no_buf_pkts;
/* Obtener nmero actual de paquetes almacenados en todo el conjunto de
colas*/
current_total_number_of_pkts = oms_buffer_pool_num_packets_get
(buffer_pool);
/* Obtener el nmero de paquetes almacenados en esta cola */
current_number_of_pkts =
oms_buffer_num_packets_get (q_info_ptr->buffer_handle);
/* Mximo nmero de paquetes permitido en perodos de congestin..*/
max_subqueue_size = queue_config_ptr->max_size;
/* Computar el tamao medio de cola para RED, etc. */
if(queue_config_ptr->red_status != OMSC_NO_RED){
Oms_Qm_Average_Queue_Size_Update(q_info_ptr,
queue_config_ptr->red_queue_params_ptr->exponential_weight_factor);
}
/* Obtener el tamao del paquete en bytes.*/
packet_size = (double) op_pk_total_size_get (pkptr) / 8;
current_total_number_of_bytes = oms_buffer_pool_num_bytes_get
(buffer_pool);
/* Hay 5 condiciones para decidir si se puede encolar el paquete. */
/* 1. Si no hay espacio en el buffer, descartar paquete.*/
/* 2. Si hay espacio, aceptar paquetes directamente. */
/* 3. Si va dirigida a una LLQ, comprobar si hay congestin. En caso que
si, forzar el lmite LLQ.*/
55
else{
/* ----CHECK #5----- */
/* Comparar el nmero de paquetes en el buffer con el nmero permitido.
Si es mayor que lo permitido, aplicar el algoritmo elegido. Este es el
check utilizado en caso de configurar AQM */
if ((current_total_number_of_pkts >= max_number_of_pkts) &&
((int) current_number_of_pkts >= max_subqueue_size)){
pkt_drop = OPC_TRUE;
}else if(!is_micro_sim_pkt && queue_config_ptr->red_status!=OMSC_NO_RED){
red_vars_ptr = (OmsT_Qm_RED_Vars*) q_info_ptr->drop_policy_vars_ptr;
/* Comprobar si RED necesita descartar este paquete. */
red_drop_status=oms_qm_red_packet_drop(red_vars_ptr->average_queue_size,
queue_config_ptr->red_status,
queue_config_ptr->red_queue_params_ptr,
ip_pkt_info.tos);
/* Si est acitvado CE marking, en vez de descartar, marcar el paquete*/
if ((red_drop_status == OPC_TRUE) &&
(queue_config_ptr->red_queue_params_ptr->ce_marking == OPC_TRUE)){
pkt_drop = OPC_FALSE; /* No descartar */
op_pk_nfd_access(pkptr,"fields",&ip_dgram_fields_ptr);
if (ip_dgram_fields_ptr->ECT == OPC_TRUE){
/* Marcar el paquete indicando congestin y almacenarlo.*/
ip_dgram_fields_ptr->CE = 1;
}
}else if (red_drop_status == OPC_TRUE){
/* Descartar el datagrama */
pkt_drop = OPC_TRUE;
strcpy (disp_string1, "Packet dropped on RED's drop policy");
}
}
if (pkt_drop){
/* The packet can be dropped due to insufficient buffer or RED policy */
FRET (OmsC_Buffer_Insert_Ignore_Element);
}
}
/* El paquete es aceptado y almacenado al final de la cola */
FRET (OmsC_Buffer_Insert_After);
}
56
Existen varias funciones interesantes especficas de RED que no explicaremos debido a su estudio
previo en otros trabajos [Alv10] [Nic10].
Tras devolver el control a la funcin enqueue_packet se ejecuta:
output_iface_stats_register [function block]
Registra estadsticas de la interfaz IP para que el usuario pueda realizar un estudio. A continuacin
se muestra la parte de la funcin relativa a AQM:
static void output_iface_stats_register(OmsT_Qm_Queue_Pool* qpool_ptr, int
q_index){
char queuing_scheme [256], new_name [256], intf_name [128];
char stat_annotation_str [256], queue_category_str [80]="\0";
int q_label, red_status;
Boolean llq_flag = OPC_FALSE;
Objid my_id;
OmsT_Qm_Queue_Info*qinfo_ptr = OPC_NIL;
OmsT_Dim_Stat_Handle dim_stathandle;
qinfo_ptr = qpool_ptr->queue_info_parray [q_index];
/* Obtener la ID del proceso.*/
/* Obtener el nombre del esquema de cola. */
/* Inicializar estadsticas para Buffer Usage (packets y bytes), queuing
delay, jitter, trfico descartado, enviado y recibido. */
/* Registrar estadsticas para RED si est habilitado. */
(OMS_ATTRIBUTE_GET_FUNC (OmsC_Qm_IP))
(qpool_ptr, OmsC_Qm_RED_Status, q_index, &red_status);
if (red_status == OMSC_RED){
sprintf (new_name, "RED Average Queue Size %s Q%d%s",
intf_name, q_label, queue_category_str);
dim_stathandle = Oms_Dim_Stat_Reg (my_id, "IP Interface", "RED
Average Queue Size", stat_annotation_str, OPC_STAT_LOCAL);
Oms_Dim_Stat_Rename (dim_stathandle, new_name);
oms_qm_statistic_set(qinfo_ptr,OmsC_Qm_RED_Avg_Queue_Size,
dim_stathandle);
}
FOUT;
}
57
Captulo V
El Control PID clsico
En este captulo se expondrn lo que son los reguladores PID. Tras una breve introduccin se
indicar resumidamente cmo se realiza su discretizacin, para despus ver los mtodos de
sintonizacin para conseguir un comportamiento adecuado. Por ltimo, veremos el proceso que se
ha llevado a cabo para realizar su implementacin dentro de la herramienta OPNET.
5. 1 Introduccin
Los controladores del tipo PID son con mucha diferencia los ms frecuentemente utilizados en la
industria de control de procesos, donde ms del 95% de los lazos de control utilizan controladores
PID. Su sencillez, versatilidad y capacidad para resolver los problemas bsicos que se presentan en
los procesos con dinmica favorable y requisitos de funcionamiento modestos hacen de ellos una
herramienta imprescindible en el control de procesos.
A lo largo de las ltimas dcadas los controladores PID han sobrevivido a diferentes cambios
tecnolgicos que van desde los primeros controladores desarrollados a partir de elementos
neumticos hasta los desarrollados con microprocesadores pasando por las vlvulas electrnicas,
los dispositivos analgicos, los transistores y los circuitos integrados. La incorporacin de los
microprocesadores ha tenido un impacto muy grande ya que ha permitido que los controladores
PID se enriquezcan en funciones colaterales sin perder ninguna de sus propiedades, as se les han
aadido posibilidades de ajuste automtico de los parmetros, posibilidades de ejecucin de reglas
lgicas o automatismos secuenciales.
Por todo ello, y aunque existen tcnicas de control ms sofisticadas, en el nivel ms bajo de
control de muchos procesos sigue estando presente o incluso es el mayoritario. [MBQ04]
1
u (t ) K e(t )
Ti
edt T
de
dt
Existen varias posibilidades para discretizar el PID continuo. Una forma muy sencilla es la
aproximacin rectangular, aunque su simplicidad viene ligada a una prdida mayor de informacin
de la expresin continua. La aproximacin bilineal o de Tustin nos proporciona un controlador
discreto ms realista.
59
1 t
e(t ) e(t 1)
u (t ) K e(t ) e(i )T Td
Ti i 1
T
t 1
1
e(t 1) e(t 2)
u (t 1) K e(t 1) e(i )T Td
Ti i 1
T
T
e(t ) 2e(t 1) e(t 2)
u (t ) u (t 1) K e(t ) e(t 1) e(t ) Td
Ti
T
g 0 e(t ) g 1e(t 1) g 2 (t 2)
Siendo:
T T
g0 K 1 d
Ti T
g1 K 1 2 d
T
g2 K
Td
T
1
.
s
Y ( s)
1
X ( s)
s
[1]
Y ( KT )
x(t )dt
0
y (( K 1)T )
T 1
x(t )dt
0
y ( KT ) y (( K 1)T )
x(t )dt
T 1
El clculo de la superficie bajo la curva se puede aproximar a travs del rea del rectngulo y del
tringulo que se aprecian en la Figura 5. 1.
60
T
x( KT ) x(( K 1)T )
2
Con transformada z:
Y ( z )(1 z 1 )
T
X ( z )(1 z 1 )
2
T 1 z 1
Y ( z)
X ( z)
2 1 z 1
[2]
1 T 1 z 1
s 2 1 z 1
61
ess lim sE ( s ) , un
s 0
1
tendr un error estacionario no nulo ante una entrada escaln. En algunos sistemas
s
1
un trmino
en el regulador consigue eliminar este error permanente.
s
integrador
El trmino integral presenta valores no nulos cuando el error pasa por cero.
3. Trmino derivativo: No afecta al error estacionario. Responde a la velocidad de variacin del
error actuante y puede producir una correccin significativa, antes de que el valor del error actuante
sea demasiado alto.
Se anticipa al error iniciando una accin correctora temprana y tiende a aumentar la
estabilidad. A parte, aade amortiguamiento y permite el uso de trminos proporcionales de mayor
magnitud. Predice sobreimpulsos grandes, produciendo una compensacin anticipatoria.
Esta parte derivativa est recomendada para sistemas con una carga inercial alta.
62
63
64
dPV
, L se corresponde con el tiempo
dOP
muerto, el retardo antes de que la salida se empieza a enterar del cambio en la entrada y T es una
constante de tiempo dada por la tangente en el punto de inflexin de la curva de salida. El clculo
de los diferentes parmetros del regulador viene descrito en la siguiente tabla:
T
PG L
Tipo de regulador
P
PI
PID
Kp
0.9 K
1.2 K
Ti
3.3 L
2 L
Td
0 .5 L
65
Tipo de regulador
Kp
Ku
2
PI
0.45 K u
PID
0.6 K u
Ti
Td
Tu
1.2
Tu
2
Tu
8
T
Ti
T
L
entre 0.3 y 1;
T
Tu
Este apartado, a priori, iba a ser obviado. Este proyecto est ms relacionado con la investigacin y
estudio de resultados que con el desarrollo propiamente dicho. An as, la adicin de una nueva
funcionalidad dentro de la herramienta OPNET, exige cierto proceso de ingeniera del software,
por ello, y a modo aclaratorio, se le explicar al lector el anlisis y el diseo llevado a cabo para
desarrollar nuestros algoritmos.
Se listarn a continuacin los requisitos funcionales obtenidos por parte, en este caso, de la
tutora para el desarrollo de la funcionalidad.
REQNUM 1
Descripcin
Justificacin
Configuracin
El usuario podr configurar los atributos relacionados con el control PID
El usuario debe tener libertad para definir las caractersticas principales del
regulador.
REQNUM 1.1
Descripcin
Trayectoria de referencia
Se deber poder introducir una referencia variable a lo largo del tiempo de la
simulacin.
Los casos de estudio ms interesantes estn relacionados con simulaciones en
los que el valor de referencia va variando a lo largo del tiempo
Justificacin
REQNUM 1.2
Descripcin
Justificacin
REQNUM 1.3
Descripcin
Justificacin
Periodo de muestreo
Se podr introducir el periodo que marcar el re-clculo de la seal de control.
Experimentos con diferentes periodos de muestreo.
REQNUM 1.4
Descripcin
Justificacin
Activacin/Desactivacin
El algoritmo slo se usar si el usuario lo habilita. En el caso de permanecer
habilitado al mismo tiempo que PID, prevalecer el MPC sobre ste.
Comparar el uso de este sistema de control de congestin con los otros.
REQNUM 2
Descripcin
Justificacin
Visualizacin de estadsticas
Se deben poder visualizar varias nuevas estadsticas al finalizar la simulacin.
Necesario para nuestro estudio.
REQNUM 2.1
Descripcin
Justificacin
REQNUM 2.2
Descripcin
Justificacin
REQNUM 3
Descripcin
Justificacin
Herramienta OPNET
El controlador deber ser implementado en esta herramienta
OPNET es una aplicacin para el estudio y simulacin de redes muy potente.
Es perfecta para implementar esta clase de algoritmos y realizar comparativas.
68
69
70
71
72
pid_queue_params_ptr;
A mayores, crearemos una funcin dentro de ip_qos_support.ex.c que nos permita reservar
memoria para esta estructura. Debemos tener en cuenta que el nmero de filas en la referencia es
indeterminado hasta el momento de la simulacin, por ello es necesario pasar a la funcin este
parmetro para saber cunto espacio debemos de reservar exactamente.
OMSC_EXPORT OmsT_Qm_PID_Queue_Params*
ip_qos_pid_queue_params_mem_alloc (int nr)
{
static Pmohandle
pid_params_pmh = OPC_PMO_INVALID;
static Pmohandle
referencia = OPC_PMO_INVALID;
OmsT_Qm_PID_Queue_Params* pid_params_ptr = OPC_NIL;
int num_rows = 0;
/** Function to allocate memory for PID parameters
/** that were configured by the user.
FIN (ip_qos_pid_queue_params_mem_alloc (void));
*/
*/
if (pid_params_pmh == OPC_PMO_INVALID){
pid_params_pmh = op_prg_pmo_define ("IP QoS Queue PID Parameters",
sizeof (OmsT_Qm_PID_Queue_Params), 70);
73
=(OmsT_Qm_PID_Queue_Params*)
op_prg_pmo_alloc
pid_params_ptr->referencia=(OmsT_Qm_Ref_Definition*)
op_prg_pmo_alloc (referencia);
FRET (pid_params_ptr);
}
pid_queue_params_ptr = ip_qos_pid_queue_params_mem_alloc(nr);
op_ima_obj_attr_get(pid_parameters_child_objid,"PID Status",
&(pid_queue_params_ptr->pid_status));
Hecho esto, nos centraremos en el modelo de procesos ip_output_iface, es aqu donde se realiza el
control de la congestin y dnde van a tener uso nuestros algoritmos. Ir definiendo las
modificaciones realizadas en cada uno de los bloques, as como dentro del propio diagrama de
estados.
Dentro del grupo State Vars, aadiremos los siguientes atributos.
Tipo
double
Nombre
probabilidad
double
double
double
double
boolean
probabilidad_ant
tref
tant
t2ant
descartar
Descripcin
Probabilidad de descarte presente en cada momento dentro de la
cola.
Probabilidad de descarte en el periodo de muestreo anterior
Trayectoria de referencia a seguir en el momento actual.
Tamao de la cola en el periodo de muestreo anterior
Tamao de la cola hace 2 periodos de muestreo
Para saber, si en el periodo actual, se debe de aceptar o rechazar
el paquete
74
Lo que se realiza dentro de la funcin es sencillo. Se obtiene el tamao actual de la cola y en base a
ese dato y valores antiguos de error se obtiene una probabilidad de descarte (acotada por los valores
0 y 1). En funcin de esa probabilidad, de manera aleatoria, se decide si se descarta o encola el
paquete (se asigna el valor sobre la variable de estado descartar). Se puede observar que la ley de
control discreta se ha implementado utilizando la aproximacin rectangular.
Para terminar se programa la siguiente interrupcin.
op_intrpt_schedule_self (op_sim_time()+periodo,0);
75
El valor de descartar nos ser til dentro de la funcin enqueue_packet(). Cuando usamos control
PID, el valor de qm_infosignal ser el almacenado en la variable descartar. La variable qm_info
contiene informacin relevante de la interfaz actual.
qm_info->signal = descartar;
En dicha funcin y en base a ese valor se decide qu hacer con el paquete en caso de que no pueda
ser procesado.
Con estas indicaciones queda claramente explicados los pasos que se han llevado a cabo para
realizar la implementacin del controlador PID.
76
Captulo VI
El Control Predictivo basado en
modelo
El control predictivo basado en modelo (Model Predictive Control, MPC) se ha desarrollado
considerablemente en las ltimas dcadas tanto en la industria como en la comunidad de
investigacin. Este xito se debe a que el Control Predictivo basado en Modelo es quizs la forma
ms general de formular el problema de control en el dominio del tiempo. El control predictivo
integra control ptimo, control de procesos con tiempos muertos, procesos multivariables y utiliza
las referencias futuras cuando estn disponibles. Al utilizar una estrategia con horizonte de
control finito permite la consideracin de restricciones y procesos no lineales. Este artculo
describe el control predictivo y sus posibilidades y pretende actuar como motivacin para su
utilizacin. [CB04]
6. 1 Introduccin
El Control Predictivo surgi a finales de los 70, y desde entonces se ha investigado y desarrollado
sobre l. Cuando hablamos de Control Predictivo no nos referimos a una estrategia de control
particular, sino a un conjunto de mtodos de control que utilizan de forma explcita un modelo del
proceso a controlar para obtener la seal de control ptima (a travs de una funcin objetivo).
Esta clase de controladores suelen tener la misma estructura y elementos, los cules numeramos a
continuacin:
Uso directo de un modelo que nos permita predecir el funcionamiento del sistema en el
futuro.
Minimizacin de una funcin objetivo para obtener la seal de control ptima para anular
el error.
Se utilizar un horizonte de control finito y deslizante sobre el cul se realizar el clculo
de la seal de control en cada uno de los muestreos del mismo (como veremos ms
adelante, slo se utilizar la primera seal de la secuencia y se repetir el proceso en el
periodo siguiente).
Los diferentes algoritmos de control predictivo se diferencian en el tipo de modelo usado
para representar al proceso y las perturbaciones, as como la eleccin de la funcin
objetivo considerada. Existen aplicaciones del control predictivo sobre procesos de muy
distinta ndoles, desde control de robots, anestesia clnica, industria del cemento,
desecadoras, brazos robticos, columnas de destilacin, plantas de PVC, generadores de
vapor...
Las ventajas que nos proporciona el control predictivo sobre otros mtodos son varias:
77
Se trata de una tcnica particularmente atractiva para los operadores, requieren unos
conocimientos bsicos sobre control predictivo y la sintonizacin del controlador es
bastante sencilla.
Se puede utilizar para controlar procesos de distinta naturaleza, con dinmicas diferentes,
susceptibles de perturbaciones y con varias entradas y salidas.
Su carcter predictivo lo hace compensar de forma intrnseca los tiempos muertos.
Introduce un control anticipativo, de forma natural se compensan las perturbaciones
medibles.
La ley de control resultante se puede implementar de forma sencilla (como veremos
posteriormente).
Realmente til cundo se conocen las referencias futuras.
Permite tratar restricciones de forma conceptualmente muy simple durante la fase de
diseo.
No todo son ventajas en el control predictivo, podemos enumerar tambin varios inconvenientes:
78
2.
3.
79
80
A( z 1 ) y (t ) B ( z 1 ) z d u (t 1) C ( z 1 )
e (t )
1 z 1
Donde
81
A( z 1 ) 1 a1 z 1 a 2 z 2 ... a na z na
B ( z 1 ) bo b1 z 1 b2 z 2 ... a nb z nb
C ( z 1 ) 1 c1 z 1 c 2 z 2 ... a nc z nc
y(t) es la salida del sistema (en nuestro caso el tamao de la cola), u(t) la seal de control
(probabilidad de descarte), e(t) es el ruido y d es el tiempo muerto del sistema, si este existiera.
Ntese que el modelo CARIMA ya incluye un trmino de ruido para las perturbaciones no
medibles en su definicin. Si el polinomio C fuera igual a 1, entonces e(t) ser un ruido blanco y
su media aritmtica ser nula. Si no es ste el caso general, el polinomio C definir el color del
ruido.
La funcin de coste a minimizar es una funcin genrica que incluye el error de seguimiento
de trayectoria en la ponderacin del trmino de control:
J ( N1 , N 2 , N u )
N2
Nu
(y (t k | t ) w(t k | t )) 2 (u(t k 1 | t )) 2
k N1
k 1
y (t )
B ( z 1 ) d
C ( z 1 )
z
u
(
t
1
)
e(t )
A( z 1 )
A( z 1 )(1 z 1 )
Para optimizar la funcin de coste J, es necesario calcular la prediccin de salida y(t+k) del modelo
durante el horizonte de prediccin para k N1 y k N2. Para lograr tal objetivo se utiliza un
artificio matemtico para transformar la anterior expresin, reescribiendo el polinomio del ruido
C(z-1) de forma que cumpla la siguiente ecuacin diofntica.
C ( z 1 ) E k ( z 1 )(1 z 1 ) A( z 1 ) z k Fk ( z 1 )
Donde, si el grado del polinomio A(z-1) es na, entonces Ek(z-1) es un polinomio de grado k-1 y
Fk(z-1) es de grado na. El clculo de estos polinomios se detalla en [Zub10].
Se considerar que e(t) es un ruido blanco, de modo que a partir de ahora tomaremos el
polinomio C como igual a 1. Si multiplicamos la anterior expresin por (1- z-1)Ek(z-1) z-k
82
E k ( z 1 ) A( z 1 ) y (t k ) E k ( z 1 ) Bk ( z 1 ) u (t d k 1) E k ( z 1 ) e(t k )
Jugando con las dos expresiones anteriores y reescribiendo obtenemos:
y (t k ) Fk ( z 1 ) y (t ) E k ( z 1 ) B ( z 1 ) u (t d k 1) E k ( z 1 ) e(t k )
Para obtener la prediccin de y(t+k), debemos estimar el valor del error e(t+k). En el caso que
estamos considerando, y dado que Ek(z-1) es un polinomio de grado k-1, todos los valores de error
pertenecern a instantes futuros, de manera que la mejor estimacin de estos es 0, es lgico que
queramos un error nulo de manera que la salida se ajuste al valor de consigna. Esto es debido a que
se trata de un error blanco. Por tanto la prediccin para un instante t+k calculada a partir del tiempo
t vendra dada por:
y (t k | t ) Gk ( z 1 ) u (t d k 1) Fk ( z 1 ) y (t )
Donde Gk(z-1) = Ek(z-1) B(z-1)
Utilizando este modelo podemos plantear una prediccin de las salidas para un horizonte de
muestreo N. En este caso, se considerar N u = N. Es importante darse cuenta de que el sistema
general tiene un retardo de d unidades de muestreo, como ya se ha dicho anteriormente, con lo que
la salida del sistema y(t) ser influenciada por la entrada u(t) tras d periodos de muestreo. Dicho
esto, planteamos la siguiente ecuacin para predecir la salida a lo largo del horizonte N:
y (t d k | t ) Fd k ( z 1 ) y (t ) Gd k ( z 1 ) u (t d k 1)
Donde, por definicin tenemos que:
G d k ( z 1 ) g k , 0 g k ,1 z 1 g k , 2 z 2 ... g k , k 1 nb z ( k 1 nb )
Es decir, de manera coloquial, como este polinomio acta sobre la entrada, no tenemos que
considerar los retardos.
Para resolver el problema del GPC, se hace necesario obtener la secuencia de seales de
control u(t), u(t+1), , u(t+N) que optimice la expresin J. Como el proceso tiene un tiempo
muerto de d periodos de muestreo, la salida slo se ver influenciada por la seal de control u(t)
tras d+1 periodos. Los horizontes se pueden definir por tanto como N 1=d+1, N2=d+N y Nu=N.
Vase que no tienen ningn sentido hacer N1<d+1, ya que los trminos que se aadiran a la
prediccin slo dependeran del pasado, y es absurdo encontrar un valor ptimo de algo que ya se
conoce y que ya ha sucedido. Por otra parte, si N 1>d+1 los primeros puntos de la prediccin, que
son los que mejor se estiman, no se consideraran, dando lugar a un control ineficiente.
Consideremos ahora el siguiente conjunto de predicciones de j pasos:
y (t d 1) G d 1 ( z 1 ) u (t ) Fd 1 ( z 1 ) y (t )
y (t d 2) G d 2 ( z 1 ) u (t 1) Fd 2 ( z 1 ) y (t )
y (t d N ) G d N ( z 1 ) u (t N 1) Fd N ( z 1 ) y (t )
Que podramos reescribir de forma matricial de la siguiente manera:
y Gu F ( z 1 ) y (t ) G ' ( z 1 ) u (t 1)
Con
83
g0
g
0
G
g N 1
0
g0
g N 2
0
0
G ' ( z 1 )
g0
(G d 1 ( z 1 ) g 0 ) z
(G d 2 ( z ) g 0 g1 z ) z
1
( N 1)
) z N
(G d N ( z ) g N 1 z
Fd 1 ( z 1 )
Fd 2 ( z 1 )
1
F (z )
1
Fd N ( z )
Los dos ltimos trminos de la ecuacin anterior slo dependen del pasado y por tanto podran ser
agrupados en un mismo vector f (respuesta libre del sistema) dando lugar a:
y Gu f
Que se trata de la misma ecuacin que queramos buscar desde el principio. En caso de que las
condiciones iniciales sean nulas la respuesta libre tambin lo ser. Si aplicramos un escaln
unitario a la entrada en el instante t, es decir u(t) = 1, u(t+1) = 0, , u(t+N-1) = 0, la
secuencia de salida t [ y (t 1), y (t 2),..., y (t N )]T es igual a la primera columna de la
matriz G.
J (Gu f w) T (Gu f w) u T u
El vector w se corresponde con los valores que ir tomando la seal de referencia a lo largo del
tiempo.
u (G T G I ) 1 G T ( w f )
Como se coment anteriormente, en la estrategia de horizonte deslizante slo aplicamos la primera
de todas las seales de control calculadas (se vuelven a recalcular en cada periodo de muestreo).
Por tanto, podemos escribir:
u (t ) K ( w f )
Donde K es la primera fila de la matriz (G T G I ) 1 G T . Este hecho tiene un significado muy
claro, el cul se puede derivar fcilmente de la Figura 6. 4: si no existen errores futuros (predichos),
84
W (t )
1
W (t ) W (t R (t R (t )))
p (t R (t ))
R (t )
2
R (t R(t ))
N (t )
q0
W (t ),
R (t )
N (t )
0,C
W (t ) , q 0
R (t )
q (t )
max
Dnde:
W Tamao medio, en paquetes, de la ventana TCP.
q Tamao medio de la cola en paquetes.
R Round trip time =
q
T p (segundos).
C
R02 C
N
1
W (t ) 2 (W (t ) W (t R0 )) 2 (q(t ) q (t R0 ))
p (t R0 )
R0 C
R0 C
2N 2
q (t )
N
1
W (t )
q (t )
R0
R0
Donde dW(t) = W-W0, dq = q-q0 y dp = p-p0. El punto de operacin vendr dado por:
R0
q0
RC
2
T P , W0 0 , p 0 2
C
N
W0
La ecuacin anterior se puede separar en dos partes. El comportamiento de baja frecuencia del de
alta frecuencia (dinmica de la ventana).
C 2 /( 2 N )
P(s)
( s (2 N ) /( R02 C ))( s 1 / R0 )
2N 2
(s)
(1 e R0 S )
3
R0 C
6.4.2 Utilizacin del modelo en el MPC
Como ya se ha visto en este mismo captulo, el Control Predictivo basado en Modelo es una
estrategia de control basada en el uso explcito de un modelo de la planta para predecir la salida de
un proceso sobre un rango de tiempos. Para ello se utiliza una estrategia de horizonte deslizante. En
base a las salidas predichas se obtendrn las seales de control ptimas para lograr nuestro
objetivo. Slo la primera seal de entrada ser aplicada (en el periodo siguiente se volvern a
recalcular). El ptimo se obtiene minimizando una determinada funcin de coste.
El Control Predictivo Generalizado es un controlador predictivo clsico. Aunque hay
formulaciones para el caso multivariable (sistemas MIMO), el caso que nos acontece tiene una
86
nica entrada y una nica salida (sistema SISO). En el modelo AQM descrito anteriormente
tenemos la entrada p y la salida q aadiendo perturbaciones no medibles. De este modo, la funcin
que usaremos para realizar la prediccin de las salidas futuras vendr dado nicamente por el
modelo en baja frecuencia.
PGPC ( s)
C 2 /( 2 N )
( s (2 N ) /( R02 C ))( s 1 / R0 )
2
Eligiendo el periodo de muestreo como Ts 0.2 12 22 donde 1 R0 C /( 2 N ) y 2 R0 .
Obteniendo la expresin discreta de la funcin de transferencia tenemos:
PGPC ( z 1 ) z d
b1 z 1 b2 z 2
1 a1 z 1 a 2 z 2
Configuracin
El usuario podr configurar los atributos relacionados con el control predictivo
El usuario debe tener libertad para definir las caractersticas principales del
sistema.
REQNUM 1.1
Descripcin
Trayectoria de referencia
Se deber poder introducir una referencia variable a lo largo del tiempo de la
simulacin.
Los casos de estudio ms interesantes estn relacionados con simulaciones en
los que el valor de referencia va variando a lo largo del tiempo
Justificacin
REQNUM 1.2
Descripcin
Justificacin
Modelo
Se deber de poder especificar un modelo de la red, de manera que el usuario,
previo modelado, pueda indicar uno que se aproxime a las caractersticas de la
topologa. Este modelo ser de tipo CARIMA y estar definido por dos
polinomios A(z-1) y B(z-1) as como de un valor d de retardo.
Hacer el control predictivo adaptable a cualquier topologa posible.
87
REQNUM 1.3
Descripcin
Justificacin
Horizonte de control
El usuario introducir un horizonte de control a su antojo. El horizonte de
prediccin ser fijado de manera automtica en base al valor del retardo d.
Realizar estudios con distintos horizontes y encontrar los valores que mejor
resultados ofrece.
REQNUM 1.4
Descripcin
Justificacin
Periodo de muestreo
Se podr introducir el periodo que marcar el re-clculo de la seal de control.
Experimentos con diferentes periodos de muestreo.
REQNUM 1.5
Descripcin
Justificacin
Activacin/Desactivacin
El algoritmo slo se usar si el usuario lo habilita. En el caso de permanecer
habilitado al mismo tiempo que PID, prevalecer el MPC sobre ste.
Comparar el uso de este sistema de control de congestin con los otros.
REQNUM 2
Descripcin
Justificacin
Visualizacin de estadsticas
Se deben poder visualizar varias nuevas estadsticas al finalizar la simulacin.
Necesario para nuestro estudio.
REQNUM 2.1
Descripcin
Justificacin
REQNUM 2.2
Descripcin
Justificacin
Herramienta OPNET
El controlador deber ser implementado en esta herramienta
OPNET es una herramienta de estudio de redes muy importante. Es ideal para
implementar esta clase de algoritmos y realizar comparativas.
88
control de la congestin, para inicializar sus parmetros en base al modelo introducido por el
usuario (Figura 6. 5).
89
90
*/
*/
91
Cabe destacar que, al igual que pasa con la referencia, el nmero de valores de los arrays a y b es
indeterminado, y por tanto, hasta que no comience la simulacin no se sabr el espacio exacto
necesario a reservar (de ah que se pasen los valores na y nb como parmetro a la funcin). Esta
reserva de espacio se realizar dentro del modelo de procesos ip_qos_attribute_definer, del mismo
modo que la transcripcin de los valores configurables de usuario a las estructuras de descripcin
de la cola.
op_ima_obj_attr_get(mpc_parameters_child_objid, "a",&att_pointer);
num_rows = op_topo_child_count (att_pointer, OPC_OBJTYPE_GENERIC);
mpc_queue_params_ptr->na = num_rows-1;
for(i=0;i<num_rows;i++){
att_pointer2 = op_topo_child (att_pointer, OPC_OBJTYPE_GENERIC,i);
op_ima_obj_attr_get(att_pointer2, "a", &(mpc_queue_params_ptr->a[i])) ;
}
En el cdigo de ejemplo se observa como se obtiene el atributo a, se calcula cuntos valores (hijos)
tiene y se copian los valores dentro del vector definido en la estructura de la cola.
La mayor parte de la implementacin se localiza dentro del modelo de procesos
ip_output_iface. Las variables de estado definidas quedan resumidas en la siguiente tabla:
Tipo
double
double
double
double
double*
double**
double**
Nombre
tref
probabilidad
probabilidad_ant
probabilidad_2ant
Ks
Gp
F
Descripcin
Tamao de la cola en el periodo de muestreo anterior
Probabilidad de descarte presente en cada momento dentro de la cola.
Probabilidad de descarte en el periodo anterior
Probabilidad de descarte hace 2 periodos
Submatriz de K utilizada en el control predictivo
Matriz G dentro del control predictivo
Matriz F del control predictivo
double
f_act
92
double*
int
int
boolean
ht
na_
h_
descartar
double
tref
El diagrama de estados para tratar el MPC ha sido modificado. Se ha aadido un nuevo estado
forzado, control_predictivo, que se encargar de todas las tareas de inicializacin y carga de datos
de matrices necesarias para que el controlador predictivo pueda funcionar (Figura 6. 8).
93
En primer lugar, en base al horizonte h definido y al retardo del proceso, obtendremos los
lmites mnimo y mximo del horizonte de prediccin:
int h1 = d + 1;
int h2 = d + h;
Esta funcin se encargar de realizar los clculos necesarios para obtener las matrices descritas en
la seccin 6.3.1.1 y en base a las cuales podremos obtener nuestra ecuacin de prediccin.
Sabiendo el valor de la primera fila de la matriz F, podemos ir calculando el resto en base a
valores anteriores (se podra haber programado tambin de manera recursiva).
for(int j = 0; j <= na; j++){
F[0][j] = -producto[j+1];
}
for(int i = 1; i < h2; i++){
for(int j = 0; j <= na; j++){
F[i][j] = F[i-1][j+1]-F[i-1][0]*(a[j+1]-a[j]);
}
F[i][na] = F[i-1][0]*a[2];
}
producto es un array auxiliar que nos permitir obtener el valor de la primera fila de F.
De la matriz F, slo nos interesan los valores que caen dentro del horizonte de prediccin, por
tanto nos quedaremos con una submatriz que no contenga los valores del polinomio en instantes
que caen dentro del retardo d.
La matriz E tambin se obtiene a partir del valor de su primera fila (el valor del polinomio) y
haciendo uso de la matriz F recin calculada.
Como suponemos un ruido blanco de media 0, este primer valor ser igual a 1.
E[0][0] = 1.0; //ruido blanco de media 0
for(int i=1; i < h2; i++){
for(int j=0; j < i; j++){
E[i][j] = E[i-1][j];
}
E[i][j] = F[i-1][0];
for(int j = i+1; j < h2; j++){
E[i][j] = 0;
}
}
95
96
Captulo VII
Simulaciones y resultados
Este captulo se puede considerar como la culminacin de los estudios y trabajos descritos
anteriormente. Es ahora cuando toca comprobar la bondad de los resultados obtenidos utilizando
los nuevos algoritmos implementados en OPNET. Lo primero que haremos ser valorar los
resultados utilizando control PID y predictivo, estudiaremos la evolucin del sistema ante la
variacin de los diferentes parmetros que los definen. A continuacin, ambos mtodos sern
comparados entre ellos mismos y con los ya existentes en la herramienta.
En cada uno de los apartados, lo primero que se har ser mostrar los distintos valores de los
atributos a travs de los cuales se ha configurado el modelo, as como sus distintos perfiles de
ejecucin. Si bien es muy complicado (imposible) mostrar todos los parmetros relacionados con
la configuracin del modelo, s se vern los ms relevantes.
97
Valor
FTP
1 segundo
5500000 bytes
Se toma la frecuencia de las peticiones y el tamao de los archivos como constantes para, en
principio, facilitar el aprendizaje.
El nodo Perfiles quedara de la siguiente manera:
Atributo
Aplicacin que se ejecuta
Umbral de inicio de ejecucin
Duracin
Inicio de sesin
Cierre de sesin
Valor
Aplicacin FTP definida anteriormente
60 segundos
40000 segundos
Inmediato
Final de la simulacin
Referencia
Periodo de muestreo
Valor
600 paquetes
1-1,476 z-1+0.5416 z-2
-14,9-12,15 z-1
1
3
0
500p (5h) - 350p (5h) - 425p - (5h)
0,3 segundos
La referencia viene expresada por el nmero de paquetes que se desea que haya en la cola y el
tiempo durante el que se quiere que esto sea as. Por ejemplo, empezamos con una referencia a
500 paquetes durante 5 horas.
Teniendo todas estas configuraciones descritas, el siguiente paso es disponer los distintos
parmetros de lo que seran los objetos fsicos reales.
La estacin de trabajo Equipo1 quedara de la siguiente manera.
Atributo
Perfiles soportados
Valor
El perfil FTP descrito anteriormente
Valor
Actuar como servidor FTP
Ya slo nos quedara configurar los dos enrutadores antes de comenzar nuestra simulacin. Al
igual que en el resto de elementos, en la siguiente tabla vemos los atributos ms importantes que
se han considerado:
98
Atributo
Mximo ancho de banda reservado
Valor
3500 bits por segundo (absoluto)
Slo se han realizado modificaciones en la capacidad del enlace que une los dos routers, queremos
que esta lnea no sea demasiado rpida para que facilite la generacin de un cuello de botella en la
red y se forme la consecuente congestin.
Por ltimo, antes de iniciar la simulacin, tenemos que configurar las interfaces IP para que
hagan uso del Control Predictivo implementado. Para ello, seleccionamos el enlace entre los dos
routers y en el men Protocols IP QoS Configure QoS Aparecer una ventana
emergente similar a la de la Figura 7. 2.
99
100
101
102
d
1
3
6
9
En la Figura 7. 9 se puede ver que, a pesar de las variaciones en el retardo, los resultados
obtenidos son similares. La adaptacin a la referencia es en todos los casos bastante buena.
Destacamos el intervalo sin trfico, aqu, el valor 6 es el que mejor resultados proporciona. Es
muy probable que ese valor del retardo sea el que mejor se adapte a la topologa representada.
103
0
150
250
Como se puede apreciar en la figura, no es un parmetro demasiado determinante a la hora de
realizar el control. En los tres experimentos, con valores tan dispares del parmetro, se han
conseguido unos resultados muy satisfactorios. Una vez ms nos centraremos en el intervalo de
tiempo en el que no hay carga sobre la red, por lo que vemos, se deja decrecer ms la cola a
medida que el parmetro tiene un valor mayor.
104
Valor
600
1
0,2
1 segundo
500p (5h) - 350p (5h) - 425p - (5h)
En la Figura 7. 12 se pueden ojear los resultados obtenidos. Vemos que por lo general el resultado
es muy bueno, el sistema se adapta muy bien a los cambios en su referencia y de manera bastante
rpida. En el intervalo famoso, en el que no hay carga, no se reduce casi nada el tamao de la
cola.
105
106
107
108
Valor
0.3 segundos
100p (2,5h) - 50p (2,5h) - 250p - (2,5h)
500p (2,5h) - 150p (2,5h) - 325p - (2,5h)
109
Figura 7. 18 Trfico descartado en el experimento, tanto para MPC como para PID
110
Valor
FTP
Distribucin exponencial de media 50 seg.
300000 bytes
Valor
Aplicacin FTP definida anteriormente
60 segundos
4.000 segundos
1
0 segundos
Concurrente
1
0 segundos
Inmediato
Fin de la simulacin
Valor
600 paquetes
1-1,476 z-1+0.5416 z-2
-14,9-12,15 z-1
1
3
100 paquetes
0,2 segundos
Para el PID:
Atributo
Kp
Ki
Kd
Periodo de muestreo
Referencia
Valor
600
1
0,2
0,2 segundos
100 paquetes
Valor
9
50
150
111
10
Deshabilitado
Valor
1000 bits por segundo
112
Color
Figura 7. 20 Entrada obtenida para PID (grfico superior) y MPC (grfico inferior)
113
114
Valor
3 segundos
1 segundo
64 segundos
Valor
FTP
1 seg.
500000 bytes
Queremos originar un cuello de botella por excesivo trfico, de ah que tengamos la frecuencia de
las peticiones a un valor tan bajo.
115
116
Valor
Aplicacin FTP definida anteriormente
Sin umbral
Hasta que acabe la simulacin
Ilimitadas
1 segundo
Serie
1
0 segundos
Inmediato
Fin de la simulacin
Referencia
Periodo de muestreo
Valor
600 paquetes
1-1,476 z-1+0.5416 z-2
-14,9-12,15 z-1
3
3
100
100 p (100 seg) 50 p (100 seg) 200 p (100 seg)
0,2 segundos
Para el PID:
Atributo
Kp
Ki
Kd
Periodo de muestreo
Referencia
Valor
600
1
0,2
0,2 segundos
100 p (100 seg) 50 p (100 seg) 200 p (100 seg)
De la configuracin del Router 1, dnde se generar el cuello de botella, nos interesa el valor del
ancho de banda.
Atributo
Mximo ancho de banda reservado
Valor
3.500 bps (absoluto)
Si lanzamos una simulacin de 300 segundos, obtenemos el siguiente resultado. Con esta red, con
ambos algoritmos PID y MPC conseguimos que en cuestin de segundos la referencia sea
alcanzada.
117
Los valores de la entrada se pueden ver en las Figura 7. 25. Se aprecian bastante mejor las
variaciones de la probabilidad de descarte que en las simulaciones de larga duracin de apartados
anteriores.
Valor
1MByte
Relativa
100% de la capacidad del enlace
118
Color
Vemos como los algoritmos de control intentan seguir la trayectoria de referencia. MPC no
consigue adaptarse muy bien al primer valor de 100 paquetes, sin embargo, el resto de la
simulacin responde muy bien ante los cambios. PID tampoco responde de forma perfecta, pero
funciona bastante bien en intervalos de tiempo tan cortos. En cuanto a RED, ha sido fijado con
unos umbrales mnimo y mximo de 60 y 180 paquetes respectivamente. Por ltimo, Drop Tail va
llenando la cola siguiendo una trayectoria exponencial hasta alcanzar un valor de unos 450
paquetes al finalizar la simulacin (bastante coherente si vemos la definicin de generacin de
trfico en el nodo de aplicaciones).
En una red es siempre interesante mantener una ocupacin de los enlaces alta, esto es un
indicio de un uso eficiente de los recursos disponibles. En la Figura 7.27 podemos observar la
ocupacin (en media) del enlace que une los dos routers. Resulta agradable ver como los dos
algoritmos implementados, PID y MPC, obtienen mejores resultados que los ya existentes. En este
caso concreto PID ofrece un porcentaje algo ms alto de ocupacin que MPC. An as, los cuatro
mtodos logran unos valores cercanos al 100%, no existe ningn caso que podamos considerar
desastroso.
119
120
7. 4 Conclusiones
Se ha intentado con esta coleccin de experimentos intentar demostrar al lector como, mediante un
control dinmico de las colas, es posible obtener un mejor desempeo de una red congestionada.
Del mismo modo, se ha intentado poner de manifiesto que una mayor tasa de descarte de paquetes
no implica un funcionamiento ms deficiente, todo lo contrario, descartando paquetes antes de
tiempo, muchas veces, nos ayuda a descongestionar la red.
121
Captulo VIII
Pruebas y problemas
8. 1 Pruebas
El anterior captulo de resultados se puede considerar una amplia batera de pruebas para observar
el correcto funcionamiento de los algoritmos implementados. En el actual captulo veremos la
forma de proceder para realizar las pruebas en el cdigo generado y poner de manifiesto diferentes
errores cometidos. Podemos clasificar las pruebas en dos grupos:
Se hicieron pruebas del estilo a la siguiente, en la que tenemos como parmetros de entrada los
siguientes valores:
a = [1 -1.476 0.5416]
b = [-14.9 -12.15]
h = 3
h1= 4
h2 = 6
na = 3
nb = 2
lambda = 100
123
Fs = [7.229525
8.567545
9.730186
-9.332758 3.103233
-11.483056 3.915511
-13.370369 4.640183]
Gp = [-12.150000
-30.083400
-49.972658]
Ks: [-0.013471
-0.017594
0.001685]
Tras varios accesos invlidos a memoria y modificaciones en el cdigo, el mdulo pasaba las
pruebas unitarias.
Dentro de la configuracin de los datos del MPC, hay una llamada a cdigo de terceros para
calcular la inversa de una matriz (MatrixInversion). Debemos tener cuidado al introducir cdigo de
terceros y asegurarnos de que las funciones que introducimos han sido probadas minuciosamente
de manera que aseguren un correcto funcionamiento. Se ha probado el correcto clculo de la
inversa de la matriz desde la herramienta online accesible en [Blu].
Esta salida no es considerada un error de implementacin porque se entiende que para que el
usuario inicie una simulacin, ste debe de haber introducido primero los parmetros de
configuracin necesarios para el correcto funcionamiento del algoritmo.
Lo mismo sucede en el caso del PID.
124
3.
4.
5.
Mediante lnea de comandos utilizando el comando bp seguido del nombre del mtodo
dnde queremos situar el punto de ruptura. Por ejemplo, bp controller.
Desde la ventana donde est el cdigo, situndonos en la lnea deseada y seleccionando
con el botn derecho del ratn la opcin Set breakpoint.
Para movernos por las distintas instrucciones de cdigo tenemos tres botones:
8. 3 Problemas
Durante el ciclo de vida del proyecto nos hemos topado varias veces con contratiempos que han
dificultado el trabajo llevado a cabo. Como de los errores se aprende, me ha parecido conveniente
aadir una pequea lista, a modo de resumen, con los problemas que han ido a surgiendo, por
diferentes motivos, a medida que el proyecto avanzava.
125
126
Captulo IX
Conclusiones y trabajo futuro
9. 1 Conclusiones
Llegados hasta aqu, merece la pena echar la mirada atrs y sacar conclusiones sobre el trabajo
realizado. El poder reflexionar sobre lo aprendido nos har solidificar los conocimientos y nos
permitir ser crticos con la labor desempeada. A continuacin se enumerarn varios puntos a
modo de corolario del proyecto.
En primer lugar, diremos que el control de la congestin no es una tarea ni mucho menos
trivial. Est condicionada por multitud de variables, lo que hace realmente complicado su
estudio.
El manejo de herramientas de simulacin profesionales, como OPNET tampoco es algo
sencillo. Su aprendizaje requiere de bastante tiempo y familiarizarse con la herramienta no
es inmediato.
El uso de tcnicas de control automtico para controlar la congestin es realmente curioso.
Antes de comenzar con el desarrollo de este proyecto todas los procesos de control que
haba visto estaban relacionados con procesos de ndole industrial (tanques de lquido,
calentadores, columnas de destilacin, antenas de seguimiento). Aplicar control sobre
las redes es algo, cuanto menos, innovador e interesante.
Tengo la sensacin de no haber hecho ms que vislumbrar por encima las posibilidades y mejoras
que pueden ofrecer este tipo de controladores para una regulacin ptima de la carga en la red.
Por otra parte, resulta gratificante el haber adquirido una importante cantidad de
conocimientos y destrezas durante la realizacin del proyecto. Me gustara enumerar unos cuantos:
127
9. 2 Trabajo futuro
Muchas cosas se pueden seguir haciendo llegados a este punto. A continuacin enumerar las ms
importantes de cara a que, en un futuro, alguien o yo mismo pueda seguir investigando y
estudiando sobre el tema.
1.
2.
3.
4.
5.
6.
Los controladores implementados funcionan en base a una seal de reloj que se genera
con cierta frecuencia. Estara muy bien comprobar el desempeo de los algoritmos tanto
RED como MPC localizando el clculo de la seal de control cuando llega un nuevo
paquete sin necesidad de utilizar la seal de reloj.
El controlador MPC creado no tiene en cuenta restricciones. En un primer momento se
consider su implementacin, pero finalmente, por falta de tiempo, no se lleg a realizar.
Tambin relacionado con el MPC, se podra mirar la posibilidad de realizar variaciones del
modelo dinmicamente, a medida que avanza la simulacin, eso le hara ms flexible y
adaptable a las condiciones cambiantes de la red.
Hacer hincapi en las labores de modelado y obtener modelos de red para el MPC ms
realistas que los usados en los casos de estudio, de manera que se mejore la eficiencia de
este mtodo de control automtico.
La cantidad de parmetros configurables en una red nos abre un abanico inmenso de
nuevos estudios. Jugando con los distintos parmetros de los distintos protocolos podemos
realizar nuevos experimentos a distintos niveles de red.
Estudio de nuevas topologas. El actual trabajo se ha limitado a redes Ethernet cableadas.
Sera interesante el estudio de redes de distinta naturaleza, por ejemplo redes inalmbricas.
128
Apndice A
La herramienta OPNET
A. 1 Introduccin
OPNET Modeler es un programa extensamente utilizado en la industria para modelar y simular
sistemas de comunicaciones. Su nombre se identifica con las siglas de OPtimized Network
Engineering Tool. La empresa que lo distribuye fue fundada en 1986 y se abri mercado en el ao
2000. Este programa posibilita disear y estudiar redes, dispositivos, protocolos y aplicaciones.
Est basado en la teora de redes de colas e integra las libreras para proporcionar el modelado de
las topologas de red. Soporta un amplio rango de tecnologas tipo LAN, MAN y WAN.
129
130
A. LA HERRAMIENTA OPNET
Por ltimo, entre la informacin del modelo se encuentra la estructura interna del objeto. Esto
se representa con la descomposicin del objeto en otros componentes, que a su vez pueden ser
objetos con su propio modelo. Como ejemplo podemos sealar los modelos de nodos, que estn
especificados en trminos de objetos denominados mdulos y conexiones. Un ejemplo de modelo
de nodos sera el que define el comportamiento de un router, dentro del cual se encuentra el
mdulo IP.
Quedan por explicar los atributos. Al representar un objeto, hay caractersticas de ste que se
consideran privadas y, por tanto, permanecen escondidas en su interior. Sin embargo, hay otras que
se consideran tiles para mostrar al usuario. Estas ltimas son las llamadas atributos. Estos pueden
estar asociados con clases de objetos, o con un objeto particular. Normalmente tienen dos
objetivos: informar al usuario de las caractersticas seleccionadas de un objeto y permitir que esas
caractersticas se puedan modificar por el usuario para una aplicacin ms especfica, en POO
seran los valores de los atributos con los que se instancia el objeto.
131
transportar paquetes de datos y otra para transmitir valores individuales. Un mdulo puede enviar
paquetes a travs de sus output packet streams (canales de salida de paquetes) y recibirlos de sus
input packet streams. Por otra parte, puede enviar valores individuales a travs de output statistics
y recibirlos de input statistics. Podemos hablar tambin de las asociaciones lgicas entre mdulos,
pero a nivel de modelado no tienen inters, salvo para simplificar la comprensin del modelo de
nodos.
A.3.1 Mdulos
Los mdulos representan aquellas partes del modelo en que se genera, consume o procesan datos.
Existen diferentes tipos de mdulos dependiendo de su funcin dentro de un nodo tales como:
procesadores (processors), colas (queues), receptores (receivers) y transmisores (transmitters).
Algunos de stos, como los procesadores y colas, tienen funciones estrictamente internas del nodo,
sin embargo, otros como los receptores y transmisores tienen conexiones externas con los links de
transmisin del dominio de redes. El comportamiento de los procesadores y colas viene dado por
modelos de procesos que puede modificar el usuario, como ocurre con el mdulo IP, definido
mediante el modelo de procesos ip_dispatch y sus hijos. Sin embargo, otros mdulos tiene un
comportamiento ya predefinido, slo modificable cambiando el valor de sus atributos.
El algoritmo interno de un mdulo se invoca cuando se produce un evento externo que afecta
al estado de ese mdulo. Esto se debe al mtodo de simulacin por eventos que utiliza OPNET.
A continuacin se explican los mdulos que se han considerado relevantes en el proyecto:
A.3.1.1 Procesador
132
A. LA HERRAMIENTA OPNET
A.3.1.2 Cola
133
A.3.1.4 Receptor
A.3.2 Conexiones
Las conexiones representan los caminos y asociaciones entre los distintos mdulos de un nodo. En
un modelo de nodos existen tres tipos de conexiones diferentes:
A.3.2.1 Packet Streams
Su misin es transportar los paquetes desde un mdulo destino a uno fuente. Representan el flujo
de datos a travs de las interfaces hardware y software dentro de un nodo de comunicaciones. Se
caracterizan por no tener errores de transmisin, retrasos, ni lmite de ancho de banda. Tienen
capacidad ilimitada para almacenar los paquetes en orden de llegada al mdulo destino.
En OPNET se puede transferir un paquete a travs de un stream y notificar al mdulo de su
llegada, a travs de tres mtodos: planificado, forzado y silencioso. Mediante la versin
planificada, llega una interrupcin de canal o stream interrupt, y se requiere de un tiempo de espera
hasta que llegue el turno de recoger el paquete. Sin embargo, con la forzada, cuando ocurre la
interrupcin, el paquete es procesado de inmediato, sin ejecutar los eventos anteriores. Por ltimo,
con el mtodo silencioso, no hay interrupcin, y el paquete se almacena en el buffer hasta que el
mdulo lo solicite.
A.3.2.2 Statistic Wires
Su funcin es transportar datos desde un mdulo fuente hasta un mdulo destino. Cada Statistic
Wire transporta un valor individual. Se utilizan habitualmente como interfaces en las que el
mdulo fuente comparte ciertos valores con el destino, incluida informacin de estado. Adems,
son utilizados como mecanismos de sealizacin, permitiendo que el mdulo origen informe al
destino cuando una condicin de inters se ha cumplido.
Cada mdulo dentro de un nodo tiene un conjunto de local output statistic cuyos valores son
actualizados durante la simulacin. Este conjunto de estadsticas es el que acta como fuente de los
statistic wire. Los procesadores y colas, en concreto, tienen estadsticas cuya manipulacin e
interpretacin est definida por el modelo de proceso, y cuya actualizacin tiene lugar cuando
dentro de ste se llama a un procedimiento predefinido en OPNET, opt_stat_write(). Sin embargo,
otros mdulos tienen unas estadsticas predeterminadas que son actualizadas automticamente por
el Simulation Kernel cuando es conveniente.
Los statistic wires se utilizan habitualmente de dos maneras: en primer lugar, pueden ser
empleadas para monitorizar el estado de algn otro componente dentro de un nodo. En segundo
134
A. LA HERRAMIENTA OPNET
lugar, posibilitan que un mdulo avise a otro (procesador o cola) para que cambie de estado,
enviando valores que comprueba el proceso asociado.
A.3.2.3 Logical Associations
Son conexiones especiales que no transportan datos, ni existen durante la simulacin.
Sencillamente, se utilizan como mecanismos de especificacin, es decir, indican que hay relacin
entre dos mdulos de un nodo. Asimismo, se consideran de ayuda para interpretar la estructura de
un modelo de nodo.
A.3.3 Atributos
Es posible crear nuevos atributos y asociarlos a un modelo de nodos. stos pertenecern al modelo
en general, y no a un objeto en particular del dominio de nodos. Al crear un objeto nodo en un
Project Editor heredar esos atributos. Por ello se dice que los atributos del modelo de nodos
proporcionan una forma de aumentar el conjunto de atributos de un nodo u objeto de la red.
Si se hacen pblicas algunas caractersticas del modelo de nodos, y se permite que se
modifiquen, es ms sencillo que los modelos sean ms aptos para la reutilizacin en diferentes
situaciones de modelado. Igualmente ocurre con los atributos de los modelos de proceso, que
permiten que se introduzcan nuevos atributos en los mdulos del modelo de nodos. Por ello,
dependiendo del mbito de utilizacin de los atributos, se declaran en el modelo de procesos, en el
caso de que se vayan a necesitar a nivel de implementacin de nodos, o en el de nodos, si interesa
que sean visibles en el dominio de red.
A. 4 Dominio de procesos
Como se ha explicado en el apartado anterior, los modelos de proceso se utilizan para definir el
comportamiento de los mdulos de tipo procesador y cola existentes en el Dominio de Nodos.
Implementan una gran variedad de subsistemas tanto hardware como software, incluyendo
protocolos de comunicacin, algoritmos, recursos compartidos como discos o memoria, disciplinas
de cola, y en general todo tipo de comportamiento que se pueda necesitar en un modelo de redes
de comunicacin.
A partir de este punto, se llamar a los procesadores o colas con las abreviaturas QP, para
facilitar la lectura. Para proporcionar una funcionalidad particular dentro de un QP, se pueden
definir uno o varios procesos. Un proceso es una instancia de un modelo de proceso, definido
mediante el Editor de Procesos.
135
136
A. LA HERRAMIENTA OPNET
Memoria Compartida
Cuando dentro de un QP se ejecutan varios procesos para implementar su funcionalidad, stos
requieren comunicarse entre ellos para compartir informacin. Existen tres mecanismos de
comunicacin:
137
Algunos procesos dinmicos poseen un tiempo de vida reducido al tiempo que tardan en
realizar la tarea que se haya encomendado. Al acabar se le elimina de la jerarqua y as no consume
recursos, mediante la funcin op_pro_destroy, que puede ser empleada por otros procesos o por l
mismo.
nicamente puede haber un proceso ejecutndose a la vez. Un proceso est en ejecucin
cuando progresa a travs de las instrucciones que integran su modelo. Si un proceso necesita
invocar a otro creado anteriormente, lo hace mediante la funcin op_pro_invoke(). A partir de esta
llamada el proceso invocado se bloquea, cediendo el control del hilo de ejecucin al proceso
invocado, que realiza su tarea y cuando acaba devuelve el control al proceso que lo llam, que
sigue ejecutndose donde se haba quedado.
Cuando un proceso invoca a otro, se a su vez puede invocar a otro, y as sucesivamente,
actuando como un mecanismo de llamadas orientado a pila, por tanto, no soporta recursividad
(porque los procesos, una vez van invocando a otro, permanecen bloqueados hasta que acaba la
llamada).
S que podra existir, sin embargo, entre distintas instancias de un mismo proceso de modelo,
invocndose una a la otra.
Durante la invocacin, el proceso invocado puede acceder a cualquiera de los recursos del QP,
como paquetes o estadsticas. Esto puede dar lugar a que, despus de una invocacin, ciertos
valores puedan cambiar.
La totalidad de las operaciones citadas para manejar los procesos dinmicos y otras muchas no
sealadas, forman parte del llamado Process Package, uno de los paquetes de operaciones
existentes dentro de los Kernel Procedures o KP. Estas funciones ya estn definidas, y es posible
usarlas directamente en el cdigo de los modelos de proceso, lo que facilita mucho la tarea de
implementacin de nuevos protocolos o aplicaciones dentro de OPNET.
Control de Interrupciones
Una interrupcin nos va a indicar que ha ocurrido un evento de inters en el sistema, como por
ejemplo la expiracin de un temporizador o la llegada de un paquete. Cuando un proceso recibe una
interrupcin, realiza una accin como respuesta y se bloquea, esperando una nueva interrupcin.
Los modelos de proceso utilizan procedimientos predefinidos para obtener la informacin acerca
del tipo y origen de la interrupcin. En la mayora de los casos, las interrupciones tienen
informacin adicional a la que los procesos acceden para concretar qu accin llevar a cabo. Por
ejemplo, una interrupcin ocasionada por la llegada de un paquete tiene como consecuencia que el
proceso tenga que obtener el paquete y procesarlo.
Todas las interrupciones, por defecto, que llegan a un QP son dirigidas al proceso raz, y ste
elige a quin invocar para que realice las operaciones debidas. No obstante, hay procesos que
pueden solicitar recibir ciertos eventos, basndose en el tipo de evento o su procedencia.
A.4.1.3 Recursos de un proceso
Los procesos siempre van a operar dentro del contexto de un QP. Por este motivo, el objeto QP,
proporciona a sus procesos ciertos recursos que implcitamente forman parte del entorno de cada
proceso.
stos son:
Canales de entrada/salida (Input and Output Streams)
Como hemos visto anteriormente, los packet streams, son objetos que existen en el modelo de
nodos y conectan unos mdulos con otros. En concreto, comunican estructuras dinmicas en los
nodos fuente y destino llamadas output e input streams respectivamente.
Un input streams dentro de un QP recibe paquetes de fuentes externas. Ms tarde, los paquetes
se almacenan automticamente dentro del stream, siguiendo un orden FIFO, y desde ah pueden
ser accedidos por los procesos del QP que lo soliciten.
138
A. LA HERRAMIENTA OPNET
Los input streams son reservados dinmicamente segn sean necesarios para soportar las
entregas, ya que Simulation Kernel no sabe el rango de canales que sern utilizados previamente.
Cuando se recibe un paquete en un input stream, se invoca uno de los procesos del QP
mediante una interrupcin de canal (stream interrupt). El proceso determinar por qu canal llega
el paquete llamando a la funcin op_intrpt_strm(), que devuelve el ndice asociado a un stream.
Conocido el canal, se recoger el primer paquete que lleg mediante op_pk_get().
Los procesos dentro de un QP comparten las local output statistic existentes, cualquiera de
ellos puede actualizarlas. Pero los procesos pueden declarar cules van a utilizar, mediante la
operacin del editor Edit local statistics, como se puede ver en la figura siguiente:
Atributos
140
A. LA HERRAMIENTA OPNET
141
142
A. LA HERRAMIENTA OPNET
simbolizan con crculos de color verde, mientras que los unforced son rojos, como la siguiente
ilustracin:
Unforced States: Pueden modelar estados reales del sistema, ya que permiten una pausa
entre el enter y el exit executive. Despus de completar el enter executive de un estado, el
proceso se bloquea y devuelve el control al hilo de ejecucin en el que fue invocado. Ese
contexto puede ser por ejemplo, otro proceso que lo invoc mediante la funcin de KP
op_pro_invoke(), o en el caso de que el proceso fuera invocado por el Simulation Kernel,
si se bloqueara, sealara el final del evento, y por lo tanto, el Kernel podra elegir el
siguiente evento para empezar su ejecucin. En este punto, el proceso se mantiene
suspendido hasta que una nueva invocacin lo haga continuar con el exit executive del
estado en el que se encuentra.
En la Figura A. 15 se describe el flujo de ejecucin de un STD a travs de estados no
forzados. En la Figura 7. 14 se muestra el flujo de ejecucin de eventos a travs de estados
no forzados, es decir, todo el proceso hasta llegar a bloquearse.
Forced states: Cuando un proceso entra en este tipo de estado, ejecuta las enter
executives, y seguidamente las exit executives, por lo que no permiten esperar al proceso.
Es habitual dejar estas ltimas en blanco en este tipo de estados. A pesar de no ser tiles
para modelar sistemas reales, s que lo son en algunos casos para separar acciones
grficamente, o para controlar decisiones de flujo comunes a varios unforced states.
Separando grficamente las acciones a ejecutar ayuda a la modularidad, a la vez que se
obtiene un STD ms informativo.
143
A. LA HERRAMIENTA OPNET
Siempre que se crea una transicin, el editor de Procesos automticamente encierra la condicin
entre parntesis seguida de la barra /, y el executive. Las transiciones que tienen condicin tienen
el arco formado por una lnea discontinua, y las que no tienen condicin, el arco es una lnea
continua. En el grfico siguiente, se muestran los distintos tipos de transiciones:
145
A.4.2.4 Variables
Los procesos en Proto-C tienen acceso a varias formas de memoria para almacenar informacin,
cada una con las caractersticas necesarias para usos particulares. Algunas de estas formas,
llamadas variables, van a permitir ser referenciadas y manipuladas mediante nombres ordinarios, y
no direcciones de memoria. Existen tres tipos de variables en los modelos de proceso: de estado,
temporales y globales.
La siguiente tabla muestra los dos tipos de variables y su mbito y visibilidad:
Function
Block
State Executives
Temporal
Estado
Global (como las definidas en
ficheros externos o en HB)
X
X
Funciones en
ficheros Externos
(extensin .ex.c)
X
(Usando extern)
La declaracin de cada uno de los tipos de variables utiliza un mecanismo diferente, para indicar al
compilador qu categora aplicar. Las caractersticas de cada uno de ellos son:
146
Variables Globales (Global variables): Facilitan un mtodo para que diferentes procesos
guarden informacin en un rea comn. Pueden ser de cualquier tipo predefinido en C u
OPNET, incluyendo igualmente tipos de datos definidos por el propio usuario. En el
A. LA HERRAMIENTA OPNET
momento en el que un proceso modifica una variable global, puede afectar en las
operaciones de otros procesos.
Estas variables se definen en header block, y cada una tiene que tener una declaracin
principal en el header block del modelo de proceso con el que ms asociado est. En el
caso de que otros procesos compartan acceso a ella, su bloque de cabecera incluir una
declaracin externa. Puede haber muchos procesos que tengan declaraciones externas de
una variable, pero slo uno tendr una declaracin principal. Las declaraciones externas se
definen con extern.
Las variables globales se pueden inicializar en el momento de su declaracin
mediante la asignacin de un valor, pero slo en la declaracin principal, al igual que las
variables temporales. La inicializacin se ejecutar previamente al comienzo de la
simulacin.
A.3.4.2.5 Uso de Funciones
Para hacer los modelos de proceso ms modulares y sencillos, una de las tcnicas que se ha dicho
anteriormente es utilizar forced states en el diagrama de estados, para as mostrar de forma ms
intuitiva el flujo de ejecucin de un proceso. La otra forma es el uso de funciones.
Las funciones son especificaciones de una aplicabilidad determinada que pueden aceptar
argumentos. Podemos usar funciones dentro de un modelo de proceso mediante dos mecanismos:
Function Block: Dentro de un modelo de proceso, las funciones pueden ser definidas
dentro de una seccin denominada function block o FB. El bloque FB se puede editar
desde el editor de procesos pinchando en el botn con su mismo nombre. Cada funcin
modulara una funcionalidad que cualquier elemento del diagrama de estados puede
utilizar. De esta manera se consigue un modelo de procesos ms simple y modularizado,
fomentando una alta reutilizacin.
simplemente en atributos del respectivo procesador o cola del modelo de nodos. Usando este
mecanismo, el usuario puede especificar por adelantado los valores y propiedades del procesador (o
cola) que usar este modelo.
A. 5 Simulacin
En los siguientes apartados se describirn los componentes necesarios para que se lleve a cabo una
simulacin de un sistema. Despus veremos como se lleva a cabo una simulacin desde el punto de
vista del tiempo, los eventos y las interrupciones.
Podemos definir la simulacin como el proceso de disear un modelo de un sistema real y
llevar a trmino experiencias con l, con la finalidad de comprender el comportamiento del sistema
o evaluar nuevas estrategias - dentro de los lmites impuestos por un cierto criterio o un conjunto
de ellos - para el funcionamiento del sistema [WF].
Un modelo de simulacin discreto es la representacin de un sistema en el que su estado
cambia solamente en instantes concretos de tiempo. OPNET es un simulador catalogado dentro del
grupo de sistemas de eventos discretos.
Para entender los siguientes apartados resulta interesante conocer los siguientes conceptos:
148
Simulation Kernel: se trata de una librera de cdigo objeto que contiene algoritmos y
varios servicios utilizados en la simulacin. Proporciona el marco para todas las
simulaciones, incluyendo los servicios esenciales de carga de modelos, planificacin y
gestin de eventos, recoleccin de estadsticas, reservas de memoria Contiene todos los
Kernel Procedures (KP) llamados por los modelos de procesos.
Process Models: cada modelo de proceso que interviene en la simulacin se traduce en un
fichero fuente escrito en C, teniendo extensin pr.c. Estos ficheros se compilan justo
antes de iniciar la simulacin utilizando un compilador disponible en el equipo (en este
proyecto se ha utilizado Visual C++ 2003), generando un fichero objeto con sufijo pr.o.
Pipeline Stages: referencia a los links del sistema e implementan operaciones modulares
y actividades relacionadas con la transmisin de paquetes entre mdulos transmisores y
receptores. Su extensin es ps.c.
External Object Files: estos ficheros contienen funciones utilizadas por los modelos de
procesos y los pipeline stages durante la simulacin. Se pueden desarrollar en C o en otros
lenguajes que puedan ser invocados desde C. Su extensin es ex.c. Su uso en el modelo
de procesos depende de su previa declaracin.
External Archives: similares a los anteriores, pero empaquetados de forma que contienen
varios ficheros objetos.
A. LA HERRAMIENTA OPNET
Una vez obtenidos todos estos componentes, OPNET proporciona un programa ejecutable para
realizar la simulacin.
149
A. LA HERRAMIENTA OPNET
Tipos de eventos
En OPNET existen 13 tipos de eventos que soportan varias actividades de modelado. Algunos de
ellos sirven para propsitos muy concretos, mientras otros son ms generales y estn relacionados
con actividades ms variadas. Podemos destacar unos cuantos:
151
Apndice B
Adicin de atributos y estadsticas
B. 1 Modificacin de atributos
Los atributos es la forma que el operador, desde el nivel de redes, puede configurar los distintos
nodos y elementos que componen su topologa. Facilita al usuario la cumplimentacin de
parmetros a travs de una interfaz grfica amigable abstrayndole de la complejidad y conceptos
aplicados en los niveles de nodos y procesos.
Esa interfaz de usuario puede ser extendida, de manera que la comunidad de investigadores
pueda aadir nuevas funcionalidades sobre la herramienta. Esto se puede realizar tanto desde el
editor de nodos como desde el de procesos (segn queramos modificar la interfaz en un nivel u
otro de modelado).
153
Default Value: valor por defecto proporcionado por el sistema cuando el atributo es
requerido y no ha sido configurado por el usuario. Tambin se usa para sugerir un valor al
usuario.
Tags: palabras claves para identificar el atributo dentro del men Edit Attributes a la hora
de realizar una bsqueda.
Desde esta ventana podemos explorar e ir viendo los detalles de cada uno de los atributos. Como se
ha visto, muchos de estos atributos son compuestos. Sealando cualquiera de estos atributos y
pulsando en Edit Properties accederemos a la estructuracin del atributo compuesto en cuestin.
Data Type: Nos dice el tipo del atributo que estamos editando (en el ejemplo de la captura
se trata de un atributo compuesto).
Default Value: Valor que aparecer por defecto en el atributo, es decir, valor que tomar
el atributo en la simulacin si el usuario no lo modifica.
Units: Unidades en las que se expresa el atributo (en el ejemplo, como ste es compuesto
aparece vaco).
Comments: Comentario que explica para qu se utiliza el atributo.
Symbol Map: Son los posibles valores que podr tomar el atributo. Las opciones son las
que el usuario ve cuando edita el atributo.
154
155
Pulsamos OK para salir de las propiedades y volver a la anterior pantalla, recordando que seguimos
en modo privado. Ahora si que se nos est permitido editar las propiedades de un atributo (Edit
Properties), a diferencia de lo que ocurra en modo pblico. Seleccionando esta opcin aparecer
una nueva ventana con un nuevo Symbol Map, que deberemos modificar para aadir el nuevo valor.
Pulsamos Ok y regresamos a la ventana anterior para volver a entrar en Edit Attribute
Properties para cambiar otra vez al dominio pblico (habilitamos la casilla Public). Se crear un
nuevo fichero de propiedades. Si pulsamos Save public podremos guardar el nuevo fichero en el
directorio que queramos de nuestro sistema.
La variable new_name almacenar el texto que le aparecer al usuario para que seleccione la
estadstica. dim_stathandle nos permitir identificar y actuar sobre esa estadstica de forma
inequvoca. Por ltimo, OmsC_Qm_Probability es una constante que definir la estadstica. sta
deber ser definida previamente en oms_qm.h:
typedef enum OmsT_Qm_Stat_Index
{
OmsC_Qm_Buffer_Size_Bytes
OmsC_Qm_Buffer_Size_Packets
...
OmsC_Qm_RED_Avg_Queue_Size
OmsC_Qm_Probability
OmsC_Qm_Max_Stat_Index
} OmsT_Qm_Stat_Index;
= 0,
= 1,
= 10,
= 11,
= 12
/* must remain last */
Ser aadida con valor 11. La constante OmsT_Qm_Stat_Index debe de ser incrementada para
mantener la coherencia.
Daremos valores a la estadstica de estudio cada vez que la probabilidad de descarte se
modifique, esto ocurrir en cada uno de los periodos de muestreo.
156
En primer lugar obtendremos la variable manejador, la cul nos permitir acceder a la estadstica.
Posteriormente, si el manejador es vlido, tomaremos una muestra de la probabilidad en el instante
de tiempo actual.
Seguidamente procederemos a declarar la estadstica local dentro del modelo de procesos
(ip_output_iface). Para ello accederemos a la opcin InterfacesLocal Statistics. Se nos abrir
una ventana emergente sobre la que deberemos aadir nuestra nueva estadstica.
Apndice C
Gua de instalacin de OPNET
En este apndice daremos las pautas bsicas para configurar el entorno de desarrollo de forma
ptima. En nuestro caso concreto se ha realizado una instalacin de OPNET sobre windows vista
proffessional.
159
161
Una vez hecho esto se puede proceder a instalar las libreras sin ningn problema. El asistente de
instalacin es similar al utilizado anteriormente. A destacar esta pantalla que antes no apareca que
sirve para vincular la herramienta a los tipos de fichero .prj (proyectos) y .m (modelos).
163
C. 3 Obtencin de la licencia
Al intentar abrir la aplicacin veremos que obtenemos el siguiente mensaje:
Si pulsamos en Add License nos aparecen cuatro posibilidades para agregar licencias:
165
Apndice D
Principios bsicos del control
digital
D. 1 Introduccin al control digital
En muchos de los sistemas de ingeniera modernos, existe la necesidad la controlar la evolucin a
lo largo del tiempo de una o varias variables. Son necesarios controladores para asegurar el
correcto funcionamiento de estos sistemas. Para garantizar un desempeo satisfactorio ante la
presencia de perturbaciones e incertidumbres en el modelo, muchos de los controladores que se
utilizan a da de hoy utilizan realimentacin negativa. Son necesarios sensores para medir las
variables controladas y comparar su comportamiento frente a una seal de referencia. La accin de
control est basada en una seal de error, que es la diferencia entre el valor de la variable medida y
la seal de referencia.
Los controladores que manipulan la seal de error para determinar la accin de control
deseada han sido clsicamente sistemas analgicos, que incluyen componentes elctricos,
neumticos, mecnicos y de fluidos. Todos estos sistemas tienen entradas y salidas analgicas. A lo
largo del tiempo los controladores analgicos se han ido reemplazando por controladores digitales,
cuyas entradas y salidas estn definidas de forma discreta. Los reguladores digitales se basan en el
uso de circuitos digitales, ordenadores y microprocesadores.
Intuitivamente, uno pensara que los controladores que monitorizan de forma continua la
salida deberan de ser superiores a aquellos que lo hacen slo en instantes discretos de tiempo
(definidos por un periodo de muestreo). Esto es completamente cierto! Pero, entonces, a qu se
debe la migracin de sistemas analgicos a digitales? [Sam09]
La respuesta a la pregunta se basa en la velocidad de procesamiento de los microprocesadores
digitales y a la posibilidad de generar complejos y costosos algoritmos de control (instrucciones
ejecutadas por el microprocesador).
D. 2 Conceptos bsicos
Salida o variable controlada (y, cv): Variable medible cuyo comportamiento se desea controlar.
Entrada o variable manipulada (u, mv): Variable que puede ser manipulada de forma directa y
que modifica el comportamiento del sistema, afectando de esta forma a la salida.
Referencia o set point (ref, sp): Valor al que queremos que se site la variable controlada.
Controlador o regulador: Elemento que puede calcular de forma matemtica (analtica,
numrica...) el valor a aplicar en la entrada para conseguir alcanzar el set point
Algoritmo de control: u f ( ref , y ) Calcula la entrada en funcin de la referencia y del valor.
Seal de error: ref y , por lo tanto podemos redefinir el algoritmo de control como u f (e)
168
D.3.2 Dinmica
Relacionado con la rapidez de la respuesta y los amortiguamientos. En este mbito se pueden
realizar estudios tanto en lazo abierto como en lazo cerrado. La sintona de reguladores influye en
la dinmica del sistema.
En muchos sistemas nos interesa un control sin sobrepicos aunque tengamos un acercamiento
ms lento, en otros quizs sea ms importante la velocidad.
169
170
171
Apndice E
Contenido del CD
El CD adjunto al presente texto contiene todo el trabajo realizado, as como documentacin y
artculos de referencia de inters. La estructura queda reflejada en el siguiente rbol de directorios.
CD
memoria
codigo
control_predictivo.ex.cpp
control_predictivo.h
ip_qos_support.ex.c
oms_qm.ex.c
oms_qm.h
ip_output_iface.pr.c
qos_attribute_definer.pr.c
experimentos varios
173
Apndice F
Acrnimos y Definiciones
ACRNIMOS Y ABREVIATURAS
175
Transformada de Laplace: Es la ms
conocida y utilizada de las transformadas
integrales. Se ha mostrado de gran utilidad
a la hora de resolver multitud de problemas
de la ciencia y tecnologa, aplicndose de
manera efectiva al estudio de temas
fundamentales como teora de vibraciones,
circuitos electrnicos, bsqueda de
soluciones de ecuaciones en derivadas
parciales
176
Bibliografa
[Alv10]
[Ang11]
[ASB]
Alvarez, T., Salim, A., Bolajraf, M., Congestion control of TCP/AQM networks
using predictive control and on-line linearized models
[ASM]
[Ate07]
[Blu]
Bluebit
Software,
Bluebit,
<http://bluebit.gr/matrix-calculator>
[CA04]
[CB04]
[CEB10]
Cerf, V.G., Erustes Camps, B., Briz Velasco, L., (2010), Antologa de Vinton
G. Cerf
[GT06]
Gonzlez T., J.P., Toro Garca, N., (2006), Control predictivo generalizado
implementado a dos tanques acoplados
[Gua09]
[HYH08]
Hong, Y., Yang, O.W.W., Huang, C., (2008), Self-Tuning PI TCP Flow
Controller for AQM Routers With Interval Gain and Phase Margin Assignment
[LPPC02]
Lim, H., Park, K.J., Park, E.C., Choi, C.H., (2002), Proportional-Integral
Active Queue Management with an Anti-Windup Compensator
[MBG04]
[MR98]
Morari, M., Ricker, N.L., (1998), Model Predictive Control Toolbox for use
with MATLAB, The Math Works Inc.
[Nic10]
[Nor]
[OPT09]
OPNET Technologies,
Documentation
[RJB05]
[RRQ03]
Ryu, S., Rump, C., Qiao, C., (2003), Advances in Internet Congestion Control
[SKCZ]
Sun, J., Chany, S., Koy, K., Cheny, G., Zukermanz, M., Neuron PID: A Robust
AQM Scheme
[SP03]
Inc.,
ltimo
(2009)
acceso:
OPNET Modeler
04/Julio/2012,
16.0
Product
on OPNET Modeler
[SV09]
Sam Fadali, M., Visio, A., (2009), Digital Control Engineering: Analysis and
Design
[Tad]
[Tan03]
[Vaq]
[VB]
[WF]
[YL]
Yang, D.R., Lee, J.H., Other process control applet series, Ultimo acceso:
13/Junio/2012, <http://cheric.org/education/control/Start/AppletsPC.html>
[YSCS]
Yu, L., Shi, Z., Chen, K., Shu, Y., Designing Robust PID Congestion
Controller Supporting TCP Flows Based on H Optimal Control Theory
[ZA]
[Zub10]