본문 바로가기

Lecture & Column/cpu_lec_col

제온의 모든 것 : (1) 이론편

Author : Daeguen Lee

(Any action violating either copyright laws or CCL policy of the original source is strictly prohibited)

 

 

 

 

1. A Brief History of Xeon


안녕하세요 독자 여러분. 오늘은 벌써 반년 전 약속한 + 예고편을 올린지도 벌써 한달이 되어가는 제온 리뷰를 보여드릴 차례입니다. 오랜 기다림 끝에 내놓은 글인 만큼 읽어주시는 독자의 입장에서도, 쓰는 제 입장에서도 만족스러운 질을 담아내기 위해 많은 고민과 끊임없는 수정을 거쳤습니다만 최종 결과물 앞에 선 지금의 심정은 한없는 부끄러움 뿐입니다. 국내에서의 사실상 첫 제온 리뷰로써 다루고 싶었던 토픽은 너무나 많고, 넓고 깊었지만 정작 글을 쓰는 내내 그것들을 담아낼 역량이 이것밖에 안되는구나 하는 걸 끊임없이 깨닫는 좌절의 연속이었습니다.

 

제온이라는 브랜드 자체는 펜티엄 2가 출시된 것과 같은 1998년에 그 하위 브랜드로써 ("펜티엄 2 제온") 세상에 처음 등장하게 되었습니다. 이때까지만 해도 인텔은 자사의 x86 포트폴리오 전체를 펜티엄이라는 단일 브랜드로 묶되 그 안에서 고성능/서버용에 적용 가능한 것에 제온이라는 꼬리표를 달아준 것에 지나지 않았습니다. 실제 펜티엄 2 시절과 3 시절의 제온은 그들의 데스크탑 카운터파트인 펜티엄 2 / 3과 비교했을 때 전혀 다르지 않은 코어 구성을 가졌으며, 기껏해야 캐시 계층 구조가 더 복잡해지거나 (일부 모델의 L3캐시 탑재) 동일한 계층구조 하에서 캐시 용량을 늘린 (펜티엄 2 / 3의 L2 캐시용량은 512KB이지만 펜티엄 2 / 3 제온은 2MB까지 확장된 모델이 나옴) 수준에 그쳐 있습니다.

 

이는 제온 브랜드의 모태 격인 펜티엄 프로보다도 심리적으로 위축된 명명법입니다. P5 마이크로아키텍처가 큰 성공을 거둔 후 인텔이 야심차게 준비한 P6은 이후 십여년간 인텔의 모든 "차세대" 마이크로아키텍처의 근간이 될 만큼 더욱 큰 성공을 거두었으나 출시 직후만큼은 예외였는데, 당대의 제조공정으로 구현하기에 지나치게 거대한 프론트엔드/백엔드 구성과, 이로 인해 희생해야 했던 L1캐시, 당대의 제조공정 하에서 잘 올라가지 않았던 클럭 등 여러 요인이 겹쳐 적어도 "첫 P6" 인 펜티엄 프로에서만큼은 인텔이 큰 재미를 보지 못했습니다.

 

인텔은 당초 펜티엄 프로를 투입하며 "데스크탑용 펜티엄, 고성능/서버용 펜티엄 프로" 라는 시장 분리를 꾀했으나 첫 단추가 잘 끼워지지 않았습니다. 설상가상 당시 x86 진영 자체의 가장 큰 라이벌이던 RISC 진영의 경우, CISC 명령어 디코딩이란 장벽으로부터 상대적으로 자유로웠고 따라서 더욱 진보적인 아키텍처를 취할 수 있었으며, 성능 역시 펜티엄 프로를 크게 웃돌았습니다. 이때의 실패는 인텔로 하여금 이후 두 세대 (= 펜티엄 2 / 펜티엄 3) 동안 서버/워크스테이션 라인업에 '소극적으로' 발을 담그게 하는 원인이 됩니다. 자신 있게 "이건 우리의 서버 브랜드인 '제온' 이야!" 외치기보단 소심하게 "이건 펜티엄 브랜드의 다른 한 종류인데, 아니, 아니, RISC 너희들이랑 겨룰 건 절대 아니고, 그치만 조금은 서버쪽에 써 줘도 괜찮을지도 몰라..." 하는 모양이 된 것입니다.

 

인텔이 제온이라는 이름을 독립된 CPU 브랜드로 사용하기 시작한 것은 그로부터 3년이 지난 2001년, 넷버스트 마이크로아키텍처를 도입하면서부터였습니다. 이때의 제온이 성공적이었는지 여부와 별개로 인텔은 넷버스트를 설계하며 그때까지의 패러다임을 완전히 버리게 됩니다. 코어 자체를 개선하기보다는 클럭을 높이는 방향으로, RISC와 정면으로 대결하기보단 아예 노선을 달리하는 것으로. 비슷한 시기 출시된 PowerPC 970 / POWER4 와 정 반대의 설계철학을 갖고 있었으며 이로써 그들이 충족시킬 수 없는 시장에 자신들의 브랜드(=제온)를 심을 결심을 하게 됩니다.

 

