Skip to main content
Technology|Network Engineer / Performance Engineer

Global Network Performance Testing

Measure latency, reachability, and routing from 18 cloud regions worldwide

Users experience your application differently depending on their geography. EdgeDNS provides real ICMP ping and traceroute from 18 globally distributed cloud regions, giving you ground-truth performance data to optimize user experience worldwide.

The Challenge

Synthetic monitoring from a single location masks regional performance problems. CDN misrouting, peering issues, and geographic latency spikes are invisible from your office. Traditional tools lack global reach, and cloud provider monitoring only shows performance within their own network — not the real user path.

The Solution

Use EdgeDNS global ping and traceroute endpoints to measure real ICMP latency and routing from 18 cloud regions across North America, South America, Europe, Asia-Pacific, Oceania, Africa, and the Middle East. Combine with DNS propagation checks and response time measurements for complete performance visibility.

Endpoints Used

Combine these EdgeDNS endpoints to build this solution.

GET
/v1/network/pingTry in Playground

Global Ping: Real ICMP ping from 18 cloud regions with min/avg/max RTT, p50/p95/p99 percentiles, RFC 3550 interarrival jitter, and per-zone packet-loss percentages — the inputs SLA targets are written against

GET
/v1/network/tracerouteTry in Playground

Global Traceroute: ICMP traceroute with hop-by-hop ASN enrichment (Team Cymru), a deduplicated `as_path` per zone, per-hop p50/p95/jitter, and a private-hop flag for hops in RFC 1918 / cloud-internal space

GET
/v1/domain/response-timeTry in Playground

Response Time: Measure HTTP/HTTPS response time including TLS handshake

GET
/v1/dns/propagationTry in Playground

DNS Propagation: Check DNS consistency and resolution time across global resolvers

GET
/v1/domain/cdnTry in Playground

CDN Detection: Identify CDN provider and verify edge distribution

Results You Can Achieve

Real latency from 18 regions across 6 continents

Measured from real worker locations — not simulated or extrapolated data — with p95/p99 percentiles and RFC 3550 interarrival jitter alongside the usual min/avg/max so SLA reporting and tail-latency analysis are first-class outputs, not post-processing.

Routing-path visibility with per-hop ASN tagging

Every hop in every traceroute is enriched with its autonomous-system number, name, and country (via Team Cymru), and each zone exposes a deduplicated `as_path` mirroring `traceroute -A`. Asymmetric routing and bad peering choices become inspectable without a second tool.

CDN-performance verification per market

Region-by-region timing confirms whether your CDN actually serves users in target markets at the latency you contracted. The per-hop AS path makes "is this really going through Cloudflare end-to-end?" answerable from one response.

Code Example

Global network performance test

javascript
async function globalPerformanceTest(target) {
  const headers = { 'Authorization': 'Bearer YOUR_API_KEY' };

  const [ping, traceroute, responseTime, cdn] = await Promise.all([
    fetch(`https://api.edgedns.dev/v1/network/ping?host=${target}`, { headers }),
    fetch(`https://api.edgedns.dev/v1/network/traceroute?host=${target}`, { headers }),
    fetch(`https://api.edgedns.dev/v1/domain/response-time?domain=${target}`, { headers }),
    fetch(`https://api.edgedns.dev/v1/domain/cdn?domain=${target}`, { headers }),
  ].map(p => p.then(r => r.json())));

  // Analyze regional latency — use p95 as the primary SLA metric, not average.
  // The average smooths over the slow 5% of packets; p95 is what your SLA is written against.
  const regions = ping.data.results;
  const perRegion = regions.map(r => ({
    region: r.probe_zone,
    avgMs: r.latency_ms,
    p95Ms: r.p95_ms,
    p99Ms: r.p99_ms,
    jitterMs: r.interarrival_jitter_ms,
    packetLossPct: r.icmp_stats?.packet_loss_pct ?? 0
  }));

  // Flag any zone where p95 is more than 2x the global p95, OR loss > 5%, OR jitter > 30ms
  const globalP95 = ping.data.p95_ms ?? 0;
  const outliers = perRegion.filter(r =>
    (r.p95Ms && r.p95Ms > globalP95 * 2) || r.packetLossPct > 5 || (r.jitterMs ?? 0) > 30
  );

  // Build a per-zone summary of the AS path — useful for spotting transit-provider differences
  // that explain a regional latency cliff (e.g. one region routes via Cogent, another via NTT).
  const asPaths = traceroute.data.results.map(r => ({
    region: r.probe_zone,
    asPath: r.as_path,
    reachedDestination: r.reached_destination
  }));

  return {
    target,
    cdn: cdn.data.provider,
    globalP95Latency: globalP95 + 'ms',
    globalP99Latency: ping.data.p99_ms + 'ms',
    httpResponseTime: responseTime.data.total_ms + 'ms',
    regionCount: regions.length,
    bestRegion: perRegion.sort((a, b) => (a.p95Ms ?? Infinity) - (b.p95Ms ?? Infinity))[0],
    worstRegion: perRegion.sort((a, b) => (b.p95Ms ?? 0) - (a.p95Ms ?? 0))[0],
    outliers,
    asPaths,
    hasIssues: outliers.length > 0
  };
}

Learn More

Explore industry standards and best practices related to this use case.

Ready to build Global Network Performance Testing?

Get started with 200 free API requests per month. No credit card required.

Other Use Cases