Posted on Oct 5, 2026 · Updated Oct 5, 2026 · 13 min read

AWS Graviton Cost Savings: Is the ARM Migration Worth It? (2026)

The short answer: the list-price discount is the smaller and easier half of the Graviton decision. AWS prices Graviton (ARM-based) instances roughly 10–20% below their x86 equivalents in the same instance family, and separately claims up to 40% better price-performance for workloads that are well suited to the architecture — that second number is a vendor claim, not an independent benchmark, and it only shows up when your workload actually benefits from more, slower cores. The part that actually decides whether a migration is worth doing is migration cost, and that cost varies by workload from "a one-sprint change" (a container built on a multi-arch base image) to "potentially never" (a vendor agent with no ARM build, or a license tied to CPU architecture).

Prices in this article are illustrative 2026 on-demand list prices for us-east-1 with no Savings Plan, RI, or spot discount applied. AWS changes EC2 pricing regularly and prices differ by region, so rebuild the tables below with current numbers before you put them in a budget — treat the percentages as the durable part and the dollar figures as a snapshot. One caveat before the architecture discussion: for a lot of fleets, the bigger win is not changing CPU architecture at all. Our breakdown of cloud waste and overprovisioning makes the case that right-sizing usually beats re-architecting — if half your fleet is running at 10% CPU utilization against its requests, fix that first. A correctly-sized x86 instance can beat an oversized Graviton instance that still has not addressed the sizing problem.

TL;DR — AWS Graviton cost savings (2026)

  • Instance-price discount: Graviton typically lists 10–20% below the equivalent x86 instance, before any performance difference is counted
  • Price-performance claim: AWS claims up to 40% better price-performance for suitable workloads — a vendor claim, not an independent benchmark
  • Start with managed services: RDS/Aurora, ElastiCache, OpenSearch, EKS/ECS nodes, Lambda arm64, and Fargate ARM all let you flip a setting with zero code change
  • Triage self-managed workloads by dependency, not language: interpreted containers and Go move in a sprint; compiled dependencies need validation time; x86-only vendor agents and locked licenses may never be worth moving
  • Hidden costs are real: multi-arch CI, a dual-image rollout period, and engineer validation time all eat into the gross saving
  • Commitments are architecture-specific: walking away from an x86 Savings Plan or RI mid-term can strand money — sequence the migration to its expiry, not around it
  • Containerized web tiers are usually the best ROI: a 40-instance stateless fleet can pay back migration effort in under a year below
  • Benchmark before committing: watch p99 latency, not mean — Graviton's per-core profile differs from x86 even when aggregate throughput looks fine
Server racks representing ARM-based cloud compute instances

The two numbers everyone conflates

The instance-price discount and the price-performance claim are two different numbers, and conflating them is the single most common reason a Graviton migration disappoints. The discount is what AWS lists on the price sheet: a given Graviton instance class costs roughly 10–20% less per hour than the equivalent x86 instance class in the same family, for the same vCPU and memory allocation. You get that number just by switching the instance type — no code changes, no recompilation, nothing about your workload matters.

The price-performance claim is different and much less guaranteed. AWS states that Graviton delivers up to 40% better price-performance than comparable x86 instances for suitable workloads — AWS's own published claim, not an independent benchmark, and "suitable" is doing a lot of work. It applies to workloads that scale well across more vCPUs at a somewhat lower clock speed: stateless web services, microservices, many data-processing jobs. It applies far less to single-threaded work bound to per-core clock speed, x86-only vendor libraries, or workloads actually bottlenecked on a database rather than CPU.

The practical implication: capturing only the 10–20% instance discount on a workload that does not benefit from Graviton's performance profile is still a real, near-zero-effort saving on a managed service. Expecting the 40% figure on every workload you touch will disappoint you on most of them — and on the wrong one, enough to land at a net loss once migration cost is counted.

Where Graviton already exists in your bill