그러나 많은 분들이 이미 아시겠지만 넷버스트 자체는 그리 성공적이지 못했습니다. 데스크탑 시장에서의 높은 판매고를 제외하고, 넷버스트 기반 제온은 여전히 서버 시장에서 잘 채택되지 않았으며 (RISC 메인프레임의 점유율은 조금도 빼앗아오지 못했고, 오히려 x86 시장에 AMD의 K8이 대거 진출하도록 파이를 잘라주는 배식당번의 역할에 충실했으며, 설상가상 K8이 -인텔이 하지 못한- 고성능 메인프레임 시장의 점유율을 허무는데 일조합니다) 넷버스트의 높은 부동소수점 성능 / 낮은 정수성능이란 특성은 전통적인 서버에 요구되던 덕목과는 전혀 합치되지 않았습니다. 서버는 여전히 높은 정수성능을 요구했으며 넷버스트 제온으로 그 요구를 맞추기 위해서는 감당하기 힘들 만큼 소비전력이 늘어야 했기 때문입니다. 오히려 제온 브랜드의 황금기는 넷버스트 후속으로 재등장한 개량된 P6 - 코어 마이크로아키텍처 시기에서였습니다. 그리고 그 다음 세대인 네할렘에서 제온은 일찍이 경험한적 없던 거대한 시장 확장을 맞이합니다.

 

네할렘은 x86 역사상 처음으로, 비슷한 트랜지스터 수를 사용한 RISC와 '한번 붙어볼만한' 성능을 발휘하게 된 CPU입니다. 프론트엔드 및 백엔드의 주요 구조는 코어 마이크로아키텍처의 판박이이지만 AMD K8로부터 영감을 받은 내장 메모리 컨트롤러, 퀵패스 인터커넥트(QPI) 등의 도입은 아키텍처의 잠재력을 최대로 끌어내는데 일조했고, 이러한 네할렘을 8코어 분량으로 확장한 네할렘-EX (Nehalem-EX = "Beckton") 는 당대의 RISC CPU인  POWER7, SPARC T4 등과 비교해 의미 있는 가격대 성능비를 제공할 수 있었습니다. (다만 절대성능은 여전히 상대가 못 됐습니다) 이로써 인텔은 근 10년만에 최상위 서버시장에 진출할 수 있겠다는 자신감을 갖게 되었고, 다음 아키텍처인 웨스트미어 대에서 처음으로 "제온 E7" 이라는 최상위 라인업을 발표하기에 이릅니다. 여기에 쓰인 웨스트미어-EX (Westmere-EX) 칩은 10개 코어를 탑재하고 있었는데, 당대 최신의 데스크탑용 CPU는 변함없이 4코어에 머물렀으며 이때부터 데스크탑과 서버 CPU의 양극화가 가속되었습니다. 여기가 바로 이 글이 시작되는 지점입니다. 잠시 숨 좀 고르고, 본격적으로 이야기를 풀어 보겠습니다.

 

 

2. From Sandy-Bridge to Haswell


그때부터 지금까지, 최근 몇 년간 하이엔드 x86 시장에의 인텔의 경쟁자 없는 독주체제는 전례없는 수준으로 '그보다 더 명확할 수 없는' 상태가 되어 있습니다. 복잡한 분석까지 갈 것 없이 인텔과 경쟁사의 제품 카탈로그만 보더라도 명백한데 인텔의 가장 비싼 CPU와 같은 가격대에서 경쟁사는 "깔끔하게" 어떤 대응 포트폴리오도 없기 때문입니다. 아래의 그림을 보시죠.

 

 

그러나 이런 상황에서라도 인텔은 고객들이 적절한 주기로 업그레이드를 하게끔 지속적으로 매력을 어필할 필요가 있습니다. 특히 경쟁상대가 전무한 '어중간한' 시장보다도, 저 멀리에나마 RISC라는 강력한 경쟁상대가 존재하는 최상위 서버 시장에서 이런 필요성이 대두되며 그로 인해 초래된 것은 근래의 제온 CPU의 비약적인 발전, 더 정확히 말하자면 데스크탑 CPU와 서버 CPU 사이의 격차의 비약적인 확대입니다.

 

