Chapter 20

데이터센터 네트워크

검색창에 단어 하나를 치면 0.2초 만에 결과가 뜬다. 그 짧은 순간 데이터센터 안에서는 요청 하나가 수백, 수천 대의 서버로 흩어졌다가 다시 모인다. 축구장 몇 개 크기의 건물에 서버 수만~수십만 대가 들어 있고, 이들은 서로 끊임없이 대화한다. 인터넷 전체를 다룬 앞 장들과 달리, 이 장의 무대는 건물 하나다. 거리가 짧은 대신 규모와 속도가 상상을 넘는다. 거대 물류 창고 안의 컨베이어 벨트를 어떻게 설계해야 수십만 개의 선반이 막힘 없이 물건을 주고받을까?

거대 물류 창고 안으로

데이터센터의 기본 단위는 랙(rack)이다. 높이 2 m 남짓한 철제 선반에 납작한 서버 20~40대가 꽂힌다. 랙 맨 위에는 그 랙의 서버들을 모으는 스위치가 하나(또는 두 개) 있는데, 자리 때문에 ToR 스위치(Top of Rack)라 부른다. 서버와 ToR 사이는 1~3 m라 값싼 구리 케이블(4장)로 잇고, ToR에서 위쪽 스위치로 가는 수십~수백 m 구간은 광케이블(5장)을 쓴다. 광케이블은 천장 아래 노란 케이블 트레이를 따라 네트워크 전용 랙으로 모인다.

랙은 앞면끼리, 뒷면끼리 마주 보도록 줄지어 놓는다. 서버 팬은 앞에서 찬 공기를 빨아들여 뒤로 뜨거운 공기를 내뿜으므로, 앞면 사이 통로는 찬 통로(cold aisle), 뒷면 사이는 뜨거운 통로(hot aisle)가 된다. 이 공기를 식히는 냉각 장치가 건물 전력의 상당 부분을 쓴다.

데이터센터 = 거대 물류 창고

서버는 물건이 쌓인 선반, ToR 스위치는 선반 줄마다 있는 작은 분류대, 스파인 스위치는 창고 한가운데의 대형 분류 센터다. 광케이블 트레이는 천장에 매달린 컨베이어 벨트다. 인터넷이 도시와 도시를 잇는 고속도로라면, 데이터센터 네트워크는 한 건물 안에서 초당 수백 테라비트의 물건을 옮기는 실내 물류 시스템이다.

3D

데이터센터 한 구역 둘러보기 — 눌러서 설명 보기

랙, 맨 위의 ToR 스위치, 스파인 랙, 천장의 케이블 트레이, 냉각기를 눌러 보자.
강조해서 보기
드래그하면 돌아간다. 랙 한 줄에 서버 랙 8개와 네트워크 랙 2개를 넣은 축소 모형이다. 실제 대형 데이터센터 건물 하나에는 이런 줄이 수백 개 있다. ‘네트워크만’을 고르면 서버가 흐려지고 스위치와 케이블이 드러난다. ‘공기 흐름’은 찬 통로(파랑)와 뜨거운 통로(주황)를 보여 준다.

나무에서 그물로: 3계층 vs 리프-스파인

2000년대 기업 데이터센터는 회사 네트워크와 같은 3계층 트리로 지었다. 서버가 붙는 접속(access) 스위치, 이를 모으는 집선(aggregation) 스위치, 맨 위의 크고 비싼 코어(core) 스위치다. 트래픽 대부분이 “사용자 ↔ 서버”였던 시절에는 잘 맞았다. 바깥에서 들어와 아래로 내려가는 이런 흐름을 그림의 위아래 방향을 따라 남북 트래픽(north-south traffic)이라 한다.

그런데 웹 서비스가 거대해지면서 상황이 뒤집혔다. 사용자 요청 하나를 처리하려고 웹 서버가 캐시, 데이터베이스, 검색 색인, 추천 모델 서버 수십 곳에 물어보고, 저장 장치는 데이터를 세 벌씩 복제하고, 분산 계산은 중간 결과를 서로 섞는다. 이런 동서 트래픽(east-west traffic), 즉 서버 ↔ 서버 트래픽이 남북 트래픽보다 훨씬 많아졌다. 대형 사업자들은 데이터센터 안 트래픽의 대부분(흔히 70~80% 이상, AI 학습 클러스터는 거의 전부)이 동서 방향이라고 보고한다.