Start with the services where Graviton is just an instance-class or configuration flag, because that is where you capture the discount with effectively zero application risk. AWS has pushed Graviton options into most of its managed compute and data services, and in every one of these, moving to Graviton means changing a setting, not shipping code:

  • RDS and Aurora. Graviton-based instance classes are a direct swap for the equivalent x86 class on the same engine — same data, a short failover, no application change.
  • ElastiCache. Graviton node types for Redis and Memcached swap in the same way; nothing on the client side changes.
  • OpenSearch. Graviton-based data node instance types are a configuration change on the domain.
  • EKS and ECS worker nodes. Add a Graviton-based node group or capacity provider — provided your container image is multi-arch (more under hidden costs below).
  • Lambda. Set the function's architecture to arm64. For interpreted runtimes this is almost always a no-op redeploy; for functions with native extensions, it is not.
  • Fargate. ARM64 is a CPU architecture setting on the task definition.

Most teams should start here, not with a self-managed EC2 fleet. The managed-service list above captures the instance-price discount on infrastructure you are already running, on a migration path AWS has already tested at scale, before you spend any engineering time on your own services.

What the discount actually looks like

The discount is consistent across instance families but not identical — expect roughly 15% on general-purpose and compute-optimized classes, and closer to 20% on memory-optimized classes. The table below shows illustrative 2026 on-demand list prices for us-east-1, xlarge-sized instances, x86 versus the Graviton equivalent in the same family:

Familyx86 class / priceGraviton class / priceDiscount
General purposem6i.xlarge — ~$0.192/hr (~$140/mo)m7g.xlarge — ~$0.163/hr (~$119/mo)~15%
Compute optimizedc6i.xlarge — ~$0.170/hr (~$124/mo)c7g.xlarge — ~$0.145/hr (~$106/mo)~15%
Memory optimizedr6i.xlarge — ~$0.252/hr (~$184/mo)r7g.xlarge — ~$0.202/hr (~$147/mo)~20%
Monthly Instance Cost: x86 vs Graviton (xlarge, us-east-1)General purpose$140 (x86)$119 (Graviton)Compute optimized$124 (x86)$106 (Graviton)Memory optimized$184 (x86)$147 (Graviton)

Illustrative 2026 us-east-1 on-demand list prices, xlarge instance size, no commitment discounts applied. Rebuild with current AWS pricing before budgeting.

These are on-demand prices with no Savings Plan, RI, or spot discount applied, and AWS revises EC2 pricing on a rolling basis — rebuild this table with current numbers before using it in a budget. The pattern that tends to hold across price refreshes: Graviton's discount shows up as a lower hourly rate for the identical vCPU/memory shape, not as a different shape you have to re-architect around.

The triage framework

Classify every workload into one of three tiers before you schedule any migration work, because the effort required ranges from zero to effectively infinite, and the instance-price discount alone does not tell you which tier a given workload is in.

Tier 1 — move this week

Interpreted-language containers (Python, Node.js, Ruby, PHP, JVM without native extensions), Lambda functions on standard runtimes, managed-service instance classes (RDS, Aurora, ElastiCache, OpenSearch), and Go services. Diagnostic question: does everything in the dependency tree already publish a linux/arm64 build? If yes, there is no reason to wait.

Tier 2 — needs a sprint

Services with native extensions or compiled dependencies (Python C extensions, native Node.js modules, JVM JNI calls), CI/CD pipelines that only build one architecture today, and any performance-sensitive hot path that has never been profiled. Diagnostic question: can every dependency be rebuilt for arm64, and can the pipeline produce a multi-arch image without blowing up build time? If yes to both, budget a sprint for the migration and validation.

Tier 3 — do not bother (yet, or possibly ever)

x86-only vendor agents with no published arm64 build, software under a license or support contract tied to CPU architecture, and binary-only third-party dependencies you cannot rebuild from source. Diagnostic question: do you control the source, and does the vendor have a public ARM roadmap? If either answer is no, leave the workload on x86 until that changes.

The hidden costs that eat into the gross saving

