8. anexo c - universidad de sevillabibing.us.es/proyectos/abreproy/12135/fichero/anexo+c.pdfcolumnas...
TRANSCRIPT
Página 118
8. ANEXO C
8.1. Calculo de la energía consumida
En este anexo estableceremos las principales pautas para el cálculo de la energía
consumida. Para ello nos valdremos de la herramienta de análisis de redes Wireshark y
del lenguaje de programación AWK [TAWK] para procesar los archivos de texto generados
con Wireshark.
Las capturas realizadas con la estación Sniffer durante cada una de las pruebas se
guardan en formato “pcap”. A partir de este fichero en formato, filtramos los paquetes
capturados a partir de la dirección MAC de cada una de las estaciones implicadas y del AP
mediante el siguiente filtro.
wlan.sa==MAC_AP || wlan.sa==MAC_STAT1 || wlan.sa==MAC_STAT2 || …
De este modo, nos quedaremos solo con los paquetes emitidos por las estaciones
involucradas en nuestro escenario. Para traducir este fichero ya filtrado a un formato de
texto que sea legible por AWK tendremos que exportar dicho fichero a formato “csv” (File -
> Export -> As “CSV”). A partir del fichero en este formato de texto, podremos observar por
columnas parámetros de interés de los paquetes filtrados como el tiempo de captura del
paquete, la tasa de transmisión del paquete, las direcciones MAC, la longitud de los
paquetes, protocolo utilizado, etc. Estos parámetros que visualizamos pueden modificarse
desde Wireshark (Edit -> Preferences -> Column) antes de hacer la exportación. Los
ficheros con formato “csv” pueden encontrase en el directorio archivos/pruebas del CD
adjunto dentro de las carpetas correspondiente a las pruebas en las que se evalúe la
energía.
FIGURA 77: EJEMPLO DE FICHERO EN FORMATO "CSV"
El fichero en formato “csv” se utilizará como entrada al fichero de cálculo de la
energía consumida. Como se calcula la energía consumida por el adaptador inalámbrico
con y sin PSM, existirán dos ficheros diferentes donde se realizan los cálculos, pero el
fichero de entrada donde se muestran los paquetes capturados en el mismo para cada
prueba. En estos script creados en lenguaje AWK, existe una correspondencia entre las
columnas de la aplicación Wireshark exportadas y las variables que aparecen en los script,
y que utilizaremos para el cálculo de energía. Dicha correspondencia se muestra a
continuación:
$4 se corresponde con el tiempo en el que se capturó el paquete.
$6 se corresponde con la tasa de transmisión empleada
Página 119
$8 se corresponde con la dirección MAC origen que envía el paquete
$14 se corresponde con la longitud del paquete
El código fuente para el script que calcula la energía real consumida por el
adaptador inalámbrico se muestra a continuación. Este fichero puede encontrarse en el
directorio archivos/pruebas/energía del CD adjunto, con el nombre de “ener.awk”.
#! /bin/awk -f
BEGIN{intervalo=10;lt=0; lintervalo=intervalo; count_packet=0;
FS="\"";
STA1="c8:be:19:51:7f:da";
STA2="c8:be:19:51:7f:dd";
STA3="c8:be:19:51:7f:db";
cp_wifi=0;
tx=0; rx=0; listen=0}
{
#tiempo absoluto en segundos
time=$4
count_packet++
if(count_packet==1) {
t0=time
lt=t0
}
t=(time - t0)
#tasa de transmisión en Mbps
rate=$6
#longitud del paquete en Bytes
L=$14-26
#tiempo empleado en el paquete en microsegundos
duracion=L*8/(rate)
#direccion MAC fuente
mac_src=$8
#paquetes tx por cada una de las 3 STAT wifi
if ((mac_src == STA1) || (mac_src == STA2) || (mac_src == STA3)) {
cp_wifi++
if(duracion > 0) tx += duracion
}
#paquetes tx por todas STAT y AP
if(duracion > 0) tx_totales += duracion
if(t>=(lintervalo)) {
tx=tx/3
rx=tx_totales-tx
listen=1000000*(t-lt)-tx-rx
if(lintervalo==intervalo)
print ("Tiempo_TX(us), Tiempo_RX(us), Tiempo_Listen(us),
Tiempo(s)")
printf ("%f, %f, %f, %f\n",tx, rx, listen, t)
tx=0
rx=0
tx_totales=0
listen=0
Página 120
lt = t
lintervalo += intervalo
}
}
Al comienzo del código, se define que los campos delimitadores de las variables
sean las comillas y se inicializan las variables a utilizar. Concretamente se establece que el
intervalo de cómputo de energía sea de 10 segundos, es decir, que cada 10 segundos
obtendremos unos valores de tiempos en transmisión, recepción y escucha que
posteriormente traduciremos a energía consumida.
Mediante la tasa de transmisión del paquete y la longitud de este, logramos estimar
el tiempo de transmisión de dicho paquete. Este tiempo de transmisión se acumula en dos
variables, una que lleva el tiempo de transmisión solo de los paquetes transmitidos por las
tres estaciones inalámbricas, y otra variable que computa el tiempo de transmisión de
todas las estaciones y del AP. De esta forma, podemos conocer el tiempo que una estación
inalámbrica cualquiera ha empleado en transmitir sus paquetes. Si del tiempo total de
transmisión restamos el tiempo que una estación inalámbrica cualquiera ha estado
transmitiendo, tenemos el tiempo que ha estado recepcionando paquetes, ya que los
paquetes que yo como estación no haya transmitido los he tenido recepcionar para saber
si son o no para mí. El tiempo de escucha será el tiempo restante hasta completar el
intervalo de cómputo. De este modo, podemos calcular los tiempos acumulados durante
cada intervalo por una estación cualquiera para transmisión, recepción y escucha.
En el caso de la implementación del PSM (Power Saving Mode) se calcula también
tiempo que la estación ha permanecido dormida. Este fichero puede localizarse en el
directorio archivos/pruebas/energía del CD adjunto, con el nombre de “ener_PSM.awk”. A
continuación se muestra un extracto de dicho script con las modificaciones introducidas
sobre el script original para inferir el cómputo de energía consumida.
#! /bin/awk -f
BEGIN{intervalo=10;lt=0; lintervalo=intervalo; count_packet=0;
… # variables para PSM (suponemos 802.11b)
Tslot=10;
DISIFS=70;
PSPOLLH=26;
PSPOLLF=20;
BEACON = 100000;
ECW = 15;
Tswap = 1000;
…
if(t>=lintervalo) {
tx=tx/3
rx=tx_totales-tx
Página 121
listen=1000000*(t-lt)-tx-rx
#resultados para PSM
psmtx=tx + (cp_wifi_inter/3)*(PSPOLLH*8 + PSPOLLF*8/(rate))
psmrx=rx + (cp_wifi_inter/3)*(PSPOLLH*8 + PSPOLLF*8/(rate))*2
psmidle = (ECW*Tslot)*(cp_wifi_inter/3) + DISIFS * cp_wifi_inter
+ 1000000*(t-lt)/BEACON * Tswap
psmsleep = 1000000*(t-lt)-psmtx-psmrx-psmidle
if(lintervalo==intervalo)
print("PSM: Tiempo_TX(us), Tiempo_RX(us), Tiempo_Listen(us),
Tiempo_Sleep(us), Tiempo(s)")
printf("%f, %f, %f, %f, %f\n",psmtx, psmrx, psmidle, psmsleep, t)
… psmtx=0;
psmrx=0;
psmidle=0;
psmsleep=0;
}
}
Para el cálculo del tiempo que una estación inalámbrica se encuentra en
transmisión, recepción, escucha o dormida, se realizan las siguientes consideraciones
adicionales sobre los cálculos sin PSM:
1º- Al comienzo de cada trama beacon que emite el AP, las estaciones transmiten y
reciben todo los paquetes que tuvieran en cola para ello y luego se duermen.
2º- Se producen cambios en el tiempo de transmisión al añadir las tramas PS-POLL
que se envían por cada trama transmitida.
3º- Se producen cambios en el tiempo de recepción al añadir la recepción de las
tramas PS-POLL de las otras dos estaciones inalámbricas.
4º- Se producen cambios en el tiempo de escucha o idle:
a) Por cada trama que transmite una estación, esta misma estación debe
esperar un tiempo dado por el tamaño medio de la ventana de acceso al
canal. En el estándar 802.11b este tamaño se cuenta por el número de time
slots que tengo que esperar. El valor de un time slot es 10 microsegundos.
b) De las características del protocolo de acceso al medio DCF (Distributed
Coordination Function) sabemos que por cada una de las tramas que han
sido transmitidas por cada una de las estaciones inalámbricas, debo
esperar un número de time slots DIFS (DCF Interframe Space) más un
número de time slots SIFS (Short Interframe Space).
c) Por cada trama beacon que ha enviado el AP debo esperar un tiempo de
guarda para que la interfaz inalámbrica conmute de modo dormido a modo
activo.
Página 122
5º- El tiempo que la interfaz inalámbrica no esté ni transmitiendo, ni recibiendo ni
escuchando, estará dormida.
6º- Se presupone que no hay pérdidas y que por tanto la ventana de contención va
entre 0 y 32.
Con estas modificaciones calculamos los tiempos de transmisión, recepción, escucha
y modo dormida que emplea una estación inalámbrica durante una conversación de VoIP.
Para la aplicación de cada uno de estos scripts debemos de situar dichos scripts en el
mismo directorio que los archivos de entrada en formato “csv”. Un ejemplo de la
utilización de estos ficheros se observa a continuación.
$ sed '1d' fichero_entrada.csv | awk -f ener.awk > fichero_salida.txt
Con el comando “sed” quitamos la primera línea del fichero de entrada que muestra
los campos contenidos en el fichero en formato “csv” (véase figura 77). El resultado de esta
operación es pasado al fichero que calcula la energía, el cual realiza los cálculos
correspondientes y guarda los resultados en un fichero de salida.
A partir del tiempo de transmisión de cada uno de los estados de la interfaz
inalámbrica (transmisión recepción, escucha y dormida) podemos calcular la energía
consumida por dicha interfaz inalámbrica mediante la siguiente expresión:
E J = PTX · TTX + PRX · TRX + PLISTEN · TLISTEN + PSLEEP · TSLEEP
donde PTX, PRX, PLISTEN y PSLEEP corresponden a las potencias en transmisión, recepción,
escucha del canal y modo dormido de una estación inalámbrica. De igual manera, TTX, TRX,
TLISTEN y TSLEEP corresponden a los tiempos en transmisión, recepción, escucha del canal y
modo dormido de una estación inalámbrica. Se han escogido los siguientes valores típicos
de potencias para una interfaz inalámbrica:
PTX = 1650 mW
PRX = 950 mW
PLISTEN = 800 mW
PSLEEP = 40 mW