트리에서는 동서 트래픽이 꼭대기 코어를 거쳐야 하고, 꼭대기 몇 대가 병목이자 고장 한 곳이 된다. 그래서 등장한 것이 리프-스파인(leaf-spine) 구조다. 모든 리프(ToR) 스위치가 모든 스파인 스위치에 하나씩 연결된다. 어떤 서버에서 어떤 서버로 가든 “리프 → 스파인 → 리프”, 정확히 세 개의 스위치만 지난다. 스파인 하나가 고장 나도 나머지 길로 간다. 이 구조는 1953년 벨 연구소의 찰스 클로스(Charles Clos)가 전화 교환기용으로 고안한 다단 교환망을 되살린 것이라 Clos 네트워크(Clos network)라고도 부른다.

전통 3계층 트리 리프-스파인 (2단 Clos) 코어 코어 집선 집선 집선 집선 접속 스위치(랙) 왼쪽 끝 → 오른쪽 끝 서버: 꼭대기 코어까지 올라갔다 내려온다 위로 갈수록 링크가 적어 병목(오버서브스크립션 수십 : 1) 스파인스파인스파인스파인 리프 리프 리프 리프 리프 동서 트래픽: 서버 ↔ 서버 (대부분) 남북: 인터넷 ↔ 서버 모든 리프가 모든 스파인에 연결 → 어느 두 서버든 스위치 3개 스파인 개수만큼 같은 길이의 경로가 생긴다(ECMP)
그림 20-1. 3계층 트리와 리프-스파인. 트리는 위로 갈수록 좁아지는 깔때기라 동서 트래픽이 코어에서 막힌다. 리프-스파인은 같은 크기의 스위치를 많이 써서 어느 쌍이든 같은 거리, 같은 대역폭을 보장한다. 남북 트래픽은 별도의 경계(border) 리프를 통해 인터넷으로 나간다.
3계층 트리리프-스파인(Clos)
주된 트래픽남북(사용자 ↔ 서버)동서(서버 ↔ 서버)
서버 간 홉 수2~5개(위치에 따라 다름)항상 3개(2단) 또는 5개(3단)
확장 방법더 큰 코어 장비로 교체(스케일업)같은 스위치를 더 추가(스케일아웃)
고리 막기STP로 링크 절반을 막아 둠(6장)L3 라우팅 + ECMP로 모든 링크를 동시에 사용(8장)
장애 영향코어 하나 고장 = 대역폭 절반 손실스파인 1/n 고장 = 대역폭 1/n 손실

포트 수로 서버 수를 계산하기

리프-스파인의 아름다움은 규모를 계산할 수 있다는 점이다. 스위치 칩의 포트 수를 래딕스(radix) k라 하자. 서버로 가는 대역폭과 위로 올라가는 대역폭이 같으면(막힘 없는 구성) 리프는 포트 절반(k/2)을 서버에, 나머지 절반을 스파인에 쓴다. 스파인은 k개 포트로 리프 k대를 받을 수 있으니, 2단 구조의 최대 서버 수는 다음과 같다.

2단 리프-스파인: 서버 = k × k/2 = k²/2   |   3단 팻 트리: 서버 = k³/4, 스위치 = 5k²/4
k = 스위치 한 대의 포트 수. 예: k = 64 → 2단 2,048대, 3단 65,536대.

그 이상이 필요하면 단을 하나 더 쌓는다. 리프와 그 위의 스위치들을 묶어 팟(pod)이라는 작은 Clos를 만들고, 팟들을 다시 코어 스파인으로 잇는 3단 구조를 팻 트리(fat tree)라 한다. 위로 갈수록 링크가 줄어드는 보통 나무와 달리, 위로 가도 굵기(총 대역폭)가 줄지 않는 “뚱뚱한 나무”라는 뜻이다. 2008년 알파레스(Al-Fares) 등의 논문이 같은 상용 스위치만으로 수만 대를 막힘 없이 잇는 법을 보여 준 뒤 업계 표준이 되었다.

