Arm Linux Kernel Hacks

rousalome.egloos.com

포토로그 Kernel Crash


통계 위젯 (화이트)

493
557
422263


NUMA

NUMA[누마]멀티프로세싱 시스템에서 지역적으로는 메모리를 공유하며, 성능을 향상시키고, 시스템 확장성이 있도록 마이크로프로세서 클러스터를 구성하기 위한 방법이다. NUMA는 SMP 시스템에서 사용된다. SMP 시스템은 서로 밀접하게 결합되어, 모든 것을 공유하는 시스템으로서, 다중 프로세서들이 하나의 단일 운영체계 하에서 공통의 버스를 통해 각자의 메모리를 액세스한다. 보통, SMP의 한계는 마이크로프로세서가 추가됨에 따라, 공유 버스나 데이터 경로가 과중한 부하가 생기게 되어, 성능에 병목현상이 일어나는데 있다. NUMA는 몇 개의 마이크로프로세서들 간에 중간 단계의 공유메모리를 추가함으로써, 모든 데이터 액세스가 주버스 상에서 움직이지 않아도 되도록 한다.

NUMA는 하나의 상자 속에 있는 클러스터로 생각할 수 있다. 클러스터는 대체로 마더보드 상의 하나의 공유 메모리 (L3 캐시라고도 부른다)로 향하는 로컬버스에, 서로 연결된 네 개의 마이크로프로세서들로 구성된다. 이 유니트는 모든 클러스터들을 서로 연결하는 공용 버스 내에서 SMP를 구성하기 위하여 비슷한 유니트에 추가될 수 있다. 이러한 시스템은 대체로 16~256개의 마이크로프로세서를 가지고 있다. SMP 시스템에서 실행되는 응용프로그램에게는, 모든 개별 프로세서 메모리들이 하나의 단일 메모리인 것처럼 비쳐진다.

프로세서가 어떤 메모리 주소에 있는 데이터를 찾을 때, 그것은 마이크로프로세서 그 자체에 붙어 있는 L1 캐시를 먼저 찾은 다음, 근처에 있는 다소 큰 L2 캐시 을 찾는다. 그 다음에는 다른 마이크로프로세서 인근에 있는 원격 메모리의 데이터를 찾기 전에, NUMA 구성에 의해 제공되는 제3의 캐시를 찾는다. NUMA에게는, 이러한 클러스터들 각각이 서로 연결된 네트웍 내에 있는 하나의 노드들 처럼 비쳐진다. NUMA는 모든 노드들 상에 있는 데이터를 계층 체계로 유지한다.


NUMA SMP 시스템의 클러스터들 사이에 있는 버스에서는 SCI (scalable coherent interface) 기술을 사용하여 데이터가 움직인다. SCI는 다중 클러스터의 노드에 걸쳐 캐시 일관성이라고 불리는 것과 대등하다.

SMP와 NUMA 시스템은 대체로 공통의 데이터베이스 상에 집단적으로 작업하는 많은 수의 프로세서들에게, 작업 처리를 분담시킬 수 있는 데이터 마이닝의사결정 시스템 등과 같은 분야에 사용된다. 시퀀트, 데이터제너럴, NCR 등이 NUMA SMP 시스템을 생산하는 회사들이다.

-------------

불균일 기억 장치 접근(Non-Uniform Memory Access, NUMA)는 멀티프로세서 시스템에서 사용되고 있는 컴퓨터 메모리 설계 방법중의 하나로, 메모리에 접근하는 시간이 메모리와 프로세서간의 상대적인 위치에 따라 달라진다. NUMA구조에서 프로세서는 자기의 로컬 메모리에 접근할 때가 원격 메모리에 접근할 때보다 더 빠르다. 원격 메모리는 다른 프로세서에 연결되어 있는 메모리를 말하고 로컬 메모리는 자기 프로세서에 연결되어 있는 메모리를 말한다.

NUMA 아키텍처는 이론적으로 SMP아키텍처로부터 확장된 개념이다. Burroughs large systems에 의해서 첫 상용화되었으며 이후 유니시스, Convex Computer(이후 휴렛 패커드), 실리콘 그래픽스, Sequent Computer Systems, Data General 그리고 DEC에서 상품화되었다. 이러한 회사들이 개발해 놓은 기술들은 유닉스 계열 운영 체제에 도입되었으며 일부는 윈도 NT에도 도입되었다.

기본 개념