5년 전 등장한 네할렘-EX는 x86 역사상 처음으로 RISC와 모든 '서버로써 갖춰야 할 덕목' 영역에서 (RAS, 대역폭, 연산성능 등) 우세하지는 못하더라도 겨뤄볼 만한 수준을 달성했고, 가격은 훨씬 저렴했으며, 그 결과 본격적으로 인텔이 메인프레임 시장에 진출하는 포문을 연 주인공입니다. 당시의 데스크탑 카운터파트인 블룸필드와 비교했을 때 코어 갯수는 두 배의 격차가 있었습니다(4 vs 8). 그로부터 1년 뒤엔 제온 E7 라인업이 정식으로 분리되어 별도의 포트폴리오를 구축하게 되었는데 여기에 사상 첫 10코어 x86 CPU인 웨스트미어-EX를 투입하며 다시 한번 확대한 데스크탑과 서버 CPU 사이의 간극은 그 다음 세대인 아이비브릿지-EX (Ivy Bridge-EX) 에서 더한층 늘었으며 현 세대의 하스웰-EX (Haswell-EX) 까지 이러한 추세는 현재진행형입니다.

 

위와 같은 제온 E7의 급진적인 전개는 RISC 경쟁자들과의 경쟁을 생각하면 불가피한 선택이었기도 하나, 비교적 '전통적인 x86 서버' 시장을 겨냥한 제온 E5 라인업에도 마찬가지로 적용되고 있습니다. 최초의 제온 E5 라인업으로 투입된 샌디브릿지-EP (Sandy Bridge-EP) 는 최대 8개 코어를 탑재하고 있었지만 E5 2세대인 아이비브릿지-EP (Ivy Bridge-EP) 에서 12코어, 3세대인 하스웰-EP (Haswell-EP) 에서는 18코어가 되어 매 세대마다 50%씩 꼬박꼬박 늘어 온 것이 이를 증명합니다. 그리고 이로써 데스크탑과 서버 CPU의 코어 수 격차는 샌디브릿지 시기의 2배(8 vs 4)로부터 현재 4.5배(18 vs 4)까지, 브레이크 풀린 기관차처럼 폭주하고 있는 상황입니다.

 

 

이쯤에서 거두절미하고 소개하자면 하스웰-EP/EX는 멀티코어 괴물이라 단언할 수 있습니다. 그렇다고 코어 갯수만 많은 '지금까지의 CPU', 혹은 '지금까지의 설계방식에서 숫자만 키운 것' 정도로 치부한다면 그것이야말로 이 CPU를 가장 크게 오해한 것입니다. 물론 인텔이 최근 몇 세대에 걸쳐 최상위 칩의 코어 개수를 지속적으로 늘려 온 것은 사실이나 그것만으로 하스웰-EP/EX의 업적을 '과거로부터의 연장선' 취급할 수는 없다는 것이죠. 이에 관해서는 뒷 장에서 더 자세히 다루겠습니다만, 어쨌든 이토록 많은 코어가 각기 제 성능을 낼 수 있는 여건을 보장해주는 데만도 엄청난 고려가 선행되어야 했음은 물론 대용량 캐시 자체가 유발하는 레이턴시, 소비전력, 캐시 일관성 관리를 위한 트래픽의 기하급수적 증가 등 엔지니어의 입장에서는 특히 이번 세대를 설계하며 무수히 많은 위험요소를 다뤄야 했을 것이기 때문입니다. 게다가 이 CPU이 겨냥하는 오늘날의 서버시장 자체를 들여다보면 CPU 내부를 잘 설계하는게 전부인 것만도 아닙니다.

 

오늘날의 서버를 한 마디로 정의하기란 어렵지만, 분명히 전통적인 서버 역할에 국한되는 개념은 아닙니다. 다시 말해, 오늘날의 서버에 요구되는 덕목은 한두 가지의 (전통적인) 평가기준으로 압축되지 않는다는 뜻이죠. 전통적인 서버 어플리케이션이나 서비스는 CPU 자체의 성능(그 중에서도 정수연산 성능)에 크게 의존했지만 오늘날 어떤 어플리케이션은 캐시의 속도나 메모리의 용량, 대역폭, 레이턴시 등에 민감하게 반응할 수도 있고 다른 몇몇은 RAS나 스토리지 I/O 속도에 좌우되기도 할 것입니다. 또한 외부에서 요청하는 어플리케이션이나 서비스의 실행이 서버 OS 위에서 구동되는 가상머신 내의 소프트웨어인 경우도 비일비재합니다. 이런 경우는 가상화 성능이 관건이 될 것입니다. 결국 오늘날의 서버는, 과거로 치자면 하나의 작은 IDC로써의 역량을 통째로 요구받는다고 볼 수 있습니다.

 

이러한 다양한 요구에 대응하기 위해 인텔은 새로운 제온 E5/E7의 라인업을 매우 잘게 나눴습니다. 단지 코어 갯수만 수직적으로 분화한 것이 아니라 스탠다드, 어드밴스드, 프리퀀시 옵티마이즈, 파워 옵티마이즈, 커뮤니케이션 등 여러가지의 파생 세그먼트를 두었고, 각각의 세그먼트에 속하는 모델은 제각기 차별화된 특징을 가지고 있으며 특히 그 중 몇몇 세그먼트는 배타적인 명령어 확장(E7 라인업에 한해 적용된 TSX)이나 신기술(레이턴시에 민감한 커뮤니케이션 세그먼트에 한해 캐시 얼로케이션 테크놀로지(CAT) 탑재), 기능(10코어 이상의 모델에 한해 캐시 일관성 관리 모드의 하나로 클러스터 온 다이(COD) 모드 지원)을 갖고 있습니다.

 

 

