PCIe 장치는 서버마다 구매되고 서버마다 남습니다. 호스트의 평균 사용률이 낮아도 최대 부하를 위해 고대역폭 NIC나 로컬 SSD를 장착해야 합니다. 전용 PCIe 풀링 스위치는 여러 호스트가 장치를 공유하게 하지만 특수 하드웨어, 고정 배선, 별도 관리 영역을 추가합니다. Oasis는 메모리 활용률 때문에 이미 도입한 CXL 메모리 풀을 장치 트래픽에도 사용할 수 있는지 묻습니다[1].

핵심은 공유 메모리 위의 소프트웨어 라우팅입니다. CXL 포드의 여러 호스트가 같은 풀 메모리 영역을 매핑합니다. CPU는 load/store, PCIe 장치는 DMA로 접근합니다. 클라이언트 호스트의 드라이버가 공유 버퍼에 장치 요청과 디스크립터를 쓰면, 장치가 물리적으로 연결된 호스트의 엔진이 이를 읽어 로컬 장치를 실행합니다. 완료와 데이터도 같은 풀로 반환합니다. PCIe 트랜잭션은 루트 컴플렉스 사이를 건너지 않지만 원격 호스트에는 논리 장치가 보입니다.

Oasis는 NIC 풀링으로 이를 구현했습니다. 평가에서 NIC 활용률은 두 배가 됐고 장애 전환 중단은 38ms였습니다. 더 중요한 구조적 결과는 PCIe 자체를 라우팅하지 않아도 장치 풀을 만들 수 있다는 점입니다. CXL 메모리가 공통 데이터 경로가 되고, 소프트웨어가 장치 종류별 의미를 변환합니다. 상용 CXL 2.0 부품에서 유연한 배치를 얻는 대신 소프트웨어와 공유 메모리 프로토콜이 추가됩니다.

장치 인터커넥트로 사용하는 CXL 포드

CXL 메모리 풀은 랙 규모 포드의 여러 호스트에 용량을 제공합니다. Oasis가 사용한 하드웨어는 호스트 간 캐시 일관성을 제공하지 않습니다. 한 CPU가 캐시한 라인을 다른 호스트나 PCIe 장치가 바꿔도 자동 무효화가 오지 않습니다. 따라서 일관된 원자 연산과 캐시 가시성을 전제로 하는 일반 공유 메모리 큐를 사용할 수 없습니다.

Oasis는 장치 I/O가 이미 CPU 캐시를 우회한다는 특성을 활용합니다. DMA 요청과 완료 버퍼를 소유권이 이전되는 영역으로 취급합니다. 생산자는 디스크립터를 게시하기 전에 쓴 캐시 라인을 플러시하고 필요한 순서 보장 연산을 실행합니다. 소비자는 소유권 변경을 확인한 뒤 읽고, 처리가 끝나면 소유권을 돌려 줍니다. 양쪽이 같은 데이터 버퍼를 동시에 수정하지 않습니다.

논문은 비일관 CXL 메모리에 맞는 메시지 채널을 새로 구성합니다. 기존 채널은 일관 공유 메모리를 가정하거나 에뮬레이터에서 우연히 동작하는 잘못된 fence를 사용할 수 있습니다. Oasis는 실제 풀을 측정하고 제어 단어와 페이로드를 다른 캐시 라인에 배치해 거짓 공유와 플러시 트래픽을 줄입니다. 최적화한 채널은 비교 대상보다 최대 29× 빨랐습니다.

Oasis가 CXL 메모리 풀을 클라이언트 호스트와 다른 호스트의 PCIe 장치 사이 경로로 사용하는 구조입니다. 클라이언트 드라이버는 명령과 데이터를 명시적으로 플러시한 공유 버퍼에 씁니다. 장치 종류별 엔진이 소유권을 받아 로컬 PCIe 작업을 제출하고 완료를 풀로 돌려 줍니다. PCIe는 각 루트 컴플렉스 안에 남습니다. 이 글을 위해 새로 만든 도판.

이는 CXL 3.0 하드웨어 일관성과 다릅니다. Oasis는 현재 이용할 수 있는 CXL 2.0 풀링 장치를 대상으로 하고 소프트웨어에서 정확성을 구현합니다. RDMA와도 다릅니다. 포드 안에서는 네트워크 왕복과 RNIC 전송 계층 없이 CPU와 장치가 메모리 방식으로 통신합니다. 저자들은 일반적인 클라우드 원격 I/O 경로의 약 50~110마이크로초와 비교해 CXL 경로의 추가 비용이 평가 연산에서 한 자릿수 마이크로초라고 설명합니다.

풀링 가능한 장치를 결정하는 소프트웨어 엔진