NUMA 시스템의 한예. 프로세서들은 버스나 크로스바로 연결되어 있음을 주목하세요. 각각의 프로세서들은 그 위치에 따라 메모리에 접근하는 우선순위가 다름을 보여준다.

현대의 CPU는 주 메모리보다 훨씬 빠르게 동작한다. 그렇지만 컴퓨터 초기에는 CPU는 일반적으로 메모리보다 천천히 동작을 했다. 1960년대에 첫 슈퍼컴퓨터와 고속 컴퓨터가 개발되면서 역전이 되었다. 그 이후, 계속해서 데이터를 더 많이 사용해야 하는 CPU는 메모리에서 데이터를 다 가지고 올 때까지 기다려야 했다. 1980년대와 1990년대에 개발된 많은 슈퍼컴퓨터는 빠르게 메모리에 접근하는 방법을 제공했고 이것으로 대용량 데이터 집합에 대한 처리를 그 어떤 다른 시스템들보다 빠르게 할 수 있었다.

메모리에 접근하는 경우의 수를 줄이는 것이 현대 컴퓨터에서 성능을 높이는 한 방법이다. 예를 들면, 고속의 캐시 메모리를 지속적으로 증가시키는 것과 캐시 미스를 줄이기 위한 뛰어난 알고리즘을 사용하는 것이다. 그렇지만 운영체제 크기의 비약적인 증가와 그 위에서 돌아가는 애플리케이션 크기의 증가는 캐시를 통한 성능 향상을 압도하게 된다. 특히나 다중 프로세서 시스템에서는 이 문제가 더 심각하다. 하나의 프로세서만이 메모리에 접근할 수 있기 때문에 많은 다른 프로세서들은 기다려야만 하기 때문이다.

NUMA는 각각의 프로세서에 독립적인 별도의 메모리를 제공함으로써 이러한 문제를 해결하려 한다. 이렇게 하면 여러 프로세서들이 동일 메모리 주소에 접근하려 할때 성능 충돌을 피할 수 있다. 서버와 애플리케이션에서 아주 일반적인 펼쳐진 데이터를 처리하는 문제의 경우에, NUMA는 하나의 공유 메모리의 경우 대비 대략적으로 프로세서의 수나 아니면 메모리 뱅크수 만큼 성능을 향상시킬 수 있다. 그렇지만 하나 이상의 프로세서가 동일 데이터를 필요로 하는 경우에 NUMA시스템은 메모리 뱅크들 사이로 데이터를 이동시켜야 하는 경우가 발생한다. 이러한 동작은 NUMA의 성능을 떨어뜨리는 요인이다. 따라서 전반적인 성능은 주어진 시간에 동작하고 있는 일의 특성에 달려있다. 어떻게 프로세스가 원격 메모리 대신 로컬 메모리를 사용하게 하느냐가 프로그램의 최적화에 대한 문제이다.

캐시 일관성 NUMA (ccNUMA)

거의 모든 CPU 아키텍처는 CPU캐시라고 알려진 적은 양의 매우 빠른 비공유 메모리를 사용한다. NUMA환경에서 공유 메모리의 캐시 일관성을 유지시키는 것은 상당히 어려운 작업이다. 비록 캐시 일관성을 제공하지 않는 NUMA아키텍처는 설계와 제작이 용이하지만 현재의 폰 노이만 구조 프로그래밍 모델에서는 프로그래밍을 하기가 매우 어렵다. 따라서 현재 시장에 판매되고 있는 모든 NUMA 컴퓨터들은 캐시 일관성을 제공한다. 이것을 ccNUMA(cache-coherent NUMA)라고 분류한다.

인텔은 2007년 후반에 x86아이테니엄 서버에서 네할렘 마이크로아키텍처 기반 프로세서와 투킬라 프로세서에서부터 NUMA 아키텍처를 적용했다.[1] 프로세서들간의 연결은 인텔 퀵패스 인터커넥트(QPI)를 통하여 이루어진다.[2]

NUMA 대 클러스터 컴퓨팅

어떤사람들은 NUMA를 매우 가깝게 연결된 컴퓨터 클러스터이라고 본다. 클러스터 아키텍처에 가상 메모리 페이징을 도입하면 NUMA가 아닌 하드웨어에서 순전히 소프트웨어적으로 구현이 가능하다. 그렇지만 노드간의 레이턴시(대기시간,Latency)는 하드웨어 기반의 NUMA보다 수십배 이상 느리다.