The instance-price discount is gross, not net — six categories of hidden cost routinely eat 20–50% of it on a first migration. None of these are reasons to skip Graviton; they are reasons to price the migration honestly before promising a payback period to anyone:

  • Multi-arch CI build time — building two architectures roughly doubles image build time unless you invest in cross-compilation.
  • Running two image variants during rollout — weeks to months of paying for validation capacity on both architectures at once.
  • Engineer time — Dockerfiles, base images, CI config, and Kubernetes node selectors all need updating.
  • Benchmark and validation work — confirming latency and throughput hold up under real traffic, not just a synthetic load test.
  • Mixed-architecture node pools in Kubernetes — affinity rules, taints, and tolerations to keep single-arch images off the wrong nodes.
  • Observability agents without an ARM build — your APM, logging, and security agents need arm64 support too, or they silently stop reporting.

The commitment trap

Savings Plans and Reserved Instances are architecture- and family-dependent, so migrating off x86 mid-term can strand money you have already committed to spend. An EC2 Instance Savings Plan or a Reserved Instance is priced against a specific instance family and, for RIs particularly, a specific architecture. If you have a 1- or 3-year commitment covering an x86 fleet and you move that fleet to Graviton before the term ends, the commitment does not simply follow you — you can end up paying for committed x86 capacity you are no longer using, on top of new Graviton spend.

This is a scheduling problem, not an architecture problem. Before locking into a multi-year discount vehicle, it is worth understanding how Savings Plans actually work and how to choose between reserved, spot, and on-demand in the first place — a shorter or more flexible commitment leaves room to migrate architecture without a penalty. The rule that avoids the trap: map every commitment's expiry against your migration candidates, and schedule the move to land at or after that date, not before it.

Two worked examples: payback and the case for waiting

Example 1: a containerized web tier (the easy case)

Assumptions: 40 instances of m6i.xlarge running a stateless containerized web service, on-demand, us-east-1, no existing commitment. The team is migrating to m7g.xlarge (Graviton) and the base image is already close to multi-arch-ready.

Line itemAmount
x86 fleet: 40 × $140/mo$5,600/mo — $67,200/yr
Graviton fleet: 40 × $119/mo$4,760/mo — $57,120/yr
Gross annual saving$10,080/yr (~$840/mo)
Migration effort: ~2 engineer-weeks (multi-arch CI, base image, testing) at ~$4,000/wk loaded$8,000
Dual-running both image variants during rollout (~2 weeks, est.)$1,000
Total migration cost$9,000

Payback period: $9,000 ÷ $840/mo ≈ 10.7 months. This is the textbook good case — a stateless, interpreted-or-Go web tier with a base image that already supports arm64 pays back its migration cost in under a year and keeps saving roughly $840/mo indefinitely after that. Note that the payback period is driven almost entirely by engineer time, not by any technical blocker, which is exactly what the Tier 1 classification above predicts.

Example 2: commitment-constrained (the case for waiting)

Assumptions: same 40 × m6i.xlarge fleet, but this team holds a 1-year EC2 Instance Savings Plan with 8 months remaining, giving them an effective discounted rate of about $101/mo per instance (roughly 28% off the $140/mo on-demand rate).

Line itemAmount
Remaining committed x86 spend: 40 × $101/mo × 8 months$32,320 (already owed regardless of usage)
Gross saving from migrating now: ($140 − $119) × 40 × 8 months$6,720
Stranded commitment if migrating now (the $32,320 still owed, no longer offset by usage)$32,320
Net result of migrating now: $6,720 saved − $32,320 strandedNet loss of $25,600 over 8 months

The committed x86 rate ($101/mo) already beats Graviton's on-demand rate ($119/mo) — the Savings Plan's 28% discount is steeper than Graviton's 15% list-price discount, so migrating before the commitment expires is a loss even before the stranded-cost math, and a much larger loss once it is included. The correct move is to keep running the already -paid-for x86 capacity for the remaining 8 months, then migrate to Graviton exactly when the commitment expires — ideally buying a new Graviton-eligible commitment at renewal to lock in the discount going forward instead of running on-demand indefinitely.

Validate before you trust the published numbers