현실에서는 비용을 아끼려고 리프의 서버 쪽 포트를 위쪽 포트보다 많이 단다. 서버 쪽 대역폭 : 위쪽 대역폭의 비를 오버서브스크립션(oversubscription)이라 한다. 3:1이면 모든 서버가 동시에 랙 밖으로 보낼 때 1/3 속도밖에 못 낸다. 모든 서버가 동시에 전속력으로 보내는 일은 드물다는 통계에 거는 셈이다. 네트워크 전체의 실력을 한 숫자로 말할 때는 이분 대역폭(bisection bandwidth)을 쓴다. 서버를 절반씩 두 무리로 나눴을 때 두 무리 사이로 동시에 흐를 수 있는 최대 대역폭이다(어떻게 나눠도 가장 나쁜 경우).

CALCULATOR

Clos 패브릭 계산기

구조
스위치 포트 수 k (래딕스)
포트(레인) 속도
오버서브스크립션 (아래 : 위)
연결 가능한 서버—
필요한 스위치—
이분 대역폭 (한 방향)—
스위치 간 링크 / 광 트랜시버—
스위치 칩 용량—
서버 한 대에 리프 포트 하나를 쓴다고 가정했다. 오버서브스크립션 r:1이면 리프 포트 k개 중 k·r/(r+1)개를 서버에, 나머지를 위로 쓴다(3단에서는 리프에만 적용). 스위치 간 링크마다 양끝에 광 트랜시버가 하나씩 필요하다고 보고, 서버–리프 구간은 랙 안 구리 케이블로 쳤다. 해볼 것: k = 64, 400G에서 2단과 3단을 비교하자. 단을 하나 더 쌓으면 서버 수가 k/2 = 32배가 된다. 오버서브스크립션을 3:1로 바꾸면 서버는 늘지만 이분 대역폭은 줄어든다.
왜 래딕스가 중요한가

스위치 칩 하나의 총 용량(예: 51.2 Tbps)은 정해져 있다. 이것을 800G 포트 64개로 쓸 수도, 400G 포트 128개나 200G 포트 256개로 쪼개 쓸 수도 있다(17장). 포트를 잘게 쪼개 래딕스를 키우면 3단 팻 트리의 서버 수가 k³에 비례해 폭발적으로 늘어, 같은 규모를 더 적은 단(=더 적은 홉, 더 적은 광 트랜시버)으로 만들 수 있다. 대형 AI 클러스터가 고래딕스 스위치를 선호하는 이유다.

ECMP: 여러 길에 흐름 나누기

리프에서 스파인으로 올라가는 길이 64개 있다면, 어느 길로 보낼까? 모두 길이가 같으니 어느 길이든 최단 경로다. 라우터는 이런 ECMP(Equal-Cost Multi-Path, 등비용 다중 경로) 경로 사이에 트래픽을 나눈다. 다만 패킷마다 아무 길로나 보내면 길마다 대기열 길이가 달라 패킷 순서가 뒤바뀌고, TCP(9장)는 순서가 뒤바뀌면 손실로 오해해 속도를 줄인다. 그래서 ECMP는 보통 흐름(flow) 단위로 나눈다. 패킷 헤더의 다섯 값(출발·도착 IP, 출발·도착 포트, 프로토콜)을 해시 함수에 넣어 나온 번호로 길을 고른다. 같은 흐름의 패킷은 늘 같은 해시 → 같은 길 → 순서 유지다.

문제는 해시가 흐름의 크기를 모른다는 것이다. 데이터센터 흐름은 대부분 몇 KB짜리 짧은 생쥐 흐름(mice flow)이지만, 바이트의 대부분은 수 GB짜리 소수의 코끼리 흐름(elephant flow)이 차지한다. 해시가 우연히 코끼리 두세 마리를 같은 길에 몰아넣으면, 다른 길이 텅 비어 있어도 그 길은 넘친다. 동전 던지기로 공을 상자에 넣으면 고르게 들어가지 않는 것과 같은 해시 충돌이다.

SIMULATOR

ECMP 부하 분산: 스파인 링크별 부하

분산 방식
스파인 경로 수
 