-----------------

Microsoft Microsoft SQL Server는 NUMA(Non-Uniform Memory Access)를 인식하며 특수한 구성 없이 NUMA 하드웨어에서 원활하게 작동합니다. 클럭 속도와 프로세서 수가 증가할수록 이러한 추가 처리 능력을 사용하는 데 필요한 메모리 대기 시간을 줄이기가 더 어려워집니다. 이러한 문제를 피하기 위해 하드웨어 공급업체에서는 대용량의 L3 캐시를 제공하지만 이는 제한적인 해결책입니다. NUMA 아키텍처는 이 문제에 대한 포괄적인 해결책을 제공합니다. SQL Server는 응용 프로그램을 변경할 필요 없이 NUMA 기반 컴퓨터를 활용하도록 디자인되었습니다.

작은 프로세서 집합에 사용되는 시스템 버스를 여러 개 구성하는 것이 일반적인 하드웨어 추세입니다. 각 프로세서 그룹에는 자체 메모리가 있으며 자체 I/O 채널이 있는 경우도 있습니다. 그러나 각 CPU는 일관된 방법으로 다른 그룹과 연결된 메모리에 액세스합니다. 각 그룹을 NUMA 노드라고 합니다. NUMA 노드 내의 CPU 수는 하드웨어 공급업체에 따라 다릅니다. 다른 NUMA 노드와 연결된 메모리보다 로컬 메모리를 액세스하는 것이 더 빠릅니다. 이러한 이유로 Non-Uniform Memory Access, 즉 NUMA 아키텍처라고 명명되었습니다.

NUMA 하드웨어에서는 일부 메모리 영역이 실제로 나머지 영역과 다른 버스에 있습니다. NUMA는 로컬 메모리와 외부 메모리를 사용하므로 다른 영역에 비해 일부 메모리 영역에 액세스하는 시간이 오래 걸립니다. 로컬 메모리외부 메모리라는 용어는 대개 현재 실행 중인 스레드에 대한 참조에 사용됩니다. 로컬 메모리는 현재 스레드를 실행 중인 CPU와 같은 노드에 있는 메모리입니다. 스레드가 현재 실행 중인 노드에 속하지 않는 메모리는 외부 메모리입니다. 외부 메모리를 원격 메모리라고도 합니다. 로컬 메모리 액세스 비용에 대한 외부 메모리 액세스 비용의 비율을 NUMA 비율이라고 합니다. NUMA 비율이 1이면 이는 SMP(대칭 다중 처리)입니다. 비율이 높을수록 다른 노드의 메모리에 액세스하는 데 더 많은 비용이 소요됩니다. SQL Server 2000 SP3 이전 버전을 포함하여 NUMA를 인식하지 않는 Windows 응용 프로그램은 경우에 따라 NUMA 하드웨어에서 제대로 작동하지 않습니다.

NUMA의 주된 이점은 확장성입니다. NUMA 아키텍처는 SMP 아키텍처의 확장성 제한을 극복하기 위해 고안되었습니다. SMP를 사용하면 모든 메모리 액세스가 같은 공유 메모리 버스에 게시됩니다. CPU 수가 비교적 적을 때는 문제가 없지만 공유 메모리 버스 액세스를 위해 수십 개나 수백 개의 CPU가 경쟁할 경우에는 이 기능이 제대로 작동하지 않습니다. NUMA는 특정 메모리 버스의 CPU 개수를 제한하고 고속 연결로 여러 개의 노드를 연결하여 이러한 병목 현상을 완화합니다.

4개의 프로세서가 있는 NUMA 노드

NUMA는 특별한 하드웨어(하드웨어 NUMA)를 통해 또는 SQL Server 메모리(소프트 NUMA)를 구성하여 메모리를 CPU에 대응시킬 수 있습니다. 시작 중에 SQL Server는 기본 운영 체제 및 하드웨어 구성이나 소프트 NUMA 설정에 따라 구성됩니다. 하드웨어 NUMA 및 소프트 NUMA 둘 다에 대해, NUMA 구성에서 SQL Server 시작 시 각 노드에 대한 다중 모드 구성 메시지와 CPU 마스크가 SQL Server 로그에 기록됩니다.

하드웨어 NUMA

