Si algunos de nuestros foros, manuales, ALDOS, paquetería o proyectos te han resultado de ayuda, apreciaremos mucho nos apoyes con un donativo.

Control de Ancho de banda con Squid: Delay Pools

Autor: Jaime M. Tan Nozawa
Correo electrónico: jtnozawa@gmail.com
Procedencia del autor: Lima-Perú

Creative Commons License
Esta obra está bajo una licencia de Creative Commons.

© 2008 Jaime M.Tan Nozawa. Usted es libre de copiar, distribuir y comunicar públicamente la obra y hacer obras derivadas bajo las condiciones siguientes: a) Debe reconocer y citar al autor original. b) No puede utilizar esta obra para fines comerciales (incluyendo su publicación, a través de cualquier medio, por entidades con fines de lucro). c) Si altera o transforma esta obra o genera una obra derivada, sólo puede distribuir la obra generada bajo una licencia idéntica a ésta. Al reutilizar o distribuir la obra, tiene que dejar bien claro los términos de la licencia de esta obra. Alguna de estas condiciones puede no aplicarse si se obtiene el permiso del titular de los derechos de autor. Los derechos derivados de usos legítimos u otras limitaciones no se ven afectados por lo anterior. Licencia completa en castellano. La información contenida en este documento y los derivados de éste se proporcionan tal cual son y los autores no asumirán responsabilidad alguna si el usuario o lector hace mal uso de éstos. 


Delay Pools 

Delay pools es la respuesta de Squid frente al control de ancho de banda y el traffic shaping (catalogación de tráfico). Esto se realiza limitando el rate que el Squid retorna los datos desde su cache.

Los delay pools son en esencia "cubos de ancho de banda” (bandwidth buckets). La solicitud a una respuesta es demorada hasta que cierta cantidad de ancho de banda esté disponible desde un cubo. Squid llena con cierta cantidad de tráfico los cubos por cada segundo y los clientes del Cache consumen los datos llenados desde esos cubos.

El tamaño de un cubo determina cuánto límite de ancho de banda está disponible en un cliente. Si un cubo se encuentra lleno, un cliente puede descargar a máxima velocidad de la conexión disponible(sin limitación de rate) hasta que éste se vacíe. Después que se vacíe recibirá el límite de tráfico asignado.

Se requiere varios conceptos que Squid usa para el control de Delay Pools:

  • Listas de control de acceso (Access rules)
  • Clases de Delay Pools (Delay pool classes)
  • Tipo de cubos (buckets)

 

Secuencia lógica:

  1. Squid verifica en qué delay_access te encuentras

  2. Si concuerda con una, esta apunta hacia un delay pool específico
  3. Cada delay pool tiene una clase: 1 , 2 , 3.
  4. La clase determina que tipo de cubo estás usando. Squid tiene 3 tipos: Global (agregate), individual , red (network)
    • La clase 1 tiene un único cubo Global (agregate)
    • La clase 2 tiene un cubo Global (agregate) y 256 cubos Individual
    • La clase 3 tiene un cubo Global (agregate) y 256 cubos de Red y 65536 cubos Individual.


Puede uno desactivar cubos que no van a ser utilizados, por ejemplo en la clase 2 puede uno desactivar el cubo global y solo utilizar los cubos Individual.

Por razones obvias se toma siempre el ancho de banda menor. Por ejemplo, considere la posibilidad de una clase 3 cubos agregate, network e Individual. Si tiene en Individual 20 KB, En network 30 KB, pero el agregate tiene 2 KB, el cliente recibirá sólo 2-KB.

  

Directivas: 

  • delay_pools: Define cuantos delay pools se van a utilizar

    • Ejemplo:
      • delay_pool 5: Define 5 Delay pools que serán configurados posteriormente.
  • delay_class: Define la clase del delay pool. Para evitar complicaciones es recomendable tener siempre un delay_class para cada delay pool definido.

    • Ejemplo:

      • delay_class 1 3   ( Define el delay pool 1 que sea de tipo 3).
      • delay_class 5 2   (Define el delay pool 5 que sea de tipo 2).
  • delay_parameters: Este es el parámetro crítico en el cual se limita el ancho de banda. Para cada Delay Pool se debe definir: el fill rate (tráfico de llenado) y el tamaño máximo de cada cubo.

delay_parameters N rate/size [rate/size [rate/size]] 


El valor del r
ate está definido en bytes por segundo y size en total de bytes.

Si se divide el size entre el rate, Dispondrás el tiempo en segundos que el cubo se llenará si el cliente no está consumiendo. 


Una Pool de clase 1 que dispone de un solo cubo sería definido como sigue:

delay_class 2 1
delay_parameters 2 2000/8000 


Para un Pools de clase 2, El primer cubo es aggregate y el segundo es un grupo de cubos individuales:

delay_class 4 2
delay_parameters 4 7000/15000 3000/4000 

 