이토록 다양한 모델이 존재하는 것은 -비록 인텔이 의도한 바는 결코 아니겠으나- 새로운 서버를 구매하려는 고객에게 (정확히는 인텔이나 파트너사의 공식적인 상담을 접할 수 없는 가난한 고객에게) 큰 오버헤드가 됩니다. 3.5GHz의 쿼드코어에서부터 2.3GHz의 18코어에 이르기까지 40여 종의 모델로 세분화된 모델 중 자신에게 가장 적합한 단 하나를 선택하는 것이 결코 만만한 작업이 아니기 때문입니다.

 

이 글은, 일차적으로 "제온의 모든 것" 을 수박 겉핥기식으로라도 다루는 강좌의 형태를 갖고자 하나, 이차적으로는 바로 이런 측면에서 잠재적인 구매자에게 도움을 드리려 합니다. 가능한 한 많은 모델과 각 세그먼트를 대표하는 모델들을 테스트해 그 결과를 공유함을써 가난한 서버 관리자의 작업부담을 덜어드리려는 것입니다.

 

구체적으로, 제온 E5 1세대부터 3세대까지의 거의 모든 SKU 및 그에 상응하는 세대의 AMD 옵테론을 벤치마크할 것인데, 현재 데스크탑용 최상위 CPU인 코어 i7 5960X와 비교해서 과연 어떤 영역에서 서버용 CPU의 (<-그 중에서도 제온의 (<-그 중에서도 5960X와 비슷한 가격대의 제온의))) 비교우위가 있는지를 알아보고, 이를 바탕으로 (오버클럭 가능성 등을 포기하고라도) 제온을 사야만 하는 or 살 수밖에 없는 분야는 과연 어떤 것인지 살펴본 뒤 독자 여러분께 제언할 것입니다.

 

 

3. The Evolution of Uncore


네할렘 마이크로아키텍처가 샌디브릿지로 대체되며 바뀐 가장 큰 구조적 변화는 바로 링 버스 구조를 도입한 것입니다. 멀티코어 다이 구성시 네할렘까지는 각각의 코어와 L3캐시를 각각 독립된 채널을 통해 일대일로 연결해주어야 했고, 이는 UCA (Uniform Cache Access; UMA의 캐시 수준에의 적용) 구현을 위해 당연한 것이었습니다. 그러나 많아 봐야 4코어까지 탑재하는 데스크탑 영역이나, 네할렘-EX의 최대 코어 구성이었던 8코어까지만 하더라도 그로 인한 오버헤드가 심각한 수준이 아니었지만 코어 갯수가 10개를 넘은 웨스트미어-EX부터는 설계의 복잡성이 커지기 시작했습니다. 이래서는 미래에 코어 갯수를 늘릴 때마다 기하급수적으로 늘어나는 채널의 수를 감당할 수 없겠다고 판단한 인텔은 샌디브릿지 마이크로아키텍처부터 링 버스를 도입합니다.

 

 

링 버스는 거시적으로 보면 UCA가 유지되나 미시적인 레벨에서는 분명히 NUCA의 일종이라고 할 수 있습니다. 특히 여러 개의 코어가 탑재되는 서버용 다이에서 이런 특징이 두드러지는데, 예를 들어 0번 코어가 7번 캐시의 데이터를 접근할 때와 0번 캐시의 데이터를 접근할 때 소요되는 레이턴시가 (링 버스의 길이가 다른 만큼) 명백히 다를 것이기 때문입니다. 그러나 각 코어와 캐시를 일대일로 이어주는 것보다 간단히 구현할 수 있다는 장점이 압도적으로 크게 평가되었고, 코어 갯수가 증가할수록 링 버스 구조로 인해 절약되는 복잡성이 미래에 큰 이득으로 환산될 것이었기에 이러한 결단이 이뤄진 것입니다. 그러나 이때 이미 예상되었던 문제점은 코어 갯수가 늘어나며 점점 더 불거지게 되었고, 이는 하스웰-EP/EX를 설계할 당시 엔지니어들이 특별히 고민해야 했을 부분과도 깊이 연관됩니다. 이에 관해서는 이 장 말미에 다시 다루도록 하겠습니다.

 

어쨌든, 샌디브릿지 마이크로아키텍처는 여러 측면에서 네할렘보다 높은 효율을 달성했으며 샌디브릿지 기반 최상위 다이인 샌디브릿지-EP는 1세대 제온 E5 라인업의 모체가 되었습니다. 아래는 1세대 제온 E5의 라인업 표입니다.

 

 