가장 바쁜 링크 / 평균—
넘친 링크 (400G 초과)—
놀고 있는 용량—
패킷 순서 뒤바뀜—
코끼리 흐름 = 100 Gbps, 생쥐 흐름 = 2 Gbps, 스파인 링크 하나 = 400 Gbps로 단순화했다. 막대의 진한 부분은 코끼리, 옅은 부분은 생쥐 흐름이다. 플로우렛: 흐름 안에서 패킷 사이 틈이 충분히 길면(경로 지연 차이보다 길면) 그 틈에서 다른 길로 갈아타도 순서가 안 바뀐다는 점을 이용해, 코끼리를 8조각으로 나눠 그때그때 가장 한가한 길로 보낸다(CONGA류 혼잡 인식 방식). 패킷 스프레잉: 모든 패킷을 경로에 골고루 흩뿌린다. 균형은 완벽하지만 순서가 뒤섞이므로 받는 NIC가 재정렬해야 한다. 해볼 것: 흐름 해시에서 ‘해시 다시 섞기’를 여러 번 눌러 보자. 평균 부하가 낮아도 운 나쁜 링크가 넘친다.
예측해 보기

비슷한 크기의 흐름 16개를 스파인 경로 16개에 해시로 무작위 배정한다. 평균적으로 아무 흐름도 받지 못해 노는 경로는 몇 개쯤일까?

ECMP 시뮬레이터에서 경로 16, 흐름 16개, 코끼리 비율 0%(모두 같은 크기)로 놓고 ‘해시 다시 섞기’를 여러 번 눌러 보자.

경로 하나가 흐름 16개 모두에게 선택받지 못할 확률은 (15/16)¹⁶ ≈ 0.36이다. 16개 경로 × 0.36 ≈ 5.7개가 논다. 그 대신 어떤 경로는 흐름 2~3개를 떠안는다. 흐름 수가 경로 수보다 훨씬 많아야 해시가 고르게 보인다. AI 학습처럼 소수의 거대한 흐름만 있는 환경에서 ECMP가 힘든 이유다.

가장 느린 하나를 기다린다: 테일 지연과 인캐스트

검색 요청 하나는 색인을 나눠 가진 서버 수천 대에 동시에 뿌려지고(팬아웃, fan-out), 모든 답을 모아야 결과 페이지가 완성된다. 서버 한 대가 평소 1 ms 만에 답하더라도, 가끔 가비지 컬렉션, 디스크 대기, 큐 밀림 때문에 수십 ms가 걸린다. 서버 하나만 보면 100번에 한 번이지만, 1,000대에 동시에 물으면 그중 누군가는 거의 확실히 느리다. 그래서 대규모 서비스의 응답 시간은 평균이 아니라 분포의 꼬리, 즉 테일 지연(tail latency)이 좌우한다. 구글의 제프 딘(Jeff Dean)과 루이스 바로소(Luiz Barroso)가 2013년 “The Tail at Scale”에서 정리한 문제다.

P(적어도 한 대가 느림) = 1 − (1 − p)N
p = 서버 한 대가 느릴 확률, N = 팬아웃 수. p = 1%, N = 100 → 63%. N = 1,000 → 99.996%.
SIMULATOR

팬아웃과 테일 지연

서버 한 대 (중앙값 / p99)—
전체 응답 중앙값—
전체 응답 p99—
한 대라도 p99보다 느릴 확률—
인캐스트: 동시 도착량—
그래프는 누적 분포(CDF)다. 곡선이 0.5를 지나는 곳이 중앙값, 0.99를 지나는 곳이 99퍼센타일이다. 서버 한 대의 지연은 중앙값 1 ms인 로그정규 분포로 두고, 전체 응답 = N대 중 가장 늦은 답(최댓값)으로 계산했다. 인캐스트는 응답 하나 20 KB, 집계 서버로 가는 ToR 출구 포트가 쓸 수 있는 버퍼 약 2 MB로 가정했다. 해볼 것: N을 1에서 1,000으로 올리면 전체 중앙값이 서버 한 대의 p99 근처까지 밀려난다. 헤지 요청을 켜면 꼬리가 크게 줄어든다(추가 부하는 약 5%).

