EC2 Instance Types: What m6g.2xlarge Actually Means
By the time you reach DMI's Week 6 AWS assignments — deploying a VM, then a two-tier app, then a full three-tier capstone — you'll pick an instance type half a dozen times without necessarily knowing what the name is telling you. t3.medium, m6g.2xlarge, c7i.large aren't arbitrary labels. Every EC2 instance type name follows the same four-part structure, and once you can read it, choosing the right instance stops being a guess.
The four parts of a name
Per AWS's own naming reference, an instance type name breaks down as: series (first position), generation (second position), options (third position, optional), then a period, then size. Take c7gn.xlarge:
c— series: compute optimized7— generation: 7th generation of this familygn— options: Graviton processor (g) + network/EBS optimized (n)xlarge— size
Series — what the instance is optimized for
The most common families you'll actually reach for:
| Letter | Family | What it's for |
|---|---|---|
T | Burstable performance | Low, spiky baseline CPU that can burst — the free-tier default, and a reasonable starting point for small web apps and dev/test |
M | General purpose | Balanced CPU/memory — the default for most application servers |
C | Compute optimized | Higher CPU-to-memory ratio — batch processing, video encoding, gaming servers |
R | Memory optimized | Higher memory-to-CPU ratio — in-memory caches, real-time analytics, large databases |
I | Storage optimized | High-throughput local NVMe storage — databases with heavy local I/O |
G / P | Accelerated computing (GPU) | Graphics rendering, ML training/inference |
Beyond these, AWS defines further specialized families — D (dense storage), X/Z/U (memory-intensive/high-memory), Hpc, F (FPGA), Inf/Trn (AWS's own inference/training chips), and more — but the six above cover essentially everything a web application or a DevOps course touches.
Generation — always prefer the newest
The number after the family letter is the generation. Later generations are consistently better price-for-performance than the ones before them — there's rarely a reason to deliberately choose an older generation over a newer one at the same size, unless you're constrained by a specific regional availability gap.
Options — processor and networking extras
The letters after the generation number (when present) describe additional capabilities:
g— AWS Graviton (Arm-based) processor, typically the best price-performance option if your container images and dependencies supportarm64a— AMD processor (an alternative to the default Intel silicon, usually a modest cost saving)n— enhanced networking and EBS performanced— local NVMe instance storage includede— extra memory or storage relative to the base variant
No letter after the generation number (like plain m6i) means the standard Intel-based variant. The catch worth checking before you commit to a Graviton (g) instance: an image published only as amd64 simply won't run on it. Verify multi-architecture support first — the same caveat we cover for production Kubernetes node groups in EKS Node Groups: Managed vs. Self-Managed.
Size — doubling as you go up
Sizes scale in a predictable, roughly-doubling pattern: nano → micro → small → medium → large → xlarge → 2xlarge → 4xlarge …, up to metal for bare-metal access with no hypervisor. Two m6g.xlarge instances give you roughly the same total vCPU and memory as one m6g.2xlarge — and AWS prices them proportionally, so picking between "one big instance" and "several smaller ones" is an architecture decision (blast radius, horizontal scaling, load balancing), not a cost-saving trick in either direction.
Putting it together
t3.medium — T family (burstable), generation 3, no options letter (standard Intel), medium size: 2 vCPUs, 4 GB RAM. This is the free-tier-friendly default you'll see across most of DMI's early AWS assignments.
m6g.2xlarge — M family (general purpose), generation 6, g (Graviton), 2xlarge size — a larger, Arm-based general-purpose instance, worth it once your workload's memory/CPU needs outgrow t3 burstable credits and your images support arm64.
How to actually choose
Start from what the workload actually needs, not from what sounds impressive:
- Small web app, dev/test, spiky low traffic →
t3/t4g - Steady application server, no unusual CPU or memory skew →
m6i/m7i, orm6g/m7gif Graviton-compatible - CPU-bound batch or encoding work →
cfamily - Memory-bound cache or database →
rfamily
Then size up only when you have evidence — CPU credits exhausted, memory pressure, actual load-test numbers — not preemptively. Right-sizing isn't a one-time pick either; it's something you keep revisiting as real usage data comes in, same principle we apply to right-sizing Kubernetes worker nodes later in the curriculum. Every instance-type choice you make in DMI's AWS assignments is graded on the same real, public repo shown on the leaderboard — see how the weekly grading loop works for the full picture.
Want to practice this on real, graded AWS assignments? Start with DMI Self-Paced →