아이비브릿지 마이크로아키텍처가 채택되면서 제온 라인업에 투입되는 다이는 3종으로 분화되었습니다. 최상위 제품을 RISC와의 경쟁 심화에 대응해 확장할 필요성은 명백했고, 문제는 15코어짜리 최상위 다이 하나만으로 모든 라인업을 파생하기엔 아무래도 8코어 이하의 모델을 만드는 경우 지나치게 비용 낭비가 심했으며, 그렇다고 과감히 '적은 코어갯수 모델'을 없애는 것은 라인업의 공백을 초래할 일이었기에 다이 자체를 다양화한 것은 어쩌면 필수적인 선택이었다고 할 수 있겠습니다. 설계 자체는 이미 고도로 모듈화되어 있었기에 15코어 다이를 원형으로 하여 10코어, 6코어 다이를 아래 그림처럼 간단히 파생할 수 있었습니다.

 

 

기능적으로 달라진 점이라면 캐시 일관성 관리정책의 제2모드가 추가되었다는 점입니다. 샌디브릿지까지 기본으로 탑재하고 있던 모드는 얼리 스눕이라고 하는데 각 L3캐시에 이어진 링 정류장 (Ring Stop) 이 해당 캐시를 감시하며 데이터가 갱신될 때마다 링 전체에 신호를 보내 다른 캐시에 존재하는 같은 데이터의 사본을 무효화하는 것입니다. 캐시와 최단거리에 위치한 링 정류장이 스누핑의 주체인 만큼 가장 적은 레이턴시로 스누핑이 가능하지만 그만큼 (링 버스상의 거리를 기준으로) 멀리 떨어진 정류장과 가까운 정류장 사이의 레이턴시를 그대로 노출할 수밖에 없는 구조이기도 합니다. 따라서 정확히 말하자면 무조건 '레이턴시가 적다' 기보다는 '레이턴시의 변동폭이 크다' 로 요약할 수 있으며, 특히 10코어 이상의 다이 구성에서는 링의 양쪽 끝에 별개의 메모리컨트롤러를 두고 있으므로 대역폭 역시 충분히 사용하지 못할 가능성이 있습니다.

 

아이비브릿지에 추가된 두번째 모드 - '홈 스눕' 모드는 이러한 약점을 개선한 것입니다. 얼리 스눕과 비교해 가장 큰 차이점은 스누핑의 주체가 링 정류장에서 (모든 링 정류장의 종착지 격인) 홈 에이전트로 이관된 것입니다. 홈 에이전트는 상대적으로 모든 링을 대칭적으로 접근할 수 있으며(얼리 스눕 모드와 비교해 최단거리 캐시의 경우 레이턴시가 늘어나지만 최장거리의 경우 더 적은 레이턴시로 접근하게 됩니다), 또한 두 개의 메모리컨트롤러와도 직결되므로 최대한의 대역폭을 사용하도록 도움을 줍니다. 요약하자면 비교적 일관된(=중간 정도의) 레이턴시와 넓은 대역폭이 홈 스눕의 이점이라 할 수 있겠습니다. 물론 얼리 스눕에 최적화된 코드(=가까운 캐시를 주로 참조하고, 메모리 대역폭에 개의치않는 유형)의 경우라면 홈 스눕에서 다소 성능상 피해를 볼 수도 있습니다.

 

또한 제온 E7에 사용된 아이비브릿지-EX는 하위 모델들과도 차별되는 특징이 하나 있습니다. 스케일러블 메모리 버퍼 (Scalable Memory Buffer, SMB) 라는 칩을 언코어와 메모리 사이에 끼워넣어 "DDR3 쿼드채널" 이라는 단조로운(!) 구성만 가능하던 메모리 인터페이스를 다양화한 것입니다. 구체적으로는 록스텝 (Lockstep) 모드와 퍼포먼스 (Performance) 모드의 두 가지로 설정이 가능합니다.

 

 

우선 록스텝/퍼포먼스를 막론하고 SMB의 도입이 가져다 주는 이점은 물리적으로 쿼드채널까지 관리할 수 있는 아이비브릿지-EP/EX의 메모리컨트롤러를 인위적으로 확장해 최대 옥타채널 구성을 가능하게 한다는 점입니다. 레이드와 비슷한 개념이라 생각할 수 있으며 두 모드의 차이는 미러링과 스트라이프의 차이와도 비교할 수 있습니다. 록스텝 모드는 SMB로 인해 "쪼개진" 두 채널에 동일한 데이터를 저장해 신뢰성 높일 목적으로 도입되었으며, 퍼포먼스 모드는 그와 달리 스트라이프 식으로 두 배의 대역폭을 갖게 되기 때문입니다. 전통적으로 용량만을 중시하던, 채널 구성에는 상대적으로 보수적이던 서버 플랫폼에 가해진 가장 큰 변화라 할 수 있습니다. 그 외에도 제온 E7 라인업은 QPI가 하나 더 늘어 3개가 되었단 차이가 있으나 이는 하스웰-EP/EX를 설명하며 함께 다루도록 하겠습니다.

 