팬아웃은 네트워크에도 독특한 병목을 만든다. 수백 대가 거의 같은 순간에 답을 보내면, 그 답들은 모두 집계 서버로 가는 ToR의 출구 포트 하나로 몰린다. 들어오는 링크는 수백 개인데 나가는 링크는 하나라, 스위치 버퍼(17장)가 순식간에 넘치고 패킷이 버려진다. 이를 인캐스트(incast)라 한다. 잃어버린 패킷은 TCP 재전송 타이머가 끝나야 다시 보내는데, 리눅스의 최소 재전송 대기는 기본 200 ms다. 1 ms면 끝날 일이 200배로 늘어나는 것이다. 대책으로는 재전송 타이머를 µs 단위로 줄이기, 응답 시점을 조금씩 흩뜨리기, 큐가 차기 시작하면 ECN 표시로 미리 속도를 줄이는 DCTCP(9장의 혼잡 제어를 데이터센터에 맞춘 것), 그리고 버퍼가 큰 스위치가 쓰인다.

예측해 보기

각 서버가 100번에 한 번(1%) 느리게 답한다. 요청 하나를 서버 100대에 동시에 보내면, 요청 전체가 느려질 확률은?

테일 지연 시뮬레이터에서 N = 100으로 놓고 ‘한 대라도 p99보다 느릴 확률’을 보자.

1 − 0.99¹⁰⁰ ≈ 0.634. 서버 하나에게는 드문 일이 팬아웃에서는 흔한 일이 된다. 그래서 대규모 서비스는 서버의 평균이 아니라 p99, p99.9를 관리하고, 헤지 요청이나 복제본 중복 질의로 꼬리를 잘라 낸다.

RDMA: CPU를 건너뛰는 메모리 직송

보통 서버끼리 데이터를 보내면 앱의 데이터가 운영체제 커널로 복사되고, 커널의 TCP/IP 코드가 헤더를 붙이고, 드라이버를 거쳐 NIC로 간다. 받는 쪽은 그 반대다. 이 과정에서 CPU가 일하고, 데이터가 몇 번씩 복사되고, 왕복 지연이 수십 µs가 된다. 100 Gbps 이상에서는 CPU가 패킷 처리만으로도 벅차다.

RDMA(Remote Direct Memory Access)는 이 길을 통째로 건너뛴다. 앱이 미리 메모리 영역을 등록해 두면, NIC가 직접 그 메모리를 읽어 네트워크로 보내고, 상대 NIC가 상대 앱의 메모리에 바로 써 넣는다. 커널을 거치지 않고(커널 우회), 중간 복사가 없고(제로 카피), 받는 쪽 CPU는 데이터가 도착한 줄도 모를 수 있다. 작은 메시지의 왕복 지연이 몇 µs 수준으로 줄고 CPU는 계산에 전념한다. 택배로 치면 창고 직원(CPU)이 상자를 풀고 다시 싸는 대신, 컨베이어가 이쪽 선반에서 저쪽 선반으로 물건을 바로 옮겨 주는 셈이다.

보통의 TCP/IP RDMA 앱 메모리 커널 소켓 버퍼 TCP/IP 스택 NIC 앱 메모리 커널 소켓 버퍼 TCP/IP 스택 NIC 복사 · CPU헤더 · CPUCPU복사 · CPU 양쪽 CPU가 모든 단계에 관여, 시스템 콜·인터럽트·복사 작은 메시지 왕복 수십 µs 앱 메모리(등록됨) 커널(우회) RDMA NIC 앱 메모리(등록됨) CPU 관여 없음 RDMA NIC DMA 읽기DMA 쓰기 NIC가 메모리를 직접 읽고 씀 · 복사 없음 작은 메시지 왕복 몇 µs, CPU는 계산에 전념
그림 20-2. 커널을 거치는 TCP/IP(왼쪽)와 RDMA(오른쪽). RDMA NIC는 하드웨어 안에서 전송 계층(순서, 재전송, 확인)을 처리하고, 앱이 등록한 메모리를 DMA로 직접 읽고 쓴다.

RDMA를 나르는 네트워크는 크게 두 가지다. InfiniBand는 처음부터 고성능 컴퓨팅용으로 설계된 별도의 네트워크 기술이다. 받는 쪽 버퍼에 자리가 있을 때만 보내는 크레딧 기반 흐름 제어로 원래부터 패킷을 버리지 않는(무손실) 망이다. 다른 하나는 RDMA를 보통 이더넷 위에 얹은 RoCEv2(RDMA over Converged Ethernet, 버전 2)로, RDMA 패킷을 UDP(목적지 포트 4791)/IP에 실어 일반 데이터센터 라우터를 지날 수 있게 했다.