공유 메모리는 바이트를 옮기지만 임의의 PCIe 장치를 재현하지는 않습니다. Oasis에는 장치 종류별 소프트웨어 엔진이 필요합니다. 엔진은 디스크립터 형식, 큐 의미, 메모리 등록, 인터럽트 또는 폴링, 리셋, 완료 규칙을 알아야 합니다. NIC용 네트워크 엔진은 원격 가상 큐를 물리 NIC에 매핑하고 패킷 버퍼를 처리하며 애플리케이션이 기대하는 호스트 네트워크 인터페이스를 유지합니다.

이 변환은 유연성을 만듭니다. 호스트가 NIC 하나에 영구 배선되지 않고, 할당기가 수요에 따라 큐 용량을 배정합니다. 최대 부하 시점이 다른 여러 호스트가 고대역폭 어댑터 하나를 나눌 수 있습니다. 대신 구현 경계가 생깁니다. SSD, 가속기, FPGA는 별도 엔진이 필요하고, 특별한 순서나 피어 투 피어 동작을 쓰는 장치는 가상화하기 어려울 수 있습니다.

제어 계층은 장치 소유권, 가용 큐, 호스트 구성을 추적합니다. 호스트가 장치를 요청하면 매핑을 설치하고 논리 큐를 엔진에 연결합니다. 이후 데이터 경로는 중앙 할당기를 거치지 않습니다. 일반 I/O가 관리 서비스에 기다리지 않으면서 재할당과 장애 전환을 지원합니다.

포트 수에서 실제 사용량으로 바뀌는 분모

프로토타입은 상용 CXL 2.0 메모리 풀링 하드웨어와 NIC를 사용했습니다. 평가한 작업 조합에서 NIC 활용률은 두 배가 됐습니다. NIC 하나가 회선 속도의 두 배를 냈다는 뜻이 아닙니다. 여러 어댑터에 낮은 점유율로 흩어질 수요를 하나의 풀에서 처리해 구매한 NIC당 유효 작업이 늘어난 결과입니다.

이점은 통계적 다중화에 달려 있습니다. 모든 호스트가 동시에 네트워크 최대 부하에 도달하면 공유 NIC의 포트와 큐는 그대로 제한됩니다. AI 집단 통신은 동기화되어 시작되므로 독립적으로 변하는 클라우드 서비스보다 풀링 이점이 작을 수 있습니다. 한 호스트가 모든 큐나 풀 대역폭을 사용하지 못하도록 작업 특성을 아는 예약이 필요합니다.

원격 I/O에는 지연이 추가됩니다. 클라이언트가 CXL 메모리로 통신하고, 엔진이 작업을 스케줄링하며, 물리 장치가 로컬에서 완료합니다. 논문은 한 자릿수 마이크로초의 추가 비용을 보고했습니다. 인용한 클라우드 네트워크 경로의 50~110마이크로초보다 짧지만 네이티브 로컬 큐보다 깁니다. 처리량 중심 또는 중간 정도의 지연 민감 장치에는 적합하지만 가장 짧은 마이크로초 서비스는 로컬 어댑터가 필요할 수 있습니다.

Oasis의 동작 범위입니다. 최대 2×의 측정 NIC 활용률은 동시에 최대가 되지 않는 호스트 수요를 합친 결과입니다. CXL 소프트웨어 경로의 추가 지연은 한 자릿수 마이크로초이며, 논문이 인용한 클라우드 원격 I/O는 50~110마이크로초입니다. 장애 전환 중단은 38ms입니다. 활용률, 경로 비용, 복구 시간을 구분해 표시했습니다. 이 글을 위해 새로 만든 도판.

38ms 장애 전환에는 서비스 경로의 실패를 감지하고 다른 엔진 또는 장치를 배정해 논리 인터페이스를 재개하는 과정이 포함됩니다. 가상머신이나 컨테이너를 재시작하지 않아도 되지만 모든 전송 계층에 보이지 않을 만큼 짧지는 않습니다. 더 짧은 타임아웃을 가진 애플리케이션은 중단이나 재전송을 볼 수 있습니다. 물리적으로 한 호스트에 묶인 장치와 달리 클라이언트를 재부팅하거나 배선을 바꾸지 않고 논리 연결을 옮길 수 있다는 점이 중요합니다.

비용이면서 구현을 단순화하는 비일관성

하드웨어 일관성은 익숙한 공유 큐를 허용하지만 프로토콜, 프로세서, 장치 지원을 추가합니다. Oasis는 명시적인 소유권과 플러시를 선택했습니다. 소프트웨어 책임은 커지지만 배포된 풀에서 동작이 보이고 검증 가능합니다. 모든 생산자가 플러시와 순서 보장 규칙을 지켜야 안전합니다. fence 하나를 빠뜨리면 재현하기 어려운 드문 데이터 손상이 될 수 있습니다.