아이비브릿지-EP 기반의 2세대 제온 E5 (E5 V2) 는 아래와 같은 라인업 구성을 가집니다.

 

 

전세대 제온 E5가 8코어 다이 하나만으로 파생된 것에 비하면 시작부터 훨씬 넓은 선택지가 있는 셈이고 실제로 SKU 가짓수 자체가 크게 늘었습니다. 특징이라면 이 중에서 본격적으로 '틈새시장용' 제품이 등장하기 시작했다는 점입니다. 데스크탑 시장에서의 압도적인 시장지배자로서의 인텔에 익숙한 많은 독자들께는 이런 모습이 낯설게 다가가리라 생각합니다. 틈새시장을 겨냥하는것 자체가 '더 거대한' 경쟁자가 미처 챙기지 못한 '나머지 이삭줍기'를 하겠다는 뜻에 다름아니기 때문인데, 하이엔드 서버 시장에서 여전히 갈 길이 먼 인텔의 위치를 단적으로 보여주는 사례라 하겠습니다.

 

대표적으로 제온 E5-2637 V2 / 2643 V2를 꼽을 수 있습니다. 이들은 코어갯수가 각각 4개 / 6개로 이 점만 보면 제온 E5 라인업의 최하위에 위치할 뿐이지만 실은 각각 6코어 / 10코어 다이에서 '코어 갯수만 줄인' 제품입니다. 인접 라인업상의 다른 제품들보다 월등히 많은 15MB / 25MB의 L3캐시를 탑재하고 있다는 점이 이를 반증합니다. 이러한 제품은 극단적으로 캐시 내부의 데이터 교류 빈도 (In-Cache Transaction) 빈도가 높거나 캐시 레이턴시에 민감한 용도로 주로 사용됩니다. 캐시용량 이외에도 언코어의 작동속도와 직결되는 기본 클럭이 월등히 높다는 점에서도 (그러나 터보부스트는 없거나 보수적으로 적용되어 있습니다) 이러한 특성화가 드러납니다.

 

이외에도, 최대 코어갯수가 12개 (다이상으로는 15개) 로 전세대보다 크게 늘었지만 일반적인 워크로드 자체가 한 세대만에 그렇게까지 멀티코어에 최적화될 수는 없는 현실적인 한계를 고려해 '적당한' 코어 갯수와 대신 높은 클럭을 갖는 '워크스테이션 특화' 제품이 W 접미사를 붙여 본격적으로 홍보되었으며, 그와 같은 맥락의 '프리퀀시 옵티마이즈드' 제품들이 하나의 서브 라인업을 형성했습니다. 또한 클럭이 높아지면 거의 그 제곱에 비례해 소비전력이 증가하는 점에 착안해 클럭을 낮은 수준으로 억제하는 대신 소비전력을 통상적인 SKU의 절반 수준으로 낮춘 '파워 옵티마이즈드' 제품군도 등장했는데, 이들은 낮은 클럭의 반대급부로 비슷한 가격대/모델넘버의 일반 모델보다 2~4개씩 더 많은 코어를 탑재하게 되어 본의 아니게 프리퀀시 옵티마이즈드와 대척점에 서게 되었습니다.

 

이제 현재로써는 최신인, 3세대 제온 E5/E7에 적용된 하스웰-EP/EX를 다룰 차례입니다. 아래 그림을 먼저 보고 설명을 이어가겠습니다.

 

 

 

아이비브릿지 마이크로아키텍처에서 하스웰로 이행하며 우선 각급 다이의 코어 갯수가 일제히 늘었습니다. 그러나 달라진 것은 그뿐만이 아닙니다. 언코어 레벨에서 오히려 더 거대한 변화가 가해졌는데, 바로 링 버스가 '분리된' 두 개로 늘었으며, 각 링 버스 사이에 인터커넥트 스위치가 배치되었고, 물리적으로 분리된 링 버스마다 하나씩의 홈 에이전트와 메모리컨트롤러가 배치되었다는 점입니다. 어떤 의미에서는 '아주 타이트하게 결합된' MCM처럼 보일 정도로까지 내부 구조가 변화한 것입니다.

 