까다로운 점은 RDMA NIC의 재전송이 단순하다는 것이다(손실이 나면 그 뒤를 통째로 다시 보내는 방식이 많다). 그래서 이더넷도 패킷을 거의 버리지 않게 만들어야 한다. 두 가지 장치가 쓰인다.

TCP/IP (커널)RoCEv2InfiniBand
밑바탕 망이더넷/IP이더넷/IP (UDP 4791)전용 IB 스위치·NIC
전송 처리CPU(커널)NIC 하드웨어NIC 하드웨어
손실 대책재전송(손실 허용)PFC + ECN/DCQCN크레딧 흐름 제어
작은 메시지 지연수십 µs몇 µs1~2 µs 수준
대표 포트 속도(2025)100~400G400~800G400G(NDR)~800G(XDR)

AI 클러스터: GPU 수만 개를 한 몸처럼

대형 언어 모델 학습은 GPU 수천~수십만 개가 한 모델을 나눠 계산한다. 각 GPU는 자기 몫의 데이터로 기울기(gradient)를 계산한 뒤, 모든 GPU의 기울기를 더해 똑같이 나눠 가져야 다음 단계로 갈 수 있다. 이렇게 모두가 참여하는 통신을 집합 통신(collective communication)이라 하고, 그 대표가 올리듀스(all-reduce)다. 가장 느린 GPU가 끝날 때까지 모두가 기다리므로, 네트워크가 느리면 수천억 원어치 GPU가 논다. AI 클러스터에서 네트워크가 “부속품”이 아니라 컴퓨터의 일부가 된 이유다.

AI 클러스터 네트워크는 두 층으로 나뉜다.

스케일아웃에는 레일 최적화(rail-optimized) 구조가 흔하다. GPU 8개짜리 서버라면, 모든 서버의 1번 GPU는 1번 레일 스위치에, 2번 GPU는 2번 레일 스위치에… 이런 식으로 연결한다. 집합 통신에서는 같은 번호의 GPU끼리 대화하는 일이 많으므로 대부분의 트래픽이 레일 스위치 한 대만 거치고 스파인까지 올라가지 않는다. 다른 번호끼리는 서버 안의 NVLink로 먼저 옮긴 뒤 레일을 탄다.

스파인 (레일 사이·팟 사이 트래픽만) 레일 1 레일 2 레일 3 레일 4 레일 5 레일 6 레일 7 레일 8 서버 1서버 2서버 3 … 주황 선 = 서버 안 NVLink(스케일업) · 초록 = GPU · 파란 선 = GPU마다 400~800G NIC(스케일아웃)
그림 20-3. 레일 최적화 구조. 모든 서버의 k번째 GPU가 k번째 레일 스위치에 모인다. 같은 번호 GPU끼리의 통신은 레일 스위치 한 번으로 끝나고, 서버 안의 GPU끼리는 NVLink로 훨씬 굵게 연결된다.

올리듀스를 가장 단순하게 하는 방법은 모든 GPU가 한 GPU에 보내고 그 GPU가 합쳐 다시 뿌리는 것이지만, 그 GPU의 링크가 병목이 된다. 링 올리듀스(ring all-reduce)는 GPU들을 고리로 세우고, 데이터를 N조각으로 나눠 이웃에게만 보낸다. 앞의 N−1단계(reduce-scatter)에서는 조각을 받아 자기 것에 더해 다음 GPU로 넘기고, 뒤의 N−1단계(all-gather)에서는 완성된 조각을 돌려 모두가 갖게 한다. 각 GPU가 보내는 총량은 2(N−1)/N × S로, GPU가 아무리 많아져도 데이터 크기의 2배를 넘지 않는다. 대역폭 면에서 최적이다.

링 올리듀스 시간 ≈ 2(N−1)·α + 2(N−1)/N × S / B
N = GPU 수, S = 데이터 크기, B = GPU 하나의 링크 대역폭, α = 한 단계의 고정 지연(통신 시작·전파·스위치). 트리 방식은 단계 수가 2·log₂N이라 α 항이 훨씬 작다.
SIMULATOR

링 올리듀스: 조각이 고리를 도는 모습

GPU당 링크 속도
 
