---
title: High-Concurrency Server I/O: epoll, Syscalls, and Zero-Copy on AWS EC2
description: C10k is solved until syscall overhead and context switches eat your Graviton cores. epoll, sendfile, and SO_REUSEPORT behaviors on EC2—and why Lambda caps concurrency differently.
url: https://www.factualminds.com/blog/high-concurrency-server-io-epoll-syscalls-zero-copy-aws/
datePublished: 2026-06-12T00:00:00.000Z
dateModified: 2026-06-12T00:00:00.000Z
author: Palaniappan P
category: Cloud Architecture
tags: engineering-guide, performance, ec2, aws
---

# High-Concurrency Server I/O: epoll, Syscalls, and Zero-Copy on AWS EC2

> C10k is solved until syscall overhead and context switches eat your Graviton cores. epoll, sendfile, and SO_REUSEPORT behaviors on EC2—and why Lambda caps concurrency differently.

**Linux on EC2 (June 2026)** serves most self-hosted APIs. Event loops use **epoll** (edge-triggered) to watch thousands of sockets per thread—contrast with **kqueue** on BSD/macOS dev laptops; production parity tests matter.

## Syscall and context switch tax

Each `read`/`write` crossing user/kernel boundary costs CPU. **Zero-copy** `sendfile()` moves file → socket without user-space buffers—ideal for static assets behind NGINX on EC2 (often superseded by CloudFront).

| Pattern                  | Benefit on AWS                                  |
| ------------------------ | ----------------------------------------------- |
| epoll + non-blocking I/O | Few threads, many connections on `c7g` Graviton |
| SO_REUSEPORT             | Accept queue spread across workers              |
| sendfile                 | Static file serving from EBS                    |

**Lambda** avoids your epoll tuning—concurrency is **execution environment** reuse with platform limits; CPU-bound work still belongs on EC2/ECS.

## When this advice breaks

- **TLS termination on instance** — crypto dominates; offload to ALB/CloudFront first.
- **Tiny payloads** — syscall cost noise vs business logic.

## What to do this week

1. Compare `nginx`/`envoy` worker count to CPU cores on origin ASG.
2. Profile with `perf top` during load test—look for `syscall` hotspots.
3. Move static assets to S3+CloudFront; keep dynamic on epoll stack.

## What this guide doesn't cover

CPU cache false sharing—part 4 of this track.

---

*Source: https://www.factualminds.com/blog/high-concurrency-server-io-epoll-syscalls-zero-copy-aws/*