샌디브릿지에서 링 버스 구조를 도입하며 개별 코어가 각기 개별 L3캐시 슬라이스에 접근하는 레이턴시가 다양해질 수 있다는 점은 대표적인 위험 요소였단 이야기를 앞서 했었습니다. 아이비브릿지에서 코어 갯수가 늘어나며 이 부분의 모순이 더욱 커졌지만 그때까지만 하더라도 이로 인한 성능 손실이 눈에 띄는 정도는 아니었던 것 같습니다. 그러나 링 버스 자체가 한 다이 내에서 두 부분으로 분할되고, 각각을 접속시키기 위해 별도의 '스위치'를 거치게 되며 링의 양쪽(편의상 링 도메인이라 합니다)을 오가는 데 소요되는 레이턴시가 급격히 늘게 됩니다.

 

또한 CPU가 '충분히' 점유되지 않은 경우 - 하나의 링 도메인 내에서 모든 작업이 수행되는 경우 (러프하게 코어갯수의 절반만큼만 활용되는 경우로 볼 수 있습니다) 다른 한쪽의 메모리컨트롤러를 사용하지 않는 경우가 관찰되고 있습니다. 정확히 어떤 알고리즘에 의해서인지는 알 수 없지만 상대적으로 마일드한 작업의 경우, 레이턴시 지연을 감수하면서까지 "두번째" 메모리컨트롤러에까지 접근해 대역폭을 확보할 실익이 없다고 판단하는 것이 해당 동작의 기준으로 추측됩니다. (즉 추가 대역폭으로 얻는 이익이 두번째 링 도메인으로의 여정을 감수하기 위해 늘어나는 레이턴시보다 덜한 경우) 문제는 이 '마일드함'의 기준을 판별하는 것이 무척 자의적이라는 것입니다. 정확히 말하자면 어플리케이션의 코어 친화도 (Core Affinity) 에 전적으로 좌우됩니다.

 

18코어를 갖춘 제온 E5-2699 V3의 경우 한 사이클당 처리가능한 최대 스레드 수는 36개로, 운영체제는 이를 36개의 논리 프로세서로 인식합니다. 보통 각각의 스레드는 0번부터 35번까지 순번이 매겨지며 이 중 처음 0~17번까지가 각각 같은 순번의 코어에, 18~35번 스레드는 다시 0번부터 17번까지의 코어에 배정되는 방식으로 카운트됩니다. 문제는 이 카운트 방식이 항상 일관적이지는 않다는 점입니다. 예컨대 멀티코어를 잘 지원하지만 하이퍼스레딩의 효과가 없는 어플리케이션을 '총 스레드 갯수의 절반 (이 경우엔 18스레드)' 만큼으로 제한해 돌릴 경우를 상상할 수 있는데, 충분히 '정상적인' 방식으로 모든 대역폭을 활용할 수 있어야 함에도 불구하고 실제 테스트를 돌려 보면 불규칙한 빈도로 대역폭의 절반밖에 쓸 수 없는 상황이 발생합니다. 극단적으로 한쪽 링 도메인의 코어만 가동되는 상황이 (= Affinity의 최상단에 배정되는 상황이) 왕왕 발생한다는 뜻입니다. 여기서 문제가 되는 건 '총 스레드 갯수의 절반' 이라는 기준이 실은 이러한 일이 발생할 수 있는 최대 스레드 갯수인데 '문제가 발생할 가능성이 있는 상한' 치고는 지나치게 높단 점입니다. (이보다 적은 갯수의 스레드를 점유하는 모든 작업에서 해당 문제가 발생할 소지가 있습니다) 예컨대 물리코어가 18개인 E5-2699 V3으로 12~16 스레드 정도를 돌린다고 하여 '마일드하다' 라고 치부할 수 없음은 명백합니다. 이에 관해서는 <벤치마크 결과> 장에서 자세히 다루겠지만, 우선 이를 가장 잘 요약하는 벤치마크를 미리 하나 소개합니다.

 

(Figure 10 : TRIAD Benchmark)

 

메모리컨트롤러가 꺼지는 문제는 인텔이 의도한 부분 같지는 않지만(그렇기에 더 큰 문제일 수 있지만), 사실 그밖의 '두개의 링 도메인' 구조로부터 파생되는 문제에 관해서는 다행히 인텔이 그에 대처하는 옵션을 제공하고 있습니다. 하스웰-EP/EX부터 새로 도입된 제3의 캐시 일관성 관리 정책인 클러스터 온 다이 (Cluster on Die, COD) 모드가 그것입니다. 단, 이 모드는 두개 이상의 홈 에이전트를 갖는 10코어 이상 모델 (12코어 다이 이상을 사용한 것) 에 한해 적용 가능합니다. 러프하게 보아 링 도메인을 기준으로, 물리적으로 한개의 다이를 논리적으로 두개의 소켓 (NUMA 도메인) 처럼 인식하는 것입니다.

 

 