제어 플래그와 페이로드가 같은 캐시 라인에 있으면 불필요한 쓰기 되돌림이 생기므로 배치도 중요합니다. 폴링 빈도는 지연과 CPU·CXL 트래픽을 맞바꿉니다. 큰 페이로드는 메모리 애플리케이션이 사용할 풀 대역폭을 소비할 수 있습니다. CXL 메모리는 풀에 공짜로 생긴 전송 경로가 아니라 장치 I/O와 메모리 접근이 링크, 스위치 포트, 장치 미디어를 공유하는 자원입니다.

보안도 소프트웨어 영역으로 이동합니다. 풀은 어느 호스트가 명령과 데이터 영역을 매핑할 수 있는지 제한해야 하고, 엔진은 물리 장치에 요청을 넣기 전에 디스크립터를 검증해야 합니다. 악성 클라이언트가 다른 호스트에 DMA하거나 공유 NIC를 리셋하지 못하게 해야 합니다. 서비스 호스트의 IOMMU 보호와 CXL 주소 권한이라는 두 보호 영역이 일치해야 합니다.

CXL 도입과 수요 분산이라는 적용 조건

Oasis는 CXL 메모리 풀을 이미 도입했고, 호스트별 장치 수요가 서로 다른 시점에 변하며, 몇 마이크로초의 추가 지연을 허용할 수 있을 때 유리합니다. 메모리 투자로 장치 풀링까지 얻어 최대 수요를 위해 구매한 NIC나 SSD 수를 줄일 수 있습니다. 장애나 유지보수 때 빠르게 재할당할 수도 있습니다.

I/O만을 위해 CXL 풀을 새로 구매하거나 모든 호스트가 동시에 최대 부하가 되고, 장치가 GPU와 로컬 피어 투 피어 접근을 요구한다면 이점이 작습니다. 하나의 PCIe 트리 안에 남던 GPU Direct 경로의 명령과 데이터를 호스트 메모리 및 소프트웨어 엔진으로 우회하면 핵심 장점이 사라질 수 있습니다. NIC 결과가 다른 장치에도 적용된다고 가정하지 말고 장치 종류마다 종단 간 비교해야 합니다.

규모는 포드에 제한됩니다. CXL 2.0 풀링은 일반적으로 랙 로컬이며 공유 메모리의 지연과 라우팅이 데이터센터 네트워크를 대체하지 않습니다. 가까운 호스트 몇 대가 장치 풀을 만들고 그 경계를 넘는 애플리케이션은 여전히 Ethernet이나 InfiniBand를 사용합니다.

동시 수요를 기준으로 한 장치 절감

Oasis의 사업상 근거는 최대 대역폭이 아니라 활용률입니다. 운영자는 짧은 시간 단위로 호스트별 장치 수요를 수집하고 최대 부하가 얼마나 자주 겹치는지 계산하며 장애 여유를 예약해야 합니다. 분모는 SLO를 지키면서 물리 장치 하나가 제공한 유효 큐와 바이트 서비스이며, CXL 경로 오버헤드와 장애 전환 중단을 포함해야 합니다.

CXL 풀 대역폭의 가격도 계산해야 합니다. 메모리와 I/O가 경합할 수 있고 서비스 호스트는 장치 엔진용 CPU 코어를 사용합니다. 줄인 장치 비용이 이 컴퓨트 비용과 장치별 소프트웨어 유지 복잡성보다 커야 합니다. 활용률 2×는 가능성을 보여 주지만 모든 환경의 통합 비율은 아닙니다.

Oasis는 CXL의 역할을 넓힙니다. 원격 메모리나 일관성만을 위한 기술이 아닙니다. 비일관 공유 메모리는 명시적으로 관리하는 빠른 메시지 및 DMA 매체가 될 수 있습니다. PCIe는 로컬에 남기고 장치 의미를 소프트웨어로 옮겨 전용 PCIe 패브릭 없이 유연한 풀을 만듭니다. 지연, 동시성, 장애 요구가 이 추가 계층과 맞는 장치를 골라야 성립하는 구조입니다.

출처와 저작권 안내

이 글은 Silicon & Systems가 작성한 편집 분석입니다. 원문의 구조, 측정, 적용 한계를 우리 표현으로 다시 썼습니다. 원문의 문장, 표, 도판은 재수록하지 않았고 이 페이지의 도판은 모두 새로 만들었습니다. 논문은 ACM DOI에서 CC BY 4.0으로 공개되었습니다. 저작권은 저자에게 있습니다. 2025.