Benchmark on your own workload before you commit to a timeline, and watch p99 latency, not mean, because that is where Graviton surprises show up first. AWS's price-performance claim is an aggregate across many workload types; your workload is one data point, and the published number says nothing about your specific hot path or traffic shape.

A few shapes worth testing for specifically, where Graviton tends to underperform the headline expectation:

  • Single-threaded or lightly-threaded handling that depends on raw per-core clock speed rather than core count.
  • JVM services with garbage collection and JIT tuning calibrated years ago against x86 clock behavior and never revisited.
  • Workloads leaning on x86-specific SIMD instruction sets (certain cryptography, compression, numeric libraries) where the ARM path is different, sometimes slower.
  • Anything already bottlenecked on a downstream dependency, where the calling service's CPU architecture was never the limiting factor.

Run a real load test against production-shaped traffic on both architectures before switching over fully, compare p50 and p99 side by side, and only treat the migration as validated once p99 holds up — a workload that looks fine on mean latency can still be hiding a tail -latency regression that only shows up under load.

The verdict, by company shape

  • Early-stage startup, small AWS bill. Flip every managed-service instance class you can today — it is close to free money. Do not spend engineering time on a self-managed EC2 migration yet.
  • Mid-size company, managed-service-heavy stack. Same as above, plus move Tier 1 containerized services opportunistically as you touch them — no dedicated project needed for Tier 1 alone.
  • Larger engineering org, significant self-managed EC2 footprint. Worth a dedicated project starting with the highest-instance-count stateless services (Example 1). Build the multi-arch CI pipeline once, as shared infrastructure, since that is where most of the hidden cost lives.
  • Anyone with x86 Savings Plans or RIs expiring in the next 6–12 months. Plan the migration for the commitment boundary (Example 2), not around it — migrating early on a covered fleet is one of the more common ways teams turn a real discount into a net loss.

The common thread: capture the managed-service discount immediately, triage everything else by migration cost rather than enthusiasm, and never let a commitment's remaining term get overridden by a smaller discount on a different architecture.

See whether a Graviton migration actually pays back on your bill

spendark breaks your AWS bill down by instance family, commitment coverage, and architecture, so you can see which fleets are already on Graviton, which ones are sitting on an x86 commitment you should not disturb yet, and which ones would actually move the needle.

Frequently asked questions

How much can I actually save by migrating to Graviton?

On the instance line alone, roughly 10–20% versus the equivalent x86 instance class, with no application changes required on managed services. AWS claims up to 40% better price-performance for suitable workloads, but that is a vendor claim that depends on your workload scaling well across more, somewhat slower cores — benchmark your own traffic rather than assuming it.

Do I need to rewrite my application to use Graviton?

For managed services (RDS, Aurora, ElastiCache, OpenSearch, Lambda, Fargate) no, it is a configuration change. For self-managed containers and binaries, you need a multi-arch build pipeline and, for any native or compiled dependency, confirmation that an arm64 build exists. Interpreted-language services and Go services usually need little beyond that.

What workloads should not move to Graviton?

Anything depending on an x86-only vendor agent with no arm64 build, software under a license or support contract tied to CPU architecture, and binary-only third-party dependencies you cannot rebuild from source. Also be cautious with single-threaded, clock-speed-bound workloads where the price-performance claim is least likely to apply.

Will migrating to Graviton strand my existing Savings Plan or Reserved Instances?

It can. Savings Plans and RIs are priced against specific instance families and, for RIs, specific architectures, so moving a covered x86 fleet to Graviton mid-term can leave you paying for committed capacity you no longer use while also paying for new Graviton spend. Sequence the migration to land at or after the commitment's expiry date.

Should I right-size first or migrate to Graviton first?

Right-size first. Kubernetes clusters commonly run at roughly 10% CPU utilization against requests and 23% memory utilization against allocation, which means an oversized instance on either architecture is wasting money regardless of CPU type. Fix the sizing, then evaluate the architecture discount on top of the corrected baseline.

Estimate your cloud costs — for free

Compare AWS, Azure, and GCP pricing side by side with our free calculator, and dig into the guides to learn how to cut cloud waste. No sign-up required.