KR20100106462A - 컴퓨터 구성 가상 토폴로지 탐색 - Google Patents
컴퓨터 구성 가상 토폴로지 탐색 Download PDFInfo
- Publication number
- KR20100106462A KR20100106462A KR20107015025A KR20107015025A KR20100106462A KR 20100106462 A KR20100106462 A KR 20100106462A KR 20107015025 A KR20107015025 A KR 20107015025A KR 20107015025 A KR20107015025 A KR 20107015025A KR 20100106462 A KR20100106462 A KR 20100106462A
- Authority
- KR
- South Korea
- Prior art keywords
- topology
- cpu
- configuration
- guest
- cpus
- Prior art date
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L41/00—Arrangements for maintenance, administration or management of data switching networks, e.g. of packet switching networks
- H04L41/12—Discovery or management of network topologies
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45545—Guest-host, i.e. hypervisor is an application program itself, e.g. VirtualBox
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5061—Partitioning or combining of resources
- G06F9/5077—Logical partitioning of resources; Management or configuration of virtualized resources
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/45566—Nested virtual machines
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Mobile Radio Communication Systems (AREA)
- Hardware Redundancy (AREA)
- Multi Processors (AREA)
- Two-Way Televisions, Distribution Of Moving Picture Or The Like (AREA)
- Stored Programmes (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
- Devices For Executing Special Programs (AREA)
- Executing Machine-Instructions (AREA)
Abstract
호스트 프로세서들(호스트 CPU들)을 포함하는 논리적으로 파티셔닝된 호스트 컴퓨터 시스템(logically partitioned host computer system)에서, 게스트 구성의 하나 이상의 게스트 프로세서들(게스트 CPU들)의 토폴로지를 발견하는 설비 및 명령어로서, 여기에는 상기 컴퓨터 구성의 토폴로지 정보를 획득하는 STORE SYSTEM INFORMATION 명령어를 페치하고 실행하는 게스트 구성의 게스트 프로세서가 포함된다. 상기 토폴로지 정보는 상기 구성의 프로세서들의 네스팅 정보(nesting information)와 호스트 프로세서가 대응되는 게스트 프로세서에 제공하는 헌신의 정도(degree of dedication)를 포함한다. 상기 정보는 바람직하게는 메모리 내의 단일한 테이블(single table)에 저장된다.
Description
본 발명은 일반적으로 멀티-프로세서 시스템의 가상화에 관한 것이다. 상세하게는, 본 발명은 프로그램이 그의 가상 환경의 토폴로지를 탐색할 수 있게 하는 것에 관한 것이다.
시스템 제어 함수들 중에 시스템을 몇개의 논리적 파티션들(LPARs)로 파티셔닝할 수 있는 기능이 있다. LPAR은 운영 체제를 지원하도록 정의되어 있는 프로세서 하드웨어의 서브셋이다. LPAR은 자원(프로세서, 메모리, 및 입/출력 장치)을 포함하고, 독립적인 시스템으로서 동작한다. 메인프레임 하드웨어 시스템 내에 다수의 논리적 파티션이 존재할 수 있다.
S/390®을 비롯한 IBM의 메인프레임 컴퓨터 시스템들에서는, 수년 동안 LPAR이 15개라는 제한이 있었다. 보다 최근의 기계들은 30개(어쩌면 그 이상)를 갖는다. 이러한 기계들의 예로는 z/Architecture®의 기계들이 있다. IBM® z/Architecture®에 대해서는 IBM에 의해 2007년 4월 간행된 z/ Architecture Principles of Operation(z/Architecture 동작 원리) SA22-7832-05에 기술되어 있다.
메모리 크기, I/O 이용가능성, 및 이용가능한 처리 능력의 실제적인 한계가 보통 LPAR의 수를 이 최대값보다 적은 값으로 제한한다.
파티셔닝(partitioning)을 제공하는 하드웨어 및 펌웨어는 PR/SM™ (Processor Resource/System Manager)이라고 한다. 이는 LPAR을 생성하고 실행하는 데 사용되는 PR/SM 기능들이다. PR/SM(내장된 기능)과 LPAR(PR/SM의 사용의 결과) 간의 이러한 차이는 종종 무시되고, LPAR이라는 용어가 기능 및 그의 결과에 대해 공동으로 사용된다.
시스템 관리자는 각각의 LPAR에 메모리의 일부를 할당하고, 메모리는 LPAR들 간에 공유될 수 없다. 시스템 관리자는 특정의 LPAR에 프로세서들[CP들 또는 CPU들로 알려짐]을 할당할 수 있거나, 시스템 제어기로 하여금 내부 부하 분산 알고리즘(internal load-balancing algorithm)을 사용하여 프로세서들 중 일부 또는 그 전부를 모든 LPAR에 디스패치(dispatch)할 수 있게 할 수 있다. 각각의 채널 상의 장치들의 성질에 따라, 채널(CHPID)이 특정의 LPAR들에 할당될 수 있거나, 다수의 LPAR들에 의해 공유될 수 있다.
단일 프로세서(CP 프로세서)를 갖는 시스템이 다수의 LPAR을 가질 수 있다. 운영 체제 디스패처(operating system dispatcher)가 그의 프로세서 시간의 일부분을 각각의 프로세스, 쓰레드 또는 태스크에 할당하는 것처럼, PR/SM은 프로세서의 일부분을 각각의 LPAR에 할당할 수 있는 내부 디스패처(internal dispatcher)를 갖는다.
파티셔닝 제어 지정이 일부는 IOCDS에 포함되어 있고 일부는 시스템 프로파일에 포함되어 있다. IOCDS 및 프로파일 둘다 SE(Support Element)에 존재하며, 이 SE는 간단히 말해 시스템 내의 노트북 컴퓨터이다. SE는 하나 이상의 HMC들(Hardware Management Consoles)에 연결될 수 있으며, 이 HMC는 메인프레임 마이크로프로세서 등의 하드웨어를 모니터링 및 제어하는 데 사용되는 데스크톱 퍼스널 컴퓨터이다. HMC는 SE보다 사용하기가 더 편리하며 여러 서로 다른 메인프레임을 제어할 수 있다.
HMC로부터(또는 흔하지 않은 상황에서 SE로부터) 작업할 때, 오퍼레이터는 프로파일 및 IOCDS를 선택하고 로드함으로써 메인프레임을 사용할 준비를 한다. 이것들이 LPAR을 생성하고 장치 번호, LPAR 할당, 다중 경로 정보 등을 사용하여 채널들을 구성한다. 이것을 POR(Power-on Reset)이라고 한다. 다른 프로파일 및 IOCDS를 로드함으로써, 오퍼레이터는 LPAR의 수 및 성질과 I/O 구성의 모습을 완전히 변경할 수 있다. 그러나, 이렇게 하는 것은 보통 임의의 실행 중인 운영 체제 및 애플리케이션에 방해가 되며, 따라서 사전 계획 없이는 좀처럼 행해지지 않는다.
논리적 파티션(LPAR)은, 실제로는, 개별적인 메인프레임과 동등하다.
각각의 LPAR은 그 자신의 운영 체제를 실행한다. 이것은 임의의 메인프레임 운영 체제일 수 있으며, 예를 들어, 각각의 LPAR에서 z/OS®을 실행할 필요는 없다. 설치 계획자(installation planners)는 여러 개의 LPAR에 걸쳐 I/O 장치들을 공유하도록 선택할 수 있지만, 이것은 로컬 결정(local decision)이다.
시스템 관리자는 LPAR의 배타적 사용을 위해 하나 이상의 시스템 프로세서를 할당할 수 있다. 이와 달리, 시스템 관리자는 모든 프로세서들이 LPAR들 중 일부 또는 그 전부에서 사용될 수 있게 할 수 있다. 여기서, 시스템 제어 함수들(종종 마이크로코드 또는 펌웨어라고 함)은 선택된 LPAR들 간에 프로세서들을 공유하기 위해 디스패처(dispatcher)를 제공한다. 시스템 관리자는 각각의 LPAR에서 실행되는 병행 프로세서(concurrent processor)의 최대 수를 지정할 수 있다. 시스템 관리자는 또한 서로 다른 LPAR들에 대한 가중(weighting)을 제공할 수 있는데, 예를 들어, LPAR1이 LPAR2보다 2배의 프로세서 시간을 받도록 지정할 수 있다.
각각의 LPAR 내의 운영 체제는 개별적으로 IPL되며(IPLed), 그의 운영 체제의 그 자신의 사본을 갖고, (필요한 경우)그 자신의 오퍼레이터 콘솔을 가지며, 기타 등등이다. 하나의 LPAR 내의 시스템이 고장나는 경우, 나머지 LPAR들에 아무런 영향이 없다.
3개의 LPAR을 갖는 메인프레임 시스템에서, 예를 들어, LPAR1에 프러덕션 z/OS(production z/OS)를, LPAR2에 z/OS의 테스트 버전을, LPAR3에 S/390®용의 Linux®를 가질 수 있다. 이 전체적인 시스템이 8 GB의 메모리를 갖는 경우, 4 GB는 LPAR1에, 1 GB는 LPAR2에, 1 GB는 LPAR3에 할당할 수 있고, 2 GB는 예비로 둘 수 있다. 2개의 z/OS LPAR에 대한 운영 체제 콘솔이 완전히 다른 위치에 있을 수 있다.
대부분 실제로는, 예를 들어, (해당 I/O 구성의 대부분을 공유하고) z/OS를 실행시키는 3개의 개별적인 메인프레임과 동일한 일을 하는 동일한 메인프레임 상의 3개의 LPAR 간에 아무런 차이가 없다. 사소한 예외 외에는, z/OS, 오퍼레이터, 및 애플리케이션은 그 차이를 탐지하지 못한다.
사소한 차이점으로는 z/OS가 (LPAR이 정의될 때 허용되는 경우) 전체적인 메인프레임 시스템에 걸쳐 성능 및 이용률 정보를 획득하고 성능을 향상시키기 위해 LPAR들 간에 자원(프로세서 및 채널)을 동적으로 이동시키는 능력을 포함한다.
현재의 IBM® 메인프레임은 CPC(central processor complex)를 포함하며 이는 약간 다른 목적을 위해 사용될 수 있는 몇가지 서로 다른 유형의 z/Architecture® 프로세서를 포함할 수 있다.
이 목적들 중 몇개는 소프트웨어 원가 관리(software cost control)와 관련되어 있지만, 다른 목적들이 더 근본적인 것이다. CPC 내의 프로세서들 모두가 사용을 위해 특성 설정되지 않은 동등한 PU들(processor units) 또는 엔진으로서 시작한다. 각각의 프로세서는 설치 동안에 또는 나중에 IBM에 의해 특성 설정된다. 잠재적인 특성 설정으로는 다음과 같은 것들이 있다:
- 프로세서(CP)
이 프로세서 유형은 보통의 운영 체제 및 애플리케이션 소프트웨어용으로 이용가능하다.
- SAP(System Assistance Processor)
모든 최신의 메인프레임은 적어도 하나의 SAP를 가지며, 대규모 시스템은 여러 개를 가질 수 있다. SAP는 I/O 서브시스템을 제공하기 위해 내부 코드(internal code)를 실행한다. SAP는, 예를 들어, 채널 경로 식별자(channel path identifier, CHPID)의 실제 주소 및 장치 번호, 제어 유닛 주소(control unit address), 및 장치 번호를 변환한다. SAP는 제어 유닛들로의 다수의 경로들을 관리하고, 일시적인 오류에 대한 오류 복구를 수행한다. 운영 체제 및 애플리케이션은 SAP를 탐지하지 못하며, SAP는 "보통의" 메모리를 사용하지 않는다.
- IFL(Integrated Facility for Linux®)
이것은 z/OS®에 의해서만 사용되는 하나 또는 2개의 명령어가 디스에이블되어 있는 보통의 프로세서이다. Linux는 이 명령어들을 사용하지 않으며, IFL에 의해서 실행될 수 있다. Linux는 CP에 의해서도 실행될 수 있다. 차이점은 시스템의 모델 번호를 지정할 때 IFL이 고려되지 않는다는 것이다. 이것에 의해 소프트웨어 원가에 상당한 차이가 있을 수 있다.
- zAAP
이것은 다수의 함수들(인터럽트 핸들링, 일부 명령어들)이 디스에이블되어 있는 프로세서이며, 따라서 완전한 운영 체제가 이 프로세서 상에서 실행될 수 없다. 그러나, z/OS는 zAAP 프로세서의 존재를 탐지할 수 있고, Java™ 코드를 실행하는 데 이들을 사용할 것이다. 동일한 Java 코드가 표준의 CP 상에서 실행될 수 있다. 다시 말하지만, 시스템의 모델 번호를 지정할 때 zAAP 엔진이 고려되지 않는다. IFL과 같이, zAAP는 소프트웨어 원가를 제어하기 위해서만 존재한다.
- zIIP
System z9™ Integrated Information Processor (zIIP)는 적격의 데이터베이스 작업 부하를 처리하는 특수 엔진이다. zIIP는 BI(business intelligence), ERP(enterprise resource planning) 및 CRM(customer relationship management) 등의 메인프레임 상에서의 선택된 작업 부하에 대해 소프트웨어 원가를 낮추는 데 도움을 주도록 설계되어 있다. zIIP는 DB2®에의 직접적인 액세스를 더 비용 효과적이도록 만드는 데 도움을 주고 데이터의 다수의 사본의 필요성을 감소시켜 줌으로써 기업의 데이터 허브로서의 메인프레임의 역할을 강화시킨다.
ICF(집적 결합 장치; Integrated Coupling Facility)
이 프로세서들은 LIC(Licensed Internal Code)만을 실행시킨다. 이들은 보통의 운영 체제 또는 애플리케이션에는 보이지 않는다. CF(결합 장치; coupling facility)는, 사실상, 작업을 조정하기 위해 다수의 시스템들에 의해 사용되는 대용량 메모리 스크래치 패드(large memory scratch pad)이다. ICF는 나중에 결합 장치가 되는 LPAR에 할당되어야만 한다.
예비장치(spare)
특성 설정되지 않은 PU는 "예비장치"로서 기능한다. 시스템 제어기가 고장난 CP 또는 SAP를 탐지하는 경우, 그것은 예비 PU로 대체될 수 있다. 대부분의 경우들에, 이것은, 심지어 고장난 프로세서 상에서 실행되는 애플리케이션에 대해서도, 어떤 시스템 간섭(system interruption)도 없이 행해질 수 있다.
이러한 프로세서의 특성 설정에 부가하여, 일부 메인프레임은 자신의 CP의 가능한 속도보다 더 느리게 동작하도록 구성되어 있는 모델 또는 버전을 갖는다. IBM은 용량 설정(capacity setting)이라는 용어 또는 유사한 어떤 것을 선호하지만, 이것은 니-캐핑(knee-capping)이라고 널리 알려져 있다. 니-캐핑은 마이크로코드를 사용하여 널 사이클(null cycle)을 프로세서 명령어 스트림에 삽입함으로써 행해진다. 다시 말하지만, 그 목적은 애플리케이션 요구사항을 만족시키는 최소 메인프레임 모델 또는 버전을 가짐으로써 소프트웨어 원가를 제어하는 것이다. IFL, SAP, zAAP, zIIP, 및 ICF는 항상 프로세서의 최고 속도(full speed)에서 기능하는데, 그 이유는 이 프로세서들이 소프트웨어 가격 계산에 "고려되지 않기" 때문이다.
프로세서 및 CPU는 전체 시스템 박스(system box) 또는 시스템 박스 내의 프로세서들(CPU들) 중 하나를 말하는 것일 수 있다. 의미가 설명의 문맥으로부터 명확할 수 있지만, 메인프레임 전문가조차도 설명에서 어느 프로세서 또는 CPU 의미를 사용하고 있는지를 명확히 해야만 한다. IBM은 메인 저장 장치, 하나 이상의 중앙 프로세서, 타이머 및 채널을 포함하는 하드웨어의 물리적 집단을 말하는 데 CPC(central processor complex)라는 용어를 사용한다. (일부 시스템 프로그래머들은 메인프레임 "박스"를 말하는 데 CEC(central electronic complex)라는 용어를 사용하지만, 선호되는 용어는 CPC이다.)
간략히 말하면, CPC 내의 모든 S/390 또는 z/Architecture 프로세서는 PU(processing unit)이다. IBM이 CPC를 배달할 때, PU는 CP(보통의 작업용), IFL(Integrated Facility for Linux), 병렬 시스플렉스 구성(Parallel Sysplex configurations)을 위한 집적 결합 장치(ICF) 등으로서 특성 설정된다.
메인프레임 전문가들은 통상적으로 문맥에 따라 하드웨어 박스, 전체 하드웨어 환경(I/O 장치를 가짐), 또는 운영 환경(소프트웨어를 가짐)을 나타내는 데 시스템을 사용한다. 이들은 통상적으로 CPC 내의 단일 프로세서(CP)를 의미하는 데 프로세서를 사용한다.
z/VM® HYPERVISOR™는, 보기 드문 수준의 가용성, 보안 및 동작 편의성을 제공하면서 애플리케이션 및 데이터를 통합시킴으로써, 고객들이 기업에 걸쳐 메인프레임 기술의 사업 가치를 확장시키는 데 도움을 주도록 설계되어 있다. z/VM 가상화 기술은 고객들이 수백 내지 수천개의 Linux 서버를 z/OS® 등의 다른 System z 운영 체제들과 함께 하나의 메인프레임 상에서 실행시킬 수 있게 하거나 또는 대규모 Linux-전용 엔터프라이즈 서버 솔루션으로서 실행시킬 수 있게 하도록 설계되어 있다. z/VM V5.3은 또한 z/OS, z/VSE, 및 z/TPF 등의 비Linux 작업 부하(non-Linux workloads)를 호스팅함으로써 생산성을 향상시키는 데 도움을 줄 수 있다.
z/VM은 각각의 사용자에게 가상 기계(virtual machine)라고 하는 개별적인 작업 환경을 제공한다. 가상 기계는 프로세서 함수들, 메모리, 네트워킹 및 입력/출력(I/O) 자원을 비롯한 전용된 실제 기계의 존재를 시뮬레이트한다. 운영 체제 및 애플리케이션 프로그램이 가상 기계에서 게스트(guests)로서 실행될 수 있다. 예를 들어, 다수의 Linux 및 z/OS 이미지들을 역시 다양한 애플리케이션 및 최종 사용자를 지원하는 동일한 z/VM 시스템 상에서 실행시킬 수 있다. 그 결과, 개발, 테스트 및 생산 환경이 하나의 물리적 컴퓨터를 공유할 수 있다.
도 15a 내지 도 15d를 참조하면, 파티셔닝(partitioning) 및 가상화(virtualization)는 IT 자원을 개별적인 물리적 엔티티보다는 논리적 풀(logical pools)로서 취급함으로써 물리적으로부터 논리적으로의 사고의 전환을 수반한다. 이것은 IT 자원을 통합 및 풀링하는 것과 동일 기종(homogeneous) 및 이기종(heterogeneous)의 서버, 저장 장치, 분산 시스템 및 네트워크 둘다에 대한 "하나의 시스템 환영(single system illusion)"을 제공하는 것을 수반한다.
하드웨어의 파티셔닝은 각각이 그의 특정 애플리케이션을 실행하는 개별적인 운영 체제들에 대한 개별적인 CPU들을 필요로 한다. 소프트웨어 파티셔닝은 개개의 운영 체제들이 CPU들 중 일부 또는 그 전부 상에서 실행될 수 있게 하기 위해 소프트웨어-기반 "하이퍼바이저"(software-based "hypervisor")를 이용한다.
하이퍼바이저는 다수의 운영 체제들이 호스트 컴퓨터 상에서 동시에 실행될 수 있게 한다. 하이퍼바이저 기술은 현재 가지고 있는 z/VM의 전신인 IBM VM/370에서 시작되었다. 논리적 파티셔닝(LPAR)은 운영 체제를 CPU로부터 격리시키기 위해 파티셔닝 펌웨어(하드웨어-기반 하이퍼바이저)를 필요로 한다.
가상화는 4가지 기본적인 기능들, 즉 자원 공유(resource sharing), 자원 집계(resource aggregation), 함수의 에뮬레이션(emulation), 및 고립(insulation)을 가능하게 하거나 이용한다. 이하의 섹션들에서 이 주제들에 대해 더 상세히 살펴본다.
z/VM은 유연성이 높은 테스트 및 생산 환경을 제공하는 IBM System z 플랫폼에 대한 운영 체제이다. IBM 가상화 기술의 z/VM 구현은 System z, z/OS 및 기타 상의 Linux와 같은 전기능 운영 체제(full-function operating system)를 z/VM의 "게스트"로서 실행시킬 수 있는 능력을 제공한다. z/VM은 64-비트 IBM z/Architecture 게스트 및 31-비트 IBM Enterprise Systems Architecture/390 게스트를 지원한다.
z/VM은 각각의 사용자에게 가상 기계(virtual machine)라고 하는 개별적인 작업 환경을 제공한다. 가상 기계는 프로세서 함수들, 메모리, 네트워킹 및 입력/출력(I/O) 자원을 비롯한 전용된 실제 기계의 존재를 시뮬레이트한다. 운영 체제 및 애플리케이션 프로그램이 가상 기계에서 게스트로서 실행될 수 있다. 예를 들어, 다수의 Linux 및 z/OS® 이미지들을 역시 다양한 애플리케이션 및 최종 사용자를 지원하는 동일한 z/VM 시스템 상에서 실행시킬 수 있다. 그 결과, 개발, 테스트 및 생산 환경이 하나의 물리적 컴퓨터를 공유할 수 있다.
가상 기계는 실제 하드웨어 자원을 사용하지만, 전용된 장치(테이프 드라이브 등)를 갖는 경우에도, 테이프 드라이브의 가상 주소는 테이프 드라이브의 실제 주소와 동일하거나 그렇지 않을 수 있다. 따라서, 가상 기계는 실제 세계에 존재하거나 그렇지 않을 수 있는 "가상 하드웨어"만을 알 뿐이다.
제1-레벨 z/VM은 도 16의 실제 하드웨어의 상부에 설치되는 베이스 운영 체제(base operating system)이다. 제2-레벨 운영 체제는 베이스 z/VM 운영 체제 상에 생성되는 시스템이다. 따라서, 베이스 운영 체제인 z/VM은 하드웨어 상에서 실행되는 반면, 게스트 운영 체제(guest operating system)는 가상화 기술 상에서 실행된다. 도 14는 제1 레벨 게스트(게스트-1) 파티션에 로드되어 있는 제2 레벨 게스트 z/VM OS를 나타내고 있다.
환언하면, 제1-레벨 z/VM 운영 체제가 하드웨어 바로 위에 있지만, 이 제1-레벨 z/VM 시스템의 게스트는 가상화되어 있다. 하드웨어를 게스트로부터 가상화함으로써, 소량의 하드웨어로 필요한 수만큼의 많은 게스트를 생성하여 사용할 수 있다.
앞서 언급한 바와 같이, 가상 기계에서 실행되는 운영 체제는 종종 "게스트"라고 불리운다. 만나게 될 수 있는 다른 용어들 및 구문들로는 다음과 같은 것들이 있다:
- "제1 레벨에서 실행"은 하드웨어 상에서 바로 실행되는 것을 의미한다(z/VM이 그러함).
- "제2 레벨에서 실행", "VM 하에서 실행", 또는 "VM (상부) 상에서 실행"은 게스트로서 실행되는 것을 의미한다.
z/VM의 기능의 예로서, 제1-레벨 z/VM 시스템 및 제2-레벨 z/VM 시스템을 갖는 경우, 제2-레벨 시스템 상에 더 많은 운영 체제를 계속 생성할 수 있다. 이러한 유형의 환경은 배포(deployment) 이전에 운영 체제 설치를 테스트하는 데 또는 운영 체제를 테스트하거나 디버깅하는 데 특히 유용하다.
가상 자원은 그의 기반을 이루는 물리적 자원에서 이용가능하지 않은 기능 또는 특징을 가질 수 있다. 도 14는 자원 에뮬레이션(resource emulation)에 의한 가상화를 나타내고 있다.
예로는 다른 프로세서를 사용하여 하나의 프로세서의 아키텍처를 구현하는 아키텍처 에뮬레이션 소프트웨어, IP 네트워크 상에 가상 SCSI 버스를 구현하는 iSCSI, 및 물리적 디스크 저장 장치에 구현된 가상-테이프 저장 장치가 있다.
게다가, 최신 기술에서의 CPU(central-processing unit)의 패킹은 종종 계층적이다. 다수의 코어가 하나의 칩 상에 배치될 수 있다. 다수의 칩이 하나의 모듈 상에 배치될 수 있다. 다수의 모듈이 종종 북(book)이라고 하는 보드 상에 패키징될 수 있고, 다수의 북이 다수의 프레임에 걸쳐 분산될 수 있다.
CPU는 종종 여러 개의 레벨의 캐쉬를 갖는데, 예를 들어, 각각의 프로세서가 캐쉬(또는 어쩌면 분리된 명령어 캐쉬 및 데이터 캐쉬)를 가질 수 있고, 각각의 프로세서와 메인 메모리 인터페이스 사이에 부가의 대용량 캐쉬가 있을 수 있다. 계층구조의 레벨에 따라, 캐쉬가 또한 전체적인 성능을 향상시키기 위해서 배치되고, 소정 레벨들에서, 캐쉬가 2개 이상의 CPU 간에 공유될 수 있다. 이러한 배치에 관한 엔지니어링 결정은 공간, 전력/열, 케이블링 거리, CPU 주파수, 시스템 성능, 및 기타 측면들을 다룬다. CPU의 구성요소들의 이러한 배치는, 파티션의 각각의 CPU의 배치가 어디에 존재하는지에 따라, 특정의 논리적 파티션에 다소 유리할 수 있는 내부 구조를 생성한다. 논리적 파티션은 운영 체제가 프로세서 이용률을 비롯한 특정 자원을 소유하는 것으로 보이게 하지만, 이 경우 실제로는 운영 체제는 다른 파티션들에 있는 다른 운영 체제들과 자원을 공유하고 있다. 보통, 소프트웨어는 그 배치를 알지 못하며, SMP(symmetric-multiprocessing) 구성에서, 일련의 CPU를 관찰하고, 이 경우 각각의 CPU는 동일한 수준의 성능을 제공한다. 문제는 내부 패키징 및 임의의 2개의 CPU 간의 "거리"를 모름으로써 소프트웨어가 CPU가 작업을 할당받을 수 있는 방법에 관한 최적이 아닌 선택을 할 수 있다는 것이다. 따라서, SMP 구성의 잠재능력 전부가 달성되지 않는다.
제시된 가상화의 메인프레임 예는 기계를 가상화할 때 가능한 다양한 토폴로지를 알려주기 위한 것이다. 전술한 바와 같이, 파티션에서 실행되는 프로그램들(운영 체제를 포함함)은 프로세서, 메모리 및 I/O를 비롯한 자신이 이용할 수 있는 자원이 그 파티션에 전용되어 있는 것으로 볼 수 있다. 사실, 프로그램들은 자신들이 파티션에서 실행되고 있는 것을 모르고 있다. 이러한 프로그램들은 또한 그의 파티션의 토폴로지도 알지 못하며, 따라서 이러한 토폴로지에 기초하여 선택을 할 수 없다. 프로그램들이 자신이 실행되고 있는 구성 토폴로지를 최적화할 방법이 필요하다.
유휴 상태의 컴퓨터 하드웨어 자원들의 세트를 갖는 업그레이드가능한 컴퓨터 시스템에서 유휴 상태의 컴퓨터 하드웨어 자원들의 서브셋을 가능하게 하는 방법, 시스템 및 컴퓨터 프로그램 제품을 제공함으로써 종래 기술의 단점들이 극복되고 부가의 이점들이 제공된다.
호스트 CPU들을 포함하는 호스트 컴퓨터는 게스트 CPU들을 갖는 논리적/가상 파티션들로 파티셔닝될 수 있다. 파티셔닝은 바람직하게는 IBM의 z/VM 등의 운영 체제에 의해 제공될 수 있는 바와 같이 펌웨어에 의해 또는 소프트웨어에 의해 달성된다. 각각의 게스트 CPU는 게스트 프로그램들이 게스트 CPU들을 실제 CPU 프로세서들로서 본다는 점에서 가상 CPU이지만, 사실, 기반을 이루는 호스트가 각각의 게스트 CPU를 호스트 CPU 자원들에 매핑한다. 일 실시예에서, 게스트 CPU는, 게스트 CPU가 호스트 CPU를 이용할 CPU 시간의 일부분을 호스트가 지정함으로써, 호스트 CPU의 일부분을 사용하여 구현된다. 복수의 게스트 CPU들이 하나의 호스트 CPU에 의해 지원될 수 있다고 생각되지만, 그 반대도 역시 적용될 수 있다.
또 다른 실시예에서, 게스트 CPU들은 소프트웨어에 의해 에뮬레이트되고, 그에 의해 에뮬레이션 루틴들이 게스트 CPU의 함수들(명령어 디코드 및 실행을 포함함)을 호스트 CPU들 상에서 실행되는 루틴들로 변환한다. 호스트 CPU들은 게스트 CPU들을 지원하도록 프로비저닝된다.
또 다른 실시예에서, 제1 게스트 이미지가 제2 게스트 이미지의 호스트일 수 있다. 이 경우에, 제2 게스트 CPU들은 호스트 CPU들에 의해 프로비저닝된 제1 게스트 CPU들에 의해 프로비저닝 된다. 구성들의 토폴로지는 게스트 CPU들 및 하나 이상의 호스트 CPU들의 레벨들의 네스팅(nesting) 이다.
새로운 토폴로지 기능 수행(PERFORM TOPOLOGY FACILITY; PTF) 명령어가 제공되고, 종래 기술의 시스템 정보 저장(STORE SYSTEM INFORMATION; STSI) 명령어는 컴포넌트 유사성(component affinity) 및 논리적 패키징 정보를 소프트웨어에 제공하는 새로운 SYSIB (SYSIB 식별자 15.1.2)를 제공하도록 개선된다. 이것은 소프트웨어가 멀티-프로세서의 처리 유닛들과 같은 개개의 구성요소들이 다양한 애플리케이션들 및 작업 부하들에 할당되는 방법에 대해 정보에 입각한 지능적인 선택을 적용할 수 있게 한다. 따라서, 예를 들어, 공유-캐쉬 히트율(shared-cache hit ratios)을 증대시킴으로써 성능을 향상시키기 위해 프로그램(OS)에 정보를 제공한다.
새로운 토폴로지 함수 수행(PERFORM TOPOLOGY FUNCTION; PTF) 명령어는, 프로그램이 실행되고 있는 CPU 구성 토폴로지가 변경되도록 요청하기 위해, 수퍼바이저(supervisor), OS, 커널, 기타와 같은 특권 프로그램(privileged program)에 의해 사용된다. 일 실시예에서, 게스트 CPU 토폴로지가 수평 극성화(horizontal polarization)와 수직 극성화(vertical polarization) 사이에서 스위칭된다.
CPU 토폴로지 정보를 얻을 수 있는 능력을 가짐으로써, 프로그램은 대칭형-멀티프로세싱(symmetric-multiprocessing) 구성의 임의적인 2개 이상의 CPU들 간의 "거리"를 이해한다.
소정 구성에서 모든 CPU들의 누계 거리(aggregate distance)를 최소화하기 위한 능력이 제공되고 특정의 애플리케이션-프로그램 작업들이 개개의 CPU들 상에서 디스패치되는 방법은 성능을 향상시킬 수 있는 능력을 갖는 관리 프로그램들을 제공한다. 토폴로지를 더 잘 알게 됨으로써 개선되는 이하의 속성들 중 하나 이상으로부터 성능이 향상될 수 있다.
CPU간 신호 경로들의 단축.
다수의 CPU들에 의해 액세스되는 공유된 저장 장치가 CPU들의 세트에 더 가까운 캐쉬들에 있을 가능성이 더 많다. 따라서, 캐쉬간 저장 장치 사용이 전체적인 기계 및 구성의 더 작은 서브셋으로 한정되며, 이는 보다 빠른 캐쉬간 전송(cache-to-cache transfer)을 가능하게 한다. CPU의 가장 가까운 캐쉬(L1)에 저장 장소가 존재할 가능성이 상당히 더 많다.
향상된 성능으로 인해, 실제로 구성 내에 있는 CPU들의 수가 더 적을 수 있지만, 여전히 동일한 또는 더 적은 실행 시간 내에 동일한 작업이 행해진다. 이러한 CPU들의 감소는 각각의 CPU가 그 구성의 나머지 CPU들과 통신하기 위해 사용해야 하는 통신 경로들의 수를 줄이며, 그에 의해 전체적인 성능 향상에 더 기여하게 된다.
예를 들어, 10개의 CPU가 특정의 프로그램을 실행해야 하는 경우, 캐쉬간 트래픽이 상당한 반면, 동일한 프로그램이 하나의 CPU 상에서 실행될 수 있는 경우, 캐쉬간 트래픽이 없다. 이것은, 그 저장장치가 임의의 캐쉬에 있는 경우, 원하는 저장 장소의 캐쉬 존재가 단일 CPU의 캐쉬에 있도록 보장된다는 것을 나타낸다.
저장 장치 및 연관된 캐쉬 계층구조가 로컬일 때, 다수의 물리적 프레임들(예를 들면, 박스들 등)에 걸쳐 분산되어 있는 것과 달리, 시그널링 경로들이 더 짧다. 토폴로지 지식은 애플리케이션 프로그램에 할당할 CPU들의 적절한 서브셋을 선택할 때의 상대 거리를 알려줌으로써, SMP 구성에서의 CPU들의 더 큰 세트 내에서도, 그 서브셋이 CPU들 간의 최소화된 거리를 최적화시킨다. 이것은 때때로 유사성 그룹(affinity group)이라고 한다.
CPU-갯수 감소 및 CPU들 간의 거리의 개념들은 프로그램이 CPU들을 유사성 그룹에 할당하는 것을 최적화할 수 있게 하는 토폴로지 정보에 의해 알게 된다.
일 실시예에서(도 20), 호스트 프로세서들(호스트 CPU들)을 포함하는 논리적으로 파티셔닝된 호스트 컴퓨터 시스템에서, 토폴로지 정보는 게스트 구성의 하나 이상의 게스트 프로세서들(게스트 CPU들)에서 발견되고, 테이블에 저장된다. 바람직하게는, 게스트 구성의 게스트 프로세서는 실행하기 위한 시스템 정보 저장 명령어를 페치(fetches)한다. 시스템 정보 저장 명령어가 실행될 때, 시스템 정보 저장 명령어의 토폴로지 정보 요청에 기초하여, 컴퓨터 구성의 토폴로지 정보를 얻는데, 토폴로지 정보는 구성의 프로세서의 네스팅 정보를 포함한다. 얻어진 토폴로지 정보는 바람직하게 메모리의 구성 토폴로지 테이블에 저장된다.
일 실시예에서, 상기 토폴로지 정보는 호스트 프로세서들의 아이덴티피케이션(identification) 및 상기 호스트 프로세서들의 토폴로지와 연관된 네스팅 레벨들(nesting levels)을 포함한다.
다른 일 실시예에서, 상기 토폴로지 정보는 게스트 구성의 호스트 프로세서들 및 상기 게스트 구성의 상기 호스트 프로세서들의 상기 토폴로지와 연관된 네스팅 레벨들에 관한 정보를 포함한다.
일 실시예에서, 상기 STORE SYSTEM INFORMATION 명령어가 연산 코드 필드(opcode field), 베이스 레지스터 필드(base register field), 부호있는 변위 필드(signed displacement field)를 포함하고, 상기 토폴로지 발견 명령어가 함수 코드 필드 및 셀렉터-1 필드를 포함하는 제1 암시적 범용 레지스터 및 셀렉터-2 필드를 포함하는 제2 암시적 범용 레지스터를 더 포함하며, 상기 함수 코드 필드는 상기 토폴로지 정보 요청을 지정하고, 상기 베이스 레지스터 필드 및 상기 부호있는 변위 필드는 상기 구성 토폴로지 테이블을 포함하는 SYSIB(system information block)의 메모리에서의 위치를 식별하며, 상기 셀렉터-1 필드의 값 및 상기 셀렉터-2 필드의 값은, 공동으로, 수행될 상기 토폴로지 정보 요청을 결정한다.
다른 일 실시예에서, 상기 테이블은 상기 프로세서들의 네스팅된 프로세서들의 각각의 그룹에 대한 토폴로지 리스트 프로세서 엔트리(topology list processor entry)를 포함한다.
또 다른 일 실시예에서, 상기 토폴로지 리스트 프로세서 엔트리는 상기 네스팅된 프로세서들의 상기 그룹의 프로세서들이 상기 논리적 파티션 게스트 구성에 어떻게 전용되어 있는지를 나타내는 표시자를 더 포함한다.
일 실시예에서, 상기 테이블은 상기 네스팅된 프로세서들을 갖는 하나 이상의 네스팅 레벨들의 계층구조에 대한 각각의 네스팅 레벨의 토폴로지 리스트 컨테이너 엔트리(topology list container entry)를 더 포함한다.
일 실시예에서, STORE SYSTEM INFORMATION의 실행은 에일리언 프로세서(alien processor)상에서 에뮬레이션에 의해서 수행된다.
발명인 것으로 생각되는 발명 대상이 상세히 기술되고 명세서의 결론 부분에 명백하게 청구되어 있다. 그러나, 구성 및 실시 방법 둘다에 관한 본 발명은, 본 발명의 추가의 목적들 및 이점들과 함께, 첨부 도면과 관련하여 기술된 이하의 설명을 참조하면 가장 잘 이해될 수 있다.
도 1은 종래 기술의 호스트 컴퓨터 시스템을 나타낸 도면이다.
도 2는 종래 기술의 에뮬레이트된 호스트 컴퓨터 시스템을 나타낸 도면이다.
도 3은 종래 기술의 STSI 기계 명령어의 명령어 포맷을 나타낸 도면이다.
도 4는 종래 기술의 STSI 명령어의 암시적 레지스터(implied register)를 나타낸 도면이다.
도 5는 함수 코드 테이블을 나타낸 도면이다.
도 6은 종래 기술의 SYSIB 1.1.1 테이블을 나타낸 도면이다.
도 7은 종래 기술의 SYSIB 1.2.1 테이블을 나타낸 도면이다.
도 8은 종래 기술의 포맷-1 SYSIB 1.2.2 테이블을 나타낸 도면이다.
도 9는 종래 기술의 포맷-2 SYSIB 1.2.2 테이블을 나타낸 도면이다.
도 10은 본 발명에 따른 SYSIB 15.1.2 테이블을 나타낸 도면이다.
도 11은 컨테이너 유형 TLE를 나타낸 도면이다.
도 12는 CPU 유형 TLE를 나타낸 도면이다.
도 13은 본 발명에 따른 PTF 기계 명령어의 명령어 포맷을 나타낸 도면이다.
도 14는 PTF 명령어의 레지스터 포맷을 나타낸 도면이다.
도 15a 내지 도 15d는 종래 기술의 파티셔닝된 컴퓨터 시스템의 구성요소들을 나타낸 도면이다.
도 16은 예시적인 컴퓨터 시스템을 나타낸 도면이다.
도 17 내지 도 19는 예시적인 컴퓨터 시스템의 컨테이너들을 나타낸 도면이다.
도 20은 본 발명의 일 실시예의 흐름을 나타낸 도면이다.
도 1은 종래 기술의 호스트 컴퓨터 시스템을 나타낸 도면이다.
도 2는 종래 기술의 에뮬레이트된 호스트 컴퓨터 시스템을 나타낸 도면이다.
도 3은 종래 기술의 STSI 기계 명령어의 명령어 포맷을 나타낸 도면이다.
도 4는 종래 기술의 STSI 명령어의 암시적 레지스터(implied register)를 나타낸 도면이다.
도 5는 함수 코드 테이블을 나타낸 도면이다.
도 6은 종래 기술의 SYSIB 1.1.1 테이블을 나타낸 도면이다.
도 7은 종래 기술의 SYSIB 1.2.1 테이블을 나타낸 도면이다.
도 8은 종래 기술의 포맷-1 SYSIB 1.2.2 테이블을 나타낸 도면이다.
도 9는 종래 기술의 포맷-2 SYSIB 1.2.2 테이블을 나타낸 도면이다.
도 10은 본 발명에 따른 SYSIB 15.1.2 테이블을 나타낸 도면이다.
도 11은 컨테이너 유형 TLE를 나타낸 도면이다.
도 12는 CPU 유형 TLE를 나타낸 도면이다.
도 13은 본 발명에 따른 PTF 기계 명령어의 명령어 포맷을 나타낸 도면이다.
도 14는 PTF 명령어의 레지스터 포맷을 나타낸 도면이다.
도 15a 내지 도 15d는 종래 기술의 파티셔닝된 컴퓨터 시스템의 구성요소들을 나타낸 도면이다.
도 16은 예시적인 컴퓨터 시스템을 나타낸 도면이다.
도 17 내지 도 19는 예시적인 컴퓨터 시스템의 컨테이너들을 나타낸 도면이다.
도 20은 본 발명의 일 실시예의 흐름을 나타낸 도면이다.
메인프레임에서, 아키텍처 기계 명령어들(architected machine instructions)은 종종 컴파일러 애플리케이션을 통해, 프로그래머들에 의해 사용된다(통상적으로 "C"는 물론 Java®, COBOL, PL/I, PL/X, Fortran 및 기타 고수준 언어로 애플리케이션들을 작성함). 저장 매체에 저장된 이 명령어들은 본질적으로 z/Architecture IBM 서버에서 또는 대안으로서 다른 아키텍처를 실행하는 기계들에서 실행될 수 있다. 이 명령어들은 기존의 및 장래의 IBM 메인프레임 서버들 및 IBM의 기타 기계들(예를 들어, pSeries® 서버 및 xSeries® 서버)에서 에뮬레이트될 수 있다. 이 명령어들은 IBM®, Intel®, AMD™, Sun Microsystems, 및 기타에 의해 제조된 하드웨어를 사용하는 아주 다양한 기계들 상에서 Linux를 실행시키는 기계들에서 실행될 수 있다. z/Architecture® 하의 그러한 하드웨어 상에서의 실행 이외에, 일반적으로 실행은 에뮬레이션 모드에서 이루어지는 Hercules, UMX, FSI(Fundamental Software, Inc) 또는 Platform Solutions, Inc.(PSI)에 의해 에뮬레이션을 사용하는 기계들 뿐만 아니라 Linux도 사용될 수 있다. 에뮬레이션 모드에서, 에뮬레이트된 프로세서의 아키텍처를 에뮬레이트하기 위해 네이티브 프로세서(native processor)에 의해 에뮬레이션 소프트웨어가 실행된다.
네이티브 프로세서는 통상적으로 에뮬레이트된 프로세서의 에뮬레이션을 수행하는 펌웨어 또는 네이티브 운영 체제를 포함하는 에뮬레이션 소프트웨어를 실행한다. 에뮬레이션 소프트웨어는 에뮬레이트된 프로세서 아키텍처의 명령어들을 페치하여 실행하는 일을 맡고 있다. 에뮬레이션 소프트웨어는 명령어 경계를 추적하기 위해 에뮬레이트된 프로그램 카운터(emulated program counter)를 유지한다. 에뮬레이션 소프트웨어는 한번에 하나 이상의 에뮬레이트된 기계 명령어들을 페치하고 이 하나 이상의 에뮬레이트된 기계 명령어들을 네이티브 프로세서에서 실행하기 위한 대응하는 일군의 네이티브 기계 명령어들로 변환할 수 있다. 이 변환된 명령어들은 보다 빠른 변환이 달성될 수 있도록 캐싱될 수 있다. 그럼에도 불구하고, 에뮬레이션 소프트웨어는 에뮬레이트된 프로세서용으로 작성된 운영 체제들 및 애플리케이션들이 올바르게 동작하도록 하기 위해 에뮬레이트된 프로세서 아키텍처의 아키텍처 규칙들을 유지해야만 한다. 게다가, 에뮬레이트된 프로세서 상에서 실행되도록 설계된 운영 체제 또는 애플리케이션 프로그램이 에뮬레이션 소프트웨어를 갖는 네이티브 프로세서 상에서 실행될 수 있도록, 에뮬레이션 소프트웨어는 제어 레지스터, 범용 레지스터(종종 부동 소수점 레지스터를 포함함), 예를 들어, 세그먼트 테이블(segment table) 및 페이지 테이블(page table)을 포함하는 동적 주소 변환 함수, 예를 들면 인터럽트 메커니즘, 컨텍스트 스위치 메커니즘, TOD(Time of Day) 클럭 및 I/O 서브시스템에 대한 아키텍쳐 인터페이스(architected interfaces)를 포함하지만 이에 제한되지는 않는 에뮬레이트된 프로세서 아키텍처에 의해 식별되는 자원들을 제공해야만 한다.
에뮬레이트되는 특정의 명령어가 디코딩되고, 개개의 명령어의 기능을 수행하기 위해 서브루틴이 호출된다. 에뮬레이트된 프로세서의 함수를 에뮬레이트하는 에뮬레이션 소프트웨어 함수는, 예를 들어, "C" 서브루틴 또는 드라이버로, 또는 특정의 하드웨어에 대한 드라이버를 제공하는 일부 다른 방법으로 구현되고, 바람직한 실시예의 설명을 이해한 후에 이 기술 분야에 속하게 될 것이다. 다양한 소프트웨어 및 하드웨어 에뮬레이션 특허들로는 발명의 명칭이 "Multiprocessor for hardware emulation(하드웨어 에뮬레이션용 멀티프로세서)"인 Beausoleil 등의 미국 특허 제5551013호, 발명의 명칭이 "Preprocessing of stored target routines for emulating incompatible instructions on a target processor(타겟 프로세서 상에서 비호환 명령어들을 에뮬레이트하기 위한 저장된 타겟 루틴들의 전처리)"인 Scalzi 등의 미국 특허 제6009261호, 발명의 명칭이 "Decoding guest instruction to directly access emulation routines that emulate the guest instructions(게스트 명령어들을 에뮬레이트하는 에뮬레이션 루틴들을 직접 액세스하기 위한 게스트 명령어의 디코딩)"인 Davidian 등의 미국 특허 제5574873호, 발명의 명칭이 "Symmetrical multiprocessing bus and chipset used for coprocessor support allowing non-native code to run in a system(비네이티브 코드가 시스템에서 실행될 수 있게 하는 코프로세서 지원을 위해 사용되는 대칭 멀티프로세싱 버스 및 칩셋)"인 Gorishek 등의 미국 특허 제6308255호, 발명의 명칭이 "Dynamic optimizing object code translator for architecture emulation and dynamic optimizing object code translation method(아키텍처 에뮬레이션을 위한 동적 최적화 오브젝트 코드 번역기 및 동적 최적화 오브젝트 코드 번역 방법)"인 Lethin 등의 미국 특허 제6463582호, 및 발명의 명칭이 "Method for emulating guest instructions on a host computer through dynamic recompilation of host instructions(호스트 명령어들의 동적 재컴파일을 통해 호스트 컴퓨터 상에서 게스트 명령어들을 에뮬레이트하는 방법)"인 Eric Traut의 미국 특허 제5790825호, 및 많은 다른 특허들이 있으며, 이들 특허는 다른 기계용으로 구성된 명령어 포맷을 당업자에게 이용가능한 타겟 기계용으로 에뮬레이션하는 것을 달성하는 각종의 공지된 방법은 물론 상기한 방법들에 의해 사용되는 상용 소프트웨어 기법들을 나타내고 있다.
도 1을 참조하면, 호스트 컴퓨터 시스템(100)의 대표적인 컴포넌트들이 도시되어 있다. 당업계에 공지된 컴퓨터 시스템에서 컴포넌트들의 다른 구성도 역시 이용될 수 있다.
호스트 컴퓨팅 환경은 바람직하게는 미국 뉴욕주 아몬크 소재의 International Business Machines Corporation(IBM®)에 의해 제안된 z/Architecture에 기초하고 있다. z/Architecture는 z/Architecture Principles of Operation, IBM® Pub No. SA22-7832-05, 6th Edition, (April 2007)에 더 상세히 기술되어 있다. z/Architecture에 기초한 컴퓨팅 환경들로는, 예를 들어, eServer™ 및 zSeries®(둘다 IBM®에 의한 것임)가 있다.
대표적인 호스트 컴퓨터(100)는 메인 저장소(컴퓨터 메모리(102))와 통신을 하는 하나 이상의 CPU(101)는 물론 저장 장치(111)에 대한 I/O 인터페이스 및 기타 컴퓨터들 또는 SAN과 통신하기 위한 네트워크(101), 및 기타를 포함한다. CPU는 프로그램 주소(가상 주소)를 메모리의 실제 주소로 변환하는 DAT(Dynamic Address Translation)(103)를 가질 수 있다. DAT는 통상적으로 컴퓨터 메모리(102)의 블록에 대한 나중의 액세스가 주소 변환의 지연을 필요로 하지 않도록 변환을 캐싱하기 위해 TLB(Translation Lookaside Buffer)(107)를 포함한다. 통상적으로, 캐쉬(109)는 컴퓨터 메모리(102)와 프로세서(101) 사이에서 이용된다. 캐쉬(109)는 계층적일 수 있으며, 2개 이상의 CPU에 이용가능한 대용량 캐쉬 및 대용량 캐쉬와 각각의 CPU 사이의 소용량, 고속(하위 레벨) 캐쉬를 갖는다. 일부 구현들에서, 하위 레벨 캐쉬들은 명령어 페치 및 데이터 액세스를 위한 개별적인 하위 레벨 캐쉬를 제공하기 위해 분리되어 있다. 일 실시예에서, 명령어는 명령어 페치 유닛(104)에 의해 메모리(102)로부터 캐쉬(109)를 통해 페치된다. 명령어는 명령어 디코드 유닛(instruction decode unit)(106)에서 디코딩되고 (일부 실시예들에서 다른 명령어들과 함께) 명령어 실행 유닛들(108)로 디스패치된다. 통상적으로, 여러 개의 실행 유닛들(108), 예를 들어, 산술 실행 유닛, 부동 소수점 실행 유닛 및 분기 명령어 실행 유닛이 이용된다. 명령어는 실행 유닛에 의해 실행되고, 필요에 따라 명령어-지정 레지스터들 또는 메모리로부터의 피연산자(operands)에 액세스한다. 피연산자가 메모리(102)로부터 액세스(로드 또는 저장)되는 경우, 로드 저장 유닛(load store unit)(105)은 실행되는 명령어의 제어 하에서 액세스를 통상적으로 처리한다.
일 실시예에서, 본 발명은 {때때로 LIC(Licensed Internal Code), 펌웨어, 마이크로-코드, 밀리-코드, 피코-코드, 기타라고도 하며, 이들 중 어느 것이든 본 발명에 부합하는} 소프트웨어에 의해 실시될 수 있다. 본 발명을 구현하는 소프트웨어 프로그램 코드는 통상적으로, 컴퓨터 시스템(100)의 CPU(Central Processing Unit)(101)라고도 하는 프로세서에 의해, CD-ROM 드라이브, 테이프 드라이브 또는 하드 드라이브 등의 장기 저장 매체(111)로부터 액세스된다. 소프트웨어 프로그램 코드는 디스켓, 하드 드라이브 또는 CD-ROM 등의 데이터 처리 시스템에서 사용하기 위한 각종의 공지된 매체 중 어느 것에도 구현될 수 있다. 이 코드는 이러한 매체를 통해 배포될 수 있거나, 컴퓨터 메모리(102)로부터 사용자에게, 또는, 다른 시스템들의 사용자들이 사용하기 위해, 하나의 컴퓨터 시스템의 저장 장치로부터 네트워크(110)를 거쳐 이러한 다른 컴퓨터 시스템들로 배포될 수 있다.
대안으로서, 프로그램 코드는 메모리(102)에 구현될 수 있고 프로세서 버스를 사용하여 프로세서(101)에 의해 액세스될 수있다. 이러한 프로그램 코드는 다양한 컴퓨터 컴포넌트들 및 하나 이상의 애플리케이션 프로그램들의 기능 및 상호작용을 제어하는 운영 체제를 포함한다. 프로그램 코드는 보통 고밀도 저장 매체(111)로부터, 프로세서(101)에 의한 처리에 이용가능한 고속 메모리(102)로 페이징된다. 메모리 내에, 물리 매체 상에 소프트웨어 프로그램 코드를 구현하고 및/또는 네트워크를 통해 소프트웨어 코드를 배포하는 기법들 및 방법들은 공지되어 있으며 본 명세서에서 더 기술하지 않는다. 프로그램 코드는, 생성되어 [전자 메모리 모듈(RAM), 플래쉬 메모리, CD(compact disc), DVD, 자기 테이프 및 기타를 포함하지만 이에 제한되지 않는] 유형의 매체 상에 저장될 때, 종종 "컴퓨터 프로그램 제품"이라고 한다. 컴퓨터 프로그램 제품 매체는 처리 회로에 의해 실행하기 위해 통상적으로 바람직하게는 컴퓨터 시스템 내의 그 처리 회로에 의해 판독가능하다.
도 2에, 호스트 아키텍처의 호스트 컴퓨터 시스템(100)을 에뮬레이트하는 예시적인 에뮬레이트된 호스트 컴퓨터 시스템(201)이 제공되어 있다. 에뮬레이트된 호스트 컴퓨터 시스템(201)에서, 호스트 프로세서(CPU)(208)는 에뮬레이트된 호스트 프로세서(또는 가상 호스트 프로세서)이며, 호스트 컴퓨터(100)의 프로세서(101)에 의해 사용되는 것과 다른 네이티브 명령어 세트 아키텍처(native instruction set architecture)를 갖는 에뮬레이션 프로세서(207)를 포함한다. 에뮬레이트된 호스트 컴퓨터 시스템(201)은 에뮬레이션 프로세서(207)에 의해 액세스가능한 메모리(202)를 갖는다. 예시적인 실시예에서, 메모리(207)는 호스트 컴퓨터 메모리(102) 부분 및 에뮬레이션 루틴(203) 부분으로 파티셔닝된다. 호스트 컴퓨터 메모리(102)는 호스트 컴퓨터 아키텍처에 따라 에뮬레이트된 호스트 컴퓨터(201)의 프로그램들에게 이용가능하다. 에뮬레이션 프로세서(207)는 에뮬레이트된 프로세서(208)의 아키텍처와 다른 아키텍처의 아키텍쳐 명령어 세트(architected instruction set)의 네이티브 명령어들, 에뮬레이션 루틴 메모리(203)로부터 획득된 네이티브 명령어들을 실행하고, 액세스된 호스트 명령어의 함수를 에뮬레이트하기 위한 네이티브 명령어 실행 루틴을 결정하기 위해 액세스된 호스트 명령어(들)를 디코딩할 수 있는 시퀀스 및 액세스/디코드(Sequence & Access/Decode) 루틴에서 획득된 하나 이상의 명령어(들)을 이용함으로써 호스트 컴퓨터 메모리(102) 내의 프로그램으로부터 실행을 위한 호스트 명령어에 액세스할 수 있다.
호스트 컴퓨터 시스템(100) 아키텍처에 대해 정의된 기타 장치들(facilities)은, 예를 들어, 범용 레지스터, 제어 레지스터, 동적 주소 변환, 및 I/O 서브시스템 지원 및 프로세서 캐쉬과 같은 기구들을 비롯한 구조적인 기구 루틴들(Architected Facilities Routines)에 의해 에뮬레이트될 수 있다. 에뮬레이션 루틴들은 또한, 에뮬레이션 루틴들의 성능을 향상시키기 위해, 에뮬레이션 프로세서(207)에서 이용가능한 함수(범용 레지스터 및 가상 주소의 동적 변환 등)를 이용할 수 있다. 프로세서(207)가 호스트 컴퓨터(100)의 함수를 에뮬레이트하는 것을 돕기 위해 특수 하드웨어 및 오프로드 엔진(Off Load Engines)도 역시 제공될 수 있다.
프로그램들에 토폴로지 정보를 제공하기 위해, 2개의 명령어가 제공된다. 제1 명령어는 종래 기술의 명령어 STSI(Store System Information)에 대한 개량이고 제2 명령어는 새로운 명령어 PTF (Perform Topology Function)이다.
CPU 토폴로지 개요:
새로운 IBM eSeries 메인프레임의 등장으로 그리고 심지어 이전에도, 노드 구조(nodal structure)로의 기계 조직으로 인해 NUMA(non-uniform memory access) 거동(때때로 "비신축성(lumpiness)"으로 불림)이 있게 되었다. 종래 기술의 STSI(Store System Information) 명령어의 새로운 SYSIB 15.1.2 함수 및 새로운 PERFORM TOPOLOGY FUNCTION(PTF) 명령어의 목적은, 소정 최적화(캐쉬 히트율의 향상을 포함함)가 수행될 수 있음으로써 전체적인 성능을 향상시키도록, 프로그램에 부가의 기계 토폴로지 인지(machine topology awareness)를 제공하는 것이다. 멀티프로세싱(MP) 게스트 구성에 할당된 호스트-CPU 자원의 양이 일반적으로 다수의 구성된 게스트 CPU들에 걸쳐 균일하게 분산되어 있다. (게스트 CPU는 프로그램에 제공된 논리적 CPU이고, 모든 게스트 CPU들은 실제의 호스트 CPU들 상에서의 소프트웨어/하드웨어 파티셔닝에 의해 지원된다.) 이러한 균일한 분산은 어떤 특정 게스트 CPU(또는 CPU들)도 임의의 다른 임의적으로 결정된 게스트 CPU들에 비해 임의의 여분의 호스트-CPU 프로비저닝을 받을 자격이 없다는 것을 암시한다. 구성의 모든 CPU들에 영향을 주는 게스트 구성의 이 조건을 "수평 극성화(horizontal polarization)"라고 한다. 수평 극성화 하에서, 호스트 CPU는 게스트 CPU로 각각의 게스트 CPU에 대해 거의 동일한 양의 프로비저닝을 할당한다. 프로비저닝이 전용되어 있지 않을 때, 게스트 CPU들을 프로비저닝하는 동일한 호스트 CPU들이 다른 게스트의 게스트 CPU들 또는 심지어 동일한 게스트 구성의 다른 게스트 CPU들을 프로비저닝하는 데 사용될 수 있다.
다른 게스트 구성이 다른 논리적 파티션일 때, 호스트 CPU는, 각각의 파티션에서 활성일 때, 통상적으로 메인 저장소에 더 많이 액세스해야만 하는데, 그 이유는 다수의 재배치 구역들(relocation zone)에 걸쳐 캐쉬들을 공유해야만 함으로써 캐쉬 히트율이 감소되기 때문이다. 일부 호스트 CPU들이 대체로 또는 심지어 전적으로 주어진 게스트 구성에 할당되도록(통상적인 거동이 되도록) 호스트-CPU 프로비저닝이 균형을 수정할 수 있는 경우, 캐쉬 히트율이 향상되고 성능도 향상된다. 이러한 불균일한 분산은 하나 이상의 게스트 CPU들이 보다 적은 호스트-CPU 프로비저닝을 받을 자격이 있는 다른 임의적으로 결정된 게스트 CPU들에 대해 여분의 호스트-CPU 프로비저닝을 받을 자격이 있다는 것을 암시한다. 구성의 모든 CPU들에 영향을 주는 게스트 구성의 이 조건을 "수직 극성화(vertical polarization)"라고 한다. 여기에 제공된 아키텍처는 수직 극성화를 3가지 레벨의 프로비저닝 자격, 즉 상위, 중간, 하위로 분류한다.
ㆍ 상위 자격(high entitlement)은 호스트 CPU의 대략 100%가 논리적/가상 CPU에 할당되는 것을 보장하며, 유사성이 둘 간의 강한 대응관계로서 유지된다. 논리적 파티션의 프로비저닝과 관련하여, 수직 극성화가 실시되는 경우, 전용된 CPU의 자격은 상위로 정의된다.
ㆍ 중간 자격(medium entitlement)은 지정되지 않은 양의 호스트 CPU 자원(하나 이상의 호스트 CPU들)이 논리적/가상 CPU에 할당되는 것을 보장하며, 호스트 CPU의 나머지 용량은 다른 곳에 할당될 수 있는 슬랙(slack)으로 간주된다. 이용가능한 슬랙에 대한 최상의 경우는 가능하다면 로컬 슬랙(local slack)으로서 할당하는 것이다. 그 이용가능한 슬랙이 원격 슬랙(remote slack)으로서 할당되는 경우 유익성이 떨어지는 결과가 얻어진다. 또한, 중간 자격의 논리적 CPU에 할당되는 자원 비율이 상위-자격 설정의 100% 근사와 비교하여 훨씬 더 유연한 근사인 경우가 있다.
ㆍ 하위 자격(low entitlement)은 호스트 CPU의 대략 0%가 논리적/가상 CPU에 할당되는 것을 보장한다. 그러나, 슬랙이 이용가능한 경우, 이러한 논리적/가상 CPU가 여전히 일부 CPU 자원을 받을 수 있다. 극성화를 사용하는 네스팅된(nested) 컨테이너들의 모델은 요청하는 구성에 적용될 때 기계의 노드 구조에 관한 지능 레벨을 제공하기 위한 것이며, 따라서 일반적으로 호스트 CPU들의 클러스터들이 게스트 CPU들의 클러스터들에 할당될 수 있음으로써 저장 장치를 공유하는 것 및 서로 다른 구성들이 동일한 호스트 CPU들 상에서 본질적으로 충돌하는 것을 최소화하는 것을 가능한 많이 향상시킨다. 극성화 및 자격은 게스트 구성에서 물리적 CPU들와 논리적 CPU들 간의 관계 또는 논리적 CPU들와 가상 CPU들 간의 관계, 및 게스트 구성에 할당된 용량이 그 구성을 포함하고 있는 CPU들에 걸쳐 어떻게 분배되는지를 나타낸다.
과거에, 게스트 구성은 수평 극성화되었다. 그러나, 많은 게스트 CPU들이 그 구성에 따라 정의되었기 때문에, 할당된 호스트-CPU 자원이 공평한 무자격 방식으로 게스트 CPU들 전부에 걸쳐 균일하게 분산되었다. 수평 극성화가 실시되고 있을 때 논리적 파티션에서의 하나의 논리적 CPU의 가중치가 총 구성 가중치(total configuration weight)를 CPU들의 수로 나눈 것과 거의 같다고 할 수 있다.
그러나, 2097 및 패밀리 모델들의 도입으로, 호스트-CPU 자원을 구성의 수직 극성화라고 불리는 다른 방식으로 분산시킬 수 있어야만 하게 되었으며, 호스트 CPU들이 게스트 CPU들을 프로비저닝하는 등급이 상위 자격, 중간 자격 또는 하위 자격으로 나타내어진다. 수직 극성화된 구성(vertically-polarized configuration)의 논리적/가상 CPU가 동일한 호스트 CPU에 의해 후원될 때 상위 자격이 실시된다. 수직 극성화된 구성의 논리적/가상 CPU가 부분적으로 호스트 CPU에 의해 후원될 때 중간 자격이 실시된다. 수직 극성화된 구성의 논리적/가상 CPU가, 슬랙 자원이 이용가능하게 되는 것으로 인해 이용가능하게 될 수 있는 것을 제외하고는, 호스트-CPU 자원을 보장받지 못할 때 하위 자격이 실시된다.
CPU 슬랙:
CPU 자원, 2가지 종류의 슬랙 CPU 자원이 있다:
ㆍ 구성의 논리적/가상 CPU가 받을 자격이 있는 모든 자원을 다 사용하지는 않으며 이러한 슬랙이 이어서 그 CPU의 구성 내에서 사용될 때 로컬 슬랙이 이용가능하게 된다. 로컬 슬랙이 원격 슬랙보다 선호되는데, 그 이유는 슬랙이 구성 내에서 사용될 때 캐쉬 상에서의 더 나은 히트율이 예상되기 때문이다.
ㆍ 구성의 논리적/가상 CPU가 받을 자격이 있는 모든 자원을 다 사용하지는 않으며 이러한 슬랙은 그 CPU의 구성 밖에서 사용될 때 원격 슬랙이 이용가능하게 된다. 원격 슬랙은 캐쉬 상에서 보다 낮은 히트율을 나타낼 것으로 예상되지만, 여전히 논리적/가상 CPU를 전혀 실행하지 않는 것보다는 낫다.
목표는 CPU 캐쉬 히트율을 극대화시키는 것이다. 논리적 파티션의 경우, 물리적-CPU 자원의 양이 각각의 논리적 파티션에 할당되는 CPU 자원을 결정하는 전체적인 시스템 가중치에 의해 결정된다. 예를 들어, 하나의 CPU와 동등한 물리적-CPU 자원을 할당받고 수평 극성화된 논리적 3-방식 MP(logical 3-way MP)에서, 각각의 논리적 CPU는 독립적으로 디스패치되고, 따라서 대략 33%의 물리적-CPU 자원을 받는다. 동일한 구성이 수직 극성화되는 경우, 단지 하나의 논리적 CPU만이 실행되고 할당된 물리적-CPU 자원의 대략 100%를 받지만(상위 자격), 나머지 2개의 논리적 CPU는 보통 디스패치되지 않는다(하위 자격). 이러한 자원 할당은 통상적으로 근사이다. 프로그램이 이러한 CPU에 얽매이지 않도록 하는 데 도움을 주기만 하면 되는 경우, 심지어 하위-자격 CPU조차도 상당한 양의 자원을 받을 수 있다. 제어 프로그램이 극성화를 알고 있다는 것을 나타내고 각각의 CPU에 대한 그의 극성화 및, 수직 극성화인 경우, 자격의 등급의 표시를 수신하는 수단을 제공함으로써, 제어 프로그램은 일반적으로 CPU에 로컬인 것으로 그리고(vs.) 구성의 모든 CPU들에 이용가능한 것으로 생각되는 데이터 구조를 보다 지능적으로 사용할 수 있다. 또한, 이러한 제어 프로그램은 하위-자격 CPU로 작업을 보내는 것을 피할 수 있다. 할당된 실제의 물리적-CPU 자원은 정수개의 CPU를 구성하지 않을 수 있으며, 따라서 MP 수직-극성화된 구성 내의 하나 이상의 CPU들이 상위 등급이 아닌 자격을 가질 가능성도 있으며, 그에 따라 이러한 CPU들이 중간 또는 하위 수직 자격을 갖게 된다. 임의의 나머지 하위-자격 CPU들이 어느 정도의 호스트-CPU 자원을 받을 수 있다. 예를 들어, 이것은 이러한 CPU가 SIGP 순서(SIGP order) 등을 통해 타겟팅되고 슬랙 호스트-CPU 자원이 이용가능할 때 일어날 수 있다. 그렇지 않은 경우, 이러한 논리적/가상 CPU는, 다른 방식으로 디스패치될 수는 있을지라도, 디스패치되지 않은 상태로 남아 있을 수 있다.
바람직하게는, 본 발명에 따르면, STORE SYSTEM INFORMATION (STSI) 명령어의 새로운 CPU-유형 "TLE"(topology-list entry)에 대해 2-비트 극성화 필드가 정의된다. 각각의 CPU에 대한 수직-극성화 자격의 등급이 상위, 중간 또는 하위로서 표시된다. 할당이 정밀한 비율이 아니라 오히려 얼마간 모호하고 경험적(heuristic)이다.
게스트 CPU들에 가중치를 재할당하는 수단인 수직 극성화에 부가하여, 슬랙 용량(slack capacity)["공백(white space)"이라고도 함]의 생성 및 관리인 다른 개념이 존재한다. 슬랙 용량은 이하의 상황들 하에서 생성된다:
ㆍ 상위-수직 CPU는 그의 평균 이용률(average utilization, AU)이 100 퍼센트(100-AU) 아래로 떨어질 때 슬랙에 기여한다.
ㆍ 호스트 CPU의 M 퍼센트의 할당된 프로비저닝을 갖는 중간-수직 CPU는 그의 평균 이용률(average utilization, AU)이 M 퍼센트(M-AU > 0) 아래로 떨어질 때 슬랙에 기여한다.
ㆍ 하위-수직 CPU는 슬랙에 기여하지 않는다.
ㆍ 상위-수직 CPU는 슬랙의 소비자가 아니다.
STORE SYSTEM INFORMATION 명령어:
도 3의 Store System Information 명령어의 포맷의 예시적인 실시예는 연산 코드 필드('B27D'), 베이스 레지스터 필드(B2) 및 부호있는 변위 필드(signed displacement field)(D2)를 포함한다. 명령어 연산 코드는 명령어와 연관된 암시적 범용 레지스터(implied general register) '0' 및 '1'이 있다는 것을 명령어를 실행하는 기계에게 알려준다. 부호있는 변위 필드값을 베이스 필드에 의해 지정된 범용 레지스터의 내용에 가산함으로써 제2 피연산자의 주소가 획득된다. 일 실시예에서, 베이스 레지스터 필드가 '0'일 때, 변위 필드의 부호 확장된 값(sign extended value)이 제2 피연산자를 지정하는 데 직접 사용된다. Store System Information 명령어가 페치되어 실행될 때, 범용 레지스터 0 내의 함수 코드에 따라, 프로그램을 실행하는 구성의 레벨의 아이디(identification)가 범용 레지스터 0에 배치되거나 구성의 컴포넌트 또는 컴포넌트들에 관한 정보가 시스템-정보 블록(system-information block, SYSIB)에 저장된다. 컴포넌트 또는 컴포넌트들에 관한 정보가 요청될 때, 이 정보는 범용 레지스터 0의 추가 내용(further contents)에 의해 그리고 범용 레지스터 1의 내용에 의해 지정된다.
만약 SYSIB가 있는 경우, SYSIB는 제2-피연산자 주소에 의해 지정된다. 기계는 하나, 둘 또는 3개의 레벨의 구성을 제공하는 것으로 생각된다. 그 레벨들은 다음과 같다:
1. 기본 모드에서 동작하는 것과 같은 기계인 기본 기계.
2. 기계가 LPAR(논리적으로 파티셔닝된, 해석적 명령어-실행) 모드에서 동작하는 경우에 제공되는 논리적 파티션. 기계의 일부인 LPAR 하이퍼바이저에 의해 논리적 파티션이 제공된다. 기본 기계(basic machine)는 기계가 LPAR 모드에서 동작할 때에도 기본 기계(basic machine)가 존재한다.
3. 기본 기계에 의해 또는 논리적 파티션에서 실행되는 가상 기계(VM) 제어 프로그램에 의해 제공되는 가상 기계. 가상 기계 자체가 레벨-3 구성인 것으로도 생각되는 상위-레벨(기본 기계로부터 더 많이 떨어짐) 가상 기계를 제공하는 VM 제어 프로그램을 실행할 수 있다. 기본 모드, LPAR 모드, 논리적 파티션, 하이퍼바이저, 및 가상 기계라는 용어들 및 이 용어들과 특별히 관련된 임의의 기타 용어들이 이 간행물에서 정의되지 않으며, 이들은 기계 매뉴얼에서 정의된다. 레벨-1 구성(기본 기계)에 의해 실행되는 프로그램은 그 구성에 관한 정보를 요청할 수 있다. 레벨-2 구성에 의해(논리적 파티션에서) 실행되는 프로그램은 논리적 파티션 및 기반을 이루는 기본 기계에 관한 정보를 요청할 수 있다. 레벨-3 구성(가상 기계)에 의해 실행되는 프로그램은 가상 기계 및 하나 또는 2개의 기반 레벨에 관한 정보를 요청할 수 있으며, 기본 기계는 항상 기반을 이루며 논리적 파티션은 기본 기계와 가상 기계 사이에 있거나 그렇지 않을 수 있다. 가상 기계에 관한 정보가 요청될 때, 프로그램을 실행하는 구성 및 가상 기계의 임의의 기반 레벨 또는 레벨들에 관한 정보가 제공된다. 이 경우들 중 임의의 것에서, 레벨이 명령어를 구현하는 경우에만 그 레벨에 관한 정보가 제공된다.
동작을 결정하는 함수 코드는 범용 레지스터 0의 비트 위치 32-35에 있는 부호없는 이진 정수이며, 다음과 같다:
함수 코드 요청된 정보:
------------------------------
0 현재-구성-레벨 번호
1 레벨 1(기본 기계)에 관한 정보
2 레벨 2(논리적 파티션)에 관한 정보
3 레벨 3(가상 기계)에 관한 정보
4-14 없음: 코드들이 예비되어 있음
15 현재-구성-레벨 정보
유효하지 않은 함수 코드:
프로그램을 실행시키는 구성의 레벨은 현재 레벨(current level)이라고 한다. 영이 아닌 함수 코드에 의해 지정된 구성 레벨은 지정된 레벨(specified level)이라고 한다. 지정된 레벨이 현재 레벨보다 더 높은 숫자를 갖는 경우, 함수 코드가 유효하지 않다고 하고, 조건 코드가 3으로 설정되며, 어떤 다른 동작(검사를 포함함)도 수행되지 않는다.
유효한 함수 코드:
함수 코드가 현재 레벨의 숫자보다 작거나 같은 경우, 함수 코드가 유효하다고 한다. 이 경우에, 범용 레지스터 0의 비트 36-55 및 범용 레지스터 1의 비트 32-47은 0 또는 15이어야만 하고, 그렇지 않은 경우, 지정 예외(specification exception)가 인식된다. 범용 레지스터 0 및 1의 비트 0-31은 항상 무시된다. 함수 코드가 0인 경우, 현재 구성 레벨을 식별하는 부호없는 이진 정수(기본 기계에 대해 1, 논리적 파티션에 대해 2, 또는 가상 기계에 대해 3임)가 범용 레지스터 0의 비트 위치 32-35에 배치되고, 조건 코드가 0으로 설정되며, 어떤 추가의 동작도 수행되지 않는다. 함수 코드가 유효하고 영이 아닌 경우, 범용 레지스터 0 및 1은 다음과 같이 요청된 정보에 관한 추가적인 지정을 포함한다:
ㆍ 범용 레지스터 0의 비트 위치 56-63은 지정된 구성의 컴포넌트 또는 컴포넌트들을 지정하는 셀렉터 1이라고 하는 부호 없는 이진 정수를 포함한다.
ㆍ 범용 레지스터 1의 비트 위치 48-63은 요청된 정보의 유형을 지정하는 셀렉터 2(selector 2)라고 하는 부호없는 이진 정수를 포함한다.
범용 레지스터 0 및 1의 내용이 도 4에 나타내어져 있다.
함수 코드가 유효하고 영이 아닌 경우, 정보가 SYSIB(system-information block)에 제2-피연산자 위치에서 시작하여 저장될 수 있다. SYSIB는 4K 바이트이고, 4K-바이트 경계에서 시작되어야 하며, 그렇지 않은 경우, 셀렉터 1 및 셀렉터 2에 따라 그리고 SYSIB에 대한 참조로 인해 액세스 예외가 인식되는지 여부에 따라 지정 예외가 인식될 수 있다. 셀렉터 1은 다음과 같은 값들을 가질 수 있다:
셀렉터 1 요청된 정보
----------------------------------
0 없음: 셀렉터가 예비되어 있음
1 함수 코드에 의해 지정된 구성 레벨에 관한 정보
2 지정된 구성 레벨에 있는 하나 이상의 CPU들에 관한 정보
3- 255 없음: 셀렉터가 예비되어 있음
셀렉터 1이 1일 때, 셀렉터 2는 다음과 같은 값들을 가질 수 있다:
셀렉터 1이 1일 때
셀렉터 2 요청된 정보
----------------------------------------------
0 없음: 셀렉터가 예비되어 있음
1 지정된 구성 레벨에 관한 정보
2 지정된 구성 레벨에 관한 토폴로지 정보
3-65,535 없음: 셀렉터가 예비되어 있음
셀렉터 1이 2일 때, 셀렉터 2는 다음과 같은 값들을 가질 수 있다:
셀렉터 1이 2일 때
셀렉터 2 요청된 정보
-------------------------------------------------
0 없음: 셀렉터가 예비되어 있음
1 지정된 구성 레벨에서 프로그램을 실행하는 CPU에
관한 정보
2 지정된 구성 레벨에 있는 모든 CPU들에 관한 정보
3-65,535 없음: 셀렉터가 예비되어 있음
도 5에 나타낸 바와 같이, 함수 코드, 셀렉터 1 및 셀렉터 2의 소정 조합들만이 유효하다.
지정된 함수-코드, 셀렉터-1, 셀렉터-2 조합이 유효하지 않을 때(도 5에 나타낸 것 이외의 것일 때), 또는 이 지정된 조합이 유효하지만 지정된 레벨이 명령어를 구현하지 않거나 충분히 구현하지 않기 때문에 또는 그 레벨의 필요한 부분이 설치되어 있지 않거나 초기화되어 있지 않기 때문에 요청된 정보가 이용가능하지 않을 경우, 그리고 예외가 인식되지 않은 경우, 조건 코드가 3으로 설정된다. 함수 코드가 영이 아니고, 그 조합이 유효하며, 요청된 정보가 이용가능하고, 예외가 없는 경우, 요청된 정보가 SYSIB(system-information block)에서 제2-피연산자 주소에 저장된다.
SYSIB의 일부 또는 그 전부는 저장되기 전에 페치될 수 있다.
SYSIB는 "SYSIB fc.s1.s2"에 의한 참조에서 식별될 수 있으며, 여기서 "fc," "s1," 및 "s2"는 제각기 함수 코드, 셀렉터 1, 및 셀렉터 2의 값이다.
이하의 섹션들에서 도면들 및 관련 텍스트를 사용하여 정의된 SYSIB에 대해 설명한다. 도면들에서, 좌측에 나타낸 오프셋은 워드값(하나의 워드는 4 바이트를 포함함)이다. "구성"은 함수 코드에 의해 지정된 구성 레벨(어떤 정보가 요청되는지에 관한 구성 레벨)을 말한다.
SYSIB 1.1.1 (기본-기계 구성)
SYSIB 1.1.1은 도 6에 나타낸 포맷을 가지며, 여기서 필드들은 다음과 같은 의미들을 갖는다:
예비됨: 워드 0-7, 13-15 및 29-63의 내용이 예비되어 있으며, 0으로서 저장되어 있다. 워드 64-1023의 내용이 예비되어 있으며, 0으로서 저장될 수 있거나 그대로 있을 수 있다.
제조업체: 워드 8-11은 구성의 제조업체의 16-문자(0-9 또는 대문자 A-Z) EBCDIC 이름을 포함한다. 이 이름은 필요한 경우 좌측 정렬되고 후미 공백들을 갖는다.
유형: 워드 12는 구성의 4-문자(0-9) EBCDIC 유형 번호를 포함한다. (이것은 STORE CPU ID의 정의에서 기계-유형 번호(machine-type number)라고 한다.)
모델-용량 식별자: 워드 16-19는 구성의 16-문자(0-9 또는 대문자 A-Z) EBCDIC 모델-용량 식별자를 포함한다. 모델-용량 식별자는 필요한 경우 좌측 정렬되고 후미 공백들을 갖는다.
시퀀스 코드: 워드 20-23은 구성의 16-문자(0-9 또는 대문자 A-Z) EBCDIC 시퀀스 코드를 포함한다. 시퀀스 코드는 필요한 경우 우측 정렬되고 필요한 경우 선두 EBCDIC 0들을 갖는다.
제조 기기(Plant of Manufacture): 워드 24는 구성의 제조 기기를 식별하는 4-문자(0-9 또는 대문자 A-Z) EBCDIC 코드를 포함한다. 이 코드는 필요한 경우 좌측 정렬되고 후미 공백들을 갖는다.
모델: 워드 25가 이진 0이 아닐 때, 워드 25-28은 구성의 16-문자(0-9 또는 대문자 A-Z) EBCDIC 모델 아이디(identification)를 포함한다. 이 모델 아이디는 필요한 경우 좌측 정렬되고 후미 공백들을 갖는다. (이것은 STORE CPU ID의 페이지 10-111의 프로그래밍 유의점 4에서 모델 번호라고 불린다.) 워드 25가 이진 0일 때, 워드 16-19의 내용은 모델-용량 식별자 및 모델 둘다를 나타낸다.
프로그래밍 유의점:
1. SYSIB 1.1.1의 필드들은 간행물 Common I/O-Device Commands and Self Description에 기술된 노드 기술자(node descriptor)의 필드들과 유사하다. 그러나, SYSIB 필드들의 내용은 대응하는 노드-기술자 필드들의 내용과 동일하지 않을 수 있는데, 그 이유는 SYSIB 필드들이
ㆍ 더 많은 문자들을 허용하고,
ㆍ 허용되는 문자들의 유형에 관해 더 유연성이 있고,
ㆍ 필드 내에서 서로 다르게 정렬되는 정보를 제공하고,
ㆍ 시퀀스 코드 필드 등 필드들의 내용을 결정하는 데 동일한 방법을 사용하지 않을 수 있기 때문이다.
2. 노드 기술자의 모델 필드는 STSI 모델-용량-식별자 필드가 아니라 STSI 모델 필드의 내용에 대응한다.
3. 모델 필드는 기계의 모델(즉, 물리적 모델)을 지정하고, 모델 용량 식별자 필드는 모델에 대한 시스템 라이브러리 간행물에서 용량 또는 성능에 관한 설명을 찾아내는 데 사용될 수 있는 토큰(token)을 지정한다.
SYSIB 1.2.1 (기본-기계 CPU)
SYSIB 1.2.1은 도 7에 도시된 포맷을 가지며, 여기서 필드들은 다음과 같은 의미들을 갖는다.
예비됨: 워드 0-19, 워드 25의 바이트 0 및 1, 그리고 워드 26-63의 내용이 예비되어 있으며, 0으로 저장되어 있다. 워드 64-1023의 내용이 예비되어 있으며, 0으로서 저장될 수 있거나 그대로 있을 수 있다.
시퀀스 코드: 워드 20-23은 구성의 16-문자(0-9 또는 대문자 A-Z) EBCDIC 시퀀스 코드를 포함한다. 이 코드는 필요한 경우 우측 정렬되고 선두 EBCDIC 0들을 갖는다.
제조 기기(Plant of Manufacture): 워드 24는 구성의 제조 기기를 식별하는 4-문자(0-9 또는 대문자 A-Z) EBCDIC 코드를 포함한다. 이 코드는 필요한 경우 좌측 정렬되고 후미 공백들을 갖는다.
CPU 주소: 워드 25의 바이트 2 및 3은 CPU 주소를 포함하는데, CPU 주소에 의해 멀티프로세싱 구성에서 이 CPU가 식별된다. CPU 주소는 16-비트 부호 없는 이진 정수이다. CPU 주소는 프로그램이 기본 모드에서 동작하는 기계에 의해 실행될 때 STORE CPU ADDRESS에 의해 저장된 것과 동일하다.
프로그래밍 유의점:
동일한 구성 내의 다수의 CPU들이 동일한 시퀀스 코드를 가지며, 고유의 CPU 아이덴티티(identity)를 설정하기 위해 CPU 주소 등의 기타 정보를 사용할 필요가 있다. 기본-기계 CPU 및 논리적-파티션 CPU에 대해 반환된 시퀀스 코드가 동일하고, 기본-기계 구성에 대해 반환된 시퀀스 코드와 동일한 값을 갖는다.
SYSIB 1.2.2 (기본-기계 CPU)
워드 0의 바이트 0에 있는 포맷 필드는 SYSIB의 포맷을 결정한다. 포맷 필드가 0의 값을 가질 때, SYSIB 1.2.2는 도 8에 도시된 바와 같은 포맷-0 레이아웃을 갖는다. 포맷 필드가 1의 값을 가질 때, SYSIB 1.2.2는 도 9에 도시된 바와 같은 포맷-1 레이아웃을 갖는다.
예비됨:
포맷 필드가 0의 값을 포함할 때, 워드 0의 바이트 1-3 및 워드 1-6의 내용이 예비되어 있으며 0으로 저장된다. 포맷 필드가 1의 값을 포함할 때, 워드 0의 바이트 1 및 워드 1-6의 내용이 예비되어 있으며 0으로 저장된다. CPU들 전부에 대한 정보를 포함하는 데 64보다 적은 수의 워드가 필요한 경우, 포맷-0 SYSIB에서 조절-인자 리스트(adjustment-factor list) 또는 포맷-1 SYSIB에서 대안의 조절-인자 리스트 다음의 워드 63까지의 SYSIB의 부분은 예비되어 있고 0으로서 저장된다. 워드 64-1023의 내용이 예비되어 있으며, 0으로 저장될 수 있거나 그대로 있을 수 있다. CPU들 전부에 대한 정보를 포함하는 데 64개 이상의 워드가 필요한 경우, 포맷-0 SYSIB에서 조절-인자 리스트 또는 포맷-1 SYSIB에서 대안적인 조절-인자 리스트 다음의 워드 1023까지의 SYSIB 부분은 예비되어 있으며 0으로 저장되거나 그대로 있을 수 있다.
포맷:
워드 0의 바이트 0는 SYSIB 1.2.2의 포맷을 지정하는 8-비트 부호 없는 이진 정수를 포함한다.
대안적인-CPU-능력 오프셋(Capability Offset):
포맷 필드가 1의 값을 가질 때, 워드 0의 바이트 2-3은 SYSIB에서 대안적인-CPU-능력 필드의 오프셋을 바이트 단위로 지정하는 16-비트 부호 없는 이진 정수를 포함한다.
보조 CPU 능력:
워드 7은, 0이 아닐 때, 구성에서 소정 유형의 CPU들에 적용될 수 있는 보조 능력(secondary capability)을 지정하는 32-비트 부호 없는 이진 정수를 포함한다. CPU 능력을 발생시키는 데 사용되는 알고리즘과 동일하다는 것을 제외하고는, 이 정수를 발생하는 데 사용되는 알고리즘에 대한 정형화된 설명이 없다. 다른 CPU 모델들의 능력에 대한 CPU 능력이자, 또한 모델 내의 다른 CPU 유형들의 능력에 대한 CPU의 능력의 표시로서 이 정수가 사용된다. 이 능력값(capability value)은 구성에서의 하나 이상의 적용가능한 CPU 유형들의 각각의 CPU들에 적용된다. 즉, 적용가능한 유형 또는 유형들의 구성 내의 모든 CPU들은 동일한 능력을 갖는다는 것을 의미한다. 이 값이 0일 때, 구성 내의 임의의 CPU 유형의 모든 CPU들은, CPU 능력으로 지정된 바와 같이, 동일한 능력을 갖는다. 보조 CPU 능력은 CPU-능력값과 동일한 값일 수도 있고 그렇지 않을 수 있다. 멀티프로세싱-CPU-능력-조절 인자들은 또한 보조 CPU 능력에 의해 그 능력이 지정되는 CPU들에 적용가능하다.
CPU 능력:
워드 8의 비트 0-8이 0인 경우, 워드는 구성 내의 CPU들 중 하나의 능력을 지정하는 32-비트 부호없는 이진 정수(I)를 포함하며, 이는 범위 0<I<223에 존재한다. 워드 8의 비트 0-8이 영이 아닌 경우, 워드는 32-비트 부호 없는 이진 정수 대신에 32-비트 이진 부동 소수점 쇼트-포맷 숫자(binary floating point short-format number)를 포함한다. 인코딩에 상관없이, 낮은 값은 그에 비례하여 높은 CPU 용량을 나타낸다. 이를 넘어서(beyond that), 이 값을 발생하는 데 사용되는 알고리즘에 대한 정형화된 설명이 없다. 이 값은 기타 CPU 모델들의 능력에 대한 CPU의 능력의 표시로서 사용된다. 이 능력값은 구성 내의 비보조 CPU들 각각에 적용된다. 즉, 구성 내의 모든 비보조 CPU들은 동일한 능력을 갖는 것을 의미한다.
총 CPU 갯수:
워드 9의 바이트 0 및 1은 구성 내의 CPU들 총 수를 지정하는 16-비트 부호 없는 이진 정수를 포함한다. 이 숫자는 구성된 상태(configured state), 대기 상태(standby state), 또는 예비된 상태(reserved state)에 있는 모든 CPU들을 포함한다.
구성된 CPU 갯수:
워드 9의 바이트 2 및 3은 구성된 상태에 있는 CPU들의 수를 지정하는 16-비트 부호 없는 이진 정수를 포함한다. CPU가 구성 상태에 있을 때, 구성 내에 있으며 프로그램을 실행하는 데 사용될 수 있다.
대기 CPU 갯수:
워드 10의 바이트 0 및 1은 대기 상태에 있는 CPU들의 수를 지정하는 16-비트 부호 없는 이진 정수를 포함한다. CPU가 대기 상태에 존재할 때, 구성 내에 있으며 프로그램을 실행하는 데 사용없고 구성 상태에 두기 위한 명령어를 발행함(issuing)으로써 이용가능하게 될 수 있다.
예비된 CPU 갯수:
워드 10의 바이트 2 및 3은 예비된 상태에 있는 CPU들의 수를 지정하는 16-비트 부호 없는 이진 정수를 포함한다. CPU가 예비된 상태에 있을 때, 구성 내에 있고, 프로그램을 실행하는 데 사용될 수 없으며, 구성된 상태에 두기 위한 명령어를 발행함으로써 이용가능하게 될 수 없다. (예비된 CPU를 수동 조작에 의해 대기 상태 또는 구성된 상태에 놓을 수 있다.)
멀티프로세싱 CPU-능력 조절 인자들:
워드 11의 바이트 0 및 1에서 시작하여, SYSIB는 일련의 연속적인 2-바이트 필드들을 포함하며, 각각의 필드는 CPU-능력 필드에 포함된 값에 대한 조절 인자(소수; fraction)를 형성하는 데 사용되는 16-비트 부호 없는 이진 정수를 포함한다. 이러한 소수는 이하의 방법들 중 하나에 따라 제1(first) 2-바이트 필드의 값(V)을 사용하여 발생된다:
ㆍ V가 0<V≤100의 범위에 있는 경우, V/100의 소수를 생성하는 분모 100이 표시된다.
ㆍ V가 101≤V<255의 범위에 있는 경우, V/255의 소수를 생성하는 분모 255가 표시된다.
ㆍ V가 255≤V≤65,536의 범위에 있는 경우, V/65,536의 소수를 생성하는 분모 65,536이 표시된다.
이에 따라, 각각의 2-바이트 필드에 의해 표현되는 소수는 2 바이트 필드의 내용을 표시된 분모로 나눔으로써 발생된다. 조절-인자 필드들의 수는 총-CPU 갯수 필드에 지정된 CPU들의 수보다 1개 더 적다. 조절-인자 필드들은 구성된 상태에서 점점 증가하는 수의 CPU들을 갖는 구성들에 대응한다. 제1 조절-인자 필드는 구성된 상태에서 2개의 CPU를 갖는 구성에 대응한다. 각각의 연속적인 조절-인자 필드는 구성된 상태에서 이전의 필드에 대한 것보다 1개 더 많은 수의 CPU들을 갖는 구성에 대응한다.
대안적인 CPU 능력:
포맷 필드가 1의 값을 가질 때, 워드 N의 비트 0-8이 0인 경우, 워드는 구성 내의 CPU들 중 하나의 고시된(announced) 능력을 지정하는 32-비트 부호 없는 이진 정수(I)를 포함하며, 이는 0≤I<223의 범위를 갖는다. 워드 N의 비트 0-8이 영이 아닌 경우, 워드는 32-비트 부호 없는 이진 정수 대신에 32-비트 이진 부동 소수점 쇼트-포맷 숫자를 포함한다. 인코딩에 상관없이, 낮은 값은 그에 비례하여 높은 CPU 용량을 나타낸다. 이를 넘어서서, 이 값을 발생시키는 데 사용되는 알고리즘에 대한 정형화된 설명이 없다. 이 값은 다른 CPU 모델들의 된 능력에 대한 CPU의 고시된 능력의 표시로서 사용된다. 대안적인-능력값은 구성 내의 CPU들 각각에 적용된다. 즉, 구성 내의 모든 CPU들은 동일한 대안적인 능력을 갖는다는 것을 의미한다.
대안적인 멀티프로세싱 CPU-능력 조절 인자들:
워드 N+1의 바이트 0 및 1에서 시작하여, SYSIB는 일련의 연속적인 2-바이트 필드들을 포함하며, 각각의 필드는 대안적인-CPU-능력 필드에 포함된 값에 대한 조절 인자(소수)를 형성하는 데 사용되는 16-비트 부호 없는 이진 정수를 포함한다. 이러한 소수는 이하의 방법들 중 하나에 따라 제1(first) 2-바이트 필드의 값(V)을 사용하여 발생된다.
ㆍ V가 0<V≤100의 범위에 있는 경우, V/100의 소수를 생성하는 분모 100이 표시된다.
ㆍ V가 101≤V<255의 범위에 있는 경우, V/255의 소수를 생성하는 분모 255가 표시된다.
ㆍ V가 255≤V<65,536의 범위에 있는 경우, V/65,536의 소수를 생성하는 분모 65,536이 표시된다.
이에 따라, 각각의 2-바이트 필드에 의해 표현되는 소수는 2 바이트 필드의 내용을 표시된 분모로 나눔으로써 발생된다. 대안적인-조절-인자 필드들의 수는 총-CPU-갯수 필드에 지정된 CPU들의 수보다 1개 더 적다. 대안적인-조절-인자 필드들은 구성된 상태에서 점점 증가하는 수의 CPU들을 갖는 구성에 대응한다. 제1 대안적인-조절-인자 필드는 구성된 상태에서 2개의 CPU를 갖는 구성에 대응한다. 각각의 연속적인 대안의-조절-인자 필드는 구성된 상태에서 이전의 필드에 대한 것보다 1개 더 많은 수의 CPU들을 갖는 구성에 대응한다.
SYSIB 15.1.2 (구성 토폴로지)
SYSIB 15.1.2는 도 10에 도시된 포맷을 갖는다. 필드들은 다음과 같은 의미를 갖는다.
예비됨: 워드 0의 바이트 0-1, 워드 2의 바이트 2, 및 워드 3의 내용은 예되어 있으며, 0으로 저장되어 있다. 워드 N-1023의 내용은 예비되어 있으며, 0으로 저장될 수 있거나 그대로 있을 수 있다.
길이: 워드 0의 바이트 2-3은 전체 SYSIB 15.1.2의 바이트들의 수인 값을 갖는 16-비트 부호없는 이진 정수를 포함한다. 토폴로지 리스트만의 길이가 워드 0의 바이트 2-3에 있는 길이값으로부터 16을 감산함으로써 구해진다. 도 10에서의 N은 수식 N = 길이/4를 계산함으로써 구해진다.
Mag1-6: 워드 및 워드의 바이트 0-1은 6개의 1-바이트 필드들을 구성하며, 여기서 각각의 바이트의 내용은 대응하는 네스팅 레벨에 있는 컨테이너-유형 토폴로지-리스트 엔트리들(topology-list entries, TLE들) 또는 CPU-유형 TLE들의 최대 수를 나타낸다. CPU-유형 TLE들은 오직 Mag1 레벨에서 항상 발견된다. 또한, Mag1 값은 또한 Mag2 레벨의 컨테이너-유형 TLE에 의해 표현될 수 있는 CPU들의 최대 수를 지정한다. 네스팅 레벨의 값이 1보다 클 때, Mag1 레벨 위쪽의 포함하는 네스팅 레벨들은 오직 컨테이너-유형 TLE들에 의해 점유된다. 토폴로지에 대한 동적 변경은 TLE들의 수 및 Mag1 레벨에 있는 CPU들의 수를 수정할 수 있지만, Mag1-6 필드들의 값으로 표현된 한계는 모델 계열의 기계들(model family of machines) 내에서 변하지 않는다.
토폴로지는 엔트리들의 구조화된 리스트(structured list)이며, 여기서 엔트리는 하나 이상의 CPU들을 정의하거나 네스팅 구조와 연관되어 있다. 이하에서는 크기 필드(magnitude field)의 의미에 대해 설명한다.
기계의 모든 CPU들이 피어들(peers)이고 중앙-처리 컴플렉스(central-processing complex) 전체 그 자신 이외에 견제 조직(containment organization)이 존재하지 않을 때, 네스팅 레벨의 값은 1이고, Mag1이 유일한 영이 아닌 크기 필드이며, 저장된 CPU-유형 TLE들의 수는 Mag1 값을 초과하지 않는다.
한 레벨의 견제(containment)가 존재하도록 기계의 모든 CPU들이 피어 그룹들로 세분될 때, 네스팅 레벨의 값이 2이고, Mag1 및 Mag2가 유일한 영이 아닌 크기 필드이며, 저장된 컨테이너-유형 TLE들의 수가 Mag2 값을 초과하지 않고, 각각의 컨테이너 내에 저장된 CPU-유형 TLE들의 수가 Mag1 값을 초과하지 않는다.
네스팅 레벨의 값이 3-6의 범위에 속할 때 Mag3-6 바이트들이 유사하게 사용된다(우측에서 좌측 방향으로 진행함).
MNest: 워드 2의 바이트 3은 게스트 프로그램이 계속 생존할 수 있게 하면서 구성이 확장될 수 있는 토폴로지의 네스팅 레벨을 지정한다. 최대 MNest 값은 6이고, 최소값은 1이다. MNest가 1인 경우, 실제의 TLE 네스팅 구조는 없고, Mag1-6의 범위에서 Mag1이 유일한 영이 아닌 필드이며, 오직 CPU-유형 TLE들이 토폴리지 리스트에 표현된다. MNest 값은 워드 2의 바이트에 있는 크기 필드(Mag1)에서 시작하는 영이 아닌 크기 값들의 수를 나타내며, MNest가 1보다 클 때 좌측으로 진행하고, 나머지 크기 필드들이 0으로 저장된다.
MNest의 값은 가능한 최대 네스팅이다. 어떤 동적 구성 변경도 이 한계를 초과하지 않는다.
토폴로지 리스트: 4 내지 N-1의 범위에 있는 도 10의 워드들은 하나 이상의 토폴로지-리스트 엔트리들(TLE)의 리스트를 지정한다. 각각의 TLE는 8-바이트 또는 16-바이트 필드이며, 따라서 N은 짝수 개의 워드이고, 그 결과(corollary)로 TLE는 항상 더블워드 경계에서 시작한다.
토폴로지-리스트 엔트리: 토폴로지 리스트에서의 제1 TLE는 MNest-1인 네스팅 레벨에서 시작한다. 전체 토폴로지 리스트는 SYSIB 15.1.2를 지정하는 STSI 명령어의 발행자(issuer)의 구성을 나타내며, 최외각 컨테이너 TLE 엔트리는 사용되지 않는데, 그 이유는 그 엔트리가 전체 리스트 및 전체 구성에서 중복적일 수 있기 때문이다. 따라서, 최고 네스팅 레벨은 2개 이상의 피어 컨테이너들을 가질 수 있다.
도 11 및 도 12는 TLE의 유형들을 나타낸 것으로서, 여기서 필드들은 다음과 같은 정의들을 갖는다:
네스팅 레벨(NL): 워드 0의 바이트 0은 TLE 네스팅 레벨을 지정한다.
NL 의미
---------------------
0 TLE가 CPU-유형 TLE임
1-5 TLE가 컨테이너-유형 TLE임
토폴로지 리스트 또는 부모 컨테이너에 저장된 제1 컨테이너-유형 TLE는 1-255의 범위에 있는 컨테이너-ID를 갖는다. 형제 컨테이너들이 동일한 부모 내에 존재하는 경우, 그들은 컨테이너 ID의 오름차순으로(연속적이거나 그렇지 않을 수 있음) 최대값 255까지 진행된다.
06-FF 예비됨
형제 TLE들은 직접적인 부모(immediate parent) TLE의 네스팅 레벨 값 - 1 또는 MNest의 값 - 1과 동등한 동일한 네스팅 레벨 값을 갖는데, 그 이유는 직접적인 부모가 TLE라기 보다는 토폴로지 리스트이기 때문이다.
예비됨, 0: 컨테이너-유형 TLE의 경우, 워드 0의 바이트 1-3 및 워드 1의 바이트 0-2는 예비되어 있으며, 0으로 저장되어 있다. CPU-유형 TLE의 경우, 워드 0의 바이트 1-3 및 워드 1의 바이트 0-4는 예비되어 있으며, 0으로 저장되어 있다.
컨테이너 ID:
컨테이너-유형 TLE의 워드 1의 바이트는 컨테이너의 식별자의 값을 갖는 8-비트 부호 없는 영이 아닌 이진 정수를 지정한다. TLE에 대한 컨테이너 ID는 동일한 부모 컨테이너 내에서 고유하다.
전용됨(D):
CPU-유형 TLE의 워드 1의 비트 5는, 1일 때, TLE에 의해 표현되는 하나 이상의 CPU들이 전용되어 있음을 나타낸다. D가 0일 때, TLE의 하나 이상의 CPU들은 전용되어 있지 않다.
극성화(PP):
CPU-유형 TLE의 워드 1의 비트 6-7은 극성화 값을 지정하고, 극성화가 수직일 때, 자격(상위, 중간, 하위)이라 불리는 대응하는 CPU(들)의 수직 극성화의 등급이 TLE에 의해 표현된다. 이하의 값들이 사용된다.
PP 의미:
0 TLE에 의해 표현된 하나 이상의 CPU들이 수평 극성화되어 있음
1 TLE에 의해 표현된 하나 이상의 CPU들이 수직 극성화되어 있음
자격이 하위임
2 TLE에 의해 표현된 하나 이상의 CPU들이 수직 극성화되어 있음
자격이 중간임
3 TLE에 의해 표현된 하나 이상의 CPU들이 수직 극성화되어 있음
자격이 상위임
극성화는 공유 호스트 프로세서들을 사용하고 구성에 할당되는 자원이 구성의 CPU들에 걸쳐 어떻게 적용되는지를 해결하는 논리적 및 가상 멀티프로세싱 구성에서 중요할 뿐이다. 수평 극성화가 실시될 때, 구성의 각각의 CPU는 대략 동일한 양의 자원을 보장받는다. 수직 극성화가 실시될 때, 구성의 CPU들은 3가지 레벨의 자원 자격(resource entitlement), 상위, 중간 및 하위로 분류된다.
서브시스템 리셋 및 ESA/390 모드를 지정하는 SIGP 세트-아키텍처 순서의 성공적인 실행 둘다가 구성 및 그의 CPU들 전부를 수평 극성화에 둔다. 즉각 영향을 받는 CPU들은 구성된 상태에 있는 것들이다. 대기 상태에 있는 CPU가 구성될 때, 그 CPU는 구성의 현재 극성화(current polarization)를 획득하고 그 구성의 토폴로지 변경이 인식되게 한다.
전용된 CPU는 수평 극성화 또는 수직 극성화되어 있다. 전용된 CPU가 수직 극성화되어 있는 경우, 자격은 항상 상위이다. 이에 따라, D가 1인 경우, PP는 이진 00이거나 이진 11이다.
CPU 유형:
CPU-유형 TLE의 워드 1의 바이트 1은 TLE에 의해 표현되는 하나 이상의 CPU들의 CPU 유형인 값을 갖는 8-비트 부호 없는 이진 정수를 지정한다. CPU-유형 값은 주-CPU 유형(primary-CPU type) 또는 가능한 보조-CPU 유형들(secondary-CPU type) 중 임의의 하나를 지정한다.
CPU-주소 시점(CPU-Address Origin):
CPU-유형 TLE의 워드 1의 바이트 2-3은 CPU 마스크에 의해 표현되는 CPU들의 범위 내의 제1 CPU의 CPU 주소인 값을 갖는 16-비트 부호 없는 이진 정수를 지정하며, 그 존재는 CPU 마스크에서 비트 위치 0의 값으로 표현된다. CPU-주소 시점은 64로 고르게 나누어 떨어진다. CPU-주소 시점의 값은 CPU 마스크에서 비트 위치 0으로 표현되는 CPU 상에서 실행될 때 STORE CPU ADDRESS(STAP) 명령어에 의해 저장되는 것과 동일하다.
CPU 마스크:
CPU-유형 TLE의 워드 2-3은 64-비트 마스크를 지정하며, 각각의 비트 위치는 CPU를 나타낸다. CPU-주소 시점 필드의 값과 CPU 마스크에서의 비트 위치를 합한 값은 대응하는 CPU에 대한 CPU 주소와 같다. CPU 마스크 비트가 0일 때, 대응하는 CPU는 TLE에 의해 표현되지 않는다. CPU가 구성 내에 있지 않거나 다른 CPU-유형 TLE에 의해 표현되어야만 한다.
CPU 마스크가 1일 때, 대응하는 CPU는 TLE에 의해 지정되는 수정자-속성 값들(modifier-attribute values)을 가지며, 구성의 토폴로지 내에 있고, 토폴로지의 임의의 다른 TLE에 존재하지 않는다.
이에 따라, 예를 들어, CPU-주소 시점이 64의 값이고 CPU 마스크의 비트 위치 15가 1인 경우, CPU 79는 구성 내에 있고 TLE에 의해 지정된 바와 같은 CPU 유형, 극성화, 자격, 및 전용을 갖는다.
TLE 정렬:
CPU-유형 TLE에 적용되는 수정자 속성들은 CPU 유형, 극성화, 자격, 및 전용이다. (수직 극성화에 대한) 극성화 및 자격은 4가지 가능한 값(수평, 수직-상위, 수직-중간, 및 수직-하위)을 갖긴 하지만, 하나의 속성으로서 여겨진다.
모두가 동일한 수정자-속성 값을 갖는 64개나 되는 CPU를 표현하는 데 하나의 CPU TLE로 충분하다.
64개보다 많은 CPU가 존재하거나 CPU 주소의 전체 범위가 하나의 CPU-주소 시점으로 커버되지 않고 수정자 속성이 일정할 때, 필요에 따라 CPU-주소 시점의 오름차순으로 각각의 CPU-주소 시점에 대해 별도의 형제 CPU TLE가 저장된다. 각각의 저장된 이러한 TLE는 표현된 적어도 하나의 CPU를 갖는다. 하나 이상의 이러한 CPU TLE의 모음을 CPU-TLE 세트라고 한다.
다수의 CPU 유형이 존재할 때, 개별적인 CPU-TLE 세트는 각각에 대해 CPU 유형의 오름차순으로 저장된다.
다수의 극성화 및 자격 값이 존재할 때, 별도의 CPU-TLE 세트는 각각에 대해 극성화 값 및 등급의 내림차순으로(수직 상위, 중간, 하위, 그 다음 수평) 저장된다. 주어진 CPU 유형의 모든 극성화 CPU-TLE 세트는, 그 것이 존재할 때, 그 다음 CPU 유형의 그 다음 CPU-TLE 세트 이전에 저장된다.
전용된 CPU 및 전용되지 않은 CPU 둘다 존재할 때, 개별적인 CPU-TLE 세트는 각각에 대해 저장되며, 전용된 CPU가 전용되지 않은 CPU보다 앞에 등장한다. 깊이 우선 순회(depth-first traversal)를 가정하여 모든 TLE가 정렬되며, 주된 것으로부터 마이너한 것으로의 정렬 순서는 다음과 같다:
1. CPU 유형
a. 최저 CPU-유형 값
b. 최고 CPU-유형 값
2. 극성화-자격
a. 수직 상위
b. 수직 중간
c. 수직 하위
d. 수평
3. 전용(적용가능한 경우)
a. 전용됨
b. 전용되지 않음
부모 컨테이너 내의 형제 CPU TLE들의 수정자 속성들 및 CPU-주소 시점에 의한 정렬은 이하의 리스트에 따라 행해지며, 최고로부터 최저로 진행된다.
1. 최저 CPU-유형 값, 수직 상위, 전용되는 CPU-TLE 세트
2. 최저 CPU-유형 값, 수직 상위, 전용되지 않는 CPU-TLE 세트
3. 최저 CPU-유형 값, 수직 중간, 전용되지 않는 CPU-TLE 세트
4. 최저 CPU-유형 값, 수직 하위, 전용되지 않는 CPU-TLE 세트
5. 최저 CPU-유형 값, 수평, 전용되는 CPU-TLE 세트
6. 최저 CPU-유형 값, 수평, 전용되지 않는 CPU-TLE 세트
7. 최고 CPU-유형 값, 수직 상위, 전용되는 CPU-TLE 세트
8. 최고 CPU-유형 값, 수직 상위, 전용되지 않는 CPU-TLE 세트
9. 최고 CPU-유형 값, 수직 중간, 전용되지 않는 CPU-TLE 세트
10. 최고 CPU-유형 값, 수직 하위, 전용되지 않는 CPU-TLE 세트
11. 최고 CPU-유형 값, 수평, 전용되는 CPU-TLE 세트
12. 최고 CPU-유형 값, 수평, 전용되지 않는 CPU-TLE 세트
기타 TLE 규칙들:
1. 컨테이너-유형 TLE는 1-5의 범위에 있는 네스팅 레벨에 위치함.
2. CPU-유형 TLE는 네스팅 레벨 0에 위치함.
3. 토폴로지 리스트 또는 주어진 부모 컨테이너 내의 형제 컨테이너-유형 TLE들의 수는 형제들에 대응하는 네스팅 레벨의 크기 바이트(Mag2-6)의 값을 초과하지 않는다.
4. 부모 컨테이너의 하나 이상의 CPU-유형 TLE들에 의해 표현되는 CPU들의 수는 Mag1 크기 바이트의 값을 초과하지 않는다.
5. TLE의 내용은 다음과 같이 정의된다:
a) TLE가 컨테이너-유형 TLE인 경우, 내용은 하나 이상의 자식 TLE들로 이루어진, 부모 TLE 바로 다음에 오는 리스트이며, 각각의 자식 TLE는 부모 TLE 또는 토폴로지-리스트 끝의 네스팅 레벨보다 하나 작은 네스팅 레벨을 갖는다.
b) TLE가 CPU-유형 TLE인 경우, 내용은 CPU TLE의 나머지 다른 필드들에 의해 식별되는 바와 같은 하나 이상의 CPU들이다.
네스팅 레벨에서의 제1 TLE가 CPU 엔트리일 때, 최대 네스팅 레벨 0에 도달하게 된다.
프로그래밍 유의점:
토폴로지 리스트의 가능한 검사 프로세스가 기술된다. 토폴로지 리스트의 검사가 시작되기 전에, 현재-TLE 포인터는 토폴로지 리스트에서 제1 또는 최상위 TLE를 참조하도록 초기화되고, 이전-TLE 포인터는 널(null)로 초기화되며, TLE들은 위에서부터 아래쪽으로의 순서로 검사된다.
토폴로지-리스트 검사가 진행됨에 따라, 현재-TLE 포인터를 그 포인터가 가리키는 현재 TLE의 크기만큼 증가시킴으로써 현재-TLE 포인터가 전진한다. 컨테이너-유형 TLE는 현재-TLE 포인터에 8을 가산함으로써 전진한다. CPU-유형 TLE는 현재-TLE 포인터에 16을 가산함으로써 전진한다. 현재-TLE 포인터를 전진시키는 프로세스는 그 값이 증가되기 바로 전에 그 값을 이전-TLE 포인터로 저장하는 것을 포함한다. 토폴로지 리스트가 TLE를 갖지 않는 경우, TLE 검사는 수행되지 않는다.
검사 프로세스가 이하의 단계들에서 개략적으로 기술되어 있다:
1. 현재-TLE 네스팅 레벨이 0이고 이전-TLE 네스팅 레벨이 널 또는 1인 경우, 현재 TLE는 하나 이상의 CPU-유형 TLE의 그룹의 제1 CPU-유형 TLE를 나타낸다. 프로그램은 하나 이상의 CPU의 새로운 그룹이 처음으로 관찰될 때 적절한 동작이라면 어느 것이라도 수행해야 한다. 단계 5로 간다.
2. 현재-TLE 네스팅 레벨이 0이고 이전-TLE 네스팅 레벨이 0인 경우, 현재 TLE는 단계 1 또는 2에서 이전에 관찰된 CPU들의 형제들을 나타내는 CPU-유형 TLE들의 그룹의 그 다음 CPU-유형 TLE를 나타낸다. 프로그램은 하나 이상의 CPU의 기존의 형제 그룹의 크기가 증가될 때 적절한 동작이라면 어느 것이라도 수행해야 한다. 단계 5로 간다.
3. 현재-TLE 네스팅 레벨이 0이 아니고 이전-TLE 네스팅 레벨이 0인 경우, 이전 TLE는 하나 이상의 CPU-유형 TLE의 그룹의 마지막 또는 유일한 CPU-유형 TLE를 나타낸다. 프로그램은 하나 이상의 CPU의 기존 그룹이 완료될 때 적절한 동작이라면 어느 것이라도 수행해야 한다. 단계 5로 간다.
4. 단계 5로 간다.
제거에 의해, 이 경우는 현재-TLE 네스팅 레벨이 0이 아니고 이전-TLE 네스팅 레벨이 0이 아닌 경우일 것이다. 현재-TLE 네스팅 레벨이 이전-TLE 네스팅 레벨보다 작은 경우, 토폴로지-리스트 순회의 방향은 CPU-유형 TLE 쪽이다. 현재-TLE 네스팅 레벨이 이전-TLE 네스팅 레벨보다 큰 경우, 토폴로지-리스트 순회의 방향은 CPU-유형 TLE로부터 멀어지는 쪽이다. 컨테이너-유형 TLE는 (1) 전체 토폴로지에서 별도의 그룹인 CPU-유형 TLE의 또 다른 그룹 또는 (2) 토폴로지 리스트의 끝으로 가면서 순회된다. 어느 경우든지, 그 다음 TLE로 전진하는 것 이외에 특별한 처리가 필요하지 않다.
5. 현재 TLE의 유형에 기초하여 그 다음 TLE 위치로 전진한다. 전진된 현재-TLE 포인터가 토폴로지 리스트의 끝과 동등한 경우:
a. 어떤 유형의 TLE도 더 이상 존재하지 않는다.
b. 이전-TLE 네스팅 레벨이 0인 경우, 프로그램은 하나 이상의 CPU의 기존의 그룹이 완료될 때 적절한 동작이라면 어느 것이라도 수행해야 한다.
c. 검사가 완료되었다.
그렇지 않은 경우, 단계 1로 간다.
도 16의 예시적인 구현에서, 컴퓨터 시스템은 2개의 물리적 프레임(프레임 1 및 프레임 2)을 포함한다. 각각의 프레임은 2개의 논리 보드(보드 1 및 보드 2), 메인 저장소(메모리), 및 주변 장치 및 네트워크와 통신하기 위한 I/O 어댑터(I/O 채널들 1 및 I/O 채널들 2)를 포함한다. 각각의 보드는 2개의 멀티-칩 모듈(모듈 1, 모듈 2, 모듈 3, 및 모듈 4)을 포함한다. 각각의 멀티-칩 모듈은 2개의 프로세서(CPU1, CPU2, CPU3, CPU4, CPU5, CPU6, CPU7, 및 CPU8)를 포함한다. 각각의 모듈은 또한 레벨-2 캐쉬(캐쉬 1, 캐쉬 2, 캐쉬 3, 및 캐쉬 4)을 포함한다. 각각의 프로세서(중앙 처리 장치 또는 CPU)는 레벨-1 캐쉬 및 TLB(Translation-Lookaside-Buffer)를 포함한다. TLB 버퍼는 동적 주소 변환 동안에 변환 정보를 어드레싱한다.
도 17, 도 18 및 도 19에서 본 발명에 따르면, 컴퓨터 시스템의 컴포넌트들은 근접성에 따라 "컨테이너"에 할당된다. 각각의 모듈은 최내부 컨테이너 6, 7, 8, 및 9에 할당되는데, 그 이유는 각각의 모듈의 CPU가 서로 가장 가깝게 근접해 있기 때문이다. 모듈들이 보드 상에 패키징되어 있기 때문에, 각각의 보드의 모듈들은 그 다음 레벨 컨테이너 4 및 5에 할당된다. 그 다음 상위 근접성 그룹은 프레임이다. 프레임의 보드들은 프레임을 나타내는 컨테이너(컨테이너 2 및 3)에 할당된다. 전체 시스템은 컨테이너 1로 나타내어져 있다.
CPU1 및 CPU2과 같은 동일한 모듈 상의 2개의 CPU가 서로 가장 가까운 토폴로지 관계 또는 거리에 있고 둘 다가 하나의 컨테이너(컨테이너 6)에 존재하며 그 CPU들만이 포함되어 있을 때 컨테이너 경계가 교차하지 않는다는 것을 알 수 있다. 그러나, CPU1 및 CPU8이 포함되어 있는 경우, 4개의 컨테이너 경계가 교차된다. 컨테이너 6 내의 CPU1은 컨테이너 4, 5, 및 9에 의해 CPU8과 분리되어 있다. 따라서, 컨테이너 구조를 알면, 사용자는 시스템의 토폴로지에 대한 개요를 얻을 수 있다.
물론, 논리적으로 파티셔닝된 시스템에서, 앞서 언급한 바와 같이, CPU들은 운영 체제들 간에 공유될 수 있다. 따라서, 논리적 파티션이 3개의 논리적 CPU를 할당받고 각각의 논리적 CPU가 3개의 실제 CPU 각각의 20%에 할당되는 경우, 3개의 실제 CPU가 서로 가장 가깝게 근접해 있을 때, CPU들 및 CPU 자원들(예를 들어, 캐쉬 및 메모리) 간의 통신이 최상으로 수행될 것이므로, 그 파티션은 최상의 성능을 낼 것이다. 이 예에서, 파티션 내의 CPU1 및 CPU2는, 2개의 CPU가 CPU1 및 CPU8인 경우보다 캐쉬 1에서 캐쉬 라인의 스래싱(thrashing)을 덜 겪는다.
이 예에서, CPU1, CPU2, 및 CPU3를 포함하는 파티션이 생성된다. 그 파티션에서 동작하는 프로그램은 STSI 명령어를 발행하고, SYSIB 15.1.2(도 10) 테이블이 프로그램에 반환된다. 이 경우에, 파티션은 컨테이너 6 및 컨테이너 7을 포함하고, 따라서 2개의 네스팅 레벨이 존재한다. SYSIB 테이블 값은 다음과 같다:
MNest 필드가 4로 설정되면, 이는 토폴로지가 이 모델에 대한 절대(absolute) 최대 네스팅인 4개의 네스팅 레벨을 포함하며, STSI를 발행하는 게스트 구성에 대한 자원 할당 및 시스템의 다른 게스트 구성들에 자원이 할당되는 방법에 따라 임의적인 토폴로지 리스트 상에서 완전히 이용되거나 그렇지 않을 수 있다는 것을 나타낸다.
Mag1 필드는 2로 설정되어, 가장 기본적인(primitive) 제1 레벨에서 2개의 CPU가 이용가능하다는 것을 나타낸다.
Mag2 필드는 2로 설정되어, 2개의 제2 레벨(모듈)컨테이너들이 이용가능하다는 것을 나타낸다.
Mag3 필드는 2로 설정되어, 2개의 제3 레벨(보드)이 이용가능하다는 것을 나타낸다.
Mag4 필드는 2로 설정되어, 2개의 제4 레벨(프레임)이 이용가능하다는 것을 나타낸다.
이 예에서, 3개의 CPU가 동일한 보드 상의 2개의 모듈에 포함되어 있으며, 따라서 이하의 4개의 TLE 엔트리가 제공된다:
1. NL = 1; CtnrID= 1 (컨테이너 6)
2. NL = 0; CPU type = 1 (CPU의 유형); CPU Addr Origin = 0; CPU Mask 0.......11 (어드레싱된 CPU들 중 CPU1 및 CPU2)
3. NL = 1; CtnrID= 2 (컨테이너 7)
4. NL = 0; CPU type = 1 (CPU의 유형); CPU Addr Origin = 4; CPU Mask 0.......10 (어드레싱된 CPU들 중 CPU3)
이에 따라, 프로그램은 반환된 컨테이너 및 CPU TLE에 기초한 토폴로지의 표현을 갖는다.
PERFORM TOPOLOGY FUNCTION (PTF)
도 13을 참조하면, 토폴로지 함수 수행 (PTF) 명령어는 바람직하게는 연산 코드 및 제1 피연산자를 식별하는 레지스터 필드(R1)를 포함한다. R1에 의해 식별되는 범용 레지스터의 내용은 도 14에 나타낸 바와 같이 비트 위치 56-63에 있는 함수 코드를 지정한다.
정의된 함수 코드들은 다음과 같다:
FC 의미
------------------------
0 수평 극성화 요청
1 수직 극성화 요청
2 토폴로지-변경 상태 검사
0-255의 범위에 있는 미정의된 함수 코드들은 장래의 확장을 위해 예비되어 있다.
완료 시에, 조건 코드 2가 설정되는 경우, 원인 코드(reason code)는 범용 레지스터(R1)의 비트 위치 48-55에 저장된다. 명령어의 비트 16-23 및 28-31은 무시된다.
함수 코드 0의 동작:
이하의 원인들 및 (원인 코드들) 중 임의의 것에 대한 조건 코드로 실행이 완료된다:
원인 없음 지정됨 (0)
요청하는 구성이 이미 수평 극성화되어 있음 (1).
토폴로지 변경이 이미 진행 중임 (2).
그렇지 않은 경우, 구성 내의 모든 CPU를 수평 극성화로 두기 위해 프로세스가 개시된다.
프로세스의 완료는 명령어의 실행에 대해 비동기적이며, 명령어의 실행이 완료될 때 완료되거나 그렇지 않을 수 있다.
결과 조건 코드:
0 토폴로지-변경 개시됨
1 -
2 요청 거부됨
3 -
함수 코드 1의 동작:
이하의 원인들 및 (원인 코드들) 중 임의의 것에 대한 조건 코드 2로 실행이 완료된다:
원인 없음 지정됨 (0)
요청하는 구성이 이미 수직 극성화되어 있음 (1).
토폴로지 변경이 이미 진행 중임 (2).
그렇지 않은 경우, 구성 내의 모든 CPU를 수직 극성화로 두기 위해 프로세스가 개시된다. 프로세스의 완료는 명령어의 실행에 대해 비동기적이며, 명령어의 실행이 완료될 때 완료되거나 그렇지 않을 수 있다.
결과 조건 코드:
0 토폴로지-변경 개시됨
1-
2 요청 거부됨
3 -
함수 코드 2의 동작: 토폴로지-변경-보고-보류중 조건이 검사되고, 조건 코드가 설정된 채로 명령어가 완료된다.
결과 조건 코드:
0 토폴로지-변경-보고 보류중 아님 토폴로지
1 변경 보고 보류 중
2 -
3 -
토폴로지 변경은 SYSIB 15.1.2의 내용이 토폴로지 변경 이전의 SYSIB 15.1.2의 내용과 다르도록 하는 임의의 수정이다.
토폴로지-변경 프로세스가 완료될 때 토폴로지-변경-보고-보류중 조건이 생성된다. 이하의 것들 중 어느 하나가 수행될 때 구성에 대해 토포로지-변경-보고-보류중 조건이 제거된다.
토폴로지 함수 수행(PERFORM TOPOLOGY FUNCTION)의 실행은 조건 코드 1로 완료되는 함수-코드 2를 지정한다.
SYSIB 15.1.2에 대한 시스템 정보 저장(STORE SYSTEM INFORMATION)이 구성 내의 임의의 CPU에 의해 성공적으로 실행된다.
서브시스템 리셋이 수행된다.
특수 조건들:
범용 레지스터 R1의 비트 위치 0-55가 영이 아닌 경우, 지정 예외가 인식된다. 미정의된 함수 코드가 지정되는 경우, 지정 예외가 인식된다.
프로그램 예외들:
동작(구성-토폴로지 기기가 설치되지 않음)
특권 동작
지정
메인프레임 예시적인 환경
하이 엔드 서버 아키텍처가 물리적 프로세서의 수를 증가시키고 프로세서 속도가 계속하여 향상됨에 따라, 대규모 기계를 구축하는 데 필요한 프로세서 "네스트"가 계속하여 사실상 더 노드적인 더 작은 구성 블록들로 이루어지고 있다. 예를 들어, z990 또는 z9 기계의 L2 캐쉬는 완전히 캐쉬 코히런트(cache coherent)한 반면, 빡빡히 채워진(fully populated) 모델은 실제로 하나의 L2 캐쉬의 모습을 제공하기 위해 패브릭(fabric)에 의해 연결되어 있는 네(4) 개의 개별적인 L2를 갖는다. 캐쉬 미스를 해결하기 위해 노드를 벗어나는 것에 대한 패널티가 계속 증가한다. 예를 들어, 원격 L2에서의 L1 미스를 해결하는 것이 로컬 L2에서 L1 미스를 해결하는 것보다 비용이 더 든다. CP의 구내(private)에서, 보통 칩 상에서, 미스가 있으면, L1 캐쉬가 시작하는 데 비용이 많이 들고, 메모리로 나가야만 하는 것이 오랜 시간이 걸릴 것처럼 보일 수 있다. 메모리의 속도 및 그에의 연결의 증가는 프로세서 속도의 증가를 따라가지 못하고 있다. "칩 상에서" 또는 그와 유사하게 모든 것을 서로 더 가깝게 패킹하고자 할 수 있지만, 전력 소모 및 냉각 문제가 이것을 방해한다.
z990의 소개로, LPAR은 기계 토폴로지를 인지하게 되었고 논리적 파티션 CP 및 저장 자원의 물리적 자원으로의 할당을 최적화하기 시작하였다. 주로 동시적인 북(book) 수리를 지원하는 z9 GA-1과 함께 논리적 파티션 자원 할당을 동적으로 재최적화할 수 있는 능력에 대한 개선이 도입되었다.
여기서 기술되는 새로운 지원은, zSeries OS 소프트웨어가 논리적 파티션 토폴로지로서 제공되는, 기계의 토폴로지를 인지하게 하는 진정한 출발점을 제시함으로써 CEC 북 구조에서의 CPU 배치와 관련하여 유사성 디스패칭을 제공한다.
zSeries LPAR이 오늘날 공유된 논리적 파티션을 수평 극성화된 것으로서 관리하는 방법을 생각할 수 있다. 이는 논리적 파티션에 대한 처리 가중치가 논리적 파티션 내의 모든 온라인 논리적 CP 간에 동등하게 분배된다는 것을 의미한다. 이 지원은 수직 극성화라고 하는 논리적 파티션의 공유된 논리적 CP를 관리하기 위한 새로운 선택적인 형태의 극성화를 도입한다.
논리적 파티션이 수직 모드에서 실행되도록 선택된 경우, 소프트웨어는 zSeries 하이퍼바이저에게 이것을 알려주기 위해 새로운 명령어를 발행하고, 하이퍼바이저는 논리적 파티션을 디스패치하는 방법을 변경하게 된다.
수직 논리적 파티션의 구성에 따라, 논리적 프로세서들이 상위, 중간 또는 하위 극성을 가질 것이다. 극성(polarity)은 수직 논리적 프로세서들이 받을 자격이 있는 물리적 프로세서 할당분의 양을 나타낸다. 고객들은 기계 내의 각각의 논리적 파티션이 받을 자격이 있는 물리적 프로세서 사이클의 양을 사실상 정의하는 논리적 파티션에 대한 가중치를 정의한다.
극성은 논리적 파티션으로 구성된 논리적 프로세서들의 수에 대한 논리적 파티션의 현재 가중치의 비에 의해 결정된다. 상위 극성 프로세서들은 100%에 가까운 CPU 할당분을 갖는다. 중간 극성 프로세서들은 0 내지 99% 할당분을 갖고, 하위 극성 프로세서는 0%(또는 0%에 아주 가까운) 할당분을 갖는다. 상위 극성 논리적 CP는 전용된 CP와 아주 유사하게 실행될 물리적 프로세서를 할당받지만, 공유된 상위 극성 CP는 여전히 물리적 자원을 포기할 수 있으며 다른 공유된 CP가 그의 여분의 사이클을 사용할 수 있게 할 수 있다. 여기서의 요점은 소프트웨어가 논리적 토폴로지를 알게 되고 그의 작업 큐(queues)에 대한 상위 극성 논리적 CP를 이용하려고 시도한다는 것이다.
예를 들어, 고객은 2개의 논리적 파티션을 갖는 3-방식 프로세서(three-way processor)를 구성하며, 각각은 2개의 논리적 프로세서를 갖고 각각은 50의 가중치를 갖는다. 제1 논리적 파티션이 그 자신을 수직으로 정의한 경우, 1개의 상위 극성 논리적 CP 및 1개의 중간 극성 논리적 CP를 갖게 된다.
유의할 점은 논리적 파티션이 수직 모드에서 실행되도록 선택될 때, 전체적인 논리적 파티션이 수직 모드에서 실행된다는 것이다. 이것은 zAAP (IFA) 및/또는 zIIP 등의 그의 보조 프로세서들 전부를 포함한다. 각각의 유형에 대한 원하는 레벨의 수직 처리를 달성할 이러한 논리적 파티션들에 대한 모든 프로세서 유형들 에 대한 가중치를 정의하는 것은 고객의 책임이다.
논리적 파티션 토폴로지 지원
○ 논리적 파티션 노드 토폴로지에 대한 기반구조를 설정함.
○ 유효한 토폴로지를 제공하는 데 필요한 기존의 수평 파티션들에 대한 LPAR의 노드 할당 알고리즘에 필요한 변경을 함.
○ 논리적 파티션에 논리적 파티션 노드 토폴로지를 제공하기 위해 시스템 정보 저장(STSI) 명령어에 대한 새로운 구성 토폴로지 정보 블록에 대한 명령어 시뮬레이션을 제공함.
○ 토폴로지 변경이 필요한지를 판정하기 위해 물리적 또는 논리적 구성에 대한 변경을 검사함. 이들은 다음과 같은 때에 행해질 수 있다:
ㆍ 물리적 CP가 구성에 추가되거나 구성으로부터 제거될 때
ㆍ 논리적 CP가 구성에 추가되거나 구성으로부터 제거될 때
ㆍ 논리적 파티션이 활성화될 때
ㆍ 논리적 파티션이 비활성화될 때
ㆍ 논리적 파티션 가중치가 HMC/SE로부터 변경될 때
ㆍ 소프트웨어 개시가 논리적 파티션의 가중치를 변경할 때
ㆍ 논리적 파티션이 리셋될 때(수평으로 스위칭될 때)
ㆍ 논리적 파티션이 ESA/390 모드로 스위칭될 때(수평으로 스위칭될 때)
환경의 알고리즘:
논리적 파티션이 처음으로 활성화될 때 토폴로지가 논리적 파티션에 할당되어야 하고, 논리적 파티션에 할당된 노드 토폴로지의 임의의 변경으로 인해 논리적 파티션이 통지되어야 한다. 구성 변경이 행해질 때 가능한 한 최상으로 한정 처리(limiting processing) 뿐만 아니라 새로운 STSI 처리에 의해 보다 쉬운 질의를 가능하게 하기 위해, 노드 토폴로지의 결과는 편리한 새로운 데이터 구조에서 유지되어야 한다. 이 새로운 구조는 또한 토폴로지 변경 처리가, 논리적 파티션에 대한 토폴로지의 일관성없는 관점의 도입 없이 각각의 단계에 대한 요청된 직렬화와 함께, 다수의 단계로 완료될 수 있게 한다.
토폴로지 할당
논리적 토폴로지가 선택되는 방법은 본 발명의 개시에서 중요하지 않다. 각각의 유형의 논리적 프로세서들 중 몇 개가 필요하고 어느 노드 또는 북에 할당될 필요가 있는지에 대한 결정을 해야만 한다고 해두어도 충분하다. 수직 모드 파티션에 대하여, 이는 각각의 프로세서 유형에 대한 수직 상위, 수직 중간 및 수직 하위 프로세서들의 갯수를 의미한다.
극성화 값을 논리적 CP에 할당
상기 갯수가 결정되면, CP유형의 최하위 온라인 논리적 CP 주소로부터 최상위까지 (1) 모든 수직 상위, (2) 모든 수직 중간, (3) 모든 수직 하위의 순서로 극성화 할당이 행해진다. 이것이 행해지는 순서는 임의적이며, 다른 선택 순서들이 가능하다.
'시스템 정보 저장(
Store
System
Information
)' 명령어
매핑
15.1.2 응답을 매핑하기 위해 3개의 구조를 추가한다.
1. STSI 15.1.2에 대한 매핑, 토폴로지를 매핑하는 응답 블록
Del 1 syibk1512 char(4096) based (*),
3 * char(2),
3 syibk1512_length fixed(16), length
3 syibk1512_mag6 fixed(8), 6th level nest
3 syibk1512_mag5 fixed(8), 5th
3 syibk1512_mag4 fixed(8), 4th
3 syibk1512_mag3 fixed(8), 3rd
3 syibk1512_mag2 fixed(8), 2nd, nodes
3 syibk1512_mag1 fixed(8), 1st, cpus
3 * char(1),
3 syibk1512_mnest fixed(8), nesting level
3 * char(4),
3 syibk1512_topology_list char(0); topology list
2. STSI 15.1.2에 대한 컨테이너-유형 TLE에 대한 매핑
Del 1 syibk_vcm_container char(8) based(*),
3 syibknl fixed(8), nesting level
3 * char(3),
3 * char(1),
3 * char(2),
3 syibk_container_id fixed(8); node id
3. STSI 15.1.2에 대한 CPU-유형 TLE에 대한 매핑
Del 1 syibk_vcm_cpu char(16) based(*),
3 syibknl2 fixed(8), nesting level
3 * char(3),
3 syibk_ded_polarization bit(8), vcm byte
5 * bit(5),
5 syibk_dedicated bit(1), dedicated bit
5 syibk_polarization bit(2), polarization bits
3 syibk_cputype fixed(8), cpu type
3 syibk_cpuaddrorg fixed(16), address origin
3 syibk_cpumask bit(64); cpu mask entry
TOPBK - 파티션 토폴로지
논리적 파티션의 토폴로지에 대한 요약은 노드 할당 루틴에 의해 이 블록에서 최신의 것으로 유지된다. 이 블록의 데이터는 STSI 처리가 프로그램에 대한 논리적 파티션 토폴로지 응답을 생성하기 위해 전체 구조를 한번 순회할 수 있는 방식으로 정렬되며, 아키텍처에 의해 요구된 대로 CPU 엔트리들의 순서 및 분리가 보존된다.
이 데이터는 엔트리마다 64-비트 CPU 마스크를 갖는 3차원 어레이(노드, CP 유형, 극성화 분류)로 이루어져 있다.
제2 작업 영역 TOP_WORKING은 토폴로지를 업데이트하는 데 사용하기 위해 포함된다.
DECLARE
1 TOPBK BASED BDY(DWORD),
3 TOP_CURRENT,
5 TOPCPUMASK(1:MAXN0DE, /* 1-4 노드들 각각
*/
0:CPUTMAX, /* CP 유형 인덱스
*/
0:3) /* 논리적 파티션이 수직일 때 4개의 가능한 토폴로지 분류. 파티션이 수평일 때 오직 2개의 분류가 존재한다.
*/
BIT(64), /* 이 분류에 속하는 논리적 CPU의 마스크.
*/
3 TOP_WORKING CHAR(LENGTH(TOP_CURRENT)); /* 새로운 토폴로지를 구축하기 위한 작업 영역
*/
TO3PO - 파티션 토폴로지 변환
이들 "상수" 변환 테이블은 토폴로지(TOPBK에 의해 매핑됨)를 구축하는 노드 할당 루틴 및 토폴로지를 판독하는 STSI 처리에 의해 사용된다.
/**************************************/
/* STSI 변환 어레이: */
/*************************************/
DECLARE
1 TOPVERT(0:3) BIT(8) /* 수직 파티션의 경우, 상기 분류 인덱스를 STSI 데이터 내의 CP들의 이 그룹에 대해 반환될 아키텍처 D(전용) 및 PP(극성화) 값으로 변환함
*/
STATIC INIT('O0000'b∥'1'b∥PPVH, /* 분류 0: 전용된 수직 상위 */
'00000'b∥'0'b∥PPVH, /* 분류 1 : 공유된 수직 상위 */
'00000'b∥'0'b∥PPVM, /* 분류 2: 공유된 수직 중간 */
'00000'b∥'0'b∥PPVL), /* 분류 3: 공유된 수직 하위 */
3 * BIT(5), /* 미사용, 비트 어레이에 대한 바이트 할당을 필요로 함*/
3 TOPDPP BIT(3), /* 사용할 실제 D, PP 값 */
1 TOPHOR(0:1) BIT(8) /* 수평 파티션의 경우, 상기 분류 인덱스를 STSI 데이터 내의 CP들의 이 그룹에 대해 반환될 아키텍처 D(전용) 및 PP(극성화) 값으로 변환함. 유의할 점은 오직 처음 2개의 분류가 수평 파티션에 대해 사용될 수 있다는 것임
*/
STATIC INIT('00000'b∥'1'b∥PPH, /* 분류 0: 전용된 수평 */
'00000'b∥'0'b∥PPH), /* 분류 1 : 공유된 수평 */
3 * BIT(5), /* 미사용, 비트 어레이에 대한 바이트 할당을 필요로 함*/
3 TOPDPP BIT(3), /* 사용할 실제 D, PP 값 */
/******************************/
/* NDI 변환 어레이 */
/******************************/
1 TOPDPP2CLASS(0:7) FIXED /* 토폴로지 정보를 생성하기 위해 노드 할당 루틴에 의해 사용됨. 논리적 CP가 어느 분류 인덱스를 사용해야 하는지를 판정하기 위해 LPDPP가 이 어레이에 대한 인덱스로서 사용됨. 이 하나의 어레이는 수평 파티션 및 수직 파티션 둘다에 대해 사용됨 */
STATIC INIT(1, /* 공유된, 수평 */
3, /* 공유된, 수직 하위 */
2, /* 공유된, 수직 중간 */
1, /* 공유된, 수직 상위 */
0, /* 전용된, 수평 */
0, /* 해당 없음 */
0, /* 해당 없음 */
0), /* 전용된, 수직 상위 */
3 * CHAR(4); /* 비단순 항목으로 되어야 함 */
논리적 프로세서 블록:
각각의 논리적 프로세서가 그의 극성화를 반영하기 위해 파티션 극성화의 2 비트 인코딩이 추적될 수 있다. 이것을 1-비트 전용 표시와 그룹화하는 것은 논리적 프로세서에 대한 전체적인 극성 모습(complete polarity picture)을 3-비트로 가능하게 한다.
…
3 LPDPP BIT(3), /* 전용을 포함한 극성화 */
4 LPDED BIT(1), /* = 1 , 논리적 CP가 전용됨 */
4 LPPP BIT(2), /* 프로세서 극성화 */
…
/* 프로세서 극성화에 대한 인코딩 */
PPH BIT(2) CONSTANT('00'B), /* 수평 극성화됨 */
PPVL BIT(2) CONSTANT('01'B), /* 수직 극성화됨 - 하위 */
PPVM BIT(2) CONSTANT('10'B), /* 수직 극성화됨 - 중간 */
PPVH BIT(2) CONSTANT('11'B), /* 수직 극성화됨 - 상위 */
토폴로지 블록의 업데이트
CPU 토폴로지 마스크의 로컬 사본의 삭제
타겟 논리적 파티션 내의 모든 논리적 CP에 대해 DO
IF 논리적 CP가 온라인이라면 THEN
DO
극성 인덱스 = 극성화 값의 극성 인덱스 어레이로의 변환에 따른 논리적 CP 극성화 값에 적절한 극성 인덱스
CPU 토폴로지 마스크(cpu_주소, 노드, cp 유형, 극성 인덱스)의 로컬 사본 = ON
END
END
IF 새로운 토폴로지 블록 NOT= 파티션에 대한 현재의 토폴로지 블록 THEN
토폴로지 변경 보고 비트를 설정하고 새로운 토폴로지를 현재 토폴로지에 복사함.
STSI 15.1.2에 대한 명령어 시뮬레이션
STSI 15.1.2 응답 블록에 대한 syibk 매핑 내에서, 컨테이너-유형 TLE 및 CPU-유형 TLE가 추가되었다. 기본적으로 데이터는 컨테이너(들)에서 반환되어야 하고, 최하위 레벨에 있는 엔트리는 CPU-유형 TLE이 된다. 논리적 파티션의 자원이 세분되거나 할당되는 방법에 기초하여 이것을 어레이들의 어레이라고 생각할 수 있다. 바람직한 실시예의 경우, 각각의 컨테이너는 기본적으로 1의 네스팅 레벨을 갖는 노드이며 각각이 0의 네스팅 레벨을 갖는 CPU 유형 TLE(들)을 포함한다. CPU TLE들은 CPU 유형 및 그 다음에 오는 그의 분류에 의해 정렬된다. 수직 파티션은 4개의 분류(수직 전용됨, 수직 상위 공유됨, 수직 중간 공유됨, 및 수직 하위 공유됨)를 가지며, 수평 파티션은 2개의 분류(전용됨 및 공유됨)를 갖는다.
이하의 단계들은 모든 선행 검사들이 명령어 입력을 검증한 후에 STSI 15.1.2이 처리되는 방법에 대한 사용 사례를 나타낸다.
이 실시예의 경우, 최대 4개의 노드 및 64개의 프로세서가 가정된다.
topbk의 스캔을 시작하고, current_node_value라고 하는 로컬 변수에 현재 on 되어있는 노드 인덱스의 값을 유지한다. 이것이 필요한 이유는 노드 내의 모든 64 비트 마스크가 0인 경우, 그 노드에 대한 컨테이너-유형 TLE를 생성할 필요가 없기 때문이다.
노드 내에서 첫번째 영이 아닌 엔트리가 발견되면, 먼저 그 노드에 대한 컨테이너-유형 TLE를 생성한다. 컨테이너 TLE 엔트리 내에서, 네스팅 값이 1이고, 그 다음에 48개의 예비된 비트가 온다. 마지막 비트는 처리하고 있는 현재 노드의 topbk에서의 인덱스인 노드 ID이다. 컨테이너-유형 TLE를 생성한 후에, 영이 아닌 비트 마스크를 갖는 엔트리에 대한 CPU-유형 TLE를 생성한다. 이 엔트리 내에서, 네스팅 값은 0이고, 그 다음에 24개의 예비된 비트가 온다. 그 다음 8 비트는 전용됨 비트 및 극성화 비트를 포함한다. 파티션이 현재 수직인 경우, 극성화 값 및 전용됨 비트를 다음과 같이 채운다:
topbk 내의 분류 0은 수직 전용됨이고, PP에 11을 저장하고 D에 1을 저장한다.
topbk 내의 분류 1은 수직 상위 공유됨이고, PP에 11을 저장하고 D에 0을 저장한다.
topbk 내의 분류 2는 수직 중간 공유됨이고, PP에 10을 저장하고 D에 0을 저장한다.
topbk 내의 분류 3은 수직 하위 공유됨이고, PP에 01을 저장하고 D에 0을 저장한다.
수평 파티션의 경우, 오직 분류 0 및 1이 현재 유효하다. 전용됨 비트 및 극성화 비트를 다음과 같이 채운다.
topbk 내의 분류 0는 수평 전용됨이고, PP에 00을 저장하고 D에 1을 저장한다.
topbk 내의 분류 1은 수평 공유됨이고, PP에 00을 저장하고 D에 0을 저장한다.
CPU-TLE에 채워질 그 다음 값인 CPU 유형은 단지 topbk 내의 topcpumask 내의 제2 어레이의 인덱스일 뿐이다. (0 - GP, 2 - IFA, 3 - IFL, 4 - ICF, 1은 현재 사용되지 않음).
1. 그 다음 값은 CPU 주소 시점이다. 이 값은 명시적으로 0으로서 저장되는데, 그 이유는 64가 이 실시예에서 이용가능한 CPU의 최대 수이기 때문이다.
2. syibk_vcm_cpu에서의 마지막 값은 CPU 마스크이고, 영이 아닌 64 비트 마스크는 어레이들 topcpumask 중 네스트된 어레이에 저장된다.
3. 노드 내의 첫번째 영이 아닌 비트 마스크 이후의 각각의 영이 아닌 마스크에 대해, 개별적인 CPU-유형 TLE 엔트리를 생성하고 4개의 노드 모두에 대해 이 프로세스 전체를 반복한다.
멀티프로세서 토폴로지-변화-리포트(Multiprocessor Topology-Change-Report: MTCR) 펜딩
만일 구성-토폴로지 기능(facility)이 설치되고 인에이블(enabled)되고(ECB.7은 1임) 게스트 CPU에 대한 SCA 주소는 제로가 아니면(nonzero), 비트 포지션(bit position) 0은 구성에 대한 토폴로지-변화-리포트-펜딩 조건을 기억하기 위해 이용된다. 토폴리지 변화-리포트-펜딩의 리셋 상태(reset state)는 제로(zero)이다.
본 발명은 프로세서들의 토폴로지로 제한되지 않는다. 본 발명의 기본적인 컴포넌트가 유익하게도, 예를 들어, 코프로세서, 캐쉬, TLB, 내부 데이터 경로, 데이터 경로 버퍼, 분산 메모리 및 I/O 통신 어댑터를 포함하지만 이에 제한되지 않는 CPU 이외의 컴포넌트들에 적용될 수 있다는 것이 잘 이해될 수 있을 것이다.
Claims (10)
- 호스트 프로세서들(호스트 CPU들)을 포함하는 논리적으로 파티셔닝된 호스트 컴퓨터 시스템(logically partitioned host computer system)에서, 게스트 구성(guest configuration)의 하나 이상의 게스트 프로세서들(게스트 CPU들)의 토폴로지를 발견하는 방법으로서,
상기 방법은,
상기 게스트 구성의 게스트 프로세서가 실행을 위한 STORE SYSTEM INFORMATION 명령어를 페치하는 단계 - 상기 STORE SYSTEM INFORMATION 명령어는 컴퓨터 아키텍처에 대해 정의되어 있음 -; 및
상기 STORE SYSTEM INFORMATION 명령어를 실행하는 단계를 포함하며,
상기 실행하는 단계는,
상기 STORE SYSTEM INFORMATION 명령어의 토폴로지 정보 요청에 기초하여, 상기 컴퓨터 구성(computer configuration)의 토폴로지 정보를 획득하는 단계 - 상기 토폴로지 정보는 상기 구성의 프로세서들의 네스팅 정보(nesting information)를 포함함 -; 및
상기 토폴로지 정보를 구성 토폴로지 테이블(configuration topology table)에 저장하는 단계를 포함하는 방법. - 제1항에 있어서, 상기 토폴로지 정보가 상기 게스트 프로세서들을 프로비저닝하는 상기 호스트 프로세서들의 토폴로지와 연관된 네스팅 레벨들(nesting levels) 및 게스트 프로세서들의 ID를 포함하는 방법.
- 제2항에 있어서, 상기 토폴로지 정보가 상기 게스트 구성을 프로비저닝하는 상기 호스트 프로세서들의 상기 토폴로지와 연관된 네스팅 레벨들 및 게스트 구성의 게스트 프로세서들에 관한 정보를 포함하는 방법.
- 제3항에 있어서, 상기 테이블이 상기 프로세서들의 유사한 속성들의 네스팅된 프로세서들의 각각의 그룹에 대한 토폴로지 리스트 프로세서 엔트리(topology list processor entry)를 포함하는 방법.
- 제4항에 있어서, 상기 토폴로지 리스트 프로세서 엔트리가 상기 네스팅된 프로세서들의 상기 그룹의 프로세서들이 상기 논리적 파티션 게스트 구성에 어떻게 전용되어 있는지를(dedicated) 나타내는 표시자를 더 포함하는 방법.
- 제5항에 있어서, 상기 테이블이 상기 네스팅된 프로세서들을 갖는 하나 이상의 네스팅 레벨들의 계층구조에 대한 각각의 네스팅 레벨의 토폴로지 리스트 컨테이너 엔트리(topology list container entry)를 더 포함하는 방법.
- 제1항에 있어서, 상기 STORE SYSTEM INFORMATION 명령어가 연산 코드 필드(opcode field), 베이스 레지스터 필드(base register field), 부호있는 변위 필드(signed displacement field)를 포함하고,
상기 토폴로지 발견 명령어가 함수 코드 필드 및 셀렉터-1 필드를 포함하는 제1 암시적 범용 레지스터 와 셀렉터-2 필드를 포함하는 제2 암시적 범용 레지스터를 더 포함하며,
상기 함수 코드 필드는 상기 토폴로지 정보 요청을 지정하고,
상기 베이스 레지스터 필드 및 상기 부호있는 변위 필드는 상기 구성 토폴로지 테이블을 포함하는 SYSIB(system information block)의 메모리에서의 위치를 식별하며,
상기 셀렉터-1 필드의 값 및 상기 셀렉터-2 필드의 값은, 수행될 상기 토폴로지 정보 요청을 공동으로 결정하는 방법. - 제1항에 있어서, 상기 컴퓨터 아키텍처에 대해 정의된 상기 STORE SYSTEM INFORMATION 명령어가 대안의 컴퓨터 아키텍처의 중앙 처리 장치에 의해 페치되어 실행되고,
상기 방법이 상기 STORE SYSTEM INFORMATION 명령어의 동작을 에뮬레이트하기 위한 미리 정해진 소프트웨어 루틴을 식별하기 위해 상기 STORE SYSTEM INFORMATION 명령어를 해석하는 단계를 더 포함하며,
상기 STORE SYSTEM INFORMATION 명령어를 실행하는 단계가 상기 STORE SYSTEM INFORMATION 명령어를 실행하기 위한 상기 방법의 단계들을 수행하기 위해 상기 미리 정해진 소프트웨어 루틴을 실행하는 단계를 포함하는 방법. - 호스트 프로세서들(호스트 CPU들)을 포함하는 논리적으로 파티셔닝된 호스트 컴퓨터 시스템에서 게스트 구성의 하나 이상의 게스트 프로세서들(게스트 CPU들)의 토폴로지를 발견하는 컴퓨터 프로그램 제품으로서,
상기 컴퓨터 프로그램 제품은 처리 회로에 의해 판독가능하고 방법을 수행하기 위해 상기 처리 회로에서 실행하기 위한 명령어들을 저장하는 유형의 저장 매체(tangible storage medium)를 포함하고,
상기 방법은,
상기 게스트 구성의 게스트 프로세서가 실행을 위한 STORE SYSTEM INFORMATION 명령어를 페치하는 단계 - 상기 STORE SYSTEM INFORMATION 명령어는 컴퓨터 아키텍처에 대해 정의되어 있음 -; 및
상기 STORE SYSTEM INFORMATION 명령어를 실행하는 단계를 포함하며,
상기 실행하는 단계는,
상기 STORE SYSTEM INFORMATION 명령어의 토폴로지 정보 요청에 기초하여, 상기 컴퓨터 구성의 토폴로지 정보를 획득하는 단계 - 상기 토폴로지 정보는 상기 구성의 프로세서들의 네스팅 정보를 포함함 -; 및
상기 토폴로지 정보를 구성 토폴로지 테이블에 저장하는 단계를 포함하는 컴퓨터 프로그램 제품. - 컴퓨터 시스템으로서,
메모리; 및
상기 메모리와 통신하고 있는 호스트 프로세서들(호스트 CPU들)을 포함하는 논리적으로 파티셔닝된 호스트 컴퓨터 시스템을 포함하며,
상기 컴퓨터 시스템은 게스트 구성(guest configuration)의 하나 이상의 게스트 프로세서들(게스트 CPU들)의 토폴로지를 발견하는 방법을 수행하도록 구성되어 있고,
상기 방법은,
상기 게스트 구성의 게스트 프로세서가 실행을 위한 STORE SYSTEM INFORMATION 명령어를 페치하는 단계 - 상기 STORE SYSTEM INFORMATION 명령어는 컴퓨터 아키텍처에 대해 정의되어 있음 -; 및
상기 STORE SYSTEM INFORMATION 명령어를 실행하는 단계를 포함하며,
상기 실행하는 단계는,
상기 STORE SYSTEM INFORMATION 명령어의 토폴로지 정보 요청에 기초하여, 상기 컴퓨터 구성의 토폴로지 정보를 획득하는 단계 - 상기 토폴로지 정보는 상기 구성의 프로세서들의 네스팅 정보를 포함함 -; 및
상기 토폴로지 정보를 구성 토폴로지 테이블에 저장하는 단계를 포함하는 컴퓨터 시스템.
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US11/972,802 US7734900B2 (en) | 2008-01-11 | 2008-01-11 | Computer configuration virtual topology discovery and instruction therefore |
US11/972,802 | 2008-01-11 | ||
PCT/EP2009/050250 WO2009087232A2 (en) | 2008-01-11 | 2009-01-12 | Computer configuration virtual topology discovery |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20100106462A true KR20100106462A (ko) | 2010-10-01 |
KR101231557B1 KR101231557B1 (ko) | 2013-02-08 |
Family
ID=40851709
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020107015025A KR101231557B1 (ko) | 2008-01-11 | 2009-01-12 | 컴퓨터 구성 가상 토폴로지 탐색 |
Country Status (13)
Country | Link |
---|---|
US (4) | US7734900B2 (ko) |
EP (2) | EP2223214B1 (ko) |
JP (1) | JP4768083B2 (ko) |
KR (1) | KR101231557B1 (ko) |
CN (1) | CN101911018B (ko) |
AT (2) | ATE540355T1 (ko) |
CY (1) | CY1112463T1 (ko) |
DK (2) | DK2290539T3 (ko) |
ES (2) | ES2380450T3 (ko) |
PL (2) | PL2223214T3 (ko) |
PT (2) | PT2290539E (ko) |
SI (2) | SI2290539T1 (ko) |
WO (1) | WO2009087232A2 (ko) |
Families Citing this family (36)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8122230B2 (en) * | 2007-12-28 | 2012-02-21 | Intel Corporation | Using a processor identification instruction to provide multi-level processor topology information |
US7739434B2 (en) | 2008-01-11 | 2010-06-15 | International Business Machines Corporation | Performing a configuration virtual topology change and instruction therefore |
US7734900B2 (en) * | 2008-01-11 | 2010-06-08 | International Business Machines Corporation | Computer configuration virtual topology discovery and instruction therefore |
US9015446B2 (en) * | 2008-12-10 | 2015-04-21 | Nvidia Corporation | Chipset support for non-uniform memory access among heterogeneous processing units |
US9032101B1 (en) | 2008-12-10 | 2015-05-12 | Nvidia Corporation | Chipset support for binding and migrating hardware devices among heterogeneous processing units |
US8171176B2 (en) * | 2010-08-31 | 2012-05-01 | Lsi Corporation | Method for selective replication of physical devices on a virtual self-configuring zoning expander |
WO2012029149A1 (ja) * | 2010-09-01 | 2012-03-08 | 富士通株式会社 | 情報処理プログラム、情報処理装置及び情報処理方法 |
US20120131154A1 (en) * | 2010-11-23 | 2012-05-24 | Wulf Kruempelmann | Synchronous Transport of Business Configuration Data in a Distributed Computing System Environment |
CN103262035B (zh) * | 2010-12-15 | 2017-05-17 | 超威半导体公司 | 组合式cpu/gpu体系结构系统中的装置发现和拓扑报告 |
DE102011107169A1 (de) * | 2011-07-13 | 2013-01-17 | Kuka Roboter Gmbh | Steuerung eines Roboter |
US9659266B2 (en) | 2011-07-14 | 2017-05-23 | International Business Machines Corporation | Enterprise intelligence (‘EI’) management in an EI framework |
US9639815B2 (en) | 2011-07-14 | 2017-05-02 | International Business Machines Corporation | Managing processes in an enterprise intelligence (‘EI’) assembly of an EI framework |
US8566345B2 (en) | 2011-07-14 | 2013-10-22 | International Business Machines Corporation | Enterprise intelligence (‘EI’) reporting in an EI framework |
US9646278B2 (en) | 2011-07-14 | 2017-05-09 | International Business Machines Corporation | Decomposing a process model in an enterprise intelligence (‘EI’) framework |
JP5836042B2 (ja) * | 2011-10-04 | 2015-12-24 | 株式会社日立製作所 | 管理サーバプログラム |
US9069598B2 (en) * | 2012-01-06 | 2015-06-30 | International Business Machines Corporation | Providing logical partions with hardware-thread specific information reflective of exclusive use of a processor core |
US9292318B2 (en) * | 2012-11-26 | 2016-03-22 | International Business Machines Corporation | Initiating software applications requiring different processor architectures in respective isolated execution environment of an operating system |
WO2014141419A1 (ja) * | 2013-03-14 | 2014-09-18 | 株式会社日立製作所 | 仮想計算機システムおよびスケジューリング方法 |
US9582295B2 (en) | 2014-03-18 | 2017-02-28 | International Business Machines Corporation | Architectural mode configuration |
US9916185B2 (en) | 2014-03-18 | 2018-03-13 | International Business Machines Corporation | Managing processing associated with selected architectural facilities |
US9588774B2 (en) | 2014-03-18 | 2017-03-07 | International Business Machines Corporation | Common boot sequence for control utility able to be initialized in multiple architectures |
US9417876B2 (en) | 2014-03-27 | 2016-08-16 | International Business Machines Corporation | Thread context restoration in a multithreading computer system |
US9921848B2 (en) | 2014-03-27 | 2018-03-20 | International Business Machines Corporation | Address expansion and contraction in a multithreading computer system |
US9804846B2 (en) | 2014-03-27 | 2017-10-31 | International Business Machines Corporation | Thread context preservation in a multithreading computer system |
US9354883B2 (en) | 2014-03-27 | 2016-05-31 | International Business Machines Corporation | Dynamic enablement of multithreading |
US9218185B2 (en) | 2014-03-27 | 2015-12-22 | International Business Machines Corporation | Multithreading capability information retrieval |
US9594660B2 (en) | 2014-03-27 | 2017-03-14 | International Business Machines Corporation | Multithreading computer system and program product for executing a query instruction for idle time accumulation among cores |
US10102004B2 (en) | 2014-03-27 | 2018-10-16 | International Business Machines Corporation | Hardware counters to track utilization in a multithreading computer system |
WO2016041173A1 (en) * | 2014-09-18 | 2016-03-24 | Intel Corporation | Supporting multiple operating system environments in computing device without contents conversion |
CN104539684B (zh) * | 2014-12-23 | 2018-07-06 | 广州亦云信息技术有限公司 | 一种用户机器资源抽取整合方法及系统 |
CN107301034A (zh) * | 2017-08-09 | 2017-10-27 | 葛松芬 | 一种并行处理器阵列结构 |
US10956358B2 (en) * | 2017-11-21 | 2021-03-23 | Microsoft Technology Licensing, Llc | Composite pipeline framework to combine multiple processors |
US11042398B2 (en) | 2018-07-09 | 2021-06-22 | Samsung Electronics Co., Ltd. | System and method for guest operating system using containers |
US11256531B2 (en) * | 2019-06-20 | 2022-02-22 | International Business Machines Corporation | Isolating physical processors during optimization of VM placement |
CN110990054B (zh) * | 2019-12-03 | 2023-03-21 | 北京明略软件系统有限公司 | 一种开源框架的配置处理方法及装置 |
CN114489771A (zh) * | 2022-01-28 | 2022-05-13 | 苏州浪潮智能科技有限公司 | 一种Python的配置监控和响应方法、装置、设备及可读介质 |
Family Cites Families (37)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US3825895A (en) | 1973-05-14 | 1974-07-23 | Amdahl Corp | Operand comparator |
US3982229A (en) | 1975-01-08 | 1976-09-21 | Bell Telephone Laboratories, Incorporated | Combinational logic arrangement |
US4713750A (en) | 1983-03-31 | 1987-12-15 | Fairchild Camera & Instrument Corporation | Microprocessor with compact mapped programmable logic array |
US4569016A (en) | 1983-06-30 | 1986-02-04 | International Business Machines Corporation | Mechanism for implementing one machine cycle executable mask and rotate instructions in a primitive instruction set computing system |
US4578750A (en) | 1983-08-24 | 1986-03-25 | Amdahl Corporation | Code determination using half-adder based operand comparator |
IT1179386B (it) * | 1984-07-05 | 1987-09-16 | Silvano Bellapadrona | Sospensione oleopneumatica per veicoli in genere, in particolare per motociclette |
US5113523A (en) | 1985-05-06 | 1992-05-12 | Ncube Corporation | High performance computer system |
JPS6382513A (ja) | 1986-09-26 | 1988-04-13 | Toshiba Corp | バレルシフタ |
US5859994A (en) | 1992-08-10 | 1999-01-12 | Intel Corporation | Apparatus and method for modifying instruction length decoding in a computer processor |
WO1994027215A1 (en) | 1993-05-07 | 1994-11-24 | Apple Computer, Inc. | Method for decoding guest instructions for a host computer |
US6067613A (en) | 1993-11-30 | 2000-05-23 | Texas Instruments Incorporated | Rotation register for orthogonal data transformation |
US5551013A (en) | 1994-06-03 | 1996-08-27 | International Business Machines Corporation | Multiprocessor for hardware emulation |
US5748950A (en) | 1994-09-20 | 1998-05-05 | Intel Corporation | Method and apparatus for providing an optimized compare-and-branch instruction |
US5632028A (en) | 1995-03-03 | 1997-05-20 | Hal Computer Systems, Inc. | Hardware support for fast software emulation of unimplemented instructions |
EP0730220A3 (en) | 1995-03-03 | 1997-01-08 | Hal Computer Systems Inc | Method and device for quickly executing branch instructions |
US5732242A (en) | 1995-03-24 | 1998-03-24 | Silicon Graphics, Inc. | Consistently specifying way destinations through prefetching hints |
US5790825A (en) | 1995-11-08 | 1998-08-04 | Apple Computer, Inc. | Method for emulating guest instructions on a host computer through dynamic recompilation of host instructions |
JP3790607B2 (ja) | 1997-06-16 | 2006-06-28 | 松下電器産業株式会社 | Vliwプロセッサ |
US6223256B1 (en) | 1997-07-22 | 2001-04-24 | Hewlett-Packard Company | Computer cache memory with classes and dynamic selection of replacement algorithms |
US6112293A (en) | 1997-11-17 | 2000-08-29 | Advanced Micro Devices, Inc. | Processor configured to generate lookahead results from operand collapse unit and for inhibiting receipt/execution of the first instruction based on the lookahead result |
US6009261A (en) | 1997-12-16 | 1999-12-28 | International Business Machines Corporation | Preprocessing of stored target routines for emulating incompatible instructions on a target processor |
US6308255B1 (en) | 1998-05-26 | 2001-10-23 | Advanced Micro Devices, Inc. | Symmetrical multiprocessing bus and chipset used for coprocessor support allowing non-native code to run in a system |
US20020147969A1 (en) | 1998-10-21 | 2002-10-10 | Richard A. Lethin | Dynamic optimizing object code translator for architecture emulation and dynamic optimizing object code translation method |
HU228286B1 (en) | 1999-09-28 | 2013-02-28 | Ibm | Method system and computer program for workload management in a computing environment |
US6446197B1 (en) | 1999-10-01 | 2002-09-03 | Hitachi, Ltd. | Two modes for executing branch instructions of different lengths and use of branch control instruction and register set loaded with target instructions |
US6763327B1 (en) | 2000-02-17 | 2004-07-13 | Tensilica, Inc. | Abstraction of configurable processor functionality for operating systems portability |
US6738895B1 (en) | 2000-08-31 | 2004-05-18 | Micron Technology, Inc. | Method and system for substantially registerless processing |
US7165101B2 (en) | 2001-12-03 | 2007-01-16 | Sun Microsystems, Inc. | Transparent optimization of network traffic in distributed systems |
US7493480B2 (en) | 2002-07-18 | 2009-02-17 | International Business Machines Corporation | Method and apparatus for prefetching branch history information |
US7140021B2 (en) | 2002-09-13 | 2006-11-21 | Microsoft Corporation | Dynamic TCP partitioning |
US7337442B2 (en) * | 2002-12-03 | 2008-02-26 | Microsoft Corporation | Methods and systems for cooperative scheduling of hardware resource elements |
WO2005022385A1 (en) | 2003-08-28 | 2005-03-10 | Mips Technologies, Inc. | Mechanisms for dynamic configuration of virtual processor resources |
US8621458B2 (en) | 2004-12-21 | 2013-12-31 | Microsoft Corporation | Systems and methods for exposing processor topology for virtual machines |
US8335810B2 (en) | 2006-01-31 | 2012-12-18 | Qualcomm Incorporated | Register-based shifts for a unidirectional rotator |
US7693811B2 (en) | 2006-02-28 | 2010-04-06 | International Business Machines Corporation | Generating unique identifiers for logical partitions |
US8352950B2 (en) | 2008-01-11 | 2013-01-08 | International Business Machines Corporation | Algorithm to share physical processors to maximize processor cache usage and topologies |
US7734900B2 (en) * | 2008-01-11 | 2010-06-08 | International Business Machines Corporation | Computer configuration virtual topology discovery and instruction therefore |
-
2008
- 2008-01-11 US US11/972,802 patent/US7734900B2/en active Active
-
2009
- 2009-01-12 AT AT10184363T patent/ATE540355T1/de active
- 2009-01-12 WO PCT/EP2009/050250 patent/WO2009087232A2/en active Application Filing
- 2009-01-12 SI SI200930190T patent/SI2290539T1/sl unknown
- 2009-01-12 PL PL09701347T patent/PL2223214T3/pl unknown
- 2009-01-12 DK DK10184363T patent/DK2290539T3/da active
- 2009-01-12 PT PT10184363T patent/PT2290539E/pt unknown
- 2009-01-12 EP EP20090701347 patent/EP2223214B1/en active Active
- 2009-01-12 PT PT09701347T patent/PT2223214E/pt unknown
- 2009-01-12 ES ES10184363T patent/ES2380450T3/es active Active
- 2009-01-12 DK DK09701347T patent/DK2223214T3/da active
- 2009-01-12 EP EP20100184363 patent/EP2290539B1/en active Active
- 2009-01-12 KR KR1020107015025A patent/KR101231557B1/ko active IP Right Grant
- 2009-01-12 SI SI200930066T patent/SI2223214T1/sl unknown
- 2009-01-12 AT AT09701347T patent/ATE514130T1/de active
- 2009-01-12 JP JP2010541796A patent/JP4768083B2/ja active Active
- 2009-01-12 ES ES09701347T patent/ES2368684T3/es active Active
- 2009-01-12 CN CN2009801017609A patent/CN101911018B/zh active Active
- 2009-01-12 PL PL10184363T patent/PL2290539T3/pl unknown
-
2010
- 2010-05-13 US US12/779,232 patent/US7984275B2/en active Active
-
2011
- 2011-06-15 US US13/160,536 patent/US8832689B2/en active Active
- 2011-09-21 CY CY20111100912T patent/CY1112463T1/el unknown
-
2014
- 2014-09-05 US US14/478,247 patent/US9137120B2/en active Active
Also Published As
Publication number | Publication date |
---|---|
US7984275B2 (en) | 2011-07-19 |
WO2009087232A3 (en) | 2009-11-05 |
EP2223214B1 (en) | 2011-06-22 |
SI2290539T1 (sl) | 2012-04-30 |
CY1112463T1 (el) | 2015-12-09 |
JP2011509477A (ja) | 2011-03-24 |
EP2223214A2 (en) | 2010-09-01 |
ATE540355T1 (de) | 2012-01-15 |
WO2009087232A2 (en) | 2009-07-16 |
US20100223448A1 (en) | 2010-09-02 |
PT2223214E (pt) | 2011-09-19 |
DK2290539T3 (da) | 2012-02-06 |
JP4768083B2 (ja) | 2011-09-07 |
EP2290539B1 (en) | 2012-01-04 |
EP2290539A1 (en) | 2011-03-02 |
KR101231557B1 (ko) | 2013-02-08 |
PL2223214T3 (pl) | 2011-11-30 |
US20150026680A1 (en) | 2015-01-22 |
US9137120B2 (en) | 2015-09-15 |
CN101911018B (zh) | 2013-08-28 |
PL2290539T3 (pl) | 2012-06-29 |
US7734900B2 (en) | 2010-06-08 |
DK2223214T3 (da) | 2011-08-01 |
ES2368684T3 (es) | 2011-11-21 |
PT2290539E (pt) | 2012-02-15 |
ES2380450T3 (es) | 2012-05-11 |
US20110246752A1 (en) | 2011-10-06 |
ATE514130T1 (de) | 2011-07-15 |
US8832689B2 (en) | 2014-09-09 |
CN101911018A (zh) | 2010-12-08 |
US20090182979A1 (en) | 2009-07-16 |
SI2223214T1 (sl) | 2011-10-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10621007B2 (en) | Execution of an instruction for performing a configuration virtual topology change | |
KR101231557B1 (ko) | 컴퓨터 구성 가상 토폴로지 탐색 | |
US9756118B2 (en) | Virtual performance monitoring decoupled from hardware performance-monitoring units |
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 | ||
FPAY | Annual fee payment |
Payment date: 20160128 Year of fee payment: 4 |
|
FPAY | Annual fee payment |
Payment date: 20170125 Year of fee payment: 5 |
|
FPAY | Annual fee payment |
Payment date: 20180129 Year of fee payment: 6 |
|
FPAY | Annual fee payment |
Payment date: 20200129 Year of fee payment: 8 |