Metricas e Desempenho de Redes
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.
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:
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)
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.
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
# 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:
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
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:
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)
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
- Bandwidth: capacidade teorica maxima do link (bps)
- Latencia = processamento + fila + transmissao + propagacao
- Throughput: taxa real de transferencia (≤ bandwidth)
- Packet loss: fracao de pacotes perdidos
- Jitter: variacao na latencia entre pacotes
- O gargalo (bottleneck) limita o throughput end-to-end
Exercicio pratico
Meca a latencia de chamadas MCP do harness.os.
- Use
timeem Python para medir o RTT de 10 chamadas MCP consecutivas - Calcule media, minimo, maximo e jitter (desvio padrao)
- Compare latencia de MCP stdio (local) vs. MCP HTTP/SSE (remoto)
- Identifique o gargalo: e a rede, o processamento do MCP, ou a query ao Neon?
- 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?