KR100754300B1 - Numa 컴퓨터 시스템에서 작업을 디스패칭하기 위한방법 및 장치 - Google Patents

Numa 컴퓨터 시스템에서 작업을 디스패칭하기 위한방법 및 장치 Download PDF

Info

Publication number
KR100754300B1
KR100754300B1 KR1020047005100A KR20047005100A KR100754300B1 KR 100754300 B1 KR100754300 B1 KR 100754300B1 KR 1020047005100 A KR1020047005100 A KR 1020047005100A KR 20047005100 A KR20047005100 A KR 20047005100A KR 100754300 B1 KR100754300 B1 KR 100754300B1
Authority
KR
South Korea
Prior art keywords
cpu
thread
node
memory
subset
Prior art date
Application number
KR1020047005100A
Other languages
English (en)
Other versions
KR20040053153A (ko
Inventor
맥도날드잘웬델
Original Assignee
인터내셔널 비지네스 머신즈 코포레이션
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 인터내셔널 비지네스 머신즈 코포레이션 filed Critical 인터내셔널 비지네스 머신즈 코포레이션
Publication of KR20040053153A publication Critical patent/KR20040053153A/ko
Application granted granted Critical
Publication of KR100754300B1 publication Critical patent/KR100754300B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • G06F9/5033Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering data affinity
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/50Indexing scheme relating to G06F9/50
    • G06F2209/5021Priority

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Multi Processors (AREA)

Abstract

논-유니폼 메모리 액세스 컴퓨터 시스템을 위한 디스패처는, 임의의 CPU(201-204)와 관련이 없는 공통 준비 큐로부터 스레드를 디스패치하지만, 더 짧은 메모리 액세스 시간을 갖는 CPU에, 스레드를 디스패치하는 것을 더 선호한다. 바람직하게는 이 시스템은 복수의 이산적인 노드(101-104)를 포함하며, 각 노드는 로컬 메모리(205)와 하나 또는 그 이상의 CPU를 구비한다. 시스템 메인 메모리는 로컬 메모리의 집합을 포함하는 분산 메모리이다. 개별적이고 바람직한 CPU와 바람직한 노드는 각 스레드와 관련될 수 있다. CPU가 유효하게 된 경우, 이 디스패처는 적어도 어떤 상대적인 우선권(714-717;801-804)을, 상이한 노드에 바람직한 CPU를 구비한 스레드에 관해 유효한 CPU와 동일한 노드의 바람직한 CPU를 갖는 스레드에 부여한다. 이 선호도는 상대적이며, 디스패처가 궁핍함 또는 다른 문제를 회피하기 위해 기호도를 오버라이드하는 것을 방해하지 않는다.

Description

NUMA 컴퓨터 시스템에서 작업을 디스패칭하기 위한 방법 및 장치{METHOD AND APPARATUS FOR DISPATCHING TASKS IN A NON-UNIFORM MEMORY ACCESS (NUMA) COMPUTER SYSTEM}
본 발명은 멀티-태스킹 컴퓨터 시스템에 관한 것으로, 특히 복수의 중앙 처리 장치 및 논-유니폼 메모리 액세스(non-uniform memory access)를 구비하는 시스템 내에서 디스패칭되는 작업 또는 스레드에 관한 것이다.
현대의 컴퓨터 시스템은 일반적으로, 중앙 처리 장치(CPU)와, 통신 버스 및 메모리와 같이, 정보를 저장, 검색, 전송하는데 필요한 지원 하드웨어를 포함한다. 또한 컴퓨터 시스템은 입/출력 제어기, 또는 저장 제어기와 같이 외부와 통신하는데 필요한 하드웨어 및 키보드, 모니터, 테이프 드라이브, 네트워크와 결합된 통신 라인 등과 같은 제반 장치를 포함한다. CPU는 이 시스템의 중심이다. CPU는 하나의 컴퓨터 프로그램을 포함하고, 다른 시스템 요소의 조작을 지시하는 명령을 수행한다.
컴퓨터의 하드웨어의 관점에서 보면, 대부분의 시스템은 기본적으로 동일한 방식으로 작동한다. 프로세서들은 수학적, 논리적인 비교와 하나의 장소에서 다른 장소로 데이터를 이동시키는 것과 같은 매우 단순한 조작의 제한적인 집합을 실행 할 수 있다. 그러나, 각 조작들은 매우 빠르게 실행된다. 컴퓨터로 하여금 이러한 다수의 단순한 조작들을 실행하도록 하는 프로그램들은 컴퓨터가 정교한 작업을 수행할 것이라는 환상을 준다. 사용자가 컴퓨터의 새롭고, 개량된 성능으로 인식하도록 하는 것은, 본질적으로 매우 단순한 조작의 동일한 집합의 실행이지만, 매우 빠르게 실행함으로써 가능해진다. 그러므로, 컴퓨터 시스템의 연속적인 개량은 이러한 시스템이 더욱 빨라지게 되는 것을 필요로 한다.
컴퓨터 시스템의 전체 속도[또한 작업처리량(throughput)이라 호칭됨]는 있는 그대로 단위 시간 당 실행되는 조작들의 수로써 측정된다. 개념적으로, 시스템 속도의 모든 가능한 개량 중 가장 간단한 것은, 다양한 구성 요소의 클락 속도를 증가시키는 것이고, 특히 프로세서의 클락 속도를 증가시키는 것이다. 예컨대, 만약 모든 것이 두 번씩 고속으로, 그러나 동일한 방법으로 정확하게 실행된다면, 요소 크기를 줄이고, 요소 수를 감소시키고, 궁극적으로는 단일 칩 상의 집적 회로로써 전체 프로세서를 패키징함에 의해 상당한 속도의 개량이 가능할 것이다. 크기의 감소로 인해, 프로세서의 클락 속도를 증가시키고, 따라서 시스템 속도를 증가시킬 수 있게 된다.
집적 회로로부터 얻어진 현저한 개량에도 불구하고, 매우 빠른 컴퓨터 시스템을 위한 요구는 계속되고 있다. 하드웨어 개발자들은 더 진보된 집적화(환언하면, 단일 칩 상에 패키지화되는 회로의 수를 증가시킴), 회로의 크기의 감소 및 다른 다양한 기술로써 속도 면에서 상당한 개량을 얻을 수 있었다. 그러나, 개발자들은 물리적인 크기의 감소가 막연히 계속될 수는 없다는 것과, 프로세서의 클락 속 도를 증가시킬 수 있는 능력에 한계가 있다는 것을 알고 있다. 그러므로, 컴퓨터 시스템의 작업 처리량에 있어서의 현저한 개량을 위해서는 다른 접근이 필요하다는 것에 관심이 모아지고 있다.
클락 속도의 변동 없이, 복수의 프로세서를 사용함으로써 시스템의 작업 처리량을 개량하는 것이 가능하다. 적당한 비용으로 집적 회로 칩상에 각 프로세서들을 패키지화하는 것이 이러한 실제적인 접근이 되어 왔다. 그러나, 프로세서를 하나에서 둘로 증가시킴으로써 단순히 시스템의 작업 처리량이 배가 되지는 않는다. 시스템으로 복수의 프로세서를 도입함으로 인해 수많은 아키텍쳐상의 문제가 생성되었다. 예컨대, 복수의 프로세서는 일반적으로 동일한 메인 메모리를 공유한다(각 프로세서가 자신의 공유의 캐시를 구비하고 있음에도 불구하고). 그러므로, 메모리 액세스 충돌을 방지하고 캐시 내의 데이터의 여분 카피들이 일관된 형식으로 트랙되어 있다는 것을 보증하는 매카니즘을 고안할 필요가 있다. 더 나아가, 각 프로세서는 저장 장치, I/O, 메모리와, 특히 다양한 요소들을 연결하는 통신 버스와 같은 시스템의 다른 요소에 부가적인 요구를 더한다. 더 많은 프로세서들이 도입되고 있기 때문에, 이러한 아키텍처상의 문제는 점점 복잡해지고 있으며, 범용성은 점점 곤란해지며, 프로세서들이 또다른 프로세서에 의해 사용되는 임의의 자원을 대기하는데 상당한 시간을 보낼 가능성이 더 높다. 시스템 개발자들은 이러한 모든 문제들을 알고 있으며, 이 문제들이 하나 또는 그 밖의 형식으로 제기되어 왔다. 완벽한 해결책은 없지만, 이 분야의 개량이 계속되어 왔다.
최근 부각되어온 하나의 아키텍쳐상의 접근은, 분산 공유 메모리 컴퓨터 시 스템 또는 논-유니폼 메모리 액세스(NUMA)로도 알려진 프로세서와 관련된 메모리의 이산적 노드들(discrete nodes)을 구비하는 컴퓨터 시스템의 설계이다. 종래의 대칭 멀티-프로세서 시스템(symmetrical multi-processor system)에 있어서, 메인 메모리는 단일한 대형 데이터 저장 본체로써 설계되는데, 이 저장 본체란 시스템 내부의 모든 CPU들에 동일하게 접근될 수 있는 것이다. NUMA 시스템은 메인 메모리를 이산적 서브세트(subset)으로 분할함으로써 이 문제에 접근하고 있으며, 각 서브세트는 각 CPU 또는 일반적으로 CPU들의 각 집합과 물리적으로 관련되어 있다. 메모리의 서브세트들과, 관련된 CPU들과 다른 하드웨어는 종종 "노드(node)"라고 호칭된다. 하나의 노드는 일반적으로 CPU로부터 노드 내부의 로컬 메모리로 직접적인 접근을 제공하는 내부 메모리 버스를 구비한다. 더 느린, 간접적 메카니즘이 노드 경계를 넘어 메모리에 액세스하도록 존재한다. 그러므로, 임의의 CPU가 여전히 어떤 임의의 메모리 장소에 액세스하는 경우, CPU는 그 노드 외부의 어드레스에 액세스할 수 있는 것보다 더 빨리 그 자신의 노드의 어드레스에 액세스할 수 있다(그래서, 논-유니폼 메모리 액세스임). 노드의 내부 메모리 버스 상의 장치 수를 제한함으로써, 버스 중재 메카니즘(bus arbitration mechanism)과 버스 트래픽이 다수의 CPU를 구비하는 시스템 내에서조차 관리 가능한 수준으로 유지될 수 있는데, 이는 대부분의 이러한 CPU가 상이한 노드 내에 있기 때문이다. 하드웨어 관점에서 보면, 이것은 NUMA 시스템 아키텍처가 증가된 범용성의 잠재적 이점을 갖고 있다는 것을 의미한다.
NUMA 시스템은 인터-노드(inter-node) 액세스를 제공하며, 이는 단일 논리 메인 메모리를 갖고 있고, 각 메인 메모리의 장소는 고유한 어드레스를 갖는다. NUMA 시스템이 효율적으로 동작하기 위해서, CPU가 필요로 하는 데이터는 일반적으로 동일한 노드의 리얼 메모리 내에 저장되어야 한다. 이것이 항상 과도하게 엄격한 제한을 강요함이 없는 경우가 됨을 보장한다는 것은 비현실적이다. 인터-노드 메모리 액세스에 대한 필요를 감소시키는 메모리 할당 메카니즘이 바람직하다.
멀티 태스킹 시스템 컴퓨터 시스템에 있어서, 운영 시스템은 일반적으로 임의의 시스템 자원의 할당을 관리하며, 특히, 작업들을(또는 스레드들)을 CPU에 디스패칭하고 메모리를 할당한다. 그러한 시스템에 있어서, 복수의 스레드들이 동시에 활성화된다. 보통, 활성 스레드의 수는 시스템 내부의 CPU의 수를 초과한다. 주어진 스레드는 일반적으로 일정한 수의 사이클동안 CPU 내에서 실행되고, 그 뒤 완결되지 않았음에도 불구하고, 임시적으로 중단되어, 이후에 실행을 계속하기 위해 큐 내에 위치된다. 하나의 스레드가 시간 제한에 도달했거나, 상위의 우선 스레드에 의해 사전에 비워졌거나, 저장 액세스 또는 락 릴리스와 같은 어떤 대기시간(latency) 동안 대기해야만 하거나, 또는 다른 이유 때문에, 스레드가 정지할 수도 있다. 제1 스레드가 대기하는 동안 또다른 스레드가 실행될 수 있도록 함으로써, CPU 자원이 더 충분히 이용된다. CPU가 이러한 또는 다른 이유로 스레드를 실행할 수 있도록 되는 경우, 운영 시스템 내의 디스패처(dispatcher)는 일반적으로, 복수의 대기 스레드 중 어느 것이, 실행을 위해 유효한 CPU에 디스패치될 것인가를 결정한다.
종래의 디스패처들은 보통 대칭 멀티프로세서 컴퓨터 시스템을 위해 설계되며, 이 시스템 내의 메모리는 동등하게 모든 CPU에 액세스할 수 있으나, 작업 디스패칭 상의 논-유니폼 메모리 액세스의 효과를 최적으로 고려할 수는 없다. 예컨대, 마이크로소프트 윈도우즈 2000TM 운영 체제에서 사용하는 디스패처 내에서, 스레드는 다양한 고려 대상에 따른 디스패치를 위해 선택되는데. 이 고려사항은 선-할당 우선권(pre-assinged priority), 큐 시간의 길이, 스레드가 동일한 CPU 상에서 지속 실행되는지 여부, CPU가 스레드를 위해 지정된 바람직한 프로세서인지 여부 등을 포함한다. 이러한 인자들은 정상적으로 목표된 CPU의 이용을 최적화하도록 의도된 것이다. 그러나, 디스패처는 CPU의 노드 위치를 고려하지 않으며, CPU들이 높은 정도로 사용될 수 있음에도 불구하고, 불필요한 다수의 인터-노드의 메모리 액세스의 결과로써, 시스템 작업 처리량이 저하된다. 일부 디스패처는 스레드 또는 작업의 CPU로의 할당에 엄격한 제한을 가할 수 있어서, 특정한 스레드는 항상 동일한 CPU 또는 동일한 노드 내에서 실행된다. 자원들이 이산 서브세트로 분할되고, 프로세스들이 각 서브세트로 할당되는 컴퓨터 시스템의 논리적 파티션이, 유사한 효과를 달성할 수 있다. 몇몇의 예에서, 이러한 효과들이 의도된다(예컨대, 프로세스들의 하나의 그룹이 다른 프로세스로부터의 간섭 없이 일정한 양의 자원들을 보장함). 그러나 이로 인해, 일부 CPU를 미흡하게 사용하거나, CPU를 과도하게 사용한 병목 현상이 나타날 수 있다.
NUMA 플랫폼을 위해 설계된 하나의 공지된 운영 시스템은 시퀀트 컴퓨터(SeQuent Computer, 현재 IBM의 부서)의 PTX 운영 체제이다. PTX는 복수의 구동 큐(run queue)- 각 CPU당 하나 -를 제공하며, 사용자에게 임의의 그룹의 CPU 들에 대한 부가적인 구동 큐를 정의할 수 있도록 한다. 프로세스가 초기화되면, 이 프로세스는 구동 큐 중 어느 하나에 할당되며, 프로세스에 의해 생성된 모든 스레드들은, 실행을 대기하는 동안, 그 구동 큐에 위치된다. 운영 시스템은 그후 우선적으로, 이 프로세스의 스레드들은 그 할당된 구동 큐의 CPU 또는 CPU들에 디스패치하며, 다소 더 낮은 우선 레벨로는 그 할당된 구동 큐의 CPU(또는 CPU들)로써 동일한 시스템 노드 내의 CPU들에게 디스패치한다. 운영 시스템은 더 나아가 각 CPU에 대한 CPU 사용 및 on-going 기반의 각 노드에 대한 메모리 사용을 모니터하는 능력을 포함한다. 만약 특정한 노드에서의 CPU 사용 및/또는 메모리 사용이 충분히 높다면, 운영 시스템은 하나의 스레드를 우선된 CPU 또는 CPU들을 포함한 노드를 제외한 노드에 디스패치한다. 이러한 방법으로, PTX는 NUMA 아키텍처를 이용하지만, 자원 사용에 있어서 큰 차이를 나타낼 수 있는 스레드 디스패칭에 엄격한 제한을 회피한다.
반드시 인식해야 하는 것은 아니지만, NUMA 시스템에 대한 개선된 디스패처에 대한 필요가 존재하며, 이 NUMA 시스템은 스레드를 디스패치하는 경우 다양한 CPU의 노드 장소를 고려하는 PTX의 중요한 장점을 갖고 있으며, 그러므로 인터-노드 메모리 액세스의 주파수를 감소시키지만, 더 단순한 운영 시스템, 특히 복수의 구동 큐 및 CPU/메모리 사용 모니터링을 지원하지 않는 운영 시스템에 적용될 수 있다.
본 발명에 따르면, 논-유니폼 메모리 액세스 컴퓨터 시스템을 위한 디스패처는 모든 스레드들을 단일 공통 준비 큐[common ready queue, 또한 구동 큐(run queue)로 알려짐]로부터 디스패치하며, 이 큐는 어떠한 CPU나 CPU 그룹과도 우선적으로 관련되지 않는다. 디스패처가, 스레드가 필요로 하는 상대적으로 대량의 데이터를 포함할 가능성이 높은 메모리 서브세트로 액세스하는데 더 짧은 메모리 액세스 시간을 구비하는 CPU에게 스레드를 우선적으로 디스패치하는 경우에, 디스패처는 CPU의 물리적인 위치를 고려한다.
바람직한 일 실시예에 있어서, NUMA 시스템은, 각각이 로컬 메모리를 갖는 복수의 이산 노드(discrete node), 하나 또는 이상의 CPU, 내부 노드 버스 및 노드 상호간의 통신을 위한 인터페이스의 시스템으로써 설계된다. 시스템 메인 메모리는 각 노드에 로컬 메모리들의 연합을 포함하는 분산 메모리이다. 프로세서 노드 내의 위치로의 메모리 액세스는 노드 경계를 가로지르는 메모리 액세스보다 더 빠르다.
바람직한 일 실시예에 있어서, 각 바람직한 CPU는 각 스레드들과 관계된다. CPU가 유효하게 되는 경우, 디스패처는 상이한 노드의 바람직한 CPU를 갖고 있는 스레드에 관해 유효한 CPU와 동일한 노드 내의 바람직한 CPU를 갖는 하나의 스레드에게 적어도 일정한 상대적 우선권을 부여한다. 이것은 상대적인 우선권으로서, 절대적인 제한이 아니다. 여전히 스레드의 바람직한 CPU와 동일한 노드에 있지 않은 CPU로의 디스패치를 위한 스레드를 선택하는 것이 가능하며, 그러므로 이 스레드 디스패칭 선택을 엄격하게 너무 엄격하게 제한함으로써 발생할 수 있는 궁핍(starvation)이나 다른 문제를 피할 수 있다. 바람직한 일 실시예에 있어서, "이상적인 노드(ideal node)"라 불리는, 바람직한 노드가 사용자 프로세스에 일반 적으로 할당된다. 프로세스가 스레드를 생성하면, 이 스레드는 프로세스의 이 이상적인 노드를 승계한다. 부가적으로, 이상적인 노드 내의 CPU는 스레드에 대한 "이상적인 프로세서"로 선택된다. 단일 프로세스에 의해 생성된 스레드에 대한 이상적인 프로세서의 선택은 일반적으로 라운드-로빈(round-robin) 기반에서 회전한다. 다른 선택 기준이 동일하다면, 스레드는 우선적으로 이상적인 프로세서에 첫번째로 디스패치되며, 두번째로는 이상적인 노드에 디스패치된다. 일정한 환경 하에서는, 디스패처가 상이한 이상적인 노드를 갖는 스레드를 디스패치하기보다는 아이들 프로세서를 선택할 수도 있지만, 다른 환경에서는 그러한 스레드를 디스패치할 수도 있다.
논-유니폼 메모리 액세스를 설명하는 다양한 선택적인 디스패칭 기술이 가능하다. 선택적으로, CPU가 유효한 경우, 디스패처는, 상이한 노드에서 최근에 실행된 스레드에 대한 유효한 CPU와 동일한 노드의 CPU 상에서 최근에 실행된 스레드에 적어도 일부의 상대적 우선권을 준다.
모든 스레드에 대한 단일 공통 준비 큐(single common ready queue)의 사용은, 어떤 특정한 CPU 또는 CPU의 그룹과 관계되지 않고, 다양한 비-NUMA 운영 시스템에 일관된다. 여기서 설명된 본 발명의 실시예에 따른 동일한 노드에 스레드를 디스패치하는데 대한 상대적인 우선권을 유지함으로써, 스레드는 동일한 노드에서 실행되기 쉬우며, 노드의 이상적인 메모리는 이 스레드가 필요한 데이터에 비례하는 대량의 공유를 축적하기가 쉽다. 결과적으로, 인터-노드 메모리 액세스의 주파수는 스레드를 디스패치하는 경우 노드의 위치를 고려하지 않는 시스템의 주파수보다 감소된다. 동시에, 엄격한 노드 제한은 회피되고, 전 시스템의 사용이 가능하고 궁핍과 다른 문제들도 피할 수 있게 된다.
본 발명의 다른 형태와 장점들은, 도면과 함께 본 발명이 바람직한 실시예의 상세한 설명에서 더 명백해질 것이다.
도 1은 본 발명의 바람직한 실시예에 따른, 멀티-노드, 멀티프로세서 컴퓨터 시스템의 주요 요소의 상위-레벨 블럭 다이어그램이다.
도 2는 바람직한 실시예에 따른, 멀티-노드 컴퓨터 시스템의 전형적인 노드의 주요 하드웨어 요소의 블럭 다이어그램이다.
도 3은 바람직한 실시예(100)에 따른 멀티-노드 컴퓨터 시스템 내에서 상이한 추상화 레벨에서의 하드웨어 및 소프트웨어 함수의 분할을 보여주는 개념적인 설명도이다.
도 4는 바람직한 실시예에 따른, 디스패터에 의해 사용되는 유효한 프로세서를 대기하는 스레드의 준비 큐 구조를 묘사한다.
도 5는 바람직한 실시예에 따른, 디스패처에 의해 사용되는 준비 큐로부터의 임의의 스레드-특정 정보를 설명한다.
도 6은 바람직한 실시예에 따른, 임의의 스레드 제어 값의 초기화를 보여주는 상위-레벨 흐름도이다.
도 7A 및 7B는 바람직한 실시예에 따른, 실행될 스레드의 선택을 보여주는 택일적인 흐름도이다.
도 8은 바람직한 실시예에 따른, 새로운 준비 스레드를 실행하기 위한 CPU 선택을 보여주는 흐름도이다.
<개요>
여기서 설명하는 바와 같이, 멀티프로세서, 논-유니폼 메모리 액세스(NUMA) 컴퓨터 시스템을 위한 디스패처는 단일한, 광범위 준비 큐를 위한 스레드들을 디스패치하며, 다양한 프로세서로의 디스패치를 위한 스레드 또는 작업들을 선택하는데 있어 노드의 유사성을 고려하여, 각 스레드는 일관된 노드에서 실행되기 쉬우며, 스레드가 필요로 하는 메모리 페이지는 그 노드의 로컬 리얼 메모리(local real memory) 내에 축적되기 쉽다. 일관성을 위해, "스레드(thread)"라는 용어는 여기서 고유한 상태를 갖는 컴퓨터 실행가능 명령 순서의 예로써 기술되기 위해 사용되며, 이는 디스패처에 의해 디스패치되는 실체이다. 일부의 환경에 있어서, 이는 "작업(task)"으로써 참조되며, 여기서 "스레드"와 "작업"은 구별되지 않는다. "스레드"라는 용어는 프로세스가 단일 프로그램으로부터 현재 실행가능한 복수의 스레드를 생성한다는 것을 의미하기 위해 사용된다; 그러나, 여기서는, 그렇게 제한적으로 사용되지 않고, 프로세스는 오직 단일 실행 스레드만을 발생하거나, 복수의 스레드를 발생한다.
<NUMA System Hardware>
도 1은 본 발명의 바람직한 실시예에 따른 멀티-노드, 멀티프로세서 컴퓨터 시스템(100)의 주요 하드웨어 요소의 상위-레벨 블럭 다이어그램이다. 컴퓨터 시스 템(100)은 분산 공유 메모리(Distributed Shared Memory, DSM)를 기반한 컴퓨터 아키텍처를 사용하며, 이것이 NUMA 시스템이다. 컴퓨터 시스템(100)은 도 1에 예시적으로(4개) 설명된 복수의 노드(101-104)를 포함하며, 노드의 수는 가변적이다. 이 노드는 다른 노드들과 통신하도록 하는 인터-노드 통신 네트워크(105)에 의해 연결된다. 인터-노드 통신 네트워크의 목적은 장치들이 노드의 경계를 넘어 통신할 수 있도록 하며, 특히 임의의 노드 내의 프로세서가 다른 노드에 상주하는 메모리에 액세스할 수 있게 한다. 바람직한 실시예에 있어서, 인터-노드 네트워크(105)는 스위치 기반 네트워크이다. IEEE 1596-1992 표준을 따르는 Scalable Coherent Interface(SCI) 인터커넥션 매카니즘을 사용하는 스위치 기반 네트워크이다. SCI 는 각 개별적인 포인트-투-포인트 인터커넥트 상에서 패킷을 전송하고 그 시스템을 통해 캐시 일관성을 위해 제공하는 펌프 버스에 의해 구현되는 고 대역폭 인터커넥션 네트워크이다. SCI에 관한 더 많은 정보는 여기서 참조되는 IEEE 1596(Aug 3,1993)에서 찾을 수 있다.
인터-노드 네트워크(105), 바람직하게는 SCI 호환 통신 매체, 종래에 존재했거나 그후에 개발된 다양한 임의의 대체물들이 사용될 수 있다. 인터-노드 통신 매체는 바람직하게는 고 대역폭과 낮은 대기시간을 제공하며, 더 많은 노드의 추가를 고려하기 위해 가변적이다. 적합한 매체는 고 데이터 작업 처리량을 갖는 포인트-투-포인트 인터커넥션 링크를 포함한다(예컨대, 초당 1 기가 바이트 또는 이상). 이 링크는, 링 토폴로지(ring topology), 스위치를 통한 임의의 토폴로지 또는 양자의 조합과 같은 적합하고 다양한 방법으로 구성될 수 있다. 이 링크는 시스템의 수행 요구에 따라 유선 또는 무선이 될 수 있다(선택적인, RF 등). 부가적인 토폴로지의 예는 "Interconnect Topologies with Point-To-Point Rings"(Ross E.Johnson and James E. Goodman December 1991, Computer Science Technical Report #1058, University of Wisconsin-Madison)에 기술되어 있으며, 그곳에 설명된 모든 예들이 적합한 네트워크의 모든 종류로 망라될 필요는 없다.
도 2는 바람직한 실시예에 따른, 컴퓨터 시스템(100)의 일반적인 노드(101)의 주요 하드웨어 요소의 블럭 다이어그램이다. 여기에 포함된 설명과 일관되게, 노드는 포괄적으로 참조 번호(101)로써 지시되며, 이것은 임의의 노드(101-104)를 지시하는 것과 같다. 노드(101)는 명령들과 분산된 메인 메모리로부터의 다른 데이터 상의 장치 처리 함수(machine processing function)를 수행하는 복수의 중앙 처리 장치(CPU, 201-204)를 포함한다. 각 CPU(201-204)는 데이터 및 명령들의 임시적인 저장을 위해 각각의 캐시(205-208)를 포함하거나 제어한다. 대형의 멀티프로세서 컴퓨터 시스템에 대해, 캐시는 일반적으로, 복수의 레벨과 복수의 구조로써 존재한다. 예컨대, CPU는 CPU(L1 명령 캐시) 상에서 실행하는 명령들의 저장에 공헌하는 레벨 1 캐시와, CPU(L1 데이터 캐시)에 의해 조종되는 명령을 제외한 데이터의 저장에 공헌하는 물리적으로 분리된 레벨 1 캐시와, 명령 및 다른 데이터 양자를 저장하는 레벨 2 캐시(L2 캐시)를 포함할 수 있으며, L2 캐시는 L1 명령 캐시 및 L1 데이터 캐시를 피드(feed)하는데 사용된다. 캐시 구조 또는 구조들은 도 2에서 각 개별적인 프로세서에 대한 단일 블럭(205-208)로써 단순화된 형태로 나타난다. 본 발명을 위해서, 각 프로세서 상의 캐시를 정확하게 구체적으로 구현하는 것 은 중요하지 않다. 다수의 다른 변화가 가능하며, 본 발명은 어떤 특정한 캐시 설계에 제한을 두지 않으며, 캐시의 사용을 반드시 요구하는 것도 아니다.
컴퓨터 시스템(100)은 각 개별적인 노드(101) 내에서 분리된 로컬 메모리(210)를 포함하는, 분산 메인 메모리(distributed main memory)를 사용한다. 시스템(100) 내의 어드레스가 가능한 전체 메인 메모리는, 각 개별적인 노드 내의 어드레스가 가능한 로컬 메모리(210)의 합이다. 그러므로, 메일 메모리의 리얼 어드레스 공간은 전 시스템을 통해 일정하며, 로컬 메모리(210) 내의 임의의 메모리 장소는 모든 프로세서 및 모든 노드에 대해 동일한, 고유한 리얼 어드레스를 갖는다.
인터-노드 인터페이스 장치(215)는 노드(101)를 인터-노드 네트워크(105)에 연결시키고, 그곳에서 노드(101)는 시스템(100) 내의 다른 노드들과 통신할 수 있게 된다. 인터페이스 유닛(215)은 일반적으로 노드 사이에 전달되는 데이터의 일시적인 저장을 위한 캐시 또는 버퍼를 포함한다.
I/O 버스 인터페이스 유닛(220)은 하나 또는 이상의 I/O 버스(221-222)를 통한 하나 또는 이상의 I/O 장치로의 통신의 제공한다. I/O 버스(221-222)는, 직접 액세스 저장 장치(Direct Access Storage Device, DASD, 224), 테이프 드라이브, 워크스테이션(225), 프린터 및 원격 장치, 또는 통신용 라인 또는 네트워크를 통해 다른 컴퓨터 시스템과 통신하기 위한 원격 통신 어댑터와 같은 종래의 I/O 장치와 통신하는데 적합한 임의의 종류이다. 예컨대, I/O 버스(221)는 산업 표준 PCI 버스이다. 2개의 I/O 버스 및 2개의 I/O 장치가 도 2에 나타나 있지만, 그러한 버 스와 장치의 수는 가변적이며, 더나아가 모든 노드(101)가 I/O 인터페이스 유닛(220) 또는 부착된 I/O 장치를 포함할 필요도 없다.
내부 노드 버스(internal node bus, 212)는 노드(101)의 다양한 요소 사이의 통신을 제공한다. 특히, 버스(212)는 CPU 에 의해 내려진 메모리 액세스에 응답하여, 개별적인 CPU(201-204)의 로컬 메모리(210)와 캐시(205-208) 사이의 데이터를 전달한다. 로컬 메모리(210), 인터-노드 인터페이스(215) 및/또는 버스(212)에서의 논리를 모니터함으로써, 메모리 액세스 상에서 요청되는 특정한 리얼 어드레스가 노드(101)의 로컬 메모리(210) 내 또는 다른(원격) 노드의 로컬 메모리 내에 포함되는지 여부를 결정하고, 로컬 메모리(210), 또는 원격 노드와 통신하기 위한 인터-노드 인터페이스(215)로의 메모리 액세스를 지시한다. 데이터가 상주하는 응답 노드의 로컬 메모리에 도달하기 위해서, 요청 노드의 노드 버스(212), 요청 노드의 인터-노드 인터페이스(215), 인터-노드 네트워크(215), 응답 노드의 상응하는 인터-노드 인터페이스와 응답 노드의 상응하는 노드 버스를 교차하는 동안, 로컬 메모리(210) 내부의 리얼 어드레스로의 메모리 액세스는 버스(212)를 통해 장치 사이클의 상대적으로 적은 수로 되돌아오는 것을 관찰할 수 있을 것이다(만약 상기 요청 데이터가 인터페이스 캐시 중 어느 하나에 있다면, 이 조작은 일부 경우에 있어서, 단축됨). 결과적으로, 원격 노드로의 메모리 액세스는 상대적으로 더 큰 수의 사이클을 일반적으로 필요로 한다.
4개의 노드를 갖는 시스템이 도 1에 보여지고, 4개의 CPU와 다른 다양한 장치를 갖는 일반적인 노드가 도 1에 보여지지만, 도 1과 2는 설명의 목적으로 NUMA 의 하나의 가능한 구성의 단순화된 예로써만 의도되는 것이며, 그러한 구성에 있어서 가능한 장치의 개수와 종류는 가변적이고, 시스템은 도면에 나타나 있지 않은 부가적인 장치를 포함할 수 있음이 이해되어야 한다. 또한 모든 노드가 동일할 필요는 없으며, 모든 노드가 동일한 수의 CPU 또는 동일한 수의 어드레스가 가능한 로컬 메모리를 구비해야 할 필요도 없다.
<운영 시스템 관점>
도 3은 바람직한 실시예(100)에 따른 멀티-노드 컴퓨터 시스템 내에서 상이한 추상화 레벨의 하드웨어 및 소프트웨어 함수의 분할을 보여주는 개념적인 설명도이다. 공지된 바와 같이, 컴퓨터 시스템은 프로세스를 수행하는 순차적인 상태 장치이다. 이러한 프로세스들은 추상화 레벨을 변화시키는 것으로 나타난다. 추상화의 상위 레벨에서, 사용자는 하나의 프로세스와 입력을 열거하고, 출력을 수신한다. 하위 레벨로 진행됨에 따라, 이러한 프로세스들이 일부 프로그래밍 언어에서의 명령의 순차라는 것을 알게되고, 더 하위로 진행됨에 따라 하위 레벨 명령들이 번역되어 운영 시스템을 통해, 궁극적으로 임의의 동작을 강요하는 장치 레지스터 내의 데이터 비트로 보내진다. 하위 레벨에서, 전기적인 전위를 변화시키는 것은 다양한 트랜지스터가 턴 온 및 턴 오프되는 것을 가능케 한다. 도 3에 있어서, 추상화의 "더 높은" 레벨이란 형태의 정상(top)을 향함을 의미하고, 반면에 더 낮은 레벨은 바닥(bottom)으로 향함을 의미한다.
도 3에서 보여지는 하드웨어 레벨(301)은 명령이 실행되도록 하는 물리적인 프로세서, 메모리 버스 및 다른 구성 요소를 의미한다. 여기서 사용된 것처럼, 하 드웨어 레벨(301)은 도 1 및 2에서 보여지는 물리적인 장치(장치 내에 저장된 데이터에 반대되는 의미의)의 모음(collection)을 의미하며, 이는 도 1 및 2에서 나타나지 않는 다른 하드웨어를 포함한다.
하드웨어 바로 위에는 저-레벨 운영 시스템 레벨(low-level operating system level, 302)이 있으며, 일부 운영 시스템에서는 "커널(kernel)"이라 불린다. 물리적인 감각에서, 운영 시스템은 코드, 예컨대, 요청된 함수를 수행하도록 하나 또는 이상의 프로세서 상에서 실행되거나 다양한 메모리 장소에 저장되는 명령의 형태인 데이터이다. 저-레벨 운영 시스템은, 시스템 자원을 공유하고, 메모리를 할당하고, 보안을 강화하는 등에 필요한 임의의 기본 운영 시스템 함수를 제공한다. 저-레벨 운영 시스템(302)에 의해 제공되는 함수 중에서는 페이징 함수(303) 및 디스패칭 함수(304)가 있다. 페이저(303)는, 실행 스레드가 시스템의 분배 메인 메모리 내에 현재 있지 않는 데이터에 액세스하는 시도를 하는 경우, 예컨대 그 데이터가 다양한 노드의 임의의 로컬 메모리(210) 내에 있지 않는 경우에 호출된다. 이 경우에, 페이저(303)는 요청 데이터가 저장 장치(회전 자기 디스크 드라이브 저장 장치와 같은)로부터 나와, 로컬 메모리(210) 중 어느 하나에 위치되도록 한다. 여기에서 더 상세히 설명되는 것처럼, 디스패처(304)는 실행용 프로세서로 실행되기 위해 대기하는 스레드를 치한다. 디스패치 준비 큐 구조(305)는 디스패처(304)에 의한 디스패치를 대기하는 스레드를 포함한다.
저-레벨 운영 시스템(302)의 레벨 위에는 부가적인 더 상위-레벨 운영 시스템 함수(308)뿐만 아니라, 다양한 사용자 프로세스(310-312, 예컨대 사용자 어플리 케이션 코드 및 데이터)가 존재한다. 일반적으로, 더 상위-레벨 운영 시스템 함수(308)는 액세스를 원하는 사용자에게 부가적인 수단과 함수들을 제공하지만, 사용자 프로세스는 직접적으로 실행을 위한 저-레벨 운영 시스템(302)에 액세스할 수도 있다.
바람직한 실시예에 있어서, 운영 시스템은 마이크로소프트 윈도우즈 2000TM 운영 시스템이며, 여기서 작업 디스패처 및 페이저는 CPU와 메모리의 노드 위치를 고려하여 설명되는 것처럼 개조되었다. 그러나, 작업이 디스패치되는 단일의, 공통 준비 큐를 구비한 가상의 임의의 멀티-태스킹 운영 시스템은, 이후에 발전된 운영 시스템을 포함하는 UNIXTM 기반 운영 시스템, IBM AS/400TM 운영 시스템 등과 같이 여기에서 기술되는 함수들에 적용될 수 있다.
전형적인 컴퓨터 시스템 설계에 있어서, 더 상위 레벨의 실체들은 하위 레벨의 실체의 구체적인 구현을 하는 것으로부터 보호되는 것이 바람직하다. NUMA 시스템의 하드웨어 설계의 경우에 있어서, 이것은 운영 시스템 및 상위 레벨 소프트웨어가 바람직하게는 NUMA 특성을 인지할 것을 요구하지 않는다는 것을 의미한다. 그러므로, 일반적으로는 NUMA 시스템은, 운영 시스템이 그 분배 메인 메모리를, 단일 모놀리식 실체(single monolithic entity) - 이 단일 모놀리식 실체는, 요청 데이터가 존재하는 경우에는 요청 데이터를 반환하고, 존재하지 않는 경우에는 페이지 장애를 발생시킴으로써 데이터 요청에 응답함-로 간주하도록 설계된다. 유사하게는 운영 시스템은 노드와 프로세서의 모음을 단순하게 프로세서의 하나의 대형 풀로서 간주하는데, 모든 프로세서란 임의의 프로세스를 실행 가능하게 하는 것을 말한다. 이것은 모든 프로세서들이 주어진 작업을 동시에 수행한다거나, 모든 메모리 액세스가 동시에 달성된다는 것을 의미하지는 않는다; 그 이유는, 전에 언급한 바와 같다. 그러나, 그것은 요청 메모리가 동일한 노드에 있는지 여부에 관계없이, 메모리 액세스 에러 없이 달성된다는 것을 의미하지 않는다. 그러므로, 운영 시스템은 프로세서가 위치하는 노드에 관계없이 스레드를 디스패치할 수 있다.
NUMA 시스템 하드웨어가 표준 저-레벨 운영 시스템 함수와 함께 함수화되도록 설계되어도, 만약 저-레벨 운영 시스템이 하드웨어 설계를 더 잘 인식하고 있다면 - 특히 프로세서의 노드 위치가 스레드를 디스패칭할 때 고려된다면 -, 컴퓨터 시스템은 더 효율적으로 동작할 것이다.
<디스패칭 및 페이징 함수(paging function)>
여기서 설명되는 스레드 디스패처는, 만약 스레드가 일관된 노드들 상에서 실행되며, 스레드가 필요한 데이터는 일반적인 실행 노드 내에 축적되는 경향이 있을 것이고, 따라서 인터-노드 메모리 액세스의 주파수는 감소될 것이라는 원리에서 조작된다. 이것은 만약 메모리 페이징 메카니즘이 일부 위치의 국지성(locality of placement)을 드러낸다면, 환언하면, 만약 페이저(303)가 요청 페이지를 일부 특정한 로컬 노드에 위치시키려는 경향이 매우 일정하지 않게 존재한다면, 오직 참이 된다.
위치의 국지성을 나타내는 페이저를 구현하는 단순하고도 직접적인 방법은 요청하는 프로세서의 노드로 페이지 위치를 제한하는 것이고, 이것은 바람직한 실 시예에서 사용되는 방법이다. 환언하면, 페이지 장애의 경우에 있어서, 페이저(pager, 303)는 항상 새로운 페이지를 프로세서를 포함하는 노드의 로컬 메모리에 위치시키며, 상기 프로세서란 페이지 장애(page fault)를 유발하는 메모리 액세스 요청을 하는 것을 말한다. 페이저(303)는 노드의 로컬 메모리의 유효한 페이지로부터 페이지 아웃(paged out)되는 최상의 후보를 선택한다. 페이저를 구현하는 선택적인 방법은 요청 프로세스의 이상적인 노드로 페이지 위치를 제한하는 것이다. 환언하면, 이상적인 노드는 각 프로세스(아래에서 더 전체적으로 설명될 것임)에 관련되어 있고, 메모리 액세스를 내는 프로세서와 동일하지 않은 노드인 경우조차, 하나의 페이지는 항상 페이지 장애를 유발한 프로세스와 관계되는 이상적인 노드의 로컬 메모리에 위치된다. 이 선택적인 방법의 원인은, 프로세스에 의해 발생된 스레드가 종종 다른 노드에서 실행되는 경우에도, 페이지가 일관된 로컬 노드에 위치하고 있다는 것이다. 그러나, 이러한 2개의 선택성은 페이저에 의해 채택될 수 있는 유일하게 가능한 기술은 아니며, 다양한 선택적인 표준 또는 표준의 조합이 어느 정도의 페이지 위치의 국지성을 달성하는데 사용될 수 있다.
스레드 디스패칭은 스레드의 상태 및 우선권에 의존한다. 어느 순간적인 시간에 있어, 스레드는 여러 상태들 중 하나에 존재한다. 예컨대, 스레드는 프로세서 상에서 실행되는 실행 상태에 있을 수도 있으며, 어떤 외부 이벤트가 발생될 때까지 실행될 수 없어서, 이벤트가 발생될 때까지 대기하는 이벤트 대기 상태에 있을 수도 있으며, 또는 유효한 프로세서에 대해서만 대기하고 실행을 준비하는 준비 상태에 있을 수도 있다. 운영 시스템에 따라, 부가적인 상태 또는 상기 상태의 진보 된 상태가 정의될 수도 있다. 부가적으로, 실행의 우선권은 각 스레드에 관계된다. 종래 기술에 있어서 공지된 다양한 우선권 할당 기술(priority assignment scheme)이 사용될 수도 있다. 우선권은 일반적으로 사용자, 시스템 관리자 도는 운영 시스템 자신에 의해 할당된다. 예컨대, 사용자 어플리케이션 프로세스의 우선권은 종종 사용자에 의한 오버라이드(override)에 지배되어, 운영 시스템에 의해 열거되는 사용자 프로세스에 대한 디폴트 우선권(default priority)이 된다. 우선권은 스레드가 존재하는 지속시간 동안 고정될 수 있고, 또는 스레드가 준비 큐 상에서 대기하고 있는 시간의 길이와 같이 다양한 인자에 의존하여 조정된다. 종래에 의하면, 우선권이 선택적으로 역순서로 있을 수 있음에도 불구하고, 더 높은 수가 더 큰 우선권을 지시한다.
디스패처(304)는 스레드 준비 큐 구조(305)로부터의 디스패치를 위한 스레드를 선택한다. 준비 큐 구조(305)는 도 4에서 더 자세히 설명된다. 도 4에서 보여지는 것처럼, 준비 큐 구조는 제어 블럭(410-412)의 복수의 리스트(401-403)를 포함하며, 도 4에서 설명을 위해 도시된 3개의 리스의 수는 가변적이다. 각 제어 블럭 리스트(401-403)는 FIFO 순으로 정렬된다. 주어진 리스트의 제어 블럭(410-412)은 지정된 우선권과 관계된 스레드를 의미하며, 이 스레드는 실행을 준비하고 대기한다. 환언하면, 제어 블럭 리스트(401-403)는 준비 상태에 있는 스레드를 포함한다. 하나의 스레드가 준비 상태에 들어가면, 그 제어 블럭은 스레드와 관계된 우선권을 갖는 리스트의 말단에 위치한다. 디스패처(304)가 실행용 CPU에 그것을 디스패치한 경우에, 제어 블럭은 정상적으로 리스트에서 제거된다.
바람직한 실시예에 있어서, 시스템(100)에 대한 오직 하나의 준비 큐 구조(305)가 존재하고, 실행을 준비하는 모든 스레드는 그 스레드 우선권에 상응하는 준비 큐 구조(305)의 리스트(401-403)에 위치한다. 준비 큐는, 어떠한 CPU 또는 CPU 그룹(노드와 같은)도 그 준비 큐로부터 작업의 우선적인 디스패치를 수신하지 않는다는 것을 의미하는 임의의 CPU 또는 CPU의 그룹과 관계되어 있지 않다. 준비 큐가 메모리 구조일 경우, 일반적으로 그것은 노드 중 하나에 저장될 것이고, 디스패처는 일반적으로 그 노드의 CPU에서 실행될 것이지만, 이것이 "CPU 또는 CPU 그룹과 관계되어 있는" 것을 의미하지는 않는다.
각 제어 블럭(410-412)은 활성 스레드에 관한 임의의 상태 정보를 포함하며, 제어 블럭의 일부는 디스패치를 위한 스레드를 선택하는 디스패처(304)에 의해 사용된다. 도 5는 디스패처에 의해 사용되는 전형적인 제어 블럭(410)으로부터의 임의의 스레드-특정 정보를 설명한다. 도 5에 도시된 바와 같이, 제어 블럭은 우선권(501), 유사성(affinity) 마스크(502), 이상적인 노드 마스크(503), 최근 실행 프로세서(505)와 큐 시간(506)을 포함한다. 우선권 영역(501)은 스레드의 지정된 수적 우선권을 포함한다. 유사성 마스크(502)는 개별적인 CPU 들에 상응하는 마스크 비트의 시리즈이며, 그것에 의해 사용자 또는 시스템 관리자는, 프로세스가 시스템 상에서 유효한 CPU의 서브세트 상에서만 실행될 수도 있다는 것을 요청할 수도 있으며, 여기서 서브세트란 유사성 마스크에 의해 열거되는 것을 말한다; 대부분의 캐시에서, 사용자는 실행을 제한하지 않으며, 유사성 마스크는 모든 CPU가 실행 가능하도록 설정된다. 이상적인 노드 마스크(503)는 개별적인 노드에 상응하는 마스크 비트의 세트이며, 이로써 실행을 위한 하나 또는 이상의 바람직한 노드가 여기서 설명된 바와 같이 지명될 수 있다. 이상적인 프로세서 영역(504)는 스레드의 실행을 위한 단일의 바람직한 CPU의 수적인 지정이다. 최근 실행된 프로세서 영역(505)은 어느 스레드가 가장 최근에 실행되었는지에 관한 CPU의 수적인 지정이다. 큐 시간 영역(506)은 준비 큐에 스레드가 있는 시간의 길이를 지시하는 값을 포함한다. 예컨대, 이 값은 어떤 이벤트가 발생한 경우 증가하는 카운터일 수도 있고 또다른 값일 수도 있음에도 불구하고, 스레드가 큐에 들어간 때를 기록하는 시간 스탬프(time-stamp)가 될 수도 있다.
도 4 및 5는 설명을 위해 단순화된 형태로 준비 큐와 제어 블럭을 도시하고 있으며, 디스패처에 의해 사용되는 데이터 구조 형태의 정확한 청사진을 제공할 목적은 아니다. 준비 큐는 링크된 리스트 정렬의 복수의 제어 블럭(410-412)을 포함하고 있음을 보여주며, 각 블럭(410-412)은 단일의 개별적인 스레드에 상응하고, 모든 필요한 상태 정보를 포함하고 있다. 그러나 큐 데이터 구조의 정확한 구조적 상세는 가변적이며, 이것은 데이터 구조의 하나의 어레이 또는 다른 형태로써 구현될 수 있다. 더 나아가, 제어 블럭(410-412)이 각 개별적인 스레드에 대한 완전한 상태 정보를 포함하고 있음을 보여줌과 동시에, 큐 내부의 기록이 디스패처가 필요한 부분적인 정보만을 포함할 수도 있으며, 필요한 데이터가 발견될 수 있는 장소에 대한 더 많은 포인터 또는 다른 인덱스를 단순히 포함하고 있을 수도 있다. 제어 블럭은 디스패처 또는 다른 함수들에 의해 사용되는 다른 그리고 부가적인 상태 정보를 포함할 수도 있다.
디스패칭 선택을 제어하는 제어 블럭의 임의의 값은, 프로세서가 스레드를 생성하고, 프로세스 초기화에서 발생되는 값으로부터 상속될 수도 있는 경우에, 초기화된다. 도 6은 스레드 제어값을 초기화하는 운영 시스템에 의해 택해지는 고 레벨의 임의의 단계를 보여주는 흐름도이다. 도 6에서 보여지는 바와 같이, 프로세스는 종래의 방법에 의해 초기화되며, 임의의 데이터 구조를 발생케하고, 초기화시키며, 특히 도 5에 묘사된 값을 유지하는 제어 블럭 또는 유사한 구조가 생성되도록 한다. 부가적으로, 우선권과 프로세서 유사성은 프로세스에 할당된다. 이러한 단계는 단계(601)로써 고 레벨로 선택적으로 나타내진다.
하나의 이상적인 노드는 다음과 같이 프로세스와 관련되어 있다. 만약 프로세스가 시스템 프로세스이거나 또는 그것에 할당된 특정한 프로세서 유사성을 가지고 있다면, 단계(602)로부터 "Y" 가지가 선택되며, 이상적인 노드는 모두로 설정된다(단계 603). 환언하면, 프로세스와 관련된 이상적인 노드 마스크는 모든 노드와 함께 "on"으로 설정되고, 이는 어떠한 이상적인 노드 선택도 존재하지 않음을 효과적으로 의미한다. 시스템 프로세스는 모든 노드에서 구동될 것으로 의도된 다양한 지정된 운영 시스템 중의 하나이다. 프로세서 유사성은 사용자 또는 시스템 관리자에 의해 지정되며, 프로세스가 유효한 CPU의 특정한 서브세트에서 실행되도록 제한한다. 프로세서 유사성이 드물게 지정됨에도 불구하고, 그러한 유사성이 지정된 경우에, 시스템에 할당된 "이상적인 노드"를 오버라이드하게 되므로, 이상적인 노드 할당은 이 경우에서는 사용되지 않는다.
만약 프로세스가 시스템 프로세스도 아니고, 특정한 프로세서 유사성을 갖고 있지도 않다면(환언하면, 임의의 프로세서 상에서 구동될 수 있음), 단계(602)에서 "N" 가지가 선택된다. 이러한 경우에 운영 시스템은 라운드 로빈(round robin) 알고리즘을 사용하여 이상적인 노드를 할당한다. 환언하면, 가장 최근에 프로세스에 할당된 노드의 수는 증가하고(단계 604), 이 노드는 프로세스의 이상적인 노드로써 할당된다(단계 605). 할당 조작은 선택된 이상적인 노드에 상응하는 이상적인 노드 마스크의 비트를 설정함으로써 수행된다.
높은 적응성을 위해, 노드 마스크가 사용되어, 단일 노드는 지정된 이상적인 노드가 될 수도 있고, 모든 노드가 지정될 수도 있으며 또는 노드의 임의의 서브세트가 지정될 수도 있다. 디폴트로써, 운영 시스템은 아래와 같이 대부분의 사용자 프로세스에 대한 단일 노드를 선택한다. 그러나, 사용자가 특별한 함수 호출을 통해 이 선택을 오버라이드하는 것이 가능하다. 이 기능은 운영 시스템에 의해 수행되는 자원의 평형에 간섭을 가하는 경향이 있으나, 그것을 정당화하는 특별한 상황이 있을 수도 있기 때문에, 이 기능은 거의 사용되지 않는다고 생각된다.
간단한 라운드-로빈 알고리즘은 동등한 기반 하에서 유효한 노드 사이에 프로세스를 분배하고 자원 사용에 평형을 이루는 디폴트로써 사용된다. 그러나, 선호되는 노드를 할당하기 위한 임의의 수의 택일적인 방법이 운영 시스템에 의해 사용될 수 있다. 예컨대, 만약 각 노드의 프로세서의 수가 동일하지 않다면, 할당에 무게를 싣는 것이 바람직하다. 선택적으로, 최근 CPU 사용에 관한 통계를 내세울 수도 있으며, 가장 낮은 최근 CPU 사용도를 가진 노드에 프로세스를 할당할 수도 있다.
어떤 점에서, 단계(610)에 나타난 바와 같이, 프로세스는 스레드를 생성한다. 프로세스는 단일 스레드를 생성하거나, 또는 복수의 스레드를 생성할 수도 있지만, 오직 하나만이 설명을 위해 도 6에 도시되어 있다. 다른 것 중에서, 스레드를 생성하는 것은, 상태 기록 또는 기록들[예컨대, 제어 블럭(410)]이 스레드를 위해 생성되어 임의의 값으로 초기화되었다는 것을 의미한다. 프로세스를 초기화하는 것처럼, 스레드를 생성하는 것은 종래 기술에서 공지된 바와 같이 다수의 단계를 포함할 수 있으며, 여기서는 설명되지 않고, 오직 단계(610)의 고 레벨로서만 설명된다. 스레드 우선권 값(501), 유사성 마스크(502)와 이상적인 노드 마스크(503)는 스레드를 생성했던 프로세스에 대한 유사한 값으로부터 상속된다(단계 611); 이것은 프로세스 값이 스레드 제어 블럭으로 복사된다는 것 또는 스레드 제어 블럭이 단순히 프로세스값을 참조한다는 것을 의미할 수도 있다.
실행을 위한 바람직한 CPU("이상적인 CPU"라고 불리는)는, 이상적인 노드에서의 랜덤 CPU로 시작하고, 라운드-로빈 기반의 이상적인 CPU 할당을 회전함으로써 각 스레드에 할당된다. 환언하면, 만약 생성된 스레드가 프로세스에 의해 생성된 제1 스레드라면, "Y" 가지가 단계(612)에서 선택되고, 이상적인 노드 또는 노드들(스레드의 이상적인 노드 마스크에 의해 지정되는) 내의 CPU가 랜덤하게 선택된다(단계 613). 만약 생성된 스레드가 제1 스레드가 아니라면, "N" 가지가 단계(612)에서 선택되며, 운영 시스템은 이상적인 노드 또는 노드들(단계 614) 내의 CPU의 수를 증가시키고, 이 다음 CPU를 새로 생성된 스레드에 할당한다(단계 615).
도 6은 디스패처에 의해 사용되는 임의의 변수의 초기화를 설명하기 위한 프 로세스 및 스레드 초기화의 매우 단순화된 흐름도이고, 프로세스를 초기화하거나 스레드를 생성하는 단계를 완벽하게 설명하려는 것은 아니다.
제어 블럭(410) 내에 포함되는 준비 큐(305) 및 정보와 결합된 스레드 디스패처의 조작이 설명될 것이다. 일반적으로, 디스패처는, 새로운 스레드가 디스패치되어야 함 또는 디스패치 될 수도 있음을 지시하는 외부 이벤트에 응답하고, 스레드가 디스패치되도록 결정하거나, CPU가 스레드를 실행하도록 결정한다. 제1 모드에서(도 7에서 도시됨), 디스패처는, CPU가 스레드를 실행하기 유효하게 된 경우에, 준비 큐(305)로부터 유효한 스레드를 선택하도록 한다. 이것은 예컨대, CPU 상에서 이전에 실행된 스레드가 긴 대기시간 이벤트(long latency event)와 만나거나, 또는 이전에 스레드를 실행하는 것이 종료되거나, 또는 이전에 스레드를 실행하는 것이 인터럽트되었거나, 또는 실행을 종료하였기 때문에, 발생할 수도 있다. 제2 모드에 있어서(도 8에서 도시된), 디스패처는 스레드가 실행을 준비하게 되기 때문에, 유효한 프로세서를 선택하도록 불려온다(예컨대, 새로운 스레드가 생성되었거나, 또는 스레드가 대기하고 있었던 외부 이벤트가 발생하였거나 또는 어떤 다른 이벤트가 스레드를 준비하게 만들도록 야기되었음). 운영 시스템의 설계에 따라, 디스패처는 또한 다른 이유로 불려올 수 있다.
디스패처의 중심은 스레드 선택 매카니즘이고, 이 매카니즘은 디스패치를 위해 스레드를 선택한다. 하나의 스레드는 유효한 CPU에 대한 최상의 매치로써, 선택되므로, 이 스레드 선택 함수가 호출되면, 스레드의 디스패칭을 위한 목표 CPU가 고려된다. 바람직한 실시예에 있어서, 이 목표 CPU는 일반적으로, 막 유효하게 되 었고, 디스패치 함수를 유발시켰던 CPU 이다.
도 7A 및 7B(도 7로써 선택적으로 참조됨)는 디스패처(304) 내의 스레드 선택 함수의 조작을 보여주는 흐름도이다. 스레드 선택 함수는 목표 CPU(P로 지정됨)에 대한 스레드를 선택하도록 호출되며, 이 목표 CPU란 일반적으로, 상기에서 설명된 막 유효화된 CPU이다. 이 스레드 선택 함수는 적합한 스레드가 발견될 때가지 가장 높은 우선권으로부터 가장 낮은 우선권으로 준비 큐 내의 다양한 제어 블럭 리스트(401-403)를 검토한다. 도 7에 도시된 바와 같이, 스레드 선택 함수는 첫째로 검토된 리스트를 선택한다(단계 701). 초기에, 선택된 제어 블럭 리스트는 가장 높은 우선권 리스트이며, 메인 루프의 후속하는 반복과 함께, 단계(701)는 아직 시험되지 않은 리스트의 가장 높은 우선권을 갖는 리스트를 선택한다. 변수 ideal_node_hit 및 ideal_CPU_hit 는 널 값으로 초기화된다(단계 702). 부가적으로, 디스패처는 선택 제어 블럭 리스트의 스레드에 대한 최대 대기 시간(maximum waiting time, wmax)을 결정한다(단계 702도 또한). 최대 대기 시간은 각 리스트에 대해 변하는데, 더 높은 우선권에 대해서는 더 적고, 더 낮은 우선권 리스트에 대해서는 더 크다; 그러므로 시험되는 각 선택 리스트에 대한 wmax 값을 리셋시킬 필요가 있다.
스레드 선택 함수는 단계(710-718)을 포함하는 루프로써 도 7에 도시된, 매치가 발견될 때까지 교대로 선택된 제어 블럭 리스트내 또는 도달된 리스트의 끝에서 각 스레드를 시험한다. 리스트로부터의 스레드(t)가 선택된다(단계 710). 이 스레드는 초기에는 리스트에 있는 제1 스레드가 되고, 이 스레드의 제어 블럭은 가장 길게 리스트 상에 있어 왔고, 후속적으로는, 아직 선택되지 않았던 것들 중에서 가장 기게 리스트 상에 있었던 스레드이다. 스레드 선택 함수는 그 뒤 P 가 스레드 t의 프로세서 유사성에 있는 CPU 중 하나인지 아닌지를 결정하는데, 예컨대, 프로세서 P 에 대응하는 비트는 스레드 t의 프로세서 유사성 마스크(502)에서 설정되는지 여부를 말한다. 만약 그렇지 않다면, 스레드 t는 프로세서 P상에서 실행되지 않도록 배제되며, 스레드 선택 함수는 다음 스레드를 시험하기 위해, 단계(718)로 진행한다.
만약 P가 t의 프로세서 유사성에 있다면(단계 711로부터의 "Y"가지), 스레드 선택 함수는 t가 즉각적인 선택에 대한 표준을 만족하는지 여부를 결정한다(단계 712). 단계(712)에서 수행된 테스트가 논리적으로 다음과 같이 표현된다 :
(t는 리얼-타임 우선권 리스트) OR (1)
(t는 wmax 보다 더 길게 대기하였음) OR (2)
((P=last_CPU) AND (P=ideal_CPU)) OR (3)
((P=last_CPU) AND (P는 t의 이상적인 노드 내에 있음)) OR (4)
((P=last_CPU) AND (ideal_CPU
Figure 112004014268818-pct00001
t의 유사)) OR (5)
((이상적인 노드가 존재하지 않음) AND (P=ideal_CPU)) (6)
조건 (1) 및 (2)는, 스레드 t를 긴급하게 디스패칭할 때, 고려사항과 매칭되는 정상 노드(normal node)를 오버라이드한다. 리얼-타임 우선권 리스트는 특별한 고-우선권 제어 블럭 리스트이며, 이는 효과적으로 0인 wmax를 갖고, 이 리스트에 상에서 대기하는 어떠한 스레드 제어 블럭도 그 최대 대기 기간을 초과하였다. 모 든 다른 제어 블럭 리스트에서, 만약 스레드 t가 이미, t가 대기하고 있는 리스트에 대한 소정의 기간 wmax보다 더 오래 대기하고 있었다면, t가 즉시 디스패치를 위해 선택된다. 만약 스레드가 마지막으로 P에서 실행되었다면(last_CPU 영역 505에 열거된 것처럼) 조건 (3)은 스레드를 선택하고, P는 ideal_CPU 영역(504)에 의해 열거되는 스레드의 이상적인 CPU이다. 조건 (4)는 (3)과 유사하지만, 이상적인의 개념을 t의 이상적인 노드 - 환언하면, t의 이상적인 노드 마스크(503)에 의해 열거되는 노드 - 의 임의의 프로세서로 확장한다. 조건 (5)은 스레드 t의 유사성 내의 이상적인 CPU 가 존재하지 않는 특별한 경우를 처리한다; 이것은 API 호출에 의한 것처럼, 몇 명의 임의의 값(유사성과 같은)이 프로세스 초기화 후에 변경된 곳에서만 발생한다. 조건 (6)은 마스크(503)에서 열거된 이상적인 노드가 없는 특별한 경우를 처리하는데, 이 경우 이상적인 CPU가 바람직하다.
만약 즉각적인 선택에 대해 위에서 표현된 기준이 만족된다면, "Y" 가지가 단계(712)에서 선택되고, 스레드 t는 지정된 선택 스레드가 되며(단계 713), 이 스레드 선택 함수는 잔여 스레드를 더 시험하지 않고 반환된다. 만약 그렇지 않다면, "N" 가지가 선택된다. 그 경우에, 만약 P가 ideal_CPU 영역(504)에 의해 열거된 이상적인 CPU이고, 이것이 첫번째로 만나는 스레드라면(환언하면, ideal_CPU_hit=null), 그 뒤 "Y" 가지가 단계(714)에서 선택되고, ideal_CPU_hit 는 t로 설정된다(단계 715). 만약 "N" 가지가 단계(714)에서 선택되고, 그뒤 만약 P가 이상적인 노드 마스크(503)에 의해 열거된 이상적인 노드에 있고, 이것이 첫번째로 만나는 스레드라면(예컨대, ideal_node_hit=null), "Y" 가지가 단계(716)으로부터 선택되고, ideal_node_hit 는 t로 설정된다(단계 717). 만약 더 많은 스레드가 선택 제어 블럭 리스트에 남아있다면(단계 718), 이 스레드 선택 함수는 리스 상의 다음 스레드를 선택하고 시험하기 위해 반환된다. 선택 리스트에 있는 모든 스레드가 시험된 경우에는, "N" 가지가 단계(718)로부터 선택된다. 스레드 선택 함수는 단계(720)로 계속된다.
전체 제어 블럭 리스트를 검토하여, 만약 ideal_CPU_hit가 널이 아니면, "N" 가지가 단계(720)에서 선택되고, ideal_CPU_hit에 의해 열거된 스레드는 지정된 선택 스레드가 되며(단계 721), 함수는 부가적인 리스트를 시험함이 없이 반환된다. 만약 ideal_node_hit가 널이면, "Y" 가지가 단계(720)에서 선택된다. 이 경우에 있어서, 만약 ideal_node_hit이 널이 아니면, "N" 가지가 단계(722)에서 선택되고, ideal_node_hit에 의해 열거된 스레드는 지정된 선택 스레드이며, 함수는 부가적인 리스트의 시험없이 반환된다. 만약 ideal_CPU_hit 및 ideal_node_hit 양쪽 모두 널이면, "Y" 가지가 취해지고, 현 리스트 바로 아래의 우선권을 갖는 리스트가 시험을 위해 선택된다. 만약 모든 리스트가 시험되었다면, "N" 가지가 단계(724)에서 선택되어, 널 값은 선택 스레드로써 지정되며(단계 725), 이 스레드 선택 함수는 반환된다. 스레드가 실행을 위해 유효하게 된 경우, 디스패처는, 만약 가능하다면, 스레드를 실행하기에 적합한 CPU를 선택하도록 불러진다. 도 7의 복수의 잠재적인 CPU 후보들로부터 CPU를 선택하기 위해 CPU 선택 프로세스가 호출된다. 이 프로세스는 도 8에서 설명된다.
CPU 선택 함수는 첫째로 이상적인 CPU가 스레드 t의 유사성 내에 존재하는지 여부와 현재 아이들 상태인지 여부를 결정한다(단계 801). 만약 그렇다면, "Y" 가지가 단계(801)에서 선택되며, 이 이상적인 CPU가 선택되며(단계 802), 이 스레드 선택 함수는 반환된다. 만약 그렇지 않다면, "N" 가지가 단계(801)에서 선택된다.
만약 적어도 하나의 아이들 CPU가 스레드 t의 유사성 내에 있고, 이상적 노드가 존재하는 경우, 이 CPU가 스레드 t에 대한 이상적인 노드 내에 있다면(환언하면, 어떠한 이상적인 노드도 존재하지 않는 경우에, 테스트는 적어도 하나의 아이들 CPU 가 스레드 t의 유사성 내에 있는지 여부임), 그후 "Y" 가지는 단계(803)로부터 취해진다. 이러한 경우에는, 하나의 그러한 CPU 가 선택된다(단계 804). 단계(803)의 기준을 만족하는 하나 이상의 아이들 CPU가 존재하는 곳에서, 만약 그것이 그 기준을 만족하는 CPU들 하나라면, CPU 선택 함수는 스레드 t에 의해 최종적으로 사용된 CPU 를 선택하고, 만약 그렇지 않다면, 디폴트 선택 논리의 기반 하의 CPU들 중 어느 하나를 선택한다. 스레드 선택 함수는 그 뒤 반환된다. 만약 상기 기준을 만족하는 CPU가 단계(803)에서 발견되지 않는다면, "N" 가지는 아이들이 아닌 임의의 프로세서를 고려하여 선택된다.
만약 아이들 CPU가 스레드 t의 유사성 내에 존재한다면, "Y" 가지는 단계(805)에서 선택되고, 이 이상적인 CPU는 후보 CPU로써 임시적으로 선택된다(단계 806). 이러한 경우에 있어서, CPU는 반드시 busy 상태이거나, 단계(801)에서 선택되었을 것이다. 만약 "N" 가지가 단계(805)에서 취해지고, 스레드 t의 유사성 내의 CPU가 존재하고, 또한 만약 아이들 노드가 존재한다면, 또한 스레드 t의 아이들 노드 내에 있는 것이라면(환언하면, 아이들 노드가 없는 곳에서, 테스트 대상은 스 레드 t의 유사성 내의 CPU가 존재하는지 여부임), "Y" 가지는 단계(807)에서 선택되며, 하나의 그러한 CPU가 임시적으로 선택된다(단계 808). 하나 이상의 그러한 CPU가 존재하는 곳에서는, 만약 그것이 기준을 만족하는 CPU 중 하나라면, CPU 선택 함수는 임시적으로 스레드 t에 의해 최종적으로 사용되는 CPU를 선택하고, 만약 그렇지 않다면, 임시적으로 디폴트 선택 논리 기반의 CPU 중 하나를 선택한다. 만약 "N" 가지가 단계(807)에서 취해졌다면, CPU 선택 함수는 임시적으로 디폴트 선택 논리를 사용하여, 스레드 t의 유사성 내의 CPU를 선택한다(단계 809).
만약 후보 CPU가 임시적으로 단계(806, 808 또는 809)에서 선택되었다면, 후보 프로세서 내의 임의의 현재 구동되는 스레드의 우선권은 스레드 t의 우선권과 비교된다(단계 810). 만약 t의 우선권이 더 크면, "N" 가지가 단계(810)로부터 취해지고, 후보 CPU 가 선택 CPU로써 확인된다. 이 경우에 있어서, 아이들이 아닌 CPU의 선택은 현재 실행중인 스레드를 사전에 비워둘 것이다. 만약 t의 우선권이 실행 중인 스레드의 우선권보다 더 크지 않다면, "Y" 가지가 단계(810)에서 취해지고, 선택 CPU는 널로 설정된다. 어느 경우에 있어서나, CPU 선택 함수는 반환된다. CPU 선택 함수가 널 선택으로 반환되는 곳에서는, 스레드 t의 즉각적인 디스패치를 위한 적당한 CPU 를 찾을 수 없었으며, 그러므로 스레드 t는, 전에 설명한 스레드 선택 함수에 의해 선택된 경우에 큐로부터 궁극적인 디스패치를 대기하는 준비 큐에 위치된다. 그러므로, 스레스 선택 함수에 유사하다면, 어떠한 CPU도 선택되지 않고, 스레드 t가 궁극적으로 준비 큐에 위치되는 지점에서조차, CPU 선택 함수는 비-이상적인 노드의 아이들 CPU 를 선택하는 것을 거절할 수도 있다.
일반적으로, 본 발명의 설명된 실시예를 구현하기 위해 실행되는 루틴, 즉 운영 시스템 또는 특정한 어플리케이션, 프로그램, 객체, 모듈 또는 순차적인 명령의 한 부분으로써 구현되는지 여부는, 여기의 "컴퓨터 프로그램" 또는 단순히 "프로그램"이라고 언급된다. 컴퓨터 프로그램은 전형적으로, 본 발명과 일관된 컴퓨터 시스템의 장치 또는 시스템 내의 하나 또는 이상의 프로세서에 의해 준비 또는 실행되는 경우에, 장치 또는 시스템이 단계를 실행하거나, 본 발명의 다양한 면을 실시하는 요소를 발생하는데 필요한 단계를 수행하도록 하는 명령들을 포함한다. 게다가, 발명이 최대한으로 기능하는 컴퓨터 시스템을 설명하고 있는 반면에, 본 발명의 다양한 실시예는 다양한 형태의 프로그램 제품으로써 배포될 수 있으며, 본 발명은 배포를 실제로 완수하는데 사용되는 특정한 종류의 신호 유지 매체에도 불구하고, 동일하게 적용된다. 신호 유지 매체의 예는, 한정되지는 않지만, 휘발성 및 비휘발성 메모리 장치와 같은 기록 가능형 매체, 플로피 디스크, 하드-디스크 드라이브, CD-ROM, DVD, 자기 테이프와 무선 통신 링크를 포함하는 디지털 및 아날로그 통신 링크와 같은 전송형 매체를 포함한다. 신호 유지 매체의 예는, 메모리(210)와 저장 장치(224)로써 도 2에 설명된다.
<부가적인 선택적 실시예>
NUMA 시스템의 스레드를 디스패칭하기 위한 특정한 알고리즘이 지금까지 바람직한 실시예로서 설명되어 왔다. 그러나, 상기의 알고리즘의 다양한 변화가 가능하다는 것을 이해해야 한다. 선택된 정확한 알고리즘은 종종 설계된 컴퓨터에 특정한 다양한 하드웨어 및 소프트웨어 고려에 의존한다. 일반적으로, 분산 메모리 시스템의 서브세트에 관한 프로세서의 물리적인 위치를 고려하는 공통 준비 큐로부터의 임의의 스레드를 디스패치하는 알고리즘이, 긴 대기시간 리얼 메모리 액세스(long latency real memory access)를 감소시키기 위해 사용될 수 있다. 대부분의 확실한 대체는 바람직한 실시예에 관하여 여기서 설명된 하나 또는 이상의 조건을 제거하는 것이며, 또는 상기의 알고리즘에 일정한 조건을 부가하는 것이다. 부가적인 변화의 몇몇의 특정한 예가 다음에 기술되며, 이것들은 오직 예로써 언급되는 것이고, 가능한 대체물에 대한 완전한 리스트로 간주되어서는 안 된다. 하나의 대체에 있어서, 이상적인 프로세서 도는 이상적인 노드를 지시할 필요는 없다. 프로세스 또는 스레드가 첫째로 실행되는 프로세서는 랜덤하게 결정된다. 스레드 선택 알고리즘은 목표 프로세서 또는 동일한 노드 상의 또다른 프로세서 상에서 마지막으로 실행되는 스레드를 선호한다. 동일한 노드 상의 프로세서가 더 바람직하기 때문에, 스레드는 이상적인 지시가 부족함에도 불구하고, 일관된 노드 내에서 실행되는 경향이 있다.
또다른 선택에 있어서, 스레드는 상기의 논리에 반대로써의 수학적 측정 함수에 의해 선택될 수도 있다. 측정 함수는 큐에 있는 각 스레드에 대해 특정 스코어를 제공하며, 이 스레드는 디스패치를 위해 선택된 최적의 스코어를 갖는 것이다. 예컨대, 그러한 측정 함수의 형태는 다음과 같다:
F1(wait_time)+F2(node)+F3(CPU)+F4(Priority)+…
여기서, FN는 개별적인 독립 변수의 뉴머리컬 함수이다. 물론, 그러한 측정 함수는 더 복잡하다.
상기의 바람직한 실시예에 있어서, NUMA 컴퓨터 시스템은 아키텍처상으로, 반-독립 노드의 모음으로써 설계되며, 각 노드는 내부 버스, 프로세서, 로컬 메모리, 등을 구비하고, 인터-노드 통신 매체로써 서로 결합되어 있다. 부가적으로, 그러한 NUMA 시스템 아키텍처의 몇몇의 예들이 구성되어 왔으며, 공중이 사용가능하며, 임의의 실제적인 경험이 이미 이러한 접근으로 얻어져 왔다. 그러나, 본 발명에 따른 NUMA 시스템은 반드시 그러한 노드 모델로 설계될 필요는 없다. 시스템이 상기의 노드 시스템을 제외한 일정한 설계 모델을 기반으로 하고 있음에도 불구하고, 스레드 또는 작업을 실행하는 프로세서를 선택함에 있어, 논-유니폼 메모리 액세스를 설명하는 디스패처는 잠재적으로 임의의 NUMA 시스템 내의 값화 되어 있다. 그러므로, 공지된 또는 그후에 개발된 어떤 선택적인 시스템 아키텍처(논-유니폼 메모리 액세스의 특성을 나타내는)가 채택될 수도 있다. 그러한 선택적인 아키텍처의 예로써, NUMA 시스템은 복잡한 메모리 버스 구조를 가지고 있는 시스템이며, 이 메모리 버스는 인터페이스에 의해 링크된 버스 세그먼트(bus segment)의 웹을 포함하고, 일부 메모리 액세스는 오직 단일한 버스 세그먼트를 포함하며, 반면에 다른 메모리 액세스는 복수의 세그먼트를 검토하여 더 많은 시간을 필요로 한다. 다른 대체가 가능하다. 더 나아가, 바람직한 실시예에서, 메모리 액세스가 2개의 클래스로 분할됨에도 불구하고(인트라-노드 및 인터-노드), 하나의 시스템은 2개 이상의 메모리 액세스 클래스를 구비할 수 있으며, 각 클래스는 다른 개별적인 액세스 시간을 필요로 한다.
본 발명의 특정한 실시예가 설명을 위해 기술될 수 있음에도 불구하고, 다양한 개조가 본 발명의 정신과 범위를 벗어나지 않고 이루어질 수 있음을 이해해야 한다. 따라서, 본 발명의 보호 범위는 다음의 청구범위와 그 균등물에 의해 제한되지 않는다.
상기 스레드 선택 알고리즘의 동작에 관해 다양한 관찰이 이루어질 수 있다. 상기의 디스패처는 임의의 CPU 또는 CPU 그룹과 관계되지 않은 단일 준비 큐가 존재함에도 불구하고, NUMA-지각 동작을 달성할 수 있다. 대부분의 스레드에 대해(지정된 단일 이상적인 노드와 지정된 단일 이상적인 CPU를 구비함), 만약 프로세서 P가 적어도 스레드의 이상적인 노드에 있지 않다면, 스레드는 일반적으로 디스패치를 위해 선택되지 않는다. 이상적인 노드 내에서, 그 이상적인 노드에 있고, 그 이상적인 프로세서에 있지 않은 P를 구비한 스레드에 대한 그 이상적 프로세서로써 P를 구비한 스레드에게, 약한 우선이 주어진다. 만약 P가 스레드가 실행하고 임의의 다른 조건이 만족되는 마지막 프로세서라면[단계(712)의 (3)-(5)], 큐를 더 시험하지 않고, 이상적인 후보로써 하나의 스레드가 즉시 선택된다; 노드의 로컬 메모리에 부가하여, 프로세서의 캐시에 유용한 데이터가 있을 수 있기 때문에, 마지막 프로세서가 중요하다. 만약 프로세서 P가 스레드가 실행된 마지막 프로세서가 아니고, 이상적인 노드에 있거나, 이상적인 프로세서라면, 선택은 ideal_CPU_hit 및 ideal_node_hit 변수에 의해서 임시적이고, 만약 큐를 검토하는 동안 더 좋은 후보가 발견되면, 오버라이드된다. 스레드 선택 알고리즘은 스레드가 큐에서 대기하고 있음에도 불구하고, 반드시 어떠한 스레드를 선택하지는 않는다. 최종적으로, 큐 상에서 대기하는 스레드는 궁극적으로, P가 이상적인 노드 또는 스레드의 이상적인 프로세서와 매치되지 않음에도 불구하고, 디스패치를 위해 선택된다.
이상적인 노드를 지시한 결과로써, 이상적인 프로세서가 유효하지 않더라도, 스레드는 동일한 노드에서 실행되는 경향이 있다. 페이저는 페이지 데이터를 페이지 요청을 발생하는 프로세서의 노드의 로컬 메모리에 로드하므로, 스레드가 필요한 데이터는 지시된 이상적인 노드의 로컬 리얼 메모리에 축적되는 경향이 있다. 결과적으로, CPU 로부터 시스템 분배 리얼 메모리로의 메모리 액세스는, 노드의 장소를 고려하지 않는 유사한 작업 디스패처의 경우보다 더 큰 비율로 CPU 노드의 로컬 리얼 메모리에(노드 경계 너머의 메모리보다는) 액세스하게 된다. 인트라-노드 메모리 액세스에 비례한 증가가, 인터-노드 통신 매체에서의 트래픽을 감소시키고, 메모리 액세스 시간을 감축시킴으로써, 시스템 작업처리량을 향상시킨다.

Claims (17)

  1. 복수의 중앙 처리 장치들(CPUs)과, 복수의 이산적인 서브세트들로 분할 가능한 메모리를 구비하는 컴퓨터 시스템 내의 CPU들에 스레드들을 디스패치하는 방법에 있어서,
    (a) 상기 복수의 CPU들 중 목표 CPU를 식별하는 단계와;
    (b) 상기 목표 CPU 상에서 실행되기에 적합한 스레드들의 세트를 식별하는 단계로서, 상기 스레드들의 세트는 공통 준비 큐 상에서 대기하고, 어떠한 CPU 또는 CPU들의 그룹도 상기 공통 준비 큐로부터 작업들의 우선적인 디스패치를 수신하지 않는 것인, 상기 스레드들의 세트 식별 단계와;
    (c) 상기 스레드들의 세트의 각 개별적인 스레드에 대하여 상기 복수의 이산적인 메모리의 서브세트들 중 적어도 하나의 목표 서브세트를 식별하는 단계로서, 각각의 목표 서브세트는 상기 목표 CPU에 의한 상기 목표 서브세트 내의 위치로의 메모리 액세스를 위한 개별적인 대기시간(latency period)을 갖고, 상기 메모리 액세스를 위한 개별적인 대기시간 기간들은 모두 동일하지 않고, 상기 복수의 CPU들 중 각각의 CPU는 상기 복수의 이산적인 메모리의 서브세트들의 메모리의 개별적인 서브세트와 관련되고, 상기 복수의 이산적인 메모리의 서브세트들 중 적어도 하나의 목표 서브세트를 식별하는 단계는 상기 스레드들의 세트의 각각의 스레드를 실행하기 위한 개별적인 우선적인(prefered) CPU를 지정하는 단계를 포함하고, 상기 복수의 이산적인 메모리의 서브세트들 중 상기 목표 서브세트는 상기 우선적인 CPU와 관련된 상기 메모리의 서브세트인 것인, 상기 적어도 하나의 목표 서브세트를 식별하는 단계와;
    (d) 상기 목표 CPU 상에서의 실행을 위하여 상기 스레드들의 세트로부터 스레드를 선택하는 단계로서, 이 선택 단계는 각각의 목표 서브세트의 상기 개별적인 대기시간에 적어도 부분적으로 기반하는 것인, 상기 스레드 선택 단계
    를 포함하고,
    상기 스레드 선택 단계는, 상기 지정된 우선적인 CPU가 상기 목표 CPU인 스레드에 제1의 상대적인 우선순위를 할당하는 단계와; 상기 지정된 우선적인 CPU가 상기 목표 CPU와 동일한 메모리 서브세트와 관련되어 있는 스레드에 제2의 상대적인 우선순위를 할당하는 단계와; 상기 지정된 우선적인 CPU가 상기 목표 CPU와 동일한 서브세트의 메모리와 관련되지 않은 스레드에 제3의 상대적인 우선순위를 할당하는 단계를 포함하고, 상기 제1의 상대적인 우선순위는 상기 제2의 상대적인 우선순위보다 큰 것이고, 상기 제2의 상대적인 우선순위는 상기 제3의 상대적인 우선순위보다 더 큰 것인,
    스레드 디스패치 방법.
  2. 삭제
  3. 제1항에 있어서, 상기 복수의 CPU들은 상기 복수의 이산적인 메모리의 서브세트들 중 각 개별적인 서브세트와 관련된 것인, 스레드 디스패치 방법.
  4. 삭제
  5. 제1항에 있어서, 상기 컴퓨터 시스템은 복수의 이산적인 노드들을 포함하고, 각 노드는 적어도 하나의 CPU와 상기 복수의 이산적인 메모리의 서브세트 중 하나의 개별적인 서브세트를 포함하는 것이고,
    상기 각 개별적인 스레드에 대한 상기 복수의 이산적인 메모리 서브세트 중 적어도 하나의 목표 서브세트를 식별하는 단계는, 각 개별적인 스레드에 대하여 적어도 하나의 목표 노드를 식별하는 단계를 포함하는 것인, 스레드 디스패치 방법.
  6. 제5항에 있어서, 상기 각 개별적인 스레드에 대하여 적어도 하나의 목표 노드를 식별하는 단계는, 상기 스레드들의 세트의 각 스레드를 실행하는데 우선적인 개별적인 CPU를 지정하는 단계를 포함하는 것이고,
    상기 목표 노드는 상기 우선적인 CPU가 위치된 노드인 것인, 스레드 디스패치 방법.
  7. 컴퓨터 시스템 내의 중앙 처리 장치들(CPUs)에 스레드들을 디스패치하는 방법으로서, 상기 컴퓨터 시스템은 메모리와, 복수의 CPU들과, 복수의 이산적인 노드들을 구비하고, 각각의 노드는 상기 복수의 CPU들의 개별적인 이산적인 서브세트와 상기 메모리의 개별적인 이산적인 서브세트를 포함하고, 상기 CPU와 동일한 노드 내의 상기 메모리의 위치로의 상기 CPU에 의한 메모리 액세스는 제1 대기시간(latency) 기간을 필요로 하고, 상기 CPU와 상이한 노드 내의 상기 메모리 위치로의 CPU에 의한 메모리 액세스는 제2 대기시간 기간을 필요로 하고, 상기 제2 대기시간 기간은 상기 제1 대기시간 기간보다 긴 것인, 상기 스레드들을 디스패치하는 방법에 있어서,
    (a) 제1 노드 내의 제1 CPU가 스레드를 실행하는 것이 가능한 것임을 결정하는 단계로서, 상기 제1 노드는 복수의 CPU들를 구비하는 것인, 상기 제1 CPU 실행 가능 결정 단계와;
    (b) 상기 컴퓨터 시스템의 사용 가능한 CPU 상에서 실행되기에 적합한 스레드들의 세트를 식별하는 단계로서, 상기 스레들의 세트는 공통 준비 큐 상에서 대기하고, 어떠한 CPU 또는 CPU들의 그룹도 상기 공통 준비 큐로부터 작업들의 우선적인 디스패치를 수신하지 않는 것인, 상기 스레드들의 세트 식별 단계와;
    (c) 복수의 스레드들의 각각에 관하여, 각 스레드에 대하여 개별적인 우선적인 노드를 결정하는 단계로서, 상기 스레드들의 세트의 각 스레드를 실행시키기 위한 개별적인 우선적인 CPU를 지정하는 단계를 포함하고, 상기 우선적인 노드는 상기 우선적인 CPU가 위치된 노드인 것인, 상기 개별적인 노드 결정 단계와;
    (d) 상기 제1 CPU 상에서의 실행을 위한 스레드들의 세트 중에서 스레드를 선택하는 단계로서, 이 선택 스레드 단계는, 그 우선적인 노드로서 상기 제1 노드 이외의 노드를 구비한 스레드를 통하여, 그 우선적인 노드로서 상기 제1 노드를 구비한 스레드들의 세트 중의 스레드에 상대적인 우선순위를 할당하는 것이고, 상기 스레드 선택 단계는 상기 지정된 우선적인 CPU가 상기 목표 CPU인 스레드에 제1 상대적인 우선순위를 할당하는 단계와; 상기 지정된 우선적인 CPU가 상기 목표 CPU와 동일한 노드 내에 있는 스레드에 제2 상대적인 우선순위를 할당하는 단계와; 상기 지정된 우선적인 CPU가 상기 목표 CPU와 동일한 노드 내에 있지 않은 스레드에 제3 상대적인 우선순위를 할당하는 단계를 포함하고, 상기 제1 상대적인 우선순위는 상기 제2 상대적인 우선순위보다 큰 것이고, 상기 제2 상대적인 우선순위는 상기 제3 상대적인 우선순위보다 더 큰 것인, 상기 스레드 선택 단계
    를 포함하는 스레드 디스패치 방법.
  8. 제7항에 있어서, 각각의 노드는 복수의 CPU들을 포함하는 것인, 스레드 디스패치 방법.
  9. 삭제
  10. 제7항에 있어서, 상기 스레드들의 세트의 각 스레드를 실행하기 위한 개별적인 우선적인 CPU를 지정하는 단계는, 상기 스레드가 생성되는(spawn) 경우에 실행되는 것인, 스레드 디스패치 방법.
  11. 삭제
  12. 컴퓨터 시스템 내의 중앙 처리 장치들(CPUs)에 스레드들을 디스패치하는 방법로서, 상기 컴퓨터 시스템은 복수의 CPU들과, 복수의 이산적인 서브세트들로 분할되는 메모리를 구비하고, 상기 복수의 CPU들의 각각은 상기 복수의 이산적인 메모리의 서브세트들 중 개별적인 서브세트와 관련되고, 상기 복수의 이산적인 서브세트들 중 그 관련 메모리 서브세트로의 CPU에 의한 메모리 액세스는 제1 대기시간 기간을 필요로 하고, 상기 관련 메모리 서브세트 이외의 메모리 서브세트로의 CPU에 의한 메모리 액세스는 상기 제1 대기시간 기간보다 큰 대기시간 기간을 필요로 하는 것인, 상기 스레드 디스패치 방법에 있어서,
    (a) 공통 준비 큐로부터 CPU 상에서 실행 준비된 스레드를 식별하는 단계로서, 어떠한 CPU 또는 CPU들의 그룹들도 상기 공통 준비 큐로부터 작업들의 우선적인 디스패치를 수신하지 않는 것인, 스레드 상기 식별 단계와;
    (b) 상기 스레드를 실행하기에 적합한 CPU들의 세트를 식별하는 단계와;
    (c) 상기 복수의 이산적인 메모리의 서브세트들 중 우선적인 서브세트를 상기 스레드와 관련시키는 단계로서, 각 스레드를 실행시키기 위한 개별적인 우선적인 CPU를 지정하는 단계를 포함하고, 상기 복수의 이산적인 메모리의 서브세트들 중 상기 관련된 서브세트는 상기 우선적인 CPU와 관련된 메모리의 상기 서브세트인 것인, 상기 관련 단계와;
    (d) 상기 스레드를 실행시키기 위하여 상기 CPU들의 세트로부터 CPU를 선택하는 단계로서, 이 CPU 선택 단계는 메모리의 상기 우선적인 서브세트를 이외의 메모리의 서브세트와 관련된 CPU를 통하여 상기 우선적인 메모리의 서브세트와 관련된 CPU에 상대적인 우선순위를 할당하고, 상기 CPU 선택 단계는 상기 우선적인 CPU에 제1의 상대적인 우선순위를 할당하고는 단계와; 상기 우선적인 CPU와 동일한 메모리 서브세트와 관련된 CPU에 제2의 상대적인 우선순위를 할당하는 단계와; 상기 우선적인 CPU가 관련된 것과 상이한 메모리 서브세트와 관련된 CPU에 제3의 상대적인 우선순위를 할당하는 단계를 포함하고, 상기 제1 상대적인 우선순위는 상기 제2 상대적인 우선순위보다 큰 것이고, 상기 제2 상대적인 우선순위는 상기 제3 상대적인 우선순위보다 더 큰 것인, 상기 CPU 선택 단계
    를 포함하는 스레드 디스패치 방법.
  13. 제12항에 있어서, 복수의 CPU들은 상기 복수의 이산적인 메모리의 서브세트들 중 각각의 개별적인 서브세트와 관련된 것인, 스레드 디스패치 방법.
  14. 제12항에 있어서, 상기 컴퓨터 시스템은 복수의 이산적인 노드들을 포함하고, 각 노드는 적어도 하나의 CPU와 상기 복수의 이산적인 메모리의 서브세트들 중 개별적인 서브세트를 포함하고, 각 CPU는 동일한 노드 내의 상기 복수의 이산적인 메모리의 서브세트들의 서브세트와 관련된 것인, 스레드 디스패치 방법.
  15. 삭제
  16. 청구항 16은(는) 설정등록료 납부시 포기되었습니다.
    제12항에 있어서, 각 스레드를 실행하기 위하여 개별적인 우선적인 CPU를 지정하는 단계는, 상기 스레드가 생성되는 경우 실행되는 것인, 스레드 디스패치 방법.
  17. 삭제
KR1020047005100A 2001-11-07 2002-11-06 Numa 컴퓨터 시스템에서 작업을 디스패칭하기 위한방법 및 장치 KR100754300B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US10/013,732 US7159216B2 (en) 2001-11-07 2001-11-07 Method and apparatus for dispatching tasks in a non-uniform memory access (NUMA) computer system
US10/013,732 2001-11-07
PCT/US2002/035750 WO2003040912A1 (en) 2001-11-07 2002-11-06 Method and apparatus for dispatching tasks in a non-uniform memory access (numa) computer system

Publications (2)

Publication Number Publication Date
KR20040053153A KR20040053153A (ko) 2004-06-23
KR100754300B1 true KR100754300B1 (ko) 2007-09-03

Family

ID=21761455

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020047005100A KR100754300B1 (ko) 2001-11-07 2002-11-06 Numa 컴퓨터 시스템에서 작업을 디스패칭하기 위한방법 및 장치

Country Status (6)

Country Link
US (2) US7159216B2 (ko)
JP (1) JP3965157B2 (ko)
KR (1) KR100754300B1 (ko)
CN (1) CN100530079C (ko)
CA (1) CA2463748A1 (ko)
WO (1) WO2003040912A1 (ko)

Families Citing this family (82)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7159216B2 (en) * 2001-11-07 2007-01-02 International Business Machines Corporation Method and apparatus for dispatching tasks in a non-uniform memory access (NUMA) computer system
US7444636B2 (en) * 2002-07-15 2008-10-28 Hewlett-Packard Development Company, L.P. Method and system of determining attributes of a functional unit in a multiple processor computer system
US7275249B1 (en) * 2002-07-30 2007-09-25 Unisys Corporation Dynamically generating masks for thread scheduling in a multiprocessor system
US7287254B2 (en) * 2002-07-30 2007-10-23 Unisys Corporation Affinitizing threads in a multiprocessor system
US7616631B2 (en) * 2002-08-14 2009-11-10 Lsi Corporation Method and apparatus for debugging protocol traffic between devices in integrated subsystems
US7159221B1 (en) * 2002-08-30 2007-01-02 Unisys Corporation Computer OS dispatcher operation with user controllable dedication
US20060123421A1 (en) * 2002-12-27 2006-06-08 Loboz Charles Z Streamlining cpu utilization by delaying transactions
US20040128654A1 (en) * 2002-12-30 2004-07-01 Dichter Carl R. Method and apparatus for measuring variation in thread wait time
US20050022173A1 (en) * 2003-05-30 2005-01-27 Codito Technologies Private Limited Method and system for allocation of special purpose computing resources in a multiprocessor system
US7472390B2 (en) * 2003-10-01 2008-12-30 Intel Corporation Method and apparatus to enable execution of a thread in a multi-threaded computer system
US7380039B2 (en) * 2003-12-30 2008-05-27 3Tera, Inc. Apparatus, method and system for aggregrating computing resources
US9323571B2 (en) 2004-02-06 2016-04-26 Intel Corporation Methods for reducing energy consumption of buffered applications using simultaneous multi-threading processor
US7266540B2 (en) * 2004-03-04 2007-09-04 International Business Machines Corporation Mechanism for dynamic workload rebalancing in a multi-nodal computer system
US7584476B2 (en) * 2004-03-04 2009-09-01 International Business Machines Corporation Mechanism for reducing remote memory accesses to shared data in a multi-nodal computer system
US8533716B2 (en) 2004-03-31 2013-09-10 Synopsys, Inc. Resource management in a multicore architecture
US7366845B2 (en) * 2004-06-29 2008-04-29 Intel Corporation Pushing of clean data to one or more processors in a system having a coherency protocol
US8255591B2 (en) * 2004-09-23 2012-08-28 International Business Machines Corporation Method and system for managing cache injection in a multiprocessor system
US7937709B2 (en) * 2004-12-29 2011-05-03 Intel Corporation Synchronizing multiple threads efficiently
US8051418B1 (en) 2005-03-21 2011-11-01 Oracle America, Inc. Techniques for providing improved affinity scheduling in a multiprocessor computer system
JP4673408B2 (ja) * 2005-06-03 2011-04-20 エヌエックスピー ビー ヴィ データ処理システム及び少なくとも1つの排他的資源の利用をスケジューリングする方法
US8645558B2 (en) * 2005-06-15 2014-02-04 Solarflare Communications, Inc. Reception according to a data transfer protocol of data directed to any of a plurality of destination entities for data extraction
GB0519981D0 (en) * 2005-09-30 2005-11-09 Ignios Ltd Scheduling in a multicore architecture
JP2007188398A (ja) * 2006-01-16 2007-07-26 Seiko Epson Corp マルチプロセッサシステム、マルチプロセッサシステムの制御方法をコンピュータに実行させるためのプログラム。
US20070226696A1 (en) * 2006-02-03 2007-09-27 Dell Products L.P. System and method for the execution of multithreaded software applications
US8253749B1 (en) * 2006-03-08 2012-08-28 Nvidia Corporation Using affinity masks to control multi-GPU processing
CN101075199B (zh) * 2006-05-18 2010-11-24 迈普通信技术股份有限公司 一种多cpu调度的方法
US20070294693A1 (en) * 2006-06-16 2007-12-20 Microsoft Corporation Scheduling thread execution among a plurality of processors based on evaluation of memory access data
US8024738B2 (en) * 2006-08-25 2011-09-20 International Business Machines Corporation Method and system for distributing unused processor cycles within a dispatch window
US7774554B2 (en) * 2007-02-20 2010-08-10 International Business Machines Corporation System and method for intelligent software-controlled cache injection
US7596668B2 (en) * 2007-02-20 2009-09-29 International Business Machines Corporation Method, system and program product for associating threads within non-related processes based on memory paging behaviors
US7807914B2 (en) * 2007-03-22 2010-10-05 Qualcomm Incorporated Waveform fetch unit for processing audio files
US8799902B2 (en) * 2007-04-09 2014-08-05 Intel Corporation Priority based throttling for power/performance quality of service
US8024731B1 (en) * 2007-04-25 2011-09-20 Apple Inc. Assigning priorities to threads of execution
CN100578459C (zh) * 2007-06-12 2010-01-06 华为技术有限公司 线程调度方法及其装置
US8959516B2 (en) 2007-07-30 2015-02-17 International Business Machines Corporation Methods and systems for coordinated financial transactions in distributed and parallel environments
US8898669B2 (en) * 2007-07-30 2014-11-25 International Business Machines Corporation Methods and systems for coordinated transactions
US8881163B2 (en) * 2007-12-07 2014-11-04 Microsoft Corporation Kernel processor grouping
US8839225B2 (en) * 2008-01-23 2014-09-16 International Business Machines Corporation Generating and applying patches to a computer program code concurrently with its execution
US8621470B2 (en) * 2008-01-24 2013-12-31 Hewlett-Packard Development Company, L.P. Wakeup-attribute-based allocation of threads to processors
US8332595B2 (en) * 2008-02-19 2012-12-11 Microsoft Corporation Techniques for improving parallel scan operations
KR100959548B1 (ko) * 2008-05-21 2010-05-27 한국과학기술원 인터럽트 스케줄링 방법
US8332852B2 (en) * 2008-07-21 2012-12-11 International Business Machines Corporation Thread-to-processor assignment based on affinity identifiers
US9535767B2 (en) 2009-03-26 2017-01-03 Microsoft Technology Licensing, Llc Instantiating a virtual machine with a virtual non-uniform memory architecture
US9529636B2 (en) 2009-03-26 2016-12-27 Microsoft Technology Licensing, Llc System and method for adjusting guest memory allocation based on memory pressure in virtual NUMA nodes of a virtual machine
US8745622B2 (en) * 2009-04-22 2014-06-03 International Business Machines Corporation Standalone software performance optimizer system for hybrid systems
US8527988B1 (en) 2009-07-31 2013-09-03 Hewlett-Packard Development Company, L.P. Proximity mapping of virtual-machine threads to processors
US8245234B2 (en) * 2009-08-10 2012-08-14 Avaya Inc. Credit scheduler for ordering the execution of tasks
CN101673223B (zh) * 2009-10-22 2012-03-21 同济大学 基于片上多处理器的线程调度实现方法
US9086922B2 (en) 2009-10-26 2015-07-21 Microsoft Technology Licensing, Llc Opportunistically scheduling and adjusting time slices
FR2952731B1 (fr) * 2009-11-13 2011-11-04 Bull Sas Procede et dispositif d'optimisation d'execution d'applications logicielles dans une architecture multiprocesseur comprenant plusieurs controleurs d'entree/sortie et unites de calcul secondaires
US8443376B2 (en) * 2010-06-01 2013-05-14 Microsoft Corporation Hypervisor scheduler
US20120159124A1 (en) * 2010-12-15 2012-06-21 Chevron U.S.A. Inc. Method and system for computational acceleration of seismic data processing
CN102073547B (zh) * 2010-12-17 2013-08-28 国家计算机网络与信息安全管理中心 一种多路服务器多缓冲区并行收包的性能优化方法
US8612190B2 (en) 2010-12-28 2013-12-17 Sap Ag Derived simulations for planning systems
US8635626B2 (en) * 2010-12-29 2014-01-21 Sap Ag Memory-aware scheduling for NUMA architectures
WO2013001613A1 (ja) * 2011-06-28 2013-01-03 富士通株式会社 スケジューリング方法およびシステム
US20130007768A1 (en) * 2011-07-02 2013-01-03 Ramakrishna Saripalli Atomic operations on multi-socket platforms
KR101555266B1 (ko) * 2011-09-01 2015-09-23 후아웨이 테크놀러지 컴퍼니 리미티드 자원 이주를 위한 방법, 장치 및 시스템
US9996394B2 (en) * 2012-03-01 2018-06-12 Microsoft Technology Licensing, Llc Scheduling accelerator tasks on accelerators using graphs
US9213560B2 (en) 2012-10-19 2015-12-15 International Business Machines Corporation Affinity of virtual processor dispatching
US10037228B2 (en) 2012-10-25 2018-07-31 Nvidia Corporation Efficient memory virtualization in multi-threaded processing units
US10310973B2 (en) 2012-10-25 2019-06-04 Nvidia Corporation Efficient memory virtualization in multi-threaded processing units
US10169091B2 (en) * 2012-10-25 2019-01-01 Nvidia Corporation Efficient memory virtualization in multi-threaded processing units
US10019167B2 (en) * 2013-02-20 2018-07-10 Red Hat, Inc. Non-Uniform Memory Access (NUMA) resource assignment and re-evaluation
WO2014185906A1 (en) * 2013-05-15 2014-11-20 Empire Technology Development, Llc Core affinity bitmask translation
US9411642B2 (en) * 2014-01-17 2016-08-09 Nvidia Corporation Using high priority thread to boost CPU clock rate
CN103825842B (zh) * 2014-02-28 2017-06-23 新华三技术有限公司 一种多cpu系统的数据流处理方法和装置
US9626218B1 (en) * 2014-03-10 2017-04-18 Altera Corporation Repartitioning and reordering of multiple threads into subsets based on possible access conflict, for sequential access to groups of memory banks in a shared memory
KR102254099B1 (ko) * 2014-05-19 2021-05-20 삼성전자주식회사 메모리 스와핑 처리 방법과 이를 적용하는 호스트 장치, 스토리지 장치 및 데이터 처리 시스템
US9348644B2 (en) * 2014-10-08 2016-05-24 International Business Machines Corporation Application-level dispatcher control of application-level pseudo threads and operating system threads
US9582329B2 (en) * 2015-02-17 2017-02-28 Qualcomm Incorporated Process scheduling to improve victim cache mode
US9766982B2 (en) * 2015-05-20 2017-09-19 International Business Machines Corporation Preferential allocation of processors for statesave in a storage controller
US11334368B2 (en) 2015-09-24 2022-05-17 Hewlett Packard Enterprise Development Lp Process and thread launch features
US10146681B2 (en) 2015-12-24 2018-12-04 Intel Corporation Non-uniform memory access latency adaptations to achieve bandwidth quality of service
CN107423301B (zh) * 2016-05-24 2021-02-23 华为技术有限公司 一种数据处理的方法、相关设备及存储系统
CN106681832A (zh) * 2016-12-23 2017-05-17 昆明联诚科技股份有限公司 视频流分发方法
US10324855B2 (en) * 2017-06-23 2019-06-18 International Business Machines Corporation Associating a processing thread and memory section to a memory device
CN107479976A (zh) * 2017-08-14 2017-12-15 郑州云海信息技术有限公司 一种多程序实例同时运行下cpu资源分配方法及装置
KR20190037666A (ko) * 2017-09-29 2019-04-08 에스케이하이닉스 주식회사 데이터 저장 장치 및 그것의 동작 방법
US11281493B2 (en) * 2018-05-30 2022-03-22 Texas Instruments Incorporated Real-time context specific task manager for multi-core communication and control system
CN114090223A (zh) * 2020-08-24 2022-02-25 北京百度网讯科技有限公司 访存请求调度方法、装置、设备以及存储介质
CN117331655A (zh) * 2022-06-27 2024-01-02 深圳市中兴微电子技术有限公司 多线程调度方法及装置

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR19990077851A (ko) * 1998-03-23 1999-10-25 포만 제프리 엘 원격 자원 관리 시스템
KR20010024751A (ko) * 1997-12-16 2001-03-26 피터 엔. 데트킨 비순서적 멀티스레드 실행을 수행하는 적재 및 저장명령어를 배열하기 위한 시스템
KR20010031167A (ko) * 1997-10-23 2001-04-16 포만 제프리 엘 멀티스레디드 프로세서에서 스레드 스위칭 이벤트를선택하는 방법 및 장치
WO2002040912A2 (en) * 2000-11-17 2002-05-23 Playtex Products, Inc. Methods of lubricating a tampon and tampon lubricated thereby

Family Cites Families (23)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US78121A (en) * 1868-05-19 o beian
US16878A (en) * 1857-03-24 Improvement in machines for breaking slabs or blocks of stone into regular forms
US129115A (en) * 1872-07-16 Improvement in breech-loading fire-arms
JPH07302246A (ja) 1994-05-09 1995-11-14 Toshiba Corp スケジューリング方式
US5842226A (en) * 1994-09-09 1998-11-24 International Business Machines Corporation Virtual memory management for a microkernel system with multiple operating systems
US6105053A (en) * 1995-06-23 2000-08-15 Emc Corporation Operating system for a non-uniform memory access multiprocessor system
US5784697A (en) * 1996-03-27 1998-07-21 International Business Machines Corporation Process assignment by nodal affinity in a myultiprocessor system having non-uniform memory access storage architecture
US5928322A (en) * 1996-11-20 1999-07-27 Silicon Graphics, Inc. Low-latency real-time dispatching in general purpose multiprocessor systems
US6205528B1 (en) * 1997-08-29 2001-03-20 International Business Machines Corporation User specifiable allocation of memory for processes in a multiprocessor computer having a non-uniform memory architecture
US6289424B1 (en) * 1997-09-19 2001-09-11 Silicon Graphics, Inc. Method, system and computer program product for managing memory in a non-uniform memory access system
US6647508B2 (en) 1997-11-04 2003-11-11 Hewlett-Packard Development Company, L.P. Multiprocessor computer architecture with multiple operating system instances and software controlled resource allocation
US6381682B2 (en) * 1998-06-10 2002-04-30 Compaq Information Technologies Group, L.P. Method and apparatus for dynamically sharing memory in a multiprocessor system
US6374367B1 (en) * 1997-11-26 2002-04-16 Compaq Computer Corporation Apparatus and method for monitoring a computer system to guide optimization
JP2000010800A (ja) * 1998-06-19 2000-01-14 Toshiba Corp 計算機システムに於けるスレッド制御装置、及び同システムに於けるスレッド制御方法
US6266745B1 (en) * 1998-09-04 2001-07-24 International Business Machines Corporation Method and system in a distributed shared-memory data processing system for determining utilization of nodes by each executed thread
US6477562B2 (en) * 1998-12-16 2002-11-05 Clearwater Networks, Inc. Prioritized instruction scheduling for multi-streaming processors
JP2000215071A (ja) 1999-01-21 2000-08-04 Hitachi Ltd 仮想計算機システム
US6275536B1 (en) * 1999-06-23 2001-08-14 General Instrument Corporation Implementation architectures of a multi-channel MPEG video transcoder using multiple programmable processors
US6957432B2 (en) 2000-03-21 2005-10-18 Microsoft Corporation Real-time scheduler
US20020016878A1 (en) 2000-07-26 2002-02-07 Flores Jose L. Technique for guaranteeing the availability of per thread storage in a distributed computing environment
US7080375B2 (en) * 2000-12-30 2006-07-18 Emc Corporation/Data General Parallel dispatch wait signaling method, method for reducing contention of highly contended dispatcher lock, and related operating systems, multiprocessor computer systems and products
US6871219B2 (en) 2001-03-07 2005-03-22 Sun Microsystems, Inc. Dynamic memory placement policies for NUMA architecture
US7159216B2 (en) * 2001-11-07 2007-01-02 International Business Machines Corporation Method and apparatus for dispatching tasks in a non-uniform memory access (NUMA) computer system

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20010031167A (ko) * 1997-10-23 2001-04-16 포만 제프리 엘 멀티스레디드 프로세서에서 스레드 스위칭 이벤트를선택하는 방법 및 장치
KR20010024751A (ko) * 1997-12-16 2001-03-26 피터 엔. 데트킨 비순서적 멀티스레드 실행을 수행하는 적재 및 저장명령어를 배열하기 위한 시스템
KR19990077851A (ko) * 1998-03-23 1999-10-25 포만 제프리 엘 원격 자원 관리 시스템
WO2002040912A2 (en) * 2000-11-17 2002-05-23 Playtex Products, Inc. Methods of lubricating a tampon and tampon lubricated thereby

Also Published As

Publication number Publication date
US20030088608A1 (en) 2003-05-08
WO2003040912A1 (en) 2003-05-15
US8122451B2 (en) 2012-02-21
US7159216B2 (en) 2007-01-02
CN100530079C (zh) 2009-08-19
US20070039002A1 (en) 2007-02-15
CA2463748A1 (en) 2003-05-15
JP3965157B2 (ja) 2007-08-29
CN1582428A (zh) 2005-02-16
KR20040053153A (ko) 2004-06-23
JP2005508545A (ja) 2005-03-31

Similar Documents

Publication Publication Date Title
KR100754300B1 (ko) Numa 컴퓨터 시스템에서 작업을 디스패칭하기 위한방법 및 장치
JP6646114B2 (ja) 動的仮想マシンサイジング
US8291430B2 (en) Optimizing system performance using spare cores in a virtualized environment
US5745778A (en) Apparatus and method for improved CPU affinity in a multiprocessor system
JP3807916B2 (ja) コンピュータ環境の区画のグループを管理する方法およびシステム
US10452572B2 (en) Automatic system service resource management for virtualizing low-latency workloads that are input/output intensive
US7383396B2 (en) Method and apparatus for monitoring processes in a non-uniform memory access (NUMA) computer system
US8032899B2 (en) Providing policy-based operating system services in a hypervisor on a computing system
JP3659324B2 (ja) コンピュータ環境の論理プロセッサを管理する方法、システム、およびプログラム製品
US6633897B1 (en) Method and system for scheduling threads within a multiprocessor data processing system using an affinity scheduler
JP3872343B2 (ja) コンピュータ環境におけるワークロード管理
US5884077A (en) Information processing system and method in which computer with high load borrows processor of computer with low load to execute process
US6105053A (en) Operating system for a non-uniform memory access multiprocessor system
US11194620B2 (en) Virtual machine migration task management
US8793482B2 (en) Automatic configuration sampling for managing configuration parameters of a computer system
US20030172234A1 (en) System and method for dynamic processor core and cache partitioning on large-scale multithreaded, multiprocessor integrated circuits
JPH0458050B2 (ko)
US20130254776A1 (en) Method to reduce queue synchronization of multiple work items in a system with high memory latency between processing nodes
US20050071843A1 (en) Topology aware scheduling for a multiprocessor system
CN108885559B (zh) 在多个处理器之间快速转移工作负载
JP2007512632A (ja) アクティビティ情報を用いての仮想マシンの管理
JPH03147047A (ja) 入出力チャネル経路上の負荷を均衡させる方法及びコンピュータ・システム
JP2007193776A (ja) ロジカル・パーティションのメモリ・アフィニティを動的に改善するための装置および方法
US20110061053A1 (en) Managing preemption in a parallel computing system
US4855899A (en) Multiple I/O bus virtual broadcast of programmed I/O instructions

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
LAPS Lapse due to unpaid annual fee