링 올리듀스 시간—
트리 올리듀스 시간—
GPU 하나가 보내는 양—
단계 수 (링 / 트리)—
위 그림: 각 GPU 상자 안의 칸이 데이터 조각이다. 칸이 진해질수록 더 많은 GPU의 값이 더해졌고, 초록이면 모든 GPU의 합이 완성된 조각이다. 그림은 GPU를 최대 8개까지만 그린다. 아래 그래프: 데이터 크기에 따른 링(파랑)과 트리(보라)의 소요 시간. α = 5 µs, 트리는 파이프라인된 이진 트리로 보고 T ≈ 2·log₂N·α + 2S/B로 단순화했다. 해볼 것: N을 4096으로 키우고 데이터를 작게(1 MB 이하) 하면 링은 단계 수가 많아 α 항 때문에 느려지고 트리가 이긴다. 데이터가 크면 둘 다 2S/B에 수렴하고 링이 약간 유리하다. 실제 라이브러리(NCCL 등)는 크기와 규모를 보고 알고리즘을 고른다.
Ultra Ethernet

AI 백엔드 네트워크를 InfiniBand 대신 이더넷으로 만들려는 움직임도 거세다. 2023년 AMD, 브로드컴, 시스코, 인텔, 메타, 마이크로소프트 등이 만든 울트라 이더넷 컨소시엄(Ultra Ethernet Consortium, UEC)은 2025년 첫 규격(1.0)을 내놓았다. 핵심은 RoCE의 약점을 고치는 새 전송 계층이다. 패킷을 여러 경로에 흩뿌리고(패킷 스프레잉), 순서가 뒤바뀌어 도착해도 NIC가 받아들이며, PFC에 덜 의존하는 혼잡 제어와 빠른 선택적 재전송을 쓴다. 앞의 ECMP 시뮬레이터에서 본 “균형은 완벽하지만 순서가 뒤섞이는” 스프레잉을 하드웨어로 감당하겠다는 것이다.

전력, 냉각, 그리고 광케이블의 숲

데이터센터의 한계는 점점 공간이 아니라 전력이다. 일반 클라우드 데이터센터 건물 하나는 수십 MW를 쓰고, 최신 AI 캠퍼스는 수백 MW에서 GW급을 계획한다. 랙 하나의 전력도 예전 5~10 kW에서 AI GPU 랙은 100 kW를 넘어, 공기로는 식히지 못해 칩에 냉각수를 직접 흘리는 수랭이 늘고 있다. 전체 전력 중 IT 장비가 아닌 냉각·전력 변환에 쓰는 비율은 PUE(Power Usage Effectiveness)로 나타내는데, 최신 대형 데이터센터는 1.1~1.2 수준이다(1.0이 이상적).

그중 네트워크(스위치·NIC·광 트랜시버)는 IT 전력의 약 5~10% 수준으로 서버에 비하면 작지만, 규모가 커질수록 광 트랜시버의 전력과 개수가 무시할 수 없게 된다. 800G 광 트랜시버 하나가 대략 15 W 안팎을 쓰는데, GPU 10만 개 규모 클러스터에는 이런 트랜시버가 수십만 개 들어간다. 위 Clos 계산기에서 3단 팻 트리의 트랜시버 수를 확인해 보자. 광 트랜시버의 전력을 줄이려고 스위치 칩 바로 옆에 광 엔진을 붙이는 CPO(Co-Packaged Optics, 19장)와, 짧은 구간에 신호 재생만 하는 저전력 광 모듈 같은 기술이 등장했다.

항목대표적인 크기 (2025~2026)
스위치 칩 한 개 용량51.2 Tbps (64×800G) → 102.4 Tbps 세대 등장
스위치 한 홉 지연수백 ns ~ 1 µs
서버 NIC 속도일반 서버 25~100G, AI GPU당 400~800G
랙 하나 전력일반 5~15 kW, AI 랙 40~130 kW 이상
대형 데이터센터 서버 수건물 하나 수만~10만 대 이상
네트워크 전력 비중IT 전력의 약 5~10% 수준
광케이블 길이 (건물 하나)수만~수십만 km 가닥 단위
도로 공사보다 전기 공사

