College Online
0%

Metricas e Desempenho de Redes

Modulo 1 · Aula 3 ~20 min de leitura Nivel: Introdutorio

Video da aula estara disponivel em breve

Metricas fundamentais

Para avaliar o desempenho de uma rede, precisamos de metricas quantificaveis. As quatro metricas fundamentais sao:

Largura de banda (Bandwidth)

Largura de banda e a taxa maxima teorica de transmissao de dados em um link, medida em bits por segundo (bps). E a "capacidade" do cano.

Referencia
Unidades comuns:
  1 Kbps  = 1.000 bps          (mil)
  1 Mbps  = 1.000.000 bps      (milhao)
  1 Gbps  = 1.000.000.000 bps  (bilhao)

Exemplos de largura de banda:
  Wi-Fi 6 (802.11ax):  ~1-10 Gbps (teorico)
  Ethernet (Cat6):     1 Gbps ou 10 Gbps
  Fibra otica:         100 Gbps+
  4G LTE:              ~100 Mbps
  5G:                  ~1-10 Gbps

Latencia (Latency / Delay)

Latencia e o tempo que um bit leva para ir da origem ao destino. E composta por quatro componentes:

Diagrama
Latencia total = d_proc + d_fila + d_trans + d_prop

d_proc  = Atraso de processamento
          Tempo para examinar o cabecalho e decidir para onde encaminhar
          Tipicamente: microsegundos

d_fila  = Atraso de fila (queueing delay)
          Tempo esperando na fila do roteador
          Variavel: depende do trafego (pode ser 0 ou centenas de ms)

d_trans = Atraso de transmissao
          Tempo para colocar todos os bits do pacote no link
          = L / R  (L = tamanho do pacote, R = bandwidth do link)

d_prop  = Atraso de propagacao
          Tempo para o sinal viajar pelo meio fisico
          = d / s  (d = distancia, s = velocidade de propagacao)
          Fibra: s ≈ 2 x 10^8 m/s  (2/3 da velocidade da luz)
*
Analogia do pedagio Imagine uma caravana de 10 carros (bits de um pacote) passando por varios pedagios (roteadores). O atraso de transmissao e o tempo para todos os carros passarem pelo pedagio. O atraso de propagacao e o tempo para um carro viajar entre dois pedagios. O atraso de fila e o tempo esperando outros carros.

Throughput (Vazao)

Throughput e a taxa real de transferencia de dados, medida em bps. Enquanto bandwidth e a capacidade teorica, throughput e o que realmente se consegue. Throughput ≤ bandwidth, e geralmente e menor devido a overhead de protocolos, congestionamento, e perdas.

Python
import time
import requests

# Medindo throughput de um download
url = "https://speed.cloudflare.com/__down?bytes=10000000"  # 10 MB

start = time.time()
response = requests.get(url)
elapsed = time.time() - start

bytes_received = len(response.content)
throughput_bps = (bytes_received * 8) / elapsed
throughput_mbps = throughput_bps / 1_000_000

print(f"Bytes: {bytes_received:,}")
print(f"Tempo: {elapsed:.2f}s")
print(f"Throughput: {throughput_mbps:.1f} Mbps")

Perda de pacotes (Packet Loss)

Quando um roteador recebe pacotes mais rapido do que pode processá-los, os pacotes excedentes sao descartados (dropped). A taxa de perda de pacotes e a fracao de pacotes perdidos em relacao ao total enviado.

Jitter

Jitter e a variacao na latencia entre pacotes consecutivos. Um jitter alto e problematico para aplicacoes de tempo real (VoIP, video). Se pacotes chegam com intervalos irregulares, o audio ou video fica entrecortado.

Calculando atrasos

Python
# Calculando os componentes de atraso

# Parametros
L = 1500 * 8       # Tamanho do pacote: 1500 bytes = 12000 bits (MTU padrao)
R = 100e6           # Bandwidth do link: 100 Mbps
d = 5000e3          # Distancia: 5000 km (ex: SP a NY)
s = 2e8             # Velocidade em fibra: 2/3 da luz
d_proc = 0.00001   # Processamento: 10 microsegundos
d_fila = 0.002     # Fila: 2 ms (estimativa)