하드웨어 NUMA가 구성된 컴퓨터에는 작은 프로세서 집합에 사용되는 시스템 버스가 여러 개 있습니다. 각 프로세서 그룹에는 자체 메모리가 있으며 자체 I/O 채널이 있는 경우도 있지만 각 CPU는 일관된 방법으로 다른 그룹과 연결된 메모리에 액세스할 수 있습니다. 각 그룹을 NUMA 노드라고 합니다. NUMA 노드 내의 CPU 수는 하드웨어 공급업체에 따라 다릅니다. 컴퓨터의 하드웨어 NUMA 지원 여부는 해당 하드웨어 제조업체로 문의하십시오.

하드웨어 NUMA가 있는 경우 NUMA 대신 인터리브 메모리를 사용하도록 구성할 수 있습니다. 그러면 Windows와 SQL Server에서 NUMA로 인식되지 않습니다. 다음 쿼리를 실행하여 SQL Server에서 사용 가능한 메모리 노드의 개수를 확인할 수 있습니다.

SELECT DISTINCT memory_node_idFROM sys.dm_os_memory_clerks

SQL Server에서 하나의 메모리 노드(노드 0)만 반환되면 하드웨어 NUMA가 없거나 해당 하드웨어가 인터리브(비-NUMA)로 구성되어 있는 것입니다. 하드웨어 NUMA가 잘못 구성되었다고 판단되는 경우 하드웨어 공급업체에 NUMA를 설정하도록 요청하십시오. SQL Server는 하드웨어 NUMA에 4개 이하의 CPU가 있고 CPU가 하나뿐인 노드가 하나 이상 있는 경우 NUMA 구성을 무시합니다.

소프트 NUMA

SQL Server에서는 CPU를 소프트 NUMA라는 노드로 그룹화할 수 있습니다. 일반적으로 많은 CPU가 있으며 하드웨어 NUMA가 없는 경우 소프트 NUMA를 구성하지만 소프트 NUMA를 사용하여 하드웨어 NUMA 노드를 더 작은 그룹으로 세분화할 수도 있습니다. SQL Server 스케줄러와 SQL Server 네트워크 인터페이스(SNI)만 소프트 NUMA를 인식합니다. 메모리 노드는 하드웨어 NUMA를 기반으로 생성되므로 소프트 NUMA의 영향을 받지 않습니다. 예를 들어 SMP 컴퓨터에 8개의 CPU가 있으며 각각 두 개의 CPU를 가진 소프트 NUMA 노드 4개를 만들면 메모리 노드 하나에서 4개의 NUMA 노드를 모두 처리합니다. 소프트 NUMA는 메모리에서 CPU로의 선호도를 제공하지 않습니다.

소프트 NUMA는 많은 CPU가 있고 하드웨어 NUMA가 없는 컴퓨터에서 I/O 및 지연 기록기 병목을 완화시키는 이점이 있습니다. 각 NUMA 노드에 대해 I/O 스레드와 지연 기록기 스레드가 각각 하나씩 있습니다. 데이터베이스 사용량에 따라 이러한 단일 스레드는 심각한 성능 병목이 될 수 있습니다. 4개의 소프트 NUMA 노드를 구성하면 I/O 스레드와 지연 기록기 스레드가 각각 4개가 되므로 성능이 향상됩니다.

여러 하드웨어 NUMA 노드의 CPU를 포함하는 소프트 NUMA를 만들 수는 없습니다. 예를 들어 하드웨어에 8개의 CPU(0..7)가 있고 하드웨어 NUMA 노드가 두 개(0-3 및 4-7)이면 CPU(0,1)과 CPU(2,3)을 결합하여 소프트 NUMA를 만들 수 있습니다. CPU(1, 5)를 사용하여 소프트 NUMA를 만들 수는 없지만 CPU 선호도를 사용하여 SQL Server 인스턴스의 선호도를 여러 NUMA 노드의 CPU로 설정할 수 있습니다. 따라서 앞서 설명한 예에서 SQL Server에 CPU 0-3이 사용되는 경우 I/O 스레드와 지연 기록기 스레드가 각각 하나씩 있습니다. 또한 SQL Server에 CPU 1, 2, 5, 6이 사용되는 경우 두 개의 NUMA 노드에 액세스하게 되며 I/O 스레드와 지연 기록기 스레드가 각각 두 개씩 있습니다.


# Reference: For more information on 'Linux Kernel';

디버깅을 통해 배우는 리눅스 커널의 구조와 원리. 1

디버깅을 통해 배우는 리눅스 커널의 구조와 원리. 2



덧글

댓글 입력 영역