Simulación de Eventos Discretos · Tema 44

Curvas de desempeño

Cómo se degradan espera y cola con la carga — la pared dibujada para decidir SLA y capacidad de un vistazo.

01 · Punto de partida

Un número no degrada, una curva sí

“ρ = 0.8” no dice si queda margen: la curva Wq(ρ) sí —plana hasta 0.7, codo en 0.85, pared en 0.95. Con S = 2 y c = 1, pasar λ de 0.4 a 0.45 (+12%) duplica Wq de 8 a 18: la curva lo grita, el número lo susurra.

Trazar Wq(ρ), L(ρ) y P(espera) para tu (μ, c) convierte el dimensionamiento en lectura de gráfico: SLA horizontal, punto operativo y λ máxima admisible.

  • ¿Cómo trazo Wq(ρ) para mi sistema?
  • ¿Dónde está el codo y qué margen dejo?
  • ¿Qué λ máxima cumple mi SLA?
  • ¿Cómo aplana la curva sumar c?

02 · Definición

Eje, curvas y codo

ρ

Eje

Carga 0 → 1 (barriendo λ o S). Cada punto es un régimen distinto del mismo sistema.

↗

Curvas

Wq(ρ), L(ρ), C(ρ): con Erlang exactas en M/M/c; con sim donde no hay fórmula.

⌐

Codo

Zona 0.7–0.85 donde la pendiente se dispara. Debajo hay margen; encima, cada décima duele.

M/M/1, S = 2 (μ = 0.5): la pared en números.
ρ (λ)WqZona+0.05 de ρ suma
0.50 (0.25)2Plana+1 min
0.70 (0.35)4.7Codo+3 min
0.85 (0.425)11.3Pared+9 min
0.95 (0.475)38No operar+∞

03 · El corazón: leer la pared

SLA horizontal, punto y margen

trazar Wq(ρ)→cortar con SLA→λmáx y margen

La línea SLA (ej. Wq ≤ 5) corta la curva en λmáx: todo λ debajo cumple. La distancia del punto operativo a λmáx (o de ρ a 1) es el margen que absorbe picos y crecimiento. Sumar c aplana la curva: el mismo SLA admite más λ.

  1. 1
    Fijar (μ, c).

    Lo que no cambia en el horizonte: servicio y servidores.

  2. 2
    Barrer ρ.

    λ de 0 a cμ con Erlang (o sim por punto donde no hay fórmula).

  3. 3
    Cortar con el SLA.

    λmáx = mayor λ con Wq ≤ objetivo (bisección en código).

  4. 4
    Ubicar el punto.

    ρ operativa con su Wq; margen = λmáx − λ (o 1 − ρ).

Hipérbola 1/(1−ρ)
La forma de toda espera markoviana: derivada 1/(1−ρ)² que explota. De ahí el codo.
SLA horizontal
“Wq ≤ 5” es una recta: lo que está debajo cumple. Cambiar el SLA mueve λmáx por la curva.
Aplanada por c
Más c baja y aplana Wq(ρ) a igual ρ (economías de escala, Tema 32): el codo se corre a la derecha.
Curva simulada
Sin fórmula (G/G/c, prioridades): un punto sim por ρ con warmup y réplicas. Cara pero universal.

Debajo del codo

Margen

Wq crece suave: +10% λ ≈ +10–20% espera. Se opera aquí, con aire para picos.

Pasado el codo

Pared

+10% λ duplica Wq. Solo se opera con SLA laxo, pico breve o fuga aceptada (K).

04 · Ejemplos

Tres lecturas de curva

  1. 1
    Banco c = 1, SLA Wq ≤ 5.

    λmáx ≈ 0.36 (ρ ≈ 0.72): el codo manda cerrar turnos antes.

  2. 2
    Call center c = 8, a = 6.

    Opera en ρ = 0.75 bajo el codo aplanado por c: margen para +1 erlang.

  3. 3
    Web, latencia ≤ 0.1 s.

    La curva latencia-throughput fija el autoscaling: escalar al acercarse al codo, no en la pared.

05 · Representación en Python

Trazar y cortar en dos bloques

Barrer ρ con Erlang y buscar λmáx por bisección: la curva como lista, el SLA como corte.

Python en tu navegador. El primero traza Wq(ρ) c = 1..3; el segundo halla λmáx para tu SLA. Cambiá el objetivo.

# Curva Wq(rho) M/M/1, S=2 (mu=0.5)
mu = 0.5
for rho in [0.5, 0.7, 0.85, 0.95]:
    print(f"rho={rho} Wq={rho/(mu*(1-rho)):.1f}")