사실 링 버스 구조 자체가 UCA로부터 멀어진 길이란 점은 위에서 언급했었습니다. 링 도메인이 두개로 분리되면서 하나의 하스웰-EP/EX 다이는 노골적으로 NUCA의 색채를 드러내고 있습니다. 심지어 양쪽 링 도메인이 별개의 메모리컨트롤러를 가지게 되면서, 한 소켓 기준으로 하나의 UMA 쿼드채널이라기보다는 두개의 NUMA 듀얼채널에 가까운 모양이 되었고 실제 작동에서도 비슷한 특성을 보였습니다. COD는 여기서 파생되는 문제점을 해결하기보다, 거꾸로 온전한 NUMA 도메인으로 분리하여 거기서 얻을 수 있는 장점을 키우는 쪽으로 노선을 바꿨습니다. 실제로 COD 모드 하에서 대부분의 멀티코어 최적화 어플리케이션 성능은 눈에 띄게 향상됩니다.

 

앞서 설명했듯 COD 모드는 캐시 일관성 관리정책의 한 가지입니다. 하스웰-EP/EX 다이 내에서 하나의 코어는 이론적으로 45MB의 L3캐시 모두에 접근할 수 있으나, 만약 필요로 하는 데이터가 다른 링 도메인에 속한 L3캐시에 있다면 이를 액세스하기 위해 큰 레이턴시를 감수해야 합니다. 이런 사례가 빈번하게 일어난다면 전체적인 성능 저하를 피할 수 없습니다. 러프하게 보아 캐시 용량보다 속도가 중요시되는 상황이라면 성능이 떨어집니다. 반면 링 도메인을 기준으로 사실상 별개의 CPU로 간주한다면 코어는 자신과 같은 링 도메인에 속한 L3캐시에만 접근하게 됩니다. 총 용량이 절반이 되므로 캐시 미스는 두배 증가하겠지만 레이턴시 역시 대폭 줄어듭니다. 이것이 COD의 본질입니다. COD의 단점은 COD가 없을 때의 단점을 뒤집어 놓은 것과 같습니다 : 캐시 속도보다 용량이 중요시되는 상황에서 성능이 떨어집니다. 또한 멀티코어에 최적화된 어플리케이션이라도 NUMA 자체에 최적화되지 않았다면 마찬가지로 성능이 떨어집니다.

 

마지막으로 하스웰-EP/EX에서 도입된 신기술로 캐시 모니터링 테크놀로지 (Cache Monitoring Technology, CMT) 및 캐시 얼로케이션 테크놀로지 (Cache Allocation Technology, CAT) 가 있습니다. 이들은 모든 3세대 제온 E5/E7 모델에 적용되는 것은 아니고 커뮤니케이션 세그먼트로 분류된 몇가지 모델 한정(아래의 표 참조)으로 CMT/CAT 지원을 못박고 있습니다. 그 의의와 구현방식에 대해 자세히 다루는 것은 생략하고, 인텔 자신의 설명을 소개하는 것으로 대신합니다.

 

 

 

 

 

(그 밖에, 3세대 제온 E7 (하스웰-EX) 한정으로 트랜잭셔널 싱크로나이제이션 확장 명령어 세트 (Transactional Synchronization Extentions, TSX) 가 추가되었으나 엄밀히 말하면 하스웰 마이크로아키텍처 자체에 포함되었던 것을 그동안 비활성화해 두었다가 비로소 활성화한 것으로, 이 글의 큰 흐름을 바꾸지 않는 내용이기에 다루지 않았습니다.)

 

아래는 3세대 제온 E5 라인업 표입니다.

 

 

끝으로 제온 E5와 E7의 가장 중요한 차이점에 대해 언급하며 이 장을 맺겠습니다. 사실 이 둘에 사용되는 다이는 물리적으로 완벽히 똑같습니다. 다만 제온 E5의 경우 QPI 중 하나를 비활성화해 2개인 채로 출시하는 반면 E7은 세개 모두 활성화되어 있는 게 사실상 유일한 차이점인데, 이로 인해 아래와 같은 차이가 발생합니다.

 

 

QPI가 두개인 경우 4소켓 구성이 가능하고, 3개인 경우 8소켓 구성이 가능하다는 정도로 구분할 수도 있지만 정확히 살펴보면 4소켓 구성인 경우도 둘의 차이가 존재합니다. 제온 E5의 경우 인접한 CPU끼리만 연결될 수 있어 전체적으로 고리같은 구조가 되는 반면 QPI가 3개인 제온 E7은 하나의 CPU가 다른 모든 CPU에 직접 연결될 수 있어 거미줄같은 모양이 됩니다. NUMA 시스템에서 성능을 높이는 핵심은 다른 CPU에 연결된 '원격 메모리' 액세스를 빨리 하는 것이니만큼, 똑같이 4소켓 구성으로 사용하더라도 제온 E7이 확실히 성능상 이점이 있다고 할 수 있습니다.

 

 

이것으로 제1편 : 이론편을 마칩니다. 제2편은 금주 중 업데이트될 예정입니다.