물류 창고를 넓히려 할 때 땅(공간)이나 컨베이어(네트워크)보다 먼저 막히는 것이 전기와 냉방이 된 셈이다. 그래서 새 데이터센터는 발전소, 변전소, 강물이나 차가운 기후 가까이에 짓고, 네트워크는 여러 건물(캠퍼스)과 여러 지역을 잇는 광 링크로 이를 하나의 거대한 컴퓨터처럼 묶는다(21장).

핵심 정리

  1. 데이터센터는 서버 랙, 랙 위의 ToR(리프) 스위치, 스파인 스위치, 광케이블, 냉각 설비로 이뤄진다. 트래픽 대부분은 서버 ↔ 서버 동서 트래픽이다.
  2. 리프-스파인(Clos)은 모든 리프를 모든 스파인에 이어 어느 두 서버든 같은 거리·같은 대역폭을 준다. 포트 수 k로 2단 k²/2, 3단 팻 트리 k³/4대를 잇는다.
  3. 오버서브스크립션은 비용과 대역폭을 맞바꾸고, 네트워크의 실력은 이분 대역폭으로 잰다.
  4. ECMP는 5-튜플 해시로 흐름을 여러 경로에 나눠 순서를 지키지만, 소수의 코끼리 흐름이 충돌하면 불균형이 생긴다. 플로우렛과 패킷 스프레잉이 대안이다.
  5. 팬아웃 요청은 가장 느린 서버를 기다리므로 테일 지연이 응답을 좌우한다. 동시에 몰리는 응답은 인캐스트로 버퍼를 넘친다.
  6. RDMA는 커널과 CPU를 건너뛰어 µs 수준 지연을 낸다. InfiniBand는 원래 무손실, RoCEv2는 PFC와 ECN/DCQCN으로 이더넷을 무손실에 가깝게 만든다.
  7. AI 클러스터는 NVLink 같은 스케일업과 GPU당 400~800G의 스케일아웃 백엔드(레일 구조)로 나뉜다. 링 올리듀스는 2(N−1)/N·S/B로 대역폭 최적이다.

확인 퀴즈

데이터센터가 3계층 트리에서 리프-스파인 구조로 바뀐 가장 큰 이유는?

분산 서비스와 저장 장치 복제, 분산 학습으로 동서 트래픽이 지배적이 되었다. 리프-스파인은 어느 두 서버 사이에도 같은 대역폭의 여러 경로를 준다.

포트가 64개인 스위치로 막힘 없는(1:1) 2단 리프-스파인을 만들면 최대 몇 대의 서버를 연결할 수 있을까?

리프는 포트 절반(32개)을 서버에, 스파인은 64개 포트로 리프 64대를 받는다. 64 × 32 = 2,048 = k²/2. 65,536은 3단 팻 트리(k³/4)의 값이다.

ECMP가 패킷 단위가 아니라 흐름(5-튜플 해시) 단위로 경로를 고르는 주된 이유는?

같은 흐름의 패킷이 같은 길로 가면 도착 순서가 유지되어 TCP가 손실로 오해하지 않는다. 대가로 큰 흐름끼리 충돌하면 불균형이 생긴다.

요청 하나를 서버 수백 대에 보내고 답을 모으는 서비스에서, 갑자기 응답이 수백 ms씩 늦어지는 일이 생겼다. 응답들이 동시에 한 포트로 몰려 스위치 버퍼가 넘친 것이 원인이었다. 이 현상은?

다대일로 동시에 몰리는 인캐스트는 버퍼 넘침 → 손실 → TCP 최소 재전송 대기(기본 200 ms)로 이어져 지연을 크게 키운다.

RoCEv2 네트워크에서 PFC와 ECN/DCQCN을 함께 쓰는 이유로 옳은 것은?

PFC는 버퍼가 찰 때 앞 장비를 잠시 멈춰 손실을 막고, ECN 표시를 받은 NIC는 DCQCN으로 송신 속도를 낮춰 PFC가 자주 작동하지 않게 한다.

GPU 8개가 링 올리듀스로 4 GB의 기울기를 합친다. GPU 하나가 링크로 보내는 데이터 양은 대략?

2(N−1)/N × S = 2 × 7/8 × 4 GB = 7 GB. GPU 수가 늘어도 데이터 크기의 2배를 넘지 않아, 링 올리듀스는 대역폭 면에서 최적이다.