# Calculos
d_trans = L / R                 # Transmissao
d_prop = d / s                  # Propagacao
d_total = d_proc + d_fila + d_trans + d_prop

print(f"Transmissao: {d_trans*1000:.3f} ms")
print(f"Propagacao:  {d_prop*1000:.1f} ms")
print(f"Total:       {d_total*1000:.1f} ms")

# Resultado:
# Transmissao: 0.120 ms  (rapido — link de 100 Mbps)
# Propagacao:  25.0 ms   (dominante — 5000 km)
# Total:       27.1 ms   (one-way)
# RTT ≈ 54.2 ms          (ida + volta)

Bottleneck analysis

O gargalo (bottleneck) e o link com menor capacidade no caminho entre origem e destino. O throughput end-to-end e limitado pelo link mais lento:

Diagrama
A ---[100 Mbps]--- R1 ---[10 Mbps]--- R2 ---[1 Gbps]--- B
                          ^^^^^^^^^
                          GARGALO

Throughput maximo A->B = 10 Mbps (limitado pelo link mais lento)

E como um encanamento:
  =====[grosso]=====--[fino]--=====[grosso]=====
  A vazao maxima e definida pelo trecho mais estreito.

Ferramentas de medicao

Python
import subprocess
import re
import statistics

def measure_rtt(host, count=10):
    """Mede RTT usando ping e calcula estatisticas."""
    result = subprocess.run(
        ["ping", "-c", str(count), host],
        capture_output=True, text=True
    )

    # Extrair tempos de RTT
    times = [float(m) for m in
             re.findall(r"time=(\d+\.?\d*)", result.stdout)]

    if times:
        print(f"Host: {host}")
        print(f"  Min RTT:    {min(times):.1f} ms")
        print(f"  Max RTT:    {max(times):.1f} ms")
        print(f"  Media RTT:  {statistics.mean(times):.1f} ms")
        print(f"  Jitter:     {statistics.stdev(times):.1f} ms")
        print(f"  Perda:      {(count - len(times))/count*100:.0f}%")

measure_rtt("google.com")
measure_rtt("8.8.8.8")

No harness.os

As metricas de rede tem analogos diretos no harness.os:

Diagrama
Metrica de Rede          Analogia harness.os
───────────────          ────────────────────
Bandwidth                Token window size (max tokens por request)
Latency                  Tempo de resposta do MCP tool call
Throughput               Tokens uteis processados por minuto
Packet loss              Chamadas MCP que falharam / timeout
Jitter                   Variacao na latencia entre tool calls
RTT                      Tempo ida+volta de um tool call
Bottleneck               Componente mais lento (Neon query? LLM inference?)
Cache hit rate           Prompt cache hit rate (% de tokens cacheados)
Python
import time

def measure_mcp_latency(tool_fn, *args, iterations=5):
    """Mede latencia de chamadas MCP tool."""
    latencies = []
    for _ in range(iterations):
        start = time.perf_counter()
        result = tool_fn(*args)
        elapsed = time.perf_counter() - start
        latencies.append(elapsed * 1000)  # ms

    print(f"MCP Tool Call Latency:")
    print(f"  Min:   {min(latencies):.1f} ms")
    print(f"  Max:   {max(latencies):.1f} ms")
    print(f"  Media: {sum(latencies)/len(latencies):.1f} ms")
    return latencies

Resumo

Exercicio pratico

Meca a latencia de chamadas MCP do harness.os.

  1. Use time em Python para medir o RTT de 10 chamadas MCP consecutivas
  2. Calcule media, minimo, maximo e jitter (desvio padrao)
  3. Compare latencia de MCP stdio (local) vs. MCP HTTP/SSE (remoto)
  4. Identifique o gargalo: e a rede, o processamento do MCP, ou a query ao Neon?
  5. Compare com o prompt cache hit rate — tokens cacheados reduzem a "latencia efetiva"?

Verifique seu entendimento

Um pacote de 1500 bytes e transmitido em um link de 1 Gbps. Qual e o atraso de transmissao?

  • 1.5 ms
  • 0.012 ms (12 microsegundos)
  • 12 ms
  • Depende da distancia do link