# λ máx con Wq<=5 (M/M/1, mu=0.5): barrido fino
mu, sla = 0.5, 5.0
lam_max = max(l/100 for l in range(1, 50) if (l/100)/(mu*(mu-l/100)) <= sla)
print(f"lambda_max={lam_max:.2f} (rho={lam_max/mu:.2f})")

06 · Exploración

Laboratorio: la pared dibujada

Curvas Wq(ρ) exactas (Erlang) para c = 1, 2, 3 con S = 2. Elegí tu c y tu λ operativa: el punto marca tu (ρ, Wq); la recta es tu SLA y la cruz es λmáx. Movè el SLA y mirá cómo se corre el corte.

EXPERIMENTO 44

SLA que corta, margen que queda

Wq(ρ) Erlang · S=2

Los resultados numéricos aparecen debajo.
ρ operativa0
Wq operativa0
λ máx (SLA)0
Margen λ0

Movè λ hacia la pared.

Eje ρ 0–1, tres curvas por c (c = 1 la más alta). Punto = tu operación; recta = SLA; cruz = λmáx que cumple.

Preguntas para explorar

  1. Con c=1, SLA=5: ¿λmáx? ¿ρ? ¿Coincide con el codo?
  2. Con λ=0.7 (a=1.4): ¿Wq con c=1 (ρ=1.4)? ¿Y con c=2 (ρ=0.7)?
  3. Subí el SLA a 10 con c=1: ¿cuánto se corre λmáx? ¿Y si sumás c=2 con SLA=5?
Ver respuestas sugeridas
  1. λmáx ≈ 0.36 (ρ ≈ 0.71): el SLA corta justo en el codo. Diseñar ahí es diseñar con margen cero.
  2. c=1: avalancha (sin punto); c=2: Wq ≈ 1.9. La curva aplanada rescata.
  3. SLA=10 ⇒ λmáx ≈ 0.41; c=2 con SLA=5 ⇒ λmáx ≈ 0.85: sumar c rinde más que relajar SLA.

07 · Comprensión

Confusiones frecuentes

«La espera crece lineal con λ»

Crece hiperbólica: +0.05 de ρ en la pared suma lo que +0.3 en la plana. Proyectar lineal subestima el pico.

«El codo es siempre ρ = 0.8»

Depende de c, Cs² y SLA: con c = 8 el codo operativo se corre a 0.85+; con gigantes se adelanta.

«Opero en ρ = 0.95 porque la media da»

La media da pero la varianza y el transitorio no: cualquier rafaguita te lleva a 40 min. Pared = apuesta.

«La curva medida con T=30 es la curva»

Es transitorio + ruido dibujado. La curva se traza con fórmula o con sim en régimen por punto.

08 · Práctica guiada

Ejercicios con Python

Ejercicio 1: tabla de la pared

S=2, ρ=0.5, 0.7, 0.85, 0.95. ¿Wq? ¿Cuánto suma +0.05 en cada zona?

# 2.0, 4.7, 11.3, 38.0: la última fila paga la hipérbola
for rho in [0.5, 0.7, 0.85, 0.95]:
    print(rho, round(rho/(0.5*(1-rho)), 1))
Ver solución razonada

La tabla de la sección 02: +0.05 suma 1, 3, 9 e ∞ según la zona. Leer la pendiente es leer el riesgo.

Ejercicio 2: λ máx

M/M/1, μ=0.5, SLA Wq ≤ 5. Hallá λmáx por barrido y reportá ρ.

# lambda_max ≈ 0.36 (rho ≈ 0.71): ver bloque de la sección 05
print("El SLA corta en el codo: margen cero por diseño")
Ver solución

0.36/0.71: si λ crece 10% (0.40), Wq sube a 8 (+60%). Ese es el precio del codo.

Ejercicio 3: aplanar con c

λ=0.7, S=2 (a=1.4): ¿Wq con c=1, 2, 3? (Usá tu mmc del Tema 32.)

Ver una posible respuesta
# c=1: avalancha; c=2 (rho=0.7): ~1.9; c=3 (rho=0.47): ~0.3
print("Cada c aplana la curva: el SLA se compra con servidores")

De ∞ a 1.8 a 0.3: la curva cuenta lo que el promedio esconde.

09 · Síntesis

Ideas para recordar

  • Wq(ρ) hiperbólica: plana, codo (0.7–0.85), pared.
  • SLA horizontal → λmáx; margen = λmáx − λ.
  • Más c aplana: mismo SLA admite más λ.
  • En Python: barrer ρ con Erlang + bisección al SLA.
  • Curva = régimen: ni T corto, ni percentiles, ni picos.

En el próximo tema buscaremos al culpable con la curva en mano: los cuellos de botella.