De esta forma la red "toda la red" dispondrá en los primeros 15 Kb (tamaño del cubo) descarga a velocidad máxima sin restricción, despues de haber descargado los primeros 15Kb (se vació el cubo), descargará a 7KB. Igualmente cada cliente solo podrá descargar rápidamente los primeros 4Kb , después descargará establemente siempre a 3 Kb. 
 

  • delay_initial_bucket_level: Dice que tan lleno estará el cada cubo al iniciar el Squid. Se indica en porcentajes

delay_initial_bucket_level 75%

 

  • delay_access: permite relacionarlo a una ACL específica. Es similar a las reglas de acceso de Squid , pero es necesario definir el número de Pool antes del allow o deny. 

delay_access 1 deny gerentes
delay_access 1 allow mi_red
delay_access 5 allow mime_extensiones

Squid define una lista de acceso separada para cada Delay Pool. Puede disponer de un allow o un deny. Si es allow utiliza esa regla y no sigue buscando en las siguientes de ese Pool. Si es deny, automáticamente cancela la búsqueda en ese Pool, pero seguirá buscando en las listas de acceso de los otros pools.


http://es.geocities.com/jtnozawa/delaypoolsCaso_1.jpg

   

http://es.geocities.com/jtnozawa/delaypoolsCaso_2.jpg 

 

Ejemplos:

  • Limita a todo el mundo a 64 KBytes y mantiene 1 MB en reserva si Squid está inactivo:

 

delay_pools 1
delay_class 1 1
delay_parameters 1 65536/1048576

 

acl All src 0/0
delay_access 1 allow All

  • No se va a utilizar los cubos de Red. Nuestro ancho de banda Global es de 64 KB/s, pero se limitará a cada uno de los 65536 posibles clientes en 16 Kbit/s.

 

delay_pools 1
delay_class 1 3
delay_parameters 1 65536/1048576 -1/-1 16384/262144

 

acl All src 0/0
delay_access 1 allow All

 

# -1 significa ilimitado

 

  • Por clase de servicio. Usamos las acl gerentes, con 65 KB y los demás con 10 KB. Adicionalmente se limita la descarga por mime a 5Kb pero no a los gerentes.

 

delay_pools 3
delay_class 1 1
delay_class 2 1
delay_class 3 1

 

delay_parameters 1 65536/1048576
delay_parameters 2 10000/50000
delay_parameters 3 5000/30000

 

acl Gerentes src 192.168.8.0/22
acl Todos src 0/0
acl extensiones rep_mime_type "/etc/squid/mis_tipos_mime"

 

delay_access 1 allow Gerentes
delay_access 2 allow Todos
delay_access 3 deny gerentes
delay_access 3 allow extensiones

 

  

Caso Real:  /etc/squid/squid.conf

# 3 acl .. red local, conjunto de extensiones y una IP especifica

acl mi_red src 192.168.1.0/24
acl extdown url_regex -i "/etc/squid/extdown"
aclunaPC src 192.168.1.46

delay_pools 2
# Se define un delay pool N1 de tipo clase 2
# se le asigna a : unaPC
# se limita 13Kb rate / 13Kb Max para la red
# se limita 6 Kb rate / 6 Kb Max por IP

delay_class 1 2
delay_access 1 allow unaPC
delay_access 1 deny all
delay_parameters 1 13000/13000 6095/6095

# Se define un delay pool N2 de tipo clase 2
# se le asigna a las extensiones : extdown
# se limita 4Mb rate / 1Mb Max para la red
# se limita 15 Kb rate / 500 Kb Max por IP

delay_class 2 2
delay_access 2 allow extdown
delay_access 2 deny all
delay_parameters 2 4000000/1000000 15000/500000

 

Preguntas rápidas para ociosos:

 

  1. No entendí nada eso de los cubos, solo quiere saber como se limita la red 1: 100 KB    y  la red 2 : 10 KB

    En un caso rápido de no aplicar el concepto de cubos, es posible asignar el tamaño del cubo el mismo que el del rate. Usando la gráfica como ejemplo,  podría decirse que si el cubo es el mismo tamaño que el del rate, es como si el cubo no existiera :
    http://es.geocities.com/jtnozawa/delay_pools_3.jpg

    acl red1 src 192.168.1.0/24        # red 1
    acl red2 src 192.168.2.0/24       # red 2
    delay_pools 2                     # voy a tener 2 delay pools

    delay_class 1 1                   # el delay pool 1  es de clase 1
    delay_class 2 1                    # el delay pool 2  es de clase 1

    delay_access 1 allow red1          # el delay pool 1  para la red 1
    delay_access 2 allow red2          # el delay pool 2  para la red 2

    delay_parameters 1 100000/100000   # el delay pool 1  con 100 Kb
    delay_parameters 2 10000/10000     # el delay pool 2  con 10 Kb

 

Si algunos de nuestros foros, manuales, ALDOS, paquetería o proyectos te han resultado de ayuda, apreciaremos mucho nos apoyes con un donativo.

Última Edición: 12/02/2009, 17:20|Hits: 80,877 Ver la versión para imprimir