SQL Server/SQL Server Tip

SQL Server가 논리 및 물리 프로세서를 결정하는 방법

SungWookKang 2017. 3. 13. 03:03
반응형

SQL Server가 논리 및 물리 프로세서를 결정하는 방법

 

Version : SQL Server

 

SQL Server는  하드웨어 레이아웃 정보를 바탕으로 NUMA 노드를 구성한다. SQL Server 2016 부터는 레이아웃 정보를 바탕으로 자동으로 NUMA 노드를 구성을 한다.

·         SQL Server 2016 Automatic Soft NUMA : http://sqlmvp.kr/220806805474

그렇다면 SQL Server가 Native(bare metal) 또는 VM 환경과 같이 가상화 환경에서 구성된다면 어떻게 노드를 구성할까. 이 과정의 핵심은getlogicalprocessorinformation (windows API)  API이며 논리적으로는 bare metal과 VM 기반이 동일하다.  VM(Virtual Machine)을 설치하는경우 지원 기능에 대해서는 벤더의 정보를 참고할 수 있도록 한다. SQL Server는 Windows API를 사용하여 프로세서와 패키지간의 상호 작용을 결정한다.

·         GetSystemInfo https://msdn.microsoft.com/en-us/library/windows/desktop/ms724381(v=vs.85).aspx

·         GetLogicalProcessorInformation https://msdn.microsoft.com/en-us/library/windows/desktop/ms683194(v=vs.85).aspx

 

GetLogicalProcessorInformation API는  RelationProcessorCore 및 RelationProcessorPackage 정보를 검색 할 수 있다. 반환된 정보를 사용하여 SQL Server는 그에 따라 노드와 스케줄러를 할당 한다. 예를들면  SQL Server 2016에서 자동으로 NUMA 노드가 구성될 때 같은 패키지의 논리 프로세서가 동일한 소프트NUMA 노드가 할당되는 것을 방지 한다.

 

아래 경우 다양한 시스템 정보에서 코어 및 패키지가 어떻게 표현되는지 알 수 있다. 아래 샘플 결과는 8 processor system 이며 싱글 CPU, 4Core system, HT enabled 상태이다.

Readtrace 또는 ostress 에서 GetLogicalProcessorInformation API를 사용하여 프로세서 관계를 출력

Active proc mask(0): 0x000000FF

        Architecture: 9

           Page size: 4096

                CPUs: 8

    Processor groups: 1

        Highest node: 0

  Proximity: 00  Node: 00

—————————————

               Group: 0

—————————————

        Processor(s): 0x00000003 Function units: Shared    <— 이진 값을 변경하면 논리당 2개의 프로세서를 나타냄

        Processor(s): 0x0000000C Function units: Shared    <— 프로세서는 RelationProcessorCore 를 나타냄

        Processor(s): 0x00000030 Function units: Shared

        Processor(s): 0x000000C0 Function units: Shared

        Package mask: 0x000000FF    <— 패키지는 RelationProcessorPackage 나타냄

        Processor(s): 0x000000FF assigned to Numa node: 0

 

 

MSINFO32 결과

Processor    Intel(R) Core(TM) i7-4810MQ CPU @ 2.80GHz, 2801 Mhz, 4 Core(s), 8 Logical Processor(s)

 

SQL Error Log

SQL Server detected 1 sockets with 4 cores per socket and 8 logical processors per socket, 8 total logical processors; using 8 logical processors based on SQL Server licensing. This is an informational message; no user action is required.

 

Hyper-V VM에서 동일하게4개 프로세서 할당하였을때 결과이다. 이 구성에서 프로세서는 단일 CPU, 4코어 , 코어당 단일 CPU 시스템으로 표시된다.

 

Active proc mask(0): 0x0000000F

        Architecture: 9

           Page size: 4096

                CPUs: 4

    Processor groups: 1

        Highest node: 0

  Proximity: 00  Node: 00

—————————————

               Group: 0

—————————————

        Processor(s): 0x00000001 Function units: Separated

        Processor(s): 0x00000002 Function units: Separated

        Processor(s): 0x00000004 Function units: Separated

        Processor(s): 0x00000008 Function units: Separated

        Package mask: 0x0000000F

        Processor(s): 0x0000000F assigned to Numa node: 0

 

MSINFO32

Processor    Intel(R) Core(TM) i7-4810MQ CPU @ 2.80GHz, 2794 Mhz, 4 Core(s), 4 Logical Processor(s)

 

API는 시스템이 단일 CPIU 패키지의 4CPU 시스템임을 SQL Server에게 알린다. 프로세서를 별도로 보고함으로써 SQL Server는 스케줄러와 노드 할당을 결정할 때 프로세서를 별도로 처리한다.

Bare metal은 단일 CPU, 4코어, HT를 지원하므로 4개의 CPU가 실제로 어떻게 매핑 될까? 기본적으로 Hyper-V의  경우 프로세서는 논리적(floating) 엔티티이다. 최적화가 진행되는 동안 VM에 노출된 프로세서는 필요에 따라 이동하여 VM에 CPU 사이클을 제공할 수 있다.

Hard Affinity 경우 NUMA 스패닝과 같은 추가 옵션이 VM 솔루션에서 지원되거나 지원되지 않을 수있다. SQL Server스케줄러 레이아웃(Error log or DMV)은 추가 옵션을 검토하여 VM 과 bare metal 구성에서 레이아웃 최적화를 최적화하는데 필요할 수 있다.  

 


 

 

[참고자료]

https://blogs.msdn.microsoft.com/bobsql/2016/06/09/how-it-works-how-sql-server-determines-logical-and-physical-processors/

https://en.wikipedia.org/wiki/Bare_machine

 

 

2017-01-05 / 강성욱 / http://sqlmvp.kr

 

SQL Server, Hyper-V, VM, Virtual Machine, Processor, Bare Metal, GetLogicalProcessorInformation, CPU, Hyperthread, MS SQL, 

반응형