글을 시작하기에 앞서 해당 글은 야마자키 야스시, 미나와 케이코, 아제카츠 요헤이, 사토 타카히코의 저서인 『그림으로 공부하는 IT 인프라 구조』 를 바탕으로 요약 및 정리한 글임을 알려드립니다.
CPU
CPU는 Central Processing Unit의 약자이며 흔히 코어(Core)라고도 불린다. CPU는 명령을 받아 연산을 실행하고 결과를 반환하는 연산 처리를 담담하며, 이때 사용되는 명령과 데이터는 기억 장치인 메모리나 입출력 장치인 저장소를 통해 전달된다. 그렇다면 CPU에 명령을 내리는 건 무엇일까? 바로 운영체제(OS)이다. 운영체제는 프로세스와 키보드, 마우스와 같은 입력 등을 통해 명령을 받아 이를 CPU에 전달한다. CPU는 연산 과정에서 대량의 전기신호를 처리하기 때문에 발열이 심하며 이를 제어하기 위해 냉각기도 같이 구성된다.
메모리
메모리(RAM)는 컴퓨터의 기억 영역을 담당하여 CPU에 전달할 데이터를 저장하거나 처리 결과를 보관한다. 메모리는 CPU 내부에 있는 메모리 컨트롤러의 채널을 통해 명령 및 데이터를 주고받으며 이를 위해 보통 CPU 옆에 위치한다. 또한 메모리에 저장되는 정보는 오로지 전기적인 작업으로만 처리되기에 전원이 꺼지면 모두 휘발된다. 이런 결점에도 메모리를 사용하는 이유는 엑세스 속도가 매우 빠르기 때문이다. (여기서 엑세스란 데이터를 쓰거나 읽는 동작을 말한다.)
CPU 내부에도 작은 메모리를 가지고 있는데, 보통 1차(L1)/2차(L2) 캐시라고 불리며 CPU 내부에 존재한다. 그렇기에 메모리(RAM)보다는 엑세스 속도가 더 빠르지만 용량이 작아 보통 자주 사용되는 명령이나 데이터를 보관한다. 일반적으로 메모리 용량이 커질수록 액세스 속도가 느려지기에 캐시 메모리는 작게 여러 단계를 두어 명령 및 데이터를 저장한다.
또한 메모리는 처리지연(latency)을 최소화하기 위해 메모리를 복수개의 모듈(뱅크,bank)로 나누고 각 모듈에 연속적인 주소를 부여하여 동시에 접근이 가능하게 하는 방법인 ‘메모리 인터리빙’이라는 기능이 있다. 이는 대부분의 데이터가 연속해서 액세스 된다는 규칙을 기반으로 만들어진 것이다. 이 기능을 활용하기 위해서는 모든 채널의 동일 뱅크에 메모리를 배치해야 하며, 채널 영역도 많이 사용된다.
I/O 장치
I/O는 Input/Output의 줄임말로 데이터의 입출력을 나타내며 이를 담당하는 장치들은 크게 디스크, 네트워크 인터페이스, I/O 제어 등이 있다.
디스크
디스크는 주로 오래 보관해야 하는 데이터를 저장하는 장치이며, 종류는 크게 하드 디스크(HDD)와 반도체 디스크(SSD)로 나뉜다.
하드 디스크(HDD)는 자기 원반이 여러 개 들어있으며, 이것이 고속으로 회전해서 읽기/쓰기를 처리한다. 이 회전구조 때문에 속도가 물리법칙에 좌우되며 메모리처럼 순식간에 액세스할 수 없다. 일반적으로 수십 밀리초 정도의 시간이 걸린다.
반면 반도체 디스크(SSD)는 메모리같이 반도체로 만들어졌지만 전기가 없어도 데이터가 사라지지 않는 방식으로 설계되어 있다. SSD의 등장으로 메모리와 디스크 간의 속도 차이가 거의 없어지고 있는 추세이다.
이런 디스크들을 많이 탑재하고 있는 하드웨어를 저장소(storage)라고 한다. 저장소에는 보통 데이터 I/O처리를 위한 CPU와 캐시 메모리 같이 포함되어 있으며, 실제 서버에서 데이터 읽기나 쓰기를 요청하면 CPU가 데이터를 캐시에 올려두고 관리한다. 저장소가 캐시에만 데이터를 기록하고 I/O처리를 완료했다고 서버에 알리는 방식을 라이트 백(Write Back)이라고 하며, 캐시와 디스크에 모두 기록하고 I/O처리를 완료했다고 서버에 알리는 방식을 라이트 스루(Write Through)라고 한다.
네트워크 인터페이스
네트워크 인터페이스(NIC)는 서버와 외부 장비를 연결하기 위한 것으로 외부 접속용 인터페이스이다. 즉, 우리가 데스크탑에서 인터넷에 접속하기 위해 유선 랜(LAN, Local Area Network)을 연결할 때 사용하는 장치이다. 네트워크 인터페이스는 다른 서버나 저장소와 같은 외부 장비들과 네트워크 통신이 가능하게 함으로써 데이터를 주고 받을 수 있도록 한다.
I/O 제어
I/O 제어는 I/O 장치들의 중요도에 따라 CPU의 처리속도를 제어하는 컨트롤러 장치들을 말한다. 즉, I/O처리 줄세우기를 시켜주는 장치인 것이다. 이런 컨트롤러들이 존재하는 이유는 CPU가 해야할 일들을 분산하여 연산에 더 집중하게 만들기 위함이다. 예를 들어 서버 내부의 디스크는 CPU와 직접 연결하고 USB같은 외부 저장장치들은 컨트롤러와 연결함으로써 I/O처리의 병목현상을 방지할 수 있다.
버스(Bus)
버스(Bus)는 서버 내부에 있는 컴포넌트들을 서로 연결시키는 회선을 가리키며, 각 컴포넌트가 데이터를 주고받을 수 있도록 도와주는 역할을 담당한다. 그렇다면 버스의 성능을 어떻게 측정할까? 바로 데이터를 얼마나 주고받을 수 있는지를 나타내는 대역을 통해서 확인할 수 있다. 대역은 Throughput이라고도 부르며, ‘한번에 데이터를 보낼 수 있는 전송 폭 x 1초에 전송할 수 있는 횟수’로 계산한다.