KR20130099801A - 정보 처리 장치, 제어 방법 및 제어 프로그램을 기록한 컴퓨터 판독가능한 기록 매체 - Google Patents

정보 처리 장치, 제어 방법 및 제어 프로그램을 기록한 컴퓨터 판독가능한 기록 매체 Download PDF

Info

Publication number
KR20130099801A
KR20130099801A KR1020120115353A KR20120115353A KR20130099801A KR 20130099801 A KR20130099801 A KR 20130099801A KR 1020120115353 A KR1020120115353 A KR 1020120115353A KR 20120115353 A KR20120115353 A KR 20120115353A KR 20130099801 A KR20130099801 A KR 20130099801A
Authority
KR
South Korea
Prior art keywords
node
unit
memory area
shared memory
access
Prior art date
Application number
KR1020120115353A
Other languages
English (en)
Other versions
KR101476001B1 (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 KR20130099801A publication Critical patent/KR20130099801A/ko
Application granted granted Critical
Publication of KR101476001B1 publication Critical patent/KR101476001B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1008Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
    • G06F11/1048Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices using arrangements adapted for a specific error detection or correction feature
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/14Error detection or correction of the data by redundancy in operation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0706Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment
    • G06F11/0721Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment within a central processing unit [CPU]
    • G06F11/0724Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment within a central processing unit [CPU] in a multiprocessor or a multi-core unit
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0751Error or fault detection not based on redundancy
    • G06F11/0754Error or fault detection not based on redundancy by exceeding limits
    • G06F11/076Error or fault detection not based on redundancy by exceeding limits by exceeding a count or rate limit, e.g. word- or bit count limit
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0815Cache consistency protocols
    • G06F12/0817Cache consistency protocols using directory methods
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Quality & Reliability (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Techniques For Improving Reliability Of Storages (AREA)
  • Hardware Redundancy (AREA)
  • Multi Processors (AREA)

Abstract

본 발명은 정보 처리 장치가 다운될 가능성을 억제하는 것을 목적으로 한다.
정보 처리 장치(1)에서의 복수의 노드 중 적어도 하나의 노드(10)가, 하나의 노드 또는 다른 노드가 구비하는 메모리에 포함되는 노드(10) 및 다른 노드에 의해 액세스되는 공유 메모리 영역에 기억된 데이터에 관해, 다음과 같은 처리를 행한다. 즉, 노드(10)가, 정해진 시간내에 정해진 횟수를 초과하여 발생하는 ICE, 또는, 공유 메모리 영역 내의 동일 개소에 발생하는 PCE를 검출한다. 에러가 검출된 경우에, 노드(10)가, 노드(10) 및 다른 노드에 의한 공유 메모리에의 액세스를 억지하도록 제어한다. 노드(10)가, 공유 메모리 영역과는 상이한 메모리 영역에 데이터의 복원을 행한다. 노드(10)가, 상이한 메모리 영역에 관한 정보를 다른 노드에 통지한다. 노드(10)가, 노드(10) 및 다른 노드에 의한 데이터에의 액세스를 재개하도록 제어한다.

Description

정보 처리 장치, 제어 방법 및 제어 프로그램을 기록한 컴퓨터 판독가능한 기록 매체{INFORMATION PROCESSING APPARATUS, CONTROL METHOD, AND COMPUTER READABLE RECORDING MEDIUM HAVING CONTROL PROGRAM}
본 발명은, 정보 처리 장치, 제어 방법 및 제어 프로그램에 관한 것이다.
종래, 복수의 연산 처리 장치가 기억 장치를 공유하는 SMP(Symmetric MultiProcessor)의 기술이 알려져 있다. 이러한 SMP의 기술이 적용된 정보 처리 시스템의 일례로서, 연산 처리 장치와 기억 장치를 갖는 복수의 노드를 동일한 버스로 접속하고, 버스를 통해 각 연산 처리 장치가 각 기억 장치를 공유하는 정보 처리 시스템(정보 처리 장치)이 있다. 즉, 이 정보 처리 시스템에서는, 복수의 노드 사이에서 공유되는 기억 장치(공유 메모리)가 있다.
이러한 공유 메모리의 데이터에, ECC ICE(Error Check and Correct Intermittent Correctable Error) 또는 ECC PCE(Permanent Correctable Error)가 발생하는 경우가 있다. 여기서, 「ECC ICE」는, 간헐적인 정정 가능한 에러이다. 즉, 「ECC ICE」는, 정해진 시간내에 정해진 횟수를 초과하여 발생하는 정정 가능한 에러이다. 또, 「ECC PCE」는, 고정된 정정 가능한 에러이다. 즉, 「ECC PCE」는, 메모리 영역 내의 동일 개소에 발생하는 정정 가능한 에러이다.
또, 어떤 페이지에서 에러 정정이 많이 발생하면, 상기 페이지의 내용을 에러 정정이 발생하는 개소를 포함하는 제1 기억 영역으로부터 제2 기억 영역에 복사하고, TLB 내의 물리 페이지를 제1 기억 영역의 어드레스로부터 제2 기억 영역의 어드레스에 라이트하는 기술이 있다.
또, 공유 메모리에의 액세스시에 정정 가능한 1 비트 에러가 발생한 경우에, 어떤 장치가 데이터를 라이트백(write back)하는 동안, 액세스 중의 메모리가 다른 장치에 액세스되지 않도록 제어하는 기술이 있다.
특허문헌 1 : 일본 특허 공개 평성11-175409호 공보 특허문헌 2 : 일본 특허 공개 평성9-128303호 공보 특허문헌 3 : 일본 특허 공개 평성8-77078호 공보
그러나, 상기 기술에서는, ICE나 PCE 등의 CE를 방치하면, 정보 처리 장치가 다운되는 경우가 있다고 하는 문제가 있다.
본 발명은, 하나의 측면에서는, 정보 처리 장치가 다운될 가능성을 억제하는 것을 목적으로 한다.
하나의 측면에서는, 기억 장치를 각각이 구비하는 복수의 노드와, 복수의 노드간을 접속하는 인터커넥트를 갖는 정보 처리 장치로서, 복수의 노드 중 적어도 하나의 노드는, 검출부, 억지 제어부, 복원부, 통지부, 재개 제어부를 갖는다. 검출부는, 하나의 노드 또는 다른 노드가 구비하는 기억 장치에 포함되는 상기 하나의 노드 및 상기 다른 노드에 의해 액세스되는 공유 메모리 영역에 기억된 데이터에 관해, 다음과 같은 처리를 행한다. 즉, 검출부는, 정해진 시간내에 정해진 횟수를 초과하여 발생하는 정정 가능한 에러, 또는, 상기 공유 메모리 영역 내의 동일 개소에 발생하는 정정 가능한 에러를 검출한다. 억지 제어부는, 상기 검출부에 의해 상기 에러가 검출된 경우에, 상기 하나의 노드 및 다른 노드에 의한 상기 공유 메모리 영역에의 액세스를 억지하도록 제어한다. 복원부는, 상기 공유 메모리 영역과는 상이한 메모리 영역에 상기 데이터의 복원을 행한다. 통지부는, 상기 상이한 메모리 영역에 관한 정보를 상기 다른 노드에 통지한다. 재개 제어부는, 상기 하나의 노드 및 다른 노드에 의한 상기 데이터에의 액세스를 재개하도록 제어한다.
일 실시형태에 의하면, 정보 처리 장치가 다운될 가능성을 억제할 수 있다.
도 1은, 실시예 1에 따른 정보 처리 시스템의 일례를 설명하기 위한 도면이다.
도 2는, 실시예 1에 따른 빌딩 블록의 기능 구성을 설명하기 위한 도면이다.
도 3은, 공유 메모리가 할당된 노드에, 다른 노드가 어태치하는 경우의 메모리 맵의 일례를 나타낸 도면이다.
도 4는, 실시예 1에 따른 CPU의 기능 구성을 설명하기 위한 도면이다.
도 5는, 실시예 1에 따른 노드 맵의 데이터 구성의 일례를 설명하기 위한 도면이다.
도 6은, 실시예 1에 따른 CPU가 송신하는 패킷을 설명하기 위한 도면이다.
도 7은, 실시예 1에 따른 CPU가 요청을 송신하는 처리의 일례를 설명하기 위한 도면이다.
도 8은, 실시예 1에 따른 CPU가 패킷을 수신했을 때 실행하는 처리의 일례를 설명하기 위한 도면이다.
도 9는, 실시예 1에 따른 I/O 장치가 요청을 송신하는 처리의 일례를 설명하기 위한 도면이다.
도 10은, 실시예 1에 따른 I/O 장치가 응답을 수신하는 처리의 일례를 설명하기 위한 도면이다.
도 11은, 공유 영역을 제어하는 처리의 흐름을 설명하기 위한 플로우차트이다.
도 12는, 공유 메모리의 할당 처리를 설명하기 위한 플로우차트이다.
도 13은, 공유 메모리 어태치 처리를 설명하기 위한 플로우차트이다.
도 14는, 애플리케이션이 공유 메모리를 사용하는 처리를 설명하기 위한 플로우차트이다.
도 15는, 노드간의 공유 메모리 디태치 처리를 설명하기 위한 플로우차트이다.
도 16은, 노드간 공유 메모리의 해방 처리를 설명하기 위한 플로우차트이다.
도 17은, 요청을 발행하는 처리의 흐름을 설명하기 위한 플로우차트이다.
도 18은, 요청을 수신했을 때 실행하는 처리의 흐름을 설명하기 위한 플로우차트이다.
도 19는, ECC 체크부가 실행하는 처리의 흐름을 설명하기 위한 플로우차트이다.
도 20은, ECC 체크부가 실행하는 처리의 흐름을 설명하기 위한 플로우차트이다.
도 21은, ECC 체크부에 의해 실행되는 ICE의 발생을 검출하는 처리의 일례를 설명하기 위한 도면이다.
도 22는, ECC 체크부에 의해 실행되는 ICE의 발생을 검출하는 처리의 일례를 설명하기 위한 도면이다.
도 23은, ECC 체크부에 의해 실행되는 ICE의 발생을 검출하는 처리의 일례를 설명하기 위한 도면이다.
도 24는, ECC 체크부에 의해 실행되는 ICE의 발생을 검출하는 처리의 일례를 설명하기 위한 도면이다.
도 25는, ECC 체크부에 의해 실행되는 ICE의 발생을 검출하는 처리의 일례를 설명하기 위한 도면이다.
도 26는, ECC 체크부에 의해 실행되는 ICE의 발생을 검출하는 처리의 일례를 설명하기 위한 도면이다.
도 27은, ECC 체크부에 의해 실행되는 ICE의 발생을 검출하는 처리의 일례를 설명하기 위한 도면이다.
도 28a는, 실시예 1에 따른 CPU가 실행하는 OS의 기능 구성의 일례를 나타낸 도면이다.
도 28b는, OS의 처리에 의해 참조되는 테이블의 데이터 구성의 일례를 나타낸 도면이다.
도 28c는, OS의 처리에 의해 참조되는 테이블의 데이터 구성의 일례를 나타낸 도면이다.
도 29는, OS가 실행하는 처리의 흐름을 설명하기 위한 플로우차트이다.
도 30은, OS가 실행하는 처리의 흐름을 설명하기 위한 플로우차트이다.
도 31은, OS가 실행하는 처리의 흐름을 설명하기 위한 플로우차트이다.
도 32는, OS가 실행하는 처리의 흐름을 설명하기 위한 플로우차트이다.
도 33은, OS가 실행하는 처리의 흐름을 설명하기 위한 플로우차트이다.
도 34는, 메모리 관리 테이블의 데이터 구성의 일례를 나타낸 도면이다.
도 35는, 어드레스 변환 테이블의 데이터 구성의 일례를 나타낸 도면이다.
도 36은, OS가 실행하는 처리의 흐름을 설명하기 위한 플로우차트이다.
도 37은, 액세스 재개 대기 리스트의 데이터 구성의 일례를 나타낸 도면이다.
도 38은, 스케줄 대기 리스트의 데이터 구성의 일례를 나타낸 도면이다.
도 39는, OS가 실행하는 처리의 흐름을 설명하기 위한 플로우차트이다.
도 40은, 실시예 1에 따른 CPU가 실행하는 OS 및 프로세스의 기능 구성의 일례를 나타낸 도면이다.
이하에 첨부 도면을 참조하여 본원에 따른 정보 처리 장치, 제어 방법 및 제어 프로그램에 관해 설명한다.
[실시예 1]
이하의 실시예 1에서는, 도 1을 이용하여, 복수의 노드를 갖는 정보 처리 시스템의 일례에 관해 설명한다. 도 1은, 실시예 1에 따른 정보 처리 시스템의 일례를 설명하기 위한 도면이다. 도 1에 나타내는 예에서는, 정보 처리 시스템(1)은, XB(크로스바 스위치)(2)와 복수의 빌딩 블록(10∼10e)을 갖는다. XB(2)는, 각 빌딩 블록(10∼10e)을 서로 접속하는 크로스바 스위치이다. 또, XB(2)는, 후술하는 각 빌딩 블록(10∼10e)이 갖는 각 서비스 프로세서의 마스터가 되는 도시하지 않은 서비스 프로세서를 갖는다. 또한, 소수의 노드가 접속되는 소규모 구성의 경우, XB(2)를 통하지 않고, 빌딩 블록끼리 직접 접속해도 좋다.
또, 빌딩 블록(10)은, 복수의 CPU(Central Processing Unit)(21∼21c)와 복수의 메모리(22∼22c)를 갖는다. 또, 다른 빌딩 블록(10a∼10e)도, 빌딩 블록(10)과 동일한 구성을 갖는 것으로 하고, 이하의 설명을 생략한다. 또한, 도 1에 나타내는 예에서는, CPU(21b, 21c) 및 메모리(22b, 22c)에 관해서는 기재가 생략되어 있다. 또, 각 빌딩 블록 내에는, 도시하지 않은 I/O(Input Output) 장치가 설치되어 있다. 여기서, 본 실시예에서는, CPU간의 캐쉬 코히어런스 제어를 디렉토리 방식으로 실현하고, 데이터를 메모리 상에 갖는 후술하는 홈 CPU가 상기 디렉토리를 관리하고 있다.
각 빌딩 블록(10∼10e)은 각각 독립적으로 OS를 동작시킨다. 즉, 각 CPU(21∼21c)는 각각 독립적으로 OS를 실행한다. 각 빌딩 블록(10∼10e)이 실행하는 OS는 빌딩 블록마다 상이한 파티션에서 동작한다. 여기서, 파티션이란, 동일한 OS가 동작하고, 동작하고 있는 OS에서 볼 때 하나의 시스템으로서 동작하는 빌딩 블록의 군을 나타낸다.
예컨대, 빌딩 블록(10, 10a)이 파티션 #A로서 동작하고, 빌딩 블록(10b∼10d)이 파티션 #B로서 동작한다. 이러한 경우에는, 빌딩 블록(10)이 동작시키는 OS는, 빌딩 블록(10, 10a)이 하나의 시스템으로서 동작하고 있다고 식별하고, 빌딩 블록(10b)이 동작시키는 OS는, 빌딩 블록(10b∼10d)이 하나의 시스템으로서 동작하고 있다고 식별한다.
다음으로, 도 2를 이용하여 빌딩 블록의 구성예에 관해 설명한다. 도 2는, 실시예 1에 따른 빌딩 블록의 기능 구성을 설명하기 위한 도면이다. 도 2에 나타내는 예에서는, 빌딩 블록(10)은, 노드(20), 서비스 프로세서(24), XB 접속부(27, 27a), PCIe(Peripheral Component Interconnect Express) 접속부(28)를 갖는다.
노드(20)는, 복수의 CPU(21∼21c)와, 복수의 메모리(22∼22c)와, 통신부(23)를 갖는다.
서비스 프로세서(24)는, 제어부(25)와, 통신부(26)를 갖는다. 또, 도 2에 나타내는 예에서는, 각 CPU(21∼21c)는, 서로 접속되며, 통신부(23)와 접속되어 있다. 또, 각 메모리(22∼22c)는 각 CPU(21∼21c)와 접속되어 있다. 서비스 프로세서(24)는, 도시하지 않은 LAN(Local Area Network) 등의 네트워크 회선을 통해 서버의 관리자 단말에 접속되고, 관리자 단말로부터의 지시를 받아 노드 또는 빌딩 블록(10) 내의 각종 설정 변경 등의 제어를 행한다.
또, 각 CPU(21∼21c)는, XB 접속부(27) 또는 XB 접속부(27a)와 접속되어 있다. 또한, XB 접속부(27, 27a)는 동일한 XB 접속부이어도 좋다. 또, 각 CPU(21∼21c)는 PCIe 접속부(28)와 접속되어 있다. 또, 통신부(23)는, 서비스 프로세서(24)가 갖는 통신부(26)와 접속되어 있다. 또한, 제어부(25), 통신부(26), 통신부(23), 각 CPU(21∼21c)는, 예컨대 I2C(Inter-Integrated Circuit)로 접속되어 있다.
CPU(21∼21c)는, 애플리케이션을 실행하는 연산 처리 장치이다. 또, 각 CPU(21∼21c)에는 각각 메모리(22∼22c)가 접속되어 있다. 또, 각 CPU(21∼21c)는, 실행중인 애플리케이션이 공유 메모리의 할당을 요구한 경우에는, 서로 통신하여, 애플리케이션이 사용하는 공유 메모리의 할당을 행한다. 또, 각 CPU(21∼21c)는, 각 메모리(22∼22c)나, 다른 빌딩 블록(10a∼10e)이 갖는 메모리의 일부를 공유 메모리로서 이용한다.
도 3은, 공유 메모리 실체가 할당된 노드에, 다른 노드가 어태치하는 경우의 메모리 맵의 일례를 나타낸 도면이다. 도 3의 예에서는, 메모리 실체를 소유하는 노드(이것을 홈 노드라고 칭함)에 공유 메모리가 할당되면, 홈 노드는 이것을 일정한 영역 사이즈로 분할한다. 이 분할 단위를 세그멘트(segment)라고 칭하지만, 세그멘트로 분할하는 것은 필수적인 것은 아니다. 다른 노드가, 상기 홈 노드가 소유하는 공유 메모리의 할당을 요구하는 경우, 어태치함으로써 상기 홈 노드의 공유 메모리를 사용할 수 있다. 이 리모트 노드가 사용하는 메모리 영역을 공유 메모리 이미지 영역이라고 칭한다. 이 공유 메모리 이미지 영역은, 단독의 리모트 노드가 어태치해도 좋고, 복수의 리모트 노드가 어태치해도 좋다.
도 2로 되돌아가, 각 CPU(21∼21c)는, 메모리의 물리 어드레스와, 메모리와 접속된 CPU의 식별자인 CPUID(identification)를 대응시킨 노드 맵을 갖는다. 또한, 이 CPUID는 시스템(1)에서 일의적으로 결정되어, 중복되지 않는다.
각 CPU(21∼21c)는, 노드 맵을 이용하여 다른 CPU와 통신을 행한다. 예컨대, CPU(21)는, 액세스 대상이 되는 물리 어드레스와 대응된 CPUID가, CPU(21∼21c)와는 상이한 CPU를 나타내는 경우에는, XB 접속부(27), 또는 XB 접속부(27a) 및 XB(2)를 통해 다른 노드에 메모리 액세스의 요청을 송신한다. 또, CPU(21)는, 자신과 접속된 메모리에 대한 요청을 다른 노드로부터 수신한 경우에는, 요청의 대상이 되는 데이터를 자신과 접속된 메모리(22)로부터 판독하여 요청원에 송신한다. 다른 CPU(21a∼21c)도 동일한 처리를 행한다.
또, 각 CPU(21∼21c)는, TLB(Translation Lookaside Buffer)를 이용한 어드레스 변환을 행하고, TLB 미스가 발생했을 때, 트랩 처리를 실행하는 등, 종래의 CPU와 동일한 처리를 실행하는 기능도 갖는다.
메모리(22∼22c)는, 정보 처리 시스템(1)이 갖는 모든 CPU가 공용하는 메모리이다. 또, 정보 처리 시스템(1)에서는, 모든 빌딩 블록(10∼10e)이 갖는 메모리에 대하여, 각 빌딩 블록(10∼10e)의 서비스 프로세서가, 동일한 물리 어드레스 공간에 맵핑되는 물리 어드레스를 분류한다. 즉, 정보 처리 시스템(1)이 갖는 모든 메모리 중, 적어도 공유 메모리로서 사용되는 메모리에는, 중복되지 않는 값의 물리 어드레스가 할당된다.
또, 메모리(22∼22c)는, 기억 영역의 일부를, 정보 처리 시스템(1)이 갖는 모든 CPU가 공용하는 공유 영역으로 하고, 다른 부분을, 자신에게 액세스하는 CPU(21∼21c)가 커넬 데이터나 사용자 데이터를 저장하는 로컬 영역, 다른 노드와의 공유 메모리를 통한 교환과는 관계없는 I/O 장치가 이용하는 I/O 영역으로 한다.
제어부(25)는 빌딩 블록(10)의 제어를 행한다. 예컨대, 제어부(25)는, 빌딩 블록(10)의 전원 관리나, 빌딩 블록(10) 내의 이상의 감시 또는 제어 등을 실행한다. 또, 제어부(25)는, 다른 빌딩 블록(10a∼10e)이 갖는 서비스 프로세서와, 도시하지 않은 네트워크에 의해 접속되어 있고, 각 빌딩 블록(10a∼10e) 사이에서 연계한 제어를 실행한다. 또, 제어부(25)는, 각 CPU(21∼21c)가 실행하는 OS와 통신을 행할 수 있다.
또, 제어부(25)는, 통신부(26)와 통신부(23)를 통해 각 CPU(21∼21c)에 액세스한다. 그리고, 제어부(25)는, 각 빌딩 블록(10∼10e)이 갖는 노드 맵의 갱신이나 제어 등을 실행한다.
또한, 서비스 프로세서(24)가 갖는 통신부(26)는, 제어부(25)로부터 송신된 제어 신호를 수신하여, 수신한 제어 신호를 노드(20)가 갖는 통신부(23)에 송신한다. 또, 통신부(23)는, 통신부(26)로부터 송신된 제어 신호를 수신하여, 수신한 제어 신호를 각 CPU(21∼21c)에 송신한다. 또, XB 접속부(27, 27a)는, 각 CPU(21∼21c)를 XB(2)와 접속하여, 각 빌딩 블록(10∼10e)이 갖는 CPU간의 통신을 중계한다. 또, PCIe 접속부(28)는, 각 CPU(21∼21c)에 의한 I/O 장치에의 액세스를 중계한다.
다음으로, 도 4를 이용하여, 각 CPU(21∼21c)가 갖는 기능 구성에 관해 설명한다. 도 4는, 실시예 1에 따른 CPU의 기능 구성을 설명하기 위한 도면이다. 또한, CPU(21a∼21c)는, CPU(21)와 동일한 기능을 갖기 때문에 설명을 생략한다. 또, 도 4에 나타내는 예에서는, 서비스 프로세서(24)와 CPU(21)를 접속하는 접속부(23, 26)에 관해서는 기재를 생략했다.
도 4에 나타내는 예에서는, CPU(21)는, 연산 처리부(30), 라우터(40), 메모리 액세스부(41), PCIe 제어부(42)를 갖는다. 또, 연산 처리부(30)는, 연산부(31), L1(Level 1) 캐쉬(32), L2(Level 2) 캐쉬(33), 노드 맵(34), 어드레스 변환부(35), 캐쉬 디렉토리 관리부(36), 패킷 제어부(37)를 갖는다. 또한, 라우터(40), 메모리 액세스부(41), PCIe 제어부(42) 등의 각 부를 동일한 CPU(21)의 내부에 포함시키지 않아도 좋다.
또, 패킷 제어부(37)는, 패킷 생성부(37a), 패킷 수신부(37b)를 갖는다. 또, PCIe 제어부(42)는, 요청 생성부(42a), PCIe 버스 제어부(42b)를 갖는다.
우선, 연산 처리부(30)가 갖는 노드 맵(34)에 관해 설명한다. 노드 맵(34)은, 메모리의 기억 영역을 나타내는 물리 어드레스의 범위와, 메모리와 접속된 CPU의 CPUID가 대응하여 등록되는 테이블이다. 이하, 노드 맵(34)에 등록되는 정보의 예를, 도면을 이용하여 설명한다.
도 5는, 실시예 1에 따른 노드 맵의 데이터 구성의 일례를 설명하기 위한 도면이다. 도 5에 나타내는 예에서는, 노드 맵(34)은, 「어드레스」, 「밸리드」, 「노드 ID」, 「CPUID」의 각 항목의 등록 내용을 대응시킨 엔트리를 갖는다. 여기서, 각 엔트리의 「어드레스」의 항목에는, 연속하는 복수의 물리 어드레스를 포함하는 어드레스 영역을 나타내는 정보가 저장된다.
예컨대, 정보 처리 시스템(1)은, 모든 메모리에 대하여 분류한 물리 어드레스 공간을 균등한 크기의 어드레스 영역으로 분할하여, 각 어드레스 영역에 #0, #1, #2 등의 식별자를 부여한다. 그리고, 정보 처리 시스템(1)은, 각 어드레스 영역을 나타내는 식별자를, 노드 맵(34)이 갖는 각 엔트리의 「어드레스」에 등록한다. 도 5의 예는, 첫번째 엔트리의 「어드레스」의 항목에 #0의 식별자가 등록된 경우를 나타낸다. 또, 도 5의 예는, 두번째 엔트리의 「어드레스」의 항목에 #1의 식별자가 등록된 경우를 나타낸다. 또, 도 5의 예는, 세번째 엔트리의 「어드레스」의 항목에 #2의 식별자가 등록된 경우를 나타낸다.
또, 각 엔트리의 「밸리드」의 항목에는, 물리 어드레스가 나타내는 기억 영역에 각 CPU가 액세스할 수 있는지의 여부를 나타내는 밸리드 비트가 등록된다. 예컨대, 물리 어드레스가 나타내는 기억 영역이, 각 CPU에서 공유되는 공유 영역인 경우에는, 액세스를 행할 수 있다는 취지의 밸리드 비트(예컨대 「1」)가 등록된다. 도 5의 예는, 첫번째 엔트리의 「밸리드」의 항목에 밸리드 비트 「1」이 등록된 경우를 나타낸다. 또, 도 5의 예는, 두번째 엔트리의 「밸리드」의 항목에 밸리드 비트 「1」이 등록된 경우를 나타낸다. 또, 도 5의 예는, 세번째 엔트리의 「밸리드」의 항목에, 각 CPU가, 물리 어드레스가 나타내는 기억 영역에 액세스할 수 없는 것을 나타내는 밸리드 비트 「0」이 등록된 경우를 나타낸다.
또, 각 엔트리의 「노드 ID」의 항목에는, 물리 어드레스가 분류된 메모리가 존재하는 노드를 나타내는 식별자가 등록된다. 도 5의 예는, 첫번째 엔트리의 「노드 ID」의 항목에 노드를 나타내는 식별자 「1」이 등록된 경우를 나타낸다. 또, 도 5의 예는, 두번째 엔트리의 「노드 ID」의 항목에 노드를 나타내는 식별자 「1」이 등록된 경우를 나타낸다.
또, 각 엔트리의 「CPUID」의 항목에는, 물리 어드레스가 분류된 메모리와 접속된 CPU를 나타내는 식별자가 등록된다. 즉, 노드 맵(34)은, 액세스 대상이 되는 물리 어드레스가, 어떤 CPU와 접속된 메모리의 물리 어드레스인지를 나타낸다. 도 5의 예는, 첫번째 엔트리의 「CPUID」의 항목에 CPU를 나타내는 식별자 「4」가 등록된 경우를 나타낸다. 또, 도 5의 예는, 두번째 엔트리의 「CPUID」의 항목에 CPU를 나타내는 식별자 「5」가 등록된 경우를 나타낸다.
또한, 노드 맵(34)에는, 액세스 대상이 되는 물리 어드레스가 어떤 CPU와 접속된 물리 어드레스인지를 나타낼 수 있다면, 본 실시예 이외의 임의의 형식으로 정보가 등록되어도 좋다.
도 4로 되돌아가, 연산부(31)는, 연산 처리를 실행하여, OS(Operating System)나 애플리케이션을 실행하는 연산 장치의 코어이다. 또, 연산부(31)는, 데이터의 리딩이나 라이팅을 행하는 경우에는, 리드 대상 또는 라이트 대상이 되는 데이터가 저장된 기억 영역의 논리 어드레스(Virtual Address; VA)를 어드레스 변환부(35)에 출력한다.
L1 캐쉬(32)는, 연산부(31)에서 빈번하게 이용되는 데이터를 일시적으로 기억하는 캐쉬 메모리이다. L2 캐쉬(33)는, L1 캐쉬(32)와 마찬가지로, 빈번하게 이용되는 데이터를 일시적으로 기억하지만, L1 캐쉬(32)보다 기억 용량이 크고, 데이터를 리드 라이트하는 속도가 저속인 캐쉬 메모리이다. 여기서, 디렉토리 정보(36a)는, 캐쉬 디렉토리 관리부(36)에 기억되어 있고, 메모리(22)의 각 기억 영역에 기억된 데이터를 캐쉬한 CPU나, 캐쉬된 데이터의 갱신 상황을 나타내는 정보이다. 또한, 이하의 설명에서는, 「디렉토리 정보」를 단순히 「디렉토리」라고 표기하는 경우가 있다. 이 디렉토리에 의한 캐쉬 메모리 관리 방법은, ccNUMA(Cache Coherent Non-Uniform Memory) 시스템에서 자주 이용되는 기술이다. ccNUMA 기술, 디렉토리 기술이 모두 공지의 기술이기 때문에, 여기서는 자세히 설명하지 않는다. 또, 도 4에서는 디렉토리 정보(36a)는 캐쉬 디렉토리 관리부(36)에 내장되어 있지만, 메모리(22)의 기억 영역의 일부에 디렉토리 정보(36a)를 기록하는 것도 가능하다.
어드레스 변환부(35)는 TLB(35a)를 갖는다. TLB(35a)에는, 논리 어드레스와 물리 어드레스를 대응시킨 엔트리가 등록된다. 어드레스 변환부(35)는, TLB(35a)를 이용하여, 연산부(31)가 출력한 논리 어드레스를 물리 어드레스로 변환한다. 예컨대, 어드레스 변환부(35)는, 연산부(31)로부터 취득한 논리 어드레스에 대응하는 물리 어드레스를 TLB(35a)로부터 검색하고, 검색한 결과 물리 어드레스가 얻어진 경우에는, 얻어진 물리 어드레스를 캐쉬 디렉토리 관리부(36)에 출력한다. 또, 어드레스 변환부(35)는, TLB 미스가 발생한 경우는 트랩 처리를 실행한다. 여기서, OS 등의 시스템 소프트웨어는, TLB 미스가 발생한 물리 어드레스와 논리 어드레스의 조(組)를 TLB(35a)에 등록한다. 단, 이러한 조의 등록이 금지된 물리 어드레스에 관해서는, TLB 미스가 발생한 경우라 하더라도, OS 등의 시스템 소프트웨어에 의해, 물리 어드레스와 논리 어드레스의 조가 TLB(35a)에 등록되지 않는다.
여기서, OS나 어드레스 변환부(35) 등은, 연산부(31)가 실행하는 애플리케이션으로부터 공유 메모리에 대한 할당이 요구된 경우에는, 다음과 같은 처리를 실행한다. 즉, TLB 미스가 발생한 경우, OS 등의 시스템 소프트웨어 등은, 엔트리를 TLB(35a)에 등록한다. 또, TLB 미스가 발생하지 않은 경우에는, 이미 엔트리가 TLB(35a)에 등록 완료되었기 때문에, 어드레스 변환부(35)는 논리 어드레스로부터 물리 어드레스로의 변환을 행한다.
또, 어드레스 변환부(35)나 OS는, 애플리케이션이나 OS로부터 로컬 영역의 할당이 요구된 경우는, 다음과 같은 처리를 실행한다. 즉, TLB 미스가 발생한 경우, OS 등의 시스템 소프트웨어는, 어드레스 변환부(35)는, 애플리케이션이나 OS가 CPU(21)전용의 로컬 영역에 액세스하기 위한 논리 어드레스와, 로컬 영역에 할당되는 범위의 물리 어드레스를 대응시킨 엔트리를 TLB(35a)에 등록한다.
캐쉬 디렉토리 관리부(36)는, 캐쉬 데이터 및 디렉토리의 관리를 행한다. 캐쉬 디렉토리 관리부(36)는, 어드레스 변환부(35)로부터 출력된 물리 어드레스를 취득한다.
그리고, 캐쉬 디렉토리 관리부(36)는, 어드레스 변환부(35)로부터 물리 어드레스를 취득한 경우에는, 다음과 같은 처리를 실행한다. 즉, 캐쉬 디렉토리 관리부(36)는, 디렉토리 정보(36a)를 이용하여, 취득한 물리 어드레스에 저장된 데이터가 L1 캐쉬(32) 및 L2 캐쉬(33)에 캐쉬되어 있는지의 여부를 판정한다.
그리고, 캐쉬 디렉토리 관리부(36)는, 취득한 물리 어드레스에 저장된 데이터가 캐쉬되어 있다고 판정한 경우에는, 캐쉬되어 있는 데이터를 연산부(31)에 출력한다. 또, 캐쉬 디렉토리 관리부(36)는, 취득한 물리 어드레스에 저장된 데이터가 L1 캐쉬(32) 및 L2 캐쉬(33)에 캐쉬되어 있지 않은 경우는, 다음과 같은 처리를 실행한다. 우선, 캐쉬 디렉토리 관리부(36)는, 노드 맵(34)을 참조하여, 취득한 물리 어드레스를 포함하는 범위의 엔트리를 식별한다. 그리고, 캐쉬 디렉토리 관리부(36)는, 식별한 엔트리의 CPUID가 CPU(21)의 CPUID인지의 여부를 판정한다. 그 후, 캐쉬 디렉토리 관리부(36)는, 식별한 엔트리의 CPUID가 CPU(21)의 CPUID인 경우는, 메모리 액세스부(41)에 물리 어드레스를 출력한다.
또, 캐쉬 디렉토리 관리부(36)는, 식별한 엔트리의 CPUID가 CPU(21)의 CPUID가 아닌 경우에는, 다음과 같은 처리를 실행한다. 즉, 캐쉬 디렉토리 관리부(36)는, 식별한 엔트리의 CPUID와 물리 어드레스를 취득한다. 그리고, 캐쉬 디렉토리 관리부(36)는, 패킷 제어부(37)에 대하여, 취득한 CPUID와 물리 어드레스를 출력한다.
또, 캐쉬 디렉토리 관리부(36)는, 출력한 물리 어드레스가 나타내는 기억 영역에 저장되어 있는 데이터를 메모리 액세스부(41)나 패킷 제어부(37)로부터 취득한 경우에는, 취득한 데이터를 L1 캐쉬(32) 및 L2 캐쉬(33)에 저장한다. 그리고, 캐쉬 디렉토리 관리부(36)는, L1 캐쉬(32)에 캐쉬시킨 데이터를 연산부(31)에 출력한다.
또, 캐쉬 디렉토리 관리부(36)는, 패킷 제어부(37)로부터 물리 어드레스를 취득한 경우, 즉, 다른 CPU나 I/O 장치로부터의 메모리 액세스의 요청의 대상이 되는 물리 어드레스를 취득한 경우에는, 다음과 같은 처리를 실행한다. 즉, 캐쉬 디렉토리 관리부(36)는, 노드 맵(34)을 참조하여, 취득한 물리 어드레스가 로컬 영역으로 분류된 물리 어드레스인지의 여부를 판정한다.
다른 파티션이 요구의 요청원이고, 취득한 물리 어드레스가 로컬 영역으로 분류된 물리 어드레스인 경우에는, 캐쉬 디렉토리 관리부(36)는, 패킷 제어부(37)에 대하여, 요청원에 부정 응답(액세스 에러)을 송신하도록 지시한다.
또, 취득한 물리 어드레스가 공유 영역으로 분류된 물리 어드레스인 경우에는, 캐쉬 디렉토리 관리부(36)는, 취득한 물리 어드레스가 나타내는 기억 영역에 기억된 데이터를 취득하고, 취득한 데이터를 패킷 제어부(37)에 출력하여, 요청원에 송신하도록 지시한다.
또, 캐쉬 디렉토리 관리부(36)는, 디렉토리 방식을 이용하여, 캐쉬한 데이터의 코히어런시를 유지하는 처리를 함께 실행한다. 예컨대, 캐쉬 디렉토리 관리부(36)는, 메모리(22)에 저장된 데이터를 요청 송신원의 CPU에 송신시키는 경우에는, 상기 데이터가 요청 송신원의 CPU 이외의 다른 CPU가 캐쉬하고 있는지의 여부를 판정한다.
그리고, 캐쉬 디렉토리 관리부(36)는, 요청의 대상이 되는 데이터를 다른 CPU가 캐쉬하지 않은 경우는, L1 캐쉬(32), L2 캐쉬(33), 메모리(22)로부터 요청의 대상이 되는 데이터를 취득한다. 그 후, 캐쉬 디렉토리 관리부(36)는, 취득한 데이터를 패킷 제어부(37)에 출력한다.
한편, 캐쉬 디렉토리 관리부(36)는, 요청의 대상이 되는 데이터를 다른 CPU가 캐쉬하고 있는 경우는, 일리노이 프로토콜 등의 방법을 이용하여, 캐쉬 코히어런스를 유지하기 위한 처리를 실행한다. 예컨대, 캐쉬 디렉토리 관리부(36)는, 캐쉬된 데이터의 상태가 MESI(Modified/Exclusive/Shared/Invalid) 중의 어느 것인지를 판정한다.
그리고, 캐쉬 디렉토리 관리부(36)는, 판정 결과에 따라서, 다른 CPU가 갖는 캐쉬 디렉토리 관리부와 코히어런시를 유지하기 위한 요청이나 오더(명령)의 송수신을 행하여, 캐쉬된 데이터의 상태에 따른 처리를 실행한다. 여기서, 「Modified」란, 어느 하나의 CPU가 데이터를 캐쉬하고 있고, 캐쉬된 데이터가 갱신되어 있는 상태를 나타낸다. 또한, 캐쉬된 데이터의 상태가 「Modified」인 경우에는, 라이트백을 실행할 필요가 있다.
또, 「Exclusive」란, 어느 하나의 CPU가 데이터를 캐쉬하고 있고, 캐쉬된 데이터가 갱신되어 있지 않은 상태를 나타낸다. 또, 「Shared」란, 복수의 CPU가 데이터를 캐쉬하고 있고, 캐쉬된 데이터가 갱신되어 있지 않은 것을 나타낸다. 또, 「Invalid」란, 캐쉬의 스테이터스가 등록되어 있지 않은 것을 나타낸다.
구체예를 들어 설명하면, 캐쉬 디렉토리 관리부(36)는, 스테이터스가 M(Modified)인 데이터를 캐쉬한 CPU에 대하여 라이트백을 지시하는 오더를 송신하도록 패킷 생성부(37a)에 지시한다. 그리고, 캐쉬 디렉토리 관리부(36)는, 데이터의 스테이터스를 갱신하고, 갱신후의 스테이터스에 따른 처리를 실행한다. 또한, 캐쉬 디렉토리 관리부(36)가 송수신하는 요청이나 오더의 종별에 관해서는 후술한다.
패킷 생성부(37a)는, 캐쉬 디렉토리 관리부(36)로부터 물리 어드레스와, CPUID를 취득한 경우에는, 취득한 물리 어드레스와, CPUID를 저장한 패킷, 즉, 메모리 액세스의 요청이 되는 패킷을 생성한다. 그리고, 패킷 생성부(37a)는 생성한 패킷을 라우터(40)에 송신한다.
도 6은, 실시예 1에 따른 CPU가 송신하는 패킷을 설명하기 위한 도면이다. 도 6에 나타내는 예에서는, 패킷 생성부(37a)는, CPUID와, 물리 어드레스와, 요청의 내용을 나타내는 데이터를 포함하는 요청을 생성하여, 생성한 요청을 라우터(40)에 출력한다. 이러한 경우에는, 라우터(40)는, 패킷 생성부(37a)가 생성한 요청을, XB 접속부(27)를 통해 XB(2)에 출력한다. 그렇게 하면, XB(2)는, 요청에 포함되는 CPUID가 나타내는 CPU에 요청을 전송한다.
또한, 패킷 생성부(37a)는, 캐쉬 디렉토리 관리부(36)로부터 코히어런시를 유지하기 위한 요청이나 오더의 발행의 지시를 접수한 경우에는, 지시된 요청이나 오더를 생성한다. 그리고, 패킷 생성부(37a)는, 생성한 요청이나 오더를 라우터(40), XB 접속부(27), XB(2)를 통해, 지시된 CPU에 송신한다. 또, 패킷 생성부(37a)는, I/O 장치로부터 데이터를 취득하는 경우, I/O 장치에의 액세스 요구를 라우터(40)에 출력한다.
패킷 수신부(37b)는, XB(2), XB 접속부(27), 라우터(40)를 통해, 다른 CPU나 자(自)노드 이외의 다른 I/O 장치가 출력한 패킷을 수신하면, 수신한 패킷에 포함되는 물리 어드레스를 취득한다. 또, 패킷 수신부(37b)는, PCIe 제어부(42), 라우터(40)를 통해, 자노드의 I/O 장치가 출력한 패킷을 수신하면, 수신한 패킷에 포함되는 물리 어드레스를 취득한다. 그리고, 패킷 수신부(37b)는, 취득한 물리 어드레스를 캐쉬 디렉토리 관리부(36)에 출력한다. 또, 패킷 수신부(37b)는, 다른 CPU가 송신한 데이터를 수신한 경우에는, 수신한 데이터를 캐쉬 디렉토리 관리부(36)에 출력한다.
또, 패킷 수신부(37b)는, 코히어런시를 유지하기 위한 요청이나 오더를 수신한 경우에는, 수신한 요청이나 오더를 캐쉬 디렉토리 관리부(36)에 출력한다. 또, 패킷 수신부(37b)는, I/O 장치에의 액세스 요구의 응답이나 데이터를 라우터(40)로부터 수신한 경우는, 수신한 응답이나 데이터를 캐쉬 디렉토리 관리부(36)에 출력한다. 이러한 경우에는, 캐쉬 디렉토리 관리부(36)는, 예컨대 취득한 데이터를 메모리 액세스부(41)에 출력한다. 이에 따라, 메모리 액세스부(41)는 메모리(22)에 데이터를 저장한다.
라우터(40)는, 패킷 생성부(37a)가 출력한 패킷을 수신한 경우에는, 수신한 요청을 XB 접속부(27)에 출력한다. 또, 라우터(40)는, XB 접속부(27)를 통해, 다른 CPU로부터 송신된 패킷이나 데이터를 수신하여, 수신한 패킷이나 데이터를 패킷 수신부(37b)에 출력한다. 또, 라우터(40)는, 패킷 제어부(37)가 I/O 장치 등에 대하여 출력한 패킷을 PCIe 제어부(42)에 출력한다. 또, 라우터(40)는, I/O 장치로부터의 요청 등을 PCIe 제어부(42)로부터 수신한 경우에는, 수신한 요청 등을 패킷 제어부(37) 또는 XB 접속부(27)에 출력한다. 또, 라우터(40)는, XB 접속부(27) 또는 패킷 제어부(37)를 통해, I/O 장치에의 응답을 수신한 경우에는, 수신한 응답을 PCIe 제어부(42)에 출력한다.
메모리 액세스부(41)는, 소위 MAC(Memory Access Controller)이며, 메모리(22)에 대한 액세스의 제어를 행한다. 예컨대, 메모리 액세스부(41)는, 캐쉬 디렉토리 관리부(36)로부터 물리 어드레스를 수신한 경우에는, 수신한 물리 어드레스가 나타내는 메모리(22)의 영역에 저장된 데이터를 취득하여, 취득한 데이터를 캐쉬 디렉토리 관리부(36)에 출력한다. 또한, 메모리 액세스부(41)는, 메모리 미러 기능을 이용하여 공유 영역을 용장화해도 좋다.
또, 메모리 액세스부(41)는, ECC 체크부(41a), CE 어드레스 레지스터(41b), ICE 발생 횟수 카운터(41c)를 갖는다.
ECC 체크부(41a)는, 정해진 주기마다, 또는, 캐쉬 디렉토리 관리부(36)로부터 메모리(22)에 대한 리드의 액세스의 요구가 있을 때마다, 다음과 같은 처리를 행한다. 즉, ECC 체크부(41a)는, 메모리(22)의 전기억 영역의 데이터, 또는, 액세스 대상의 기억 영역의 데이터에, CE가 발생했는지의 여부를 판정한다. 이러한 판정에 의해, ECC 체크부(41a)는 CE를 검출한다. CE를 검출한 경우에는, ECC 체크부(41a)는, 검출한 CE가 발생한 기억 영역의 데이터를 판독하여, 판독한 데이터의 오류를 정정하고, 오류를 정정한 데이터를, 검출한 CE가 발생한 기억 영역에 라이트백한다. 그리고, ECC 체크부(41a)는, 데이터를 라이트백한 기억 영역의 데이터를 다시 판독하고, 판독한 데이터에 관해 다시 CE가 발생했는지의 여부를 판정한다. 이 다시 판정함에 있어서, CE가 발생했다고 판정된 경우에는, ECC 체크부(41a)는 PCE가 발생했다고 판정한다. 이와 같이 하여, ECC 체크부(41a)는 PCE를 검출한다.
또, ECC 체크부(41a)는, 정해진 시간내의 CE의 발생 횟수를 ICE 발생 횟수 카운터(41c)에 기록하여, CE가 정해진 시간내에 정해진 횟수 α를 초과하여 발생한 경우에는 ICE가 발생했다고 판정한다. 이와 같이 하여, ECC 체크부(41a)는 ICE를 검출한다. 또한, 메모리 액세스부(41) 내의 처리부(마이크로컴퓨터 등)가 프로그램 처리에 의해 정해진 시간내의 CE의 발생 횟수를 카운트하는 카운트 동작 등을 하도록 해도 좋다.
그리고, ECC 체크부(41a)는, ICE 또는 PCE를 검출한 경우에는, 검출한 ICE 또는 PCE가 발생한 메모리(22)의 물리 어드레스를 CE 어드레스 레지스터(41b)로 설정한다.
요청 생성부(42a)는, 라우터(40)를 통해 I/O 장치에 대한 액세스 요구를 취득한 경우에는, 액세스 요구의 대상이 되는 I/O 장치에 송신하는 요청을 생성하여, 생성한 요청을 PCIe 버스 제어부(42b)에 출력한다. 또, 요청 생성부(42a)는, I/O 장치로부터 물리 어드레스와, CPUID를 취득한 경우에는, 취득한 물리 어드레스와, CPUID를 저장한 패킷, 즉, 메모리 액세스의 요청이 되는 패킷을 생성한다. 이러한 요청의 종류로는, I/O 장치가 CPU(21) 또는 다른 CPU에 접속된 메모리를 리드하기 위한 요청을 들 수 있다. 또, 요청 생성부(42a)는, I/O 장치로부터 물리 어드레스와, CPUID와, 라이트 데이터를 취득한 경우에는, 취득한 물리 어드레스와, CPUID와, 라이트 데이터를 저장한 패킷, 즉, 메모리 액세스의 요청이 되는 패킷을 생성한다. 이러한 요청의 종류로는, I/O 장치가 CPU(21) 또는 다른 CPU에 접속된 메모리에 데이터를 라이트하기 위한 요청을 들 수 있다. 그리고, 요청 생성부(42a)는, 생성한 패킷을 라우터(40)에 송신한다.
PCIe 버스 제어부(42b)는, 요청 생성부(42a)가 생성한 요청을 취득한 경우에는, PCIe 접속부(28)를 통해 I/O 장치에 요청을 송신한다. 또, PCIe 버스 제어부(42b)는, PCIe 접속부(28)를 통해, I/O 장치로부터 물리 어드레스와, CPUID를 취득한 경우에는, 요청 생성부(42a)에, 취득한 물리 어드레스와, CPUID를 송신한다. 또, PCIe 버스 제어부(42b)는, PCIe 접속부(28)를 통해, I/O 장치로부터 물리 어드레스와, CPUID와, 라이트 데이터를 취득한 경우에는, 요청 생성부(42a)에, 취득한 물리 어드레스와, CPUID와, 라이트 데이터를 송신한다.
다음으로, 도 7을 이용하여, CPU(21)가 다른 CPU에 대하여 요청을 송신하는 처리의 일례에 관해 설명한다. 도 7은, 실시예 1에 따른 CPU가 요청을 송신하는 처리의 일례를 설명하기 위한 도면이다. 예컨대, 도 7 중 (A)에 나타낸 바와 같이, 서비스 프로세서(24)로부터 노드 맵(34)에 대하여, 물리 어드레스가 분류되는 메모리에 액세스하는 CPU의 CPUID와 상기 메모리의 물리 어드레스를 대응시킨 엔트리의 설정이 행해진다.
또, 연산부(31)는, 연산 처리를 실행하여, 도 7 중 (B)에 나타낸 바와 같이, 액세스 대상이 되는 논리 어드레스를 어드레스 변환부(35)에 출력한다. 그렇게 하면, 어드레스 변환부(35)는, 논리 어드레스를 물리 어드레스로 변환하여, 변환한 물리 어드레스를 도 7 중 (C)에 나타낸 바와 같이, 캐쉬 디렉토리 관리부(36)에 출력한다.
여기서, 캐쉬 디렉토리 관리부(36)는, 어드레스 변환부(35)로부터 물리 어드레스를 취득하면, 도 7 중 (D)에 나타낸 바와 같이, 노드 맵(34)을 참조하여, 취득한 물리 어드레스와 대응된 CPUID를 취득한다. 그리고, 캐쉬 디렉토리 관리부(36)는, 취득한 CPUID가 CPU(21)의 CPUID가 아닌 경우에는, 도 7 중 (E)에 나타낸 바와 같이, 취득한 CPUID와 물리 어드레스를 패킷 제어부(37)에 출력한다.
이러한 경우에는, 패킷 생성부(37a)는, 캐쉬 디렉토리 관리부(36)로부터 취득한 물리 어드레스와 CPUID를 저장한 패킷을 생성하여, 도 7 중 (F)에 나타낸 바와 같이, 생성한 패킷을 라우터(40)에 출력한다. 계속해서, 도 7 중 (G)에 나타낸 바와 같이, 라우터(40)는, 패킷 생성부(37a)로부터 취득한 패킷을 XB 접속부(27)에 출력한다. 그 후, 도 7 중 (H)에 나타낸 바와 같이, XB 접속부(27)는, 취득한 패킷을 XB(2)에 출력한다. 그렇게 하면, XB(2)는, 패킷에 저장된 CPUID가 나타내는 CPU에 패킷을 전달하게 된다.
다음으로, 도 8을 이용하여, CPU(21)가 다른 CPU로부터 패킷을 수신했을 때 실행하는 처리의 일례에 관해 설명한다. 도 8은, 실시예 1에 따른 CPU가 패킷을 수신했을 때 실행하는 처리의 일례를 설명하기 위한 도면이다. 예컨대, 도 8 중 (J)에 나타낸 바와 같이 패킷 수신부(37b)는, 다른 CPU로부터 CPU(21)의 CPUID와 메모리(22)로 분류된 물리 어드레스가 저장된 패킷이나, 응답의 패킷을 수신한다.
이러한 경우에는, 패킷 수신부(37b)는, 수신한 패킷으로부터 물리 어드레스를 취득하고, 도 8 중 (K)에 나타낸 바와 같이, 취득한 물리 어드레스를 요청원이 자파티션인지 아닌지의 정보와 함께 캐쉬 디렉토리 관리부(36)에 출력한다. 그렇게 하면, 캐쉬 디렉토리 관리부(36)는, 물리 어드레스가 나타내는 기억 영역이 공유 영역인지 로컬 영역인지를 판별한다.
요청원이 다른 파티션인 경우, 공유 영역에 대한 액세스인지 체크하여, 로컬 영역인 경우는 에러 응답하도록 패킷 제어부(37)에 의뢰한다. 그 이외의 경우에는, 캐쉬 디렉토리 관리부(36)는, 도 8 중 (L)에 나타낸 바와 같이, 물리 어드레스가 나타내는 기억 영역의 데이터가 L1 캐쉬(32) 및 L2 캐쉬(33)에 캐쉬되어 있는지 판별한다.
또, 캐쉬 디렉토리 관리부(36)는, 데이터가 캐쉬되어 있지 않다고 판별한 경우에는, 도 8 중 (M)에 나타낸 바와 같이, 물리 어드레스를 메모리 액세스부(41)에 출력한다. 그렇게 하면, 도 8 중 (N)에 나타낸 바와 같이, 메모리 액세스부(41)는, 메모리(22)로부터 물리 어드레스가 나타내는 기억 영역의 데이터를 취득하여, 캐쉬 디렉토리 관리부(36)에 출력한다. 또, 물리 어드레스가 메모리 액세스부(41)에 입력된 경우에는, ECC 체크부(41a)는, 입력된 물리 어드레스가 나타내는 기억 영역에 기억된 데이터에 관해 IEC 및 PEC를 검출한 경우에는, 도 8 중 (O)에 나타낸 바와 같이, CE 어드레스 레지스터(41b)에 입력된 물리 어드레스를 설정한다.
그리고, 캐쉬 디렉토리 관리부(36)는, L1 캐쉬(32), L2 캐쉬(33) 또는 메모리 액세스부(41)로부터 데이터를 취득한 경우에는, 취득한 데이터를 패킷 제어부(37)에 출력하여, 요청원의 CPU에 송신하도록 지시한다.
다음으로, 도 9를 이용하여, I/O 장치가 CPU(21) 이외의 CPU에 대하여 리드나 라이트의 요청을 송신하는 처리의 일례에 관해 설명한다. 도 9는, 실시예 1에 따른 I/O 장치가 요청을 송신하는 처리의 일례를 설명하기 위한 도면이다. 예컨대, PCIe 접속부(28)는, I/O 장치로부터 물리 어드레스와, CPUID를 취득하면, 도 9 중 (P)에 나타낸 바와 같이, 취득한 물리 어드레스와, CPUID를 PCIe 버스 제어부(42b)에 출력한다. 또, PCIe 접속부(28)는, I/O 장치로부터 물리 어드레스와, CPUID와, 라이트 데이터를 취득하면, 도 9 중 (P)에 나타낸 바와 같이, 취득한 물리 어드레스와, CPUID와, 라이트 데이터를 PCIe 버스 제어부(42b)에 출력한다.
그리고, PCIe 버스 제어부(42b)는, PCIe 접속부(28)로부터 물리 어드레스와, CPUID를 취득하면, 도 9 중 (Q)에 나타낸 바와 같이, 취득한 물리 어드레스와, CPUID를 요청 생성부(42a)에 출력한다. 또, PCIe 버스 제어부(42b)는, PCIe 접속부(28)로부터 물리 어드레스와, CPUID와, 라이트 데이터를 취득하면, 도 9 중 (Q)에 나타낸 바와 같이, 취득한 물리 어드레스와, CPUID와, 라이트 데이터를 요청 생성부(42a)에 송신한다.
요청 생성부(42a)는, PCIe 버스 제어부(42b)로부터 물리 어드레스와, CPUID를 취득하면, 취득한 물리 어드레스와, CPUID를 포함하는 리드의 요청이 되는 패킷을 생성한다. 또, 요청 생성부(42a)는, PCIe 버스 제어부(42b)로부터 물리 어드레스와, CPUID와, 라이트 데이터를 취득하면, 취득한 물리 어드레스와, CPUID와, 라이트 데이터를 포함하는 라이트의 요청이 되는 패킷을 생성한다. 그리고, 요청 생성부(42a)는, 도 9 중 (R)에 나타낸 바와 같이, 생성한 패킷을 라우터(40)에 출력한다.
계속해서, 도 9 중 (T)에 나타낸 바와 같이, 라우터(40)는, 요청 생성부(42a)로부터 취득한 요청을 XB 접속부(27)에 출력한다. 그 후, 도 9 중 (U)에 나타낸 바와 같이, XB 접속부(27)는 취득한 요청을 XB(2)에 출력한다. 그렇게 하면, XB(2)는, 요청에 저장된 CPUID가 나타내는 CPU에 패킷을 전달하게 된다.
다음으로, 도 10을 이용하여, I/O 장치가 CPU(21) 이외의 CPU로부터 응답을 수신하는 처리의 일례에 관해 설명한다. 도 10은, 실시예 1에 따른 I/O 장치가 응답을 수신하는 처리의 일례를 설명하기 위한 도면이다. 예컨대, 도 10 중 (V)에 나타낸 바와 같이 XB 접속부(27)는, CPU(21) 이외의 CPU로부터 I/O 장치에의 응답을 수신한다.
XB 접속부(27)는, 응답을 수신하면, 도 10 중 (W)에 나타낸 바와 같이, 수신한 응답을 라우터(40)에 출력한다. 라우터(40)는, 응답을 수신하면, 도 10 중 (X)에 나타낸 바와 같이, 수신한 응답을 요청 생성부(42a)에 출력한다. 또, 요청 생성부(42a)는, 도 10 중 (Y)에 나타낸 바와 같이, 응답을 PCIe 버스 제어부(42b)에 출력한다. PCIe 버스 제어부(42b)는, 응답을 수신하면, 도 10 중 (Z)에 나타낸 바와 같이, 수신한 응답을 PCIe 접속부(28)에 출력한다. 이에 따라, PCIe 접속부(28)로부터 I/O 장치에 응답이 송신된다.
통신부(23), 서비스 프로세서(24), XB 접속부(27), XB 접속부(27a), PCIe 접속부(28)는 전자 회로이다. 여기서, 전자 회로의 예로서, ASIC(Application Specific Integrated Circuit)나 FPGA(Field Programmable Gate Array) 등의 집적 회로, 또는 CPU나 MPU(Micro Processing Unit) 등을 적용할 수 있다. 또, CPU(21∼21c) 대신, ASIC나 FPGA 등의 집적 회로, 또는 MPU 등을 적용할 수 있다.
또, 메모리(22∼22a)는, RAM(Random Access Memory), ROM(Read Only Memory), 플래시 메모리(flash memory) 등의 반도체 메모리 소자이다. 또, L1 캐쉬(32), L2 캐쉬(33)는, SRAM(Static Random Access Memory) 등의 고속의 반도체 메모리 소자이다.
다음으로, 각 CPU(21∼21c)가 캐쉬 코히어런스를 유지하는 처리에 관해 설명한다. 또한, 이하의 설명에서는, 정보 처리 시스템(1)의 각 CPU는 일리노이 프로토콜을 이용하여 캐쉬 코히어런스를 유지하는 것으로 한다.
또, 이하의 설명에서는, 정보 처리 시스템(1)이 갖는 각 메모리는, 모든 CPU로부터 캐쉬 가능한 공간을 갖는 메모리로서 식별되는 것으로 한다. 또, 이하의 설명에서는, 캐쉬 대상이 되는 데이터를 기억하는 메모리에, 그 CPU 내의 MAC를 통해 물리적으로 직접 접속되어 있는 CPU를 홈 CPU로 하고, 캐쉬를 요구한 CPU를 로컬 CPU로 기재한다.
또, 홈 CPU에 대하여 이미 요청을 송신하여, 데이터를 캐쉬한 CPU를 리모트 CPU로 기재한다. 또한, 로컬 CPU와 홈 CPU가 동일한 CPU가 되는 경우나, 로컬 CPU와 리모트 CPU가 동일한 CPU가 되는 경우도 있다.
로컬 CPU는, 자신의 노드 맵을 참조하여, 액세스 대상이 되는 물리 어드레스가 홈 CPU가 액세스하는 메모리로 분류되어 있다고 판정한다. 그리고, 로컬 CPU는, 물리 어드레스를 저장한 요청을 홈 CPU에 대하여 발행한다. 또한, 로컬 CPU가 발행하는 요청에는 복수의 종별의 요청이 존재한다. 이 때문에, 홈 CPU가 갖는 캐쉬 디렉토리 관리부는, 취득한 요청의 종별에 따른 캐쉬 코히어런스 제어를 실행하게 된다.
예컨대, 로컬 CPU가 발행하는 요청의 종별로는, 공유형 페치 액세스, 배타형 페치 액세스, 캐쉬 무효화 요구, 캐쉬 리플레스 요구 등이 있다. 공유형 페치 액세스란, 예컨대 「MoveIn to Share」의 실행 요구이며, 홈 CPU가 액세스하는 메모리로부터 데이터의 판독을 행할 때 발행되는 요청이다.
또, 배타형 페치 액세스란, 예컨대 「MoveIn Exclusively」의 실행 요구이며, 홈 CPU가 액세스하는 메모리에 데이터 스토어를 행할 때의, 캐쉬에의 데이터 로드를 행할 때 발행된다. 또, 캐쉬 무효화 요구란, 예컨대 「MoveOut」의 실행 요구이며, 캐쉬 라인이 무효화를 홈 CPU에 대하여 요구할 때 발행된다. 또한, 홈 CPU는, 캐쉬 무효화 요구를 수신하면, 리모트 CPU에 대하여 캐쉬 무효화 요구를 발행하는 경우나, 캐쉬를 「Invalidation」로 시키는 오더를 발행하는 경우가 있다.
캐쉬 리플레스 요구란, 예컨대 「WriteBack」의 실행 요구이며, 갱신된 캐쉬 데이터, 즉 「Modified」상태의 캐쉬 데이터를 홈 CPU가 액세스하는 메모리에 라이트백할 때 발행된다. 또한, 캐쉬 리플레스 요구에는, 예컨대 「FlushBack」의 실행 요구이며, 갱신되어 있지 않은 캐쉬 데이터, 즉 「Shared」 또는 「Exclusive」상태의 캐쉬의 파기를 행할 때 발행된다.
홈 CPU는, 전술한 요청을 로컬 CPU나, 리모트 CPU로부터 수신한 경우에는, 요청을 처리하기 위해, 로컬 CPU나 리모트 CPU에 대하여 오더를 발행한다. 여기서, 홈 CPU는, 취득한 요청의 종별에 따른 캐쉬 코히어런스 제어를 실행하기 위해, 복수의 종별의 오더를 발행하게 된다. 예컨대, 홈 CPU는, 리모트 CPU가 캐쉬하고 있는 데이터를 로컬 CPU에 로드시키는 「MoveOut and Bypass to Share」를 발행한다.
또, 예컨대, 홈 CPU는, 로컬 CPU 이외의 모든 리모트 CPU의 캐쉬를 무효화하고, 그 후, 홈 CPU가 로컬 CPU에 데이터를 송신하기 위한 「MoveOut and Bypass Exclusively」를 발행한다. 또, 홈 CPU는, 리모트 CPU에 캐쉬의 무효화를 요구하는 「MoveOut WITH Invalidation」을 발행한다. 또한, 홈 CPU가 「MoveOut WITH Invalidation」을 발행한 경우에는, 모든 CPU의 캐쉬가, 대상이 되는 어드레스에 관해 「Invalidate」상태가 된다. 또한, 트랜잭션 완료시에는 로컬 CPU가 데이터를 캐쉬한다.
또, 홈 CPU는, 리모트 CPU에 캐쉬 라인의 무효화를 요구하는 「MoveOut for Flush」를 발행한다. 또한, 홈 CPU가 「MoveOut for Flush」를 발행한 경우에는, 대상이 되는 데이터는, 홈 CPU의 메모리에만 기억된다. 또, 홈 CPU는, 대상이 되는 데이터의 상태가 「Shared」일 때, 리모트 CPU에 캐쉬의 파기를 요구하는 「Buffer Invalidation」을 발행한다.
홈 CPU는, 요청의 종별에 따라서 전술한 오더를 발행하여, 각 CPU가 캐쉬한 데이터의 스테이트를 천이시킨다. 또, 로컬 CPU나 리모트 CPU는, 오더를 수신한 경우에는, 오더가 나타내는 처리를 실행하여, 자신이 캐쉬한 데이터의 스테이트를 천이시킨다.
그 후, 로컬 CPU나 리모트 CPU는, 오더에 대한 완료 응답이나 데이터가 있는 완료 응답을 홈 CPU에 송신한다. 또, 홈 CPU나 리모트 CPU는, 오더 처리를 실행한 후에, 로컬 CPU에 대하여 데이터가 있는 요청 응답을 송신하게 된다.
[처리의 흐름]
다음으로, 도 11을 이용하여, 정보 처리 시스템(1)이 공유 영역을 제어하는 처리의 흐름에 관해 설명한다. 도 11은, 공유 영역을 제어하는 처리의 흐름을 설명하기 위한 플로우차트이다. 우선, 정보 처리 시스템(1)은, 애플리케이션의 요구에 따라서 노드간의 공유 메모리의 할당 처리를 실행한다(단계 S101). 다음으로, 정보 처리 시스템(1)은, 노드 사이에서 공유하는 공유 메모리의 어태치 처리를 실행한다(단계 S102).
그 후, 정보 처리 시스템(1)이 갖는 각 CPU에 의해 실행되는 애플리케이션이 각 메모리를 사용한다(단계 S103). 다음으로, 정보 처리 시스템(1)은 공유 메모리의 디태치 처리를 실행한다(단계 S104). 그 후, 정보 처리 시스템(1)은, 공유 메모리의 해방 처리를 실행하고(단계 S105), 처리를 종료한다. 또한, 단계 S101 및 단계 S105는, 그 공유 메모리의 홈 노드 상의 애플리케이션만이 실시하는 것으로 해도 좋고, 실제 처리는 nop(no operation)이 되지만, 그 공유 메모리의 홈 노드 이외의 노드 상의 애플리케이션도 실시하는 것으로 해도 좋다.
다음으로, 도 12를 이용하여, 도 11 중 단계 S101에서 나타낸 공유 메모리의 할당 처리의 흐름에 관해 설명한다. 도 12는, 공유 메모리의 할당 처리를 설명하기 위한 플로우차트이다. 도 12에 나타내는 예에서는, 예컨대 CPU(21)가 실행하는 애플리케이션이 OS에 대하여, 노드간의 공유 메모리 할당 처리의 실행을 요구한다(단계 S201).
그렇게 하면, CPU(21)가 실행하는 OS가 공유 영역용의 물리 어드레스의 영역으로부터 요구된 사이즈의 메모리 할당을 행한다(단계 S202). 다음으로, OS가 할당한 공유 메모리의 관리용 ID를 애플리케이션에 인도하여(단계 S203), 공유 메모리의 할당 처리를 종료한다.
다음으로, 도 13을 이용하여, 도 11 중 단계 S102에서 나타낸 노드간의 공유 메모리 어태치 처리의 흐름에 관해 설명한다. 도 13은, 공유 메모리 어태치 처리를 설명하기 위한 플로우차트이다. 우선, 애플리케이션은, OS에 대하여 관리용 ID를 인도하여, 노드간의 공유 메모리의 어태치 처리를 요구한다(단계 S301). 이러한 경우에는, OS는, 다른 노드에 의해 실행되고 있는 OS와 통신을 행하여, 관리용 ID에 대응하는 물리 어드레스를 획득한다(단계 S302).
여기서, OS가 다른 노드에 의해 실행되고 있는 OS와 통신을 행하는 경우에는, LAN 등에 의한 통신, 서비스 프로세서(24)를 통한 각 노드간의 통신 등을 이용한다. 또, 각 노드에 의해 실행되는 OS는, 특정한 공유 영역을 노드간 통신에 이용하는 영역으로서 설정하고, 설정한 영역에 대한 정보의 저장이나 판독을 행함으로써, 통신을 행하는 것으로 해도 좋다.
다음으로, OS는, 물리 어드레스에 대응하는 논리 어드레스를 결정하여 할당을 행한다(단계 S303). 예컨대, CPU(21)에서 실행되는 OS는, 물리 어드레스와 논리 어드레스의 TLB(35a)를 어드레스 변환부(35)로 설정한다.
또한, 각 CPU(21∼21c)가 이용하는 논리 어드레스는, 중복되는 범위이어도 좋고, 또 CPU마다 상이한 범위이어도 좋다. 또, 각 CPU(21∼21c)가 이용하는 논리 어드레스는, 애플리케이션이 OS에 지정할 수 있도록 해도 좋다. 그 후, OS는, 논리 어드레스의 값을 애플리케이션에 인도하고(단계 S304), 처리를 종료한다.
다음으로, 도 14를 이용하여, 도 11 중 단계 S103에서 나타낸 애플리케이션이 노드간의 공유 메모리를 사용하는 처리의 흐름에 관해 설명한다. 도 14는, 애플리케이션이 공유 메모리를 사용하는 처리를 설명하기 위한 플로우차트이다. 예컨대, CPU(21)가 실행하는 애플리케이션은, 논리 어드레스를 발행하여, 논리 어드레스가 나타내는 기억 영역에의 액세스를 행한다(단계 S401).
그렇게 하면, CPU(21)는, TLB 미스가 발생했는지의 여부를 판별한다(단계 S402). 그리고, CPU(21)는, TLB 미스가 발생한 경우는(단계 S402 긍정), 트랩 처리를 실행하여, TLB에 논리 어드레스와 물리 어드레스의 조의 엔트리를 설정한다(단계 S403).
다음으로, 애플리케이션은, 다시 논리 어드레스를 발행하고, TLB에 의한 물리 어드레스로의 변환을 거쳐, 정상적으로 공유 메모리에 대한 액세스를 실행하고(단계 S404), 처리를 종료한다. 한편, TLB 미스가 발생하지 않은 경우는(단계 S402 부정), 정상적으로 공유 메모리에 대한 액세스가 실행되고(단계 S405), 처리를 종료한다.
다음으로, 도 15를 이용하여, 도 11 중 단계 S104에서 나타낸 노드간의 공유 메모리 디태치 처리의 흐름에 관해 설명한다. 도 15는, 노드간의 공유 메모리 디태치 처리를 설명하기 위한 플로우차트이다. 예컨대, CPU(21)가 실행하는 애플리케이션은, OS에 대하여, 노드간 공유 메모리의 논리 어드레스, 또는 관리용 ID를 지정하여, 디태치 처리를 요구한다(단계 S501).
그렇게 하면, CPU(21)가 실행하는 OS는 캐쉬의 플래시를 행한다(단계 S502). 즉, OS는, 공유 메모리의 할당 해제후, 다시 공유 메모리로서 할당을 행한 경우에, 공유 메모리로서 할당이 행해지지 않았을 때 공유 메모리의 리얼 메모리에 액세스하는 CPU가 리부팅되면, 캐쉬와 리얼 메모리의 상태가 어긋날 우려가 있다. 이 때문에, OS는, 캐쉬의 플래시를 행하여, 캐쉬와 리얼 메모리의 상태가 어긋나는 상태를 방지한다.
그리고, OS는, 노드간 공유 메모리, 즉, 애플리케이션이 이용하고 있던 범위의 논리 어드레스의 할당을 해제하고, 해제한 논리 어드레스에 관련된 TLB(35a)의 엔트리를 삭제한다(단계 S503). 또한, 그 이후, 본 노드 상에서 디태치가 완료된 메모리 어드레스에 관해 TLB 미스가 발생하더라도(단계 S402 긍정), OS는 디태치가 완료된 논리 어드레스에 대응하는 물리 어드레스를 TLB(35a)로 설정하지 않는다. 따라서, 단계 S404는 정상적으로 종료하지 않고 액세스 에러가 된다. 디태치 완료후, 단계 S302의 처리와는 달리, OS가 노드 사이에서 통신하여, 본 애플리케이션이 이 공유 메모리의 PA에 대하여 액세스를 완료한 것을 통지한다(단계 S504). 만약 이 공유 메모리가 홈 노드 상에서 해방이 되었고, 이 애플리케이션이 이 공유 메모리를 마지막으로 이용한 애플리케이션이었던 경우, 홈 노드에 해방 처리를 의뢰하고(단계 S505), 처리를 종료한다.
다음으로, 도 16을 이용하여, 도 11 중 단계 S105에서 나타낸 노드간 공유 메모리의 해방 처리의 흐름에 관해 설명한다. 도 16은, 노드간 공유 메모리의 해방 처리를 설명하기 위한 플로우차트이다. 예컨대, CPU(21)가 실행하는 애플리케이션은, OS에 대하여 노드간 공유 메모리의 해방 처리를 요구한다(단계 S601). 그렇게 하면, OS는, 지정된 공유 영역의 사용자가 모두 디태치한 경우는, 할당을 해방하고(단계 S602), 처리를 종료한다. 만약 디태치가 완료되지 않았다면, 할당의 해방 처리는 행하지 않고 처리를 완료한다. 또한, 실제 할당의 완료 처리는 단계 S505에서 행해진다.
다음으로, 도 17을 이용하여, CPU(21)가 다른 CPU에 대하여, 메모리 액세스의 요청을 송신하는 처리의 흐름에 관해 설명한다. 도 17은, 요청을 발행하는 처리의 흐름을 설명하기 위한 플로우차트이다. 예컨대, CPU(21)의 연산부(31)는 논리 어드레스를 발행한다(단계 S701).
그렇게 하면, 어드레스 변환부(35)에 있어서, 논리 어드레스로부터 물리 어드레스로의 변환이 행해진다(단계 S702). 다음으로, 캐쉬 디렉토리 관리부(36)가 물리 어드레스를 취득하여, 캐쉬 디렉토리 관리를 실행한다(단계 S703). 즉, 캐쉬 디렉토리 관리부(36)는, 취득한 물리 어드레스가 나타내는 기억 영역에 관한 캐쉬 스테이트를 천이시킨다.
다음으로, 캐쉬 디렉토리 관리부(36)는, 노드 맵(34)을 참조하여, 취득한 물리 어드레스가 다른 노드(다른 파티션)의 메모리로 분류된 물리 어드레스인지의 여부를 판정한다(단계 S704). 그리고, 캐쉬 디렉토리 관리부(36)는, 취득한 물리 어드레스가 다른 노드(다른 파티션)의 메모리로 분류된 물리 어드레스가 아니라고 판정한 경우에는(단계 S704 부정), 취득한 물리 어드레스를 이용하여 메모리 액세스를 실행한다(단계 S705). 그리고, 처리를 종료한다.
한편, 캐쉬 디렉토리 관리부(36)는, 취득한 물리 어드레스가 다른 노드(다른 파티션)의 메모리로 분류된 물리 어드레스인 경우에는(단계 S704 긍정), 노드 맵(34)으로부터 물리 어드레스와 대응된 CPUID를 취득한다(단계 S706). 그리고, 패킷 송신부가, CPUID와 물리 어드레스를 저장한 패킷, 즉, 메모리 액세스의 요청을 생성하여, XB(2)에 송출하고(단계 S707), 처리를 종료한다.
다음으로, 도 18을 이용하여, CPU(21)가 다른 CPU로부터 메모리 액세스의 요청을 수신했을 때 실행하는 처리의 흐름에 관해 설명한다. 도 18은, 요청을 수신했을 때 실행하는 처리의 흐름을 설명하기 위한 플로우차트이다. 또한, 도 18에 나타내는 예에서는, CPU(21)가, 다른 CPU로부터 「MoveIn to Share」나 「MoveIn Exclusively」를 수신했을 때 실행하는 처리의 흐름에 관해 설명한다. 예컨대, CPU(21)는, 다른 CPU로부터 XB(2)를 통해 요청을 수신한다(단계 S801).
이러한 경우에는, CPU(21)는, 노드 맵(34)을 이용하여, 요청의 대상이 되는 물리 어드레스가 로컬 영역인지의 여부를 판정한다(단계 S802). 그리고, CPU(21)는, 요청의 대상이 되는 물리 어드레스가 로컬 영역인 경우에는(단계 S802 긍정), 요청원의 CPU에 부정 응답을 회신하고(단계 S803), 처리를 종료한다.
또, CPU(21)는, 요청의 대상이 되는 물리 어드레스가 로컬 영역이 아닌 경우에는(단계 S802 부정), 코히어런스를 유지하는 캐쉬 디렉토리 관리를 실행한다(단계 S804). 또, CPU(21)는, 물리 어드레스가 나타내는 기억 영역의 스테이터스를 판정한다(단계 S805).
그리고, CPU(21)는, 판정한 스테이터스에 따른 오더를 다른 CPU에 대하여 발행하고(단계 S806), 스테이터스를 천이시킨다(단계 S807). 그 후, CPU(21)는, 물리 어드레스가 나타내는 기억 영역의 데이터를 요청원의 CPU에 송신하는 응답을 행하고(단계 S808), 처리를 종료한다.
다음으로, 도 19를 이용하여, ECC 체크부(41a)가, 정해진 주기마다, 또는, 캐쉬 디렉토리 관리부(36)로부터 메모리(22)에 대한 리드의 액세스의 요구가 있을 때마다 실행하는 처리의 흐름에 관해 설명한다. 도 19는, ECC 체크부가 실행하는 처리의 흐름을 설명하기 위한 플로우차트이다. 도 19에 나타낸 바와 같이, ECC 체크부(41a)는, 메모리(22)의 전체 기억 영역의 데이터, 또는, 액세스 대상의 기억 영역의 데이터를 에러 체크한다(단계 S901). 그리고, ECC 체크부(41a)는, CE가 발생했는지의 여부를 판정한다(단계 S902).
CE가 발생하지 않은 경우(단계 S902 부정), 예컨대 데이터가 정상이거나, 또는, PE가 발생한 경우에는, 처리를 종료한다. 또한, 이 경우, 메모리 액세스부(41)는, 리드의 액세스 대상의 기억 영역의 데이터를 캐쉬 디렉토리 관리부(36)에 송신한다. 한편, CE가 발생한 경우(단계 S902 긍정)에, ECC 체크부(41a)는, CE가 발생한 기억 영역의 데이터를 판독하여, 판독한 데이터의 오류를 정정하고, 오류를 정정한 데이터를, CE가 발생한 기억 영역에 라이트백한다(단계 S903). 그리고, ECC 체크부(41a)는, 데이터를 라이트백한 기억 영역의 데이터를 다시 판독하고(단계 S904), 판독한 데이터에 관해 다시(두번째의) 에러 체크를 한다(단계 S905).
계속해서, ECC 체크부(41a)는 다시, 에러 체크가 행해진 데이터에 CE가 발생했는지의 여부를 판정한다(단계 S906). CE가 발생한 경우(단계 S906 긍정)에는, ECC 체크부(41a)는, CE가 발생한 메모리(22)의 물리 어드레스를 CE 어드레스 레지스터(41b)로 설정하고(단계 S907), 처리를 종료한다. 이에 따라, ICE를 검출할 수 있다.
한편, 두번째의 에러 체크에서 CE가 발생하지 않은 경우(단계 S906 부정)에는, ECC 체크부(41a)는, CE가 발생한 메모리(22)의 물리 어드레스에 해당하는 ICE 발생 횟수 카운터(41c)의 값을 1개 증분시킨다(단계 S908). 여기서, ICE 발생 횟수 카운터(41c)는, 메모리(22)의 일정한 기억 영역마다 설치된다. 예컨대, ECC에 의해 64 바이트마다 1 비트의 오류 정정을 행할 수 있는 경우에, ICE 발생 횟수 카운터(41c)는 64 바이트마다 설치된다. 또, ICE 발생 횟수 카운터(41c)는, 메모리(22)의 기억 영역을 분할한 페이지마다 설치되어도 좋다.
그리고, ECC 체크부(41a)는, ICE 발생 횟수 카운터(41c)의 값이 임계값 α 이하인지의 여부를 판정한다(단계 S909). ICE 발생 횟수 카운터(41c)의 값이 임계값 α보다 큰 경우(단계 S909 부정)에는 단계 S907로 진행한다. 한편, ICE 발생 횟수 카운터(41c)의 값이 임계값 α 이하인 경우(단계 S909 긍정)에는 처리를 종료한다.
다음으로, 도 20을 이용하여, ECC 체크부(41a)가, 정해진 주기마다 실행하는 처리의 흐름에 관해 설명한다. 도 20은, ECC 체크부가 실행하는 처리의 흐름을 설명하기 위한 플로우차트이다. 이 처리는, 도 19에 나타내는 처리가 실행되는 주기보다 긴 주기로 실행된다. 도 20에 나타낸 바와 같이, ECC 체크부(41a)는, ICE 발생 횟수 카운터(41c)의 값을 클리어하고(단계 S1001), 처리를 종료한다.
또한, ECC 체크부(41a)는, 발생한 CE의 횟수를 계수하고, 계수한 CE의 횟수를 계수에 걸린 시간으로 나눈 값(단위시간당 CE의 발생 횟수)을 산출하여, 산출한 값이 임계값 β를 초과한 경우에 ICE가 발생했다고 판정할 수도 있다. 이와 같이 하여 ICE가 발생한 것을 검출하는 경우의 ECC 체크부(41a)가 실행하는 처리의 일례에 관해 설명한다.
도 21∼도 27은, ECC 체크부에 의해 실행되는 ICE의 발생을 검출하는 처리의 일례를 설명하기 위한 도면이다. 도 21∼도 27의 예에서는, ECC 체크부(41a)에 의해 이용되는 테이블의 일례가 나타나 있다. 도 21∼도 27의 예가 나타내는 테이블은, 단위시간당 CE의 발생 횟수가 등록되는 「평균치」의 항목, CE의 발생 횟수의 계수가 시작된 시각이 등록되는 「개시 시각」의 항목, CE가 마지막으로 발생한 시각이 등록되는 「최종 발생 시각」의 항목을 갖는다.
예컨대, 도 21이 나타내는 테이블의 등록 내용은, 2011년 1월 1일 0시 0분부터 CE의 발생 횟수의 계수가 시작되고, 마지막으로 CE가 발생한 시각이 2011년 1월 1일 3시 30분인 것을 나타낸다. 또, 도 21이 나타내는 테이블의 등록 내용은, 2011년 1월 1일 0시 0분부터 3시 30분까지의 210분간 동안에 발생한 CE의 횟수를 210분으로 나눈 값, 즉, 단위시간 1분당 발생한 CE의 횟수의 평균치가 0.1(회/분)인 것을 나타낸다.
도 21의 예에서, 2011년 1월 1일 3시 50분에, ECC 체크부(41a)가 새롭게 EC를 검출한 경우에 관해 설명한다. 이 경우, ECC 체크부(41a)는 우선, 도 21의 예에 나타내는 테이블로부터, 2011년 1월 1일 0시 0분부터 3시 30분까지의 210분간 동안에 발생한 CE의 횟수 「21」(0.1×210)를 산출한다. 그리고, ECC 체크부(41a)는, 2011년 1월 1일 0시 0분부터 3시 50분까지의 230분간 동안에 발생한 CE의 횟수 「22」(21+1)를 산출한다. 그 후, ECC 체크부(41a)는, 2011년 1월 1일 0시 0분부터 3시 50분까지의 230분간 동안에 발생한 CE의 횟수 「22」를 230분으로 나눈 값, 즉, 단위시간 1분당 발생한 CE의 횟수의 평균치 「0.095」를 산출한다. 그리고, ECC 체크부(41a)는, 도 22의 예에 나타낸 바와 같이, 테이블의 「평균치」의 항목 및 「최종 발생 시각」의 항목을, 각각 「0.095」, 「2011/1/1 03:50」으로 갱신한다. 그 후, ECC 체크부(41a)는, 평균치 「0.095」가 임계값 β를 초과했는지의 여부를 판정하여, 임계값 β를 초과한 경우에는, ICE의 발생을 검출하고, CE가 발생한 메모리(22)의 물리 어드레스를 CE 어드레스 레지스터(41b)로 설정한다.
또한, 테이블의 초기값으로는, 도 23의 예에 나타낸 바와 같이, 각 항목 모두 「0」이 등록된다. 또한, 「개시 시각」 및 「최종 발생 시각」의 항목에서의 「0」은 시스템에 있어서 특정 시각, 예컨대 Unix(등록상표)계의 시스템에서의 1970년 1월 1일 0시 0분을 의미한다.
또, ECC 체크부(41a)는, 1회째의 CE의 발생에 관해서는 다음과 같은 처리를 행한다. 예컨대, 도 23의 예에서, 2011년 1월 1일 0시 0분에, ECC 체크부(41a)가 1회째의 EC를 검출한 경우에 관해 설명한다. 이 경우, ECC 체크부(41a)는, 도 24의 예에 나타낸 바와 같이, 테이블의 「평균치」, 「개시 시각」, 「최종 발생 시각」의 각 항목을 「1」, 「2011/1/1 00:00」, 「2011/1/1 00:00」으로 갱신한다.
또, ECC 체크부(41a)는, 2회째의 CE의 발생에 관해서는 다음과 같은 처리를 행한다. 예컨대, 도 24의 예에서, 2011년 1월 1일 0시 5분에, ECC 체크부(41a)가 2회째의 EC를 검출한 경우에 관해 설명한다. 이 경우, ECC 체크부(41a)는, 2011년 1월 1일 0시 0분부터 0시 5분까지의 5분간 동안에 발생한 CE의 횟수 「2」(1+1)를 산출한다. 그 후, ECC 체크부(41a)는, 2011년 1월 1일 0시 0분부터 0시 5분까지의 5분간 동안에 발생한 CE의 횟수 「2」를 5분으로 나눈 값, 즉, 단위시간 1분당 발생한 CE의 횟수의 평균치 「0.4」를 산출한다. 그리고, ECC 체크부(41a)는, 도 25의 예에 나타낸 바와 같이, 테이블의 「평균치」의 항목 및 「최종 발생 시각」의 항목을, 각각 「0.5」, 「2011/1/1 00:05」로 갱신한다.
또한, ECC 체크부(41a)는, 「최종 발생 시각」의 항목에 등록된 시각으로부터 정해진 시간, 예컨대 1시간 이상이 경과하고 나서 CE를 검출한 경우에는, 이 CE의 발생을 1회째의 CE의 발생으로 할 수도 있다. 예컨대, 도 26의 예에 나타낸 바와 같이, 테이블의 「최종 발생 시각」의 항목에, 2011년 1월 1일 3시 30분에 마지막으로 CE가 검출된 것을 나타내는 정보가 등록되어 있는 경우에 관해 설명한다. 이 경우에, 2011년 1월 1일 3시 30분으로부터 정해진 시간(1시간) 이상이 경과한 2011년 1월 1일 5시 30분에, ECC 체크부(41a)가 CE를 검출하면, 이 CE의 검출을 1회째의 CE의 검출로 한다. 그리고, ECC 체크부(41a)는, 도 27에 나타낸 바와 같이, 테이블의 「평균치」, 「개시 시각」, 「최종 발생 시각」의 각 항목을 「1」, 「2011/1/1 05:30」, 「2011/1/1 05:30」으로 갱신한다. 이에 따라, CE의 발생 빈도가 급격히 상승한 경우에, 과거의 낮은 발생 빈도에 기인하여, CE의 발생 빈도가 상승한 것을 알아차리는 것이 지연되는 것을 억제할 수 있다.
여기서, CPU(21)에 의해 실행되는 OS가 실행하는 처리에 관해 설명한다. 도 28a는, 실시예 1에 따른 CPU가 실행하는 OS의 기능 구성의 일례를 나타낸 도면이다. 도 28b, 도 28c는, OS의 처리에 의해 참조되는 테이블의 데이터 구성의 일례를 나타낸 도면이다. 도 29∼도 33, 도 36, 도 39는, OS가 실행하는 처리의 흐름을 설명하기 위한 플로우차트이다.
도 28a에서는, 홈 노드(50) 및 리모트 노드(70)에서의 OS의 기능 구성이 예시되어 있다. 도 28의 예에서는, 홈 노드(50)는, 검출부(51), 정지부(52), 정지 의뢰부(53), 송신부(54), 수신부(55), 판정부(56), 재배치부(57), 재배치 의뢰부(58), 재개부(59), 재개 의뢰부(60)를 갖는다. 또, 리모트 노드(70)는, 수신부(71), 정지부(72), 완료 통지 작성부(73), 송신부(74), 재배치부(75), 재개부(76)를 갖는다.
도 29에 나타낸 바와 같이, 검출부(51)는, CE 어드레스 레지스터(41b)에 메모리(22)의 물리 어드레스가 설정되었는지의 여부를 판정함으로써, ICE 또는 PCE가 발생했는지의 여부를 판정한다(단계 S1101). ICE 또는 PCE가 발생하지 않은 경우(단계 S1101 부정)에는, 검출부(51)는 다시 단계 S1101의 처리를 행한다. 또, ICE 또는 PCE가 발생한 경우(단계 S1101 긍정)에는, 검출부(51)는, ICE 또는 PCE가 공유 메모리 내에서 발생했는지의 여부를 판정한다(단계 S1102). 예컨대, 검출부(51)는, CE 어드레스 레지스터(41b)로 설정된 물리 어드레스가, 공유 메모리의 기억 영역의 어드레스인지의 여부를 판정한다. 이에 따라, 검출부(51)는, ICE 또는 PCE가 공유 메모리 내에서 발생했는지의 여부를 판정할 수 있다. 또한, CE 어드레스 레지스터(41b)로 논리 어드레스가 설정된 경우에는, 검출부(51)는, 논리 어드레스로부터 물리 어드레스로 변환하는 식이 등록된 테이블을 참조하여, 논리 어드레스로부터 물리 어드레스를 산출하고, 물리 어드레스가 공유 메모리의 기억 영역의 어드레스인지의 여부를 판정한다. 여기서, 이러한 테이블은, 어드레스 영역을 나타내는 정보와, 어드레스 영역이 나타내는 물리 어드레스의 범위와, 논리 어드레스로부터 물리 어드레스로 변환하는 식과, 물리 어드레스로부터 논리 어드레스로 변환하는 식이 대응되어 등록된 엔트리를 갖는다. 예컨대, 검출부(51)는, 도 28b에 나타낸 바와 같은 테이블을 참조하여, 논리 어드레스로부터 물리 어드레스를 산출한다.
ICE 또는 PCE가 공유 메모리 내에서 발생하지 않은 경우(단계 S1102 부정)에는, 검출부(51)는 정해진 처리를 실행하고(단계 S1103), 처리를 종료한다. 여기서, 정해진 처리란, 예컨대, 대상 페이지의 축퇴 또는 축퇴 예약을 행하는 처리이다. 또한, 메모리 액세스부(41)가, CE의 발생을 무시하고 데이터를 캐쉬 디렉토리 관리부(36)에 송신하는 처리를 행해도 좋다.
한편, ICE 또는 PCE가 공유 메모리 내에서 발생한 경우(단계 S1102 긍정)에는, 정지부(52)는 액세스 정지 처리를 실행한다(단계 S1104). 그리고, 정지 의뢰부(53)는, 송신부(54)에, 공유 메모리를 사용하고 있는 다른 노드(리모트 노드(70))의 OS에, 공유 메모리에의 액세스 정지를 행한다는 취지의 지시(액세스 정지 의뢰)를 송신한다(단계 S1105). 이에 따라, 송신부(54)는, 액세스 정지 의뢰를, 공유 메모리를 사용하고 있는 다른 노드에 송신한다. 그리고, 액세스 정지 의뢰를 수신한 리모트 노드(70)의 OS가 액세스 정지 처리를 실행하여, 공유 메모리에의 액세스를 정지시킨다. 그리고, 리모트 노드(70)의 OS가, 공유 메모리에의 액세스 정지 처리를 완료했다는 취지를 홈 노드(50)에 통지한다. 또한, 송신부(54)는, 액세스 정지 의뢰를, 자노드에 접속된 다른 노드 전부에 송신하거나, 또는, 도 28c의 예에 나타내는 테이블을 참조하여, 공유 메모리를 사용하고 있는 노드를 특정하여, 특정한 노드에 액세스 정지 의뢰를 송신한다. 도 28c의 예가 나타내는 테이블은, 공유 메모리의 물리 어드레스와, 공유 메모리의 논리 어드레스와, 공유 메모리의 메모리 길이와, 공유 메모리를 사용하고 있는 노드의 식별자와, 다음 엔트리를 나타내는 포인터를 대응시킨 엔트리를 갖는다.
그 후, 판정부(56)는, 자노드(홈 노드(50)) 및 다른 노드가 공유 메모리에의 액세스를 정지했는지의 여부를 판정한다(단계 S1106). 예컨대, 판정부(56)는, 정지부(52)에 의한 액세스 정지 처리가 완료된 것을 확인한 경우에는, 자노드가 공유 메모리에의 액세스를 정지했다고 판정한다. 또, 공유 메모리에의 액세스 정지 처리를 완료했다는 취지의 통지가 수신부(55)에서 수신된 경우에는, 판정부(56)는, 상기 통지를 송신한 다른 노드가 공유 메모리에의 액세스를 정지했다고 판정한다.
자노드(홈 노드(50)) 및 다른 노드가 공유 메모리에의 액세스를 정지했다고 판정한 경우(단계 S1106 긍정)에는, 재배치부(57)는 페이지 재배치 처리를 실행한다(단계 S1107).
여기서, 페이지 재배치 처리의 처리 내용에 관해 구체예를 들어 설명한다. 예컨대, 페이지 재배치 처리에서는, 우선 ICE 또는 PCE가 발생한 기억 영역이, 분할한 최소 사이즈의 페이지에 포함되도록, ICE 또는 PCE가 발생한 기억 영역을 포함하는 페이지가 복수의 페이지로 분할된다. 예컨대, 1페이지가 256 MB인 경우에는, ICE 또는 PCE가 발생한 기억 영역을 포함하는 페이지가 최소 사이즈 8 KB의 페이지에 포함되도록, ICE 또는 PCE가 발생한 기억 영역을 포함하는 1페이지(256 MB)를 다음과 같이 복수의 페이지로 분할한다. 예컨대, 1페이지(256 MB)를, 128 MB(1페이지), 8 KB(8페이지), 64 KB(63페이지), 4 MB(31페이지)의 합계 103페이지로 분할한다. 이에 따라, 복사를 하는 양을 256 MB로부터 8 KB로 억제할 수 있다. 이 페이지 분할 처리는, 복사 처리 시간을 짧게 하기 위한 것이며, 꼭 필수적인 처리는 아니다. 즉, 이 페이지 분할 처리는 행하지 않아도 좋다. 또는, 사용 가능한(애플리케이션으로부터 사용되지 않은) 노드간 공유 메모리가 어떤 일정 용량 이하인 경우, 또는, 부족한 경우에만 페이지 분할 처리를 행해도 좋다. 256 MB의 페이지는 획득할 수 없더라도 8 KB의 페이지를 획득할 수 있을 가능성이 있기 때문이다. 그리고, 페이지 재배치 처리에서는, 복사할 곳의 페이지가 취득된다. 또한, 복사할 곳의 페이지는 반드시 획득할 수 있도록, OS 기동시 또는 애플리케이션 기동시에, 시스템 고정 또는 사용자 지정의 사이즈만큼 미리 획득하도록 해도 좋다. 계속해서, 페이지 재배치 처리에서는, ICE 또는 PCE가 발생한 기억 영역을 포함하는 페이지(8 KB)의 페이지가 복사할 곳의 페이지에 복사된다. 또한, 페이지 분할 처리를 행하지 않은 경우, 원래의 페이지 전체, 예를 들어 상기 예에서는 256 MB 전체가 복사된다. 그 후, 페이지 재배치 처리에서는, 새로운 페이지 구성이 OS의 관리 영역으로 설정된다.
그 후, 재배치 의뢰부(58)는, 송신부(54)에, 공유 메모리를 사용하고 있는 다른 노드의 OS에 페이지 재배치를 행한다는 취지의 지시(페이지 재배치 의뢰)를 송신한다(단계 S1108). 이에 따라, 송신부(54)는, 페이지 재배치 의뢰를, 공유 메모리를 사용하고 있는 다른 노드에 송신한다. 그리고, 페이지 재배치 의뢰를 수신한 리모트 노드(70)의 OS가 페이지 재배치 처리를 실행하여, 페이지를 재배치한다. 그리고, 리모트 노드(70)의 OS가, 페이지 재배치 처리를 완료했다는 취지를 홈 노드(50)에 통지한다. 또한, 송신부(54)는, 페이지 재배치 의뢰를 자노드에 접속된 다른 노드 모두에 송신하거나, 또는, 도 28c의 예에 나타내는 테이블을 참조하여, 공유 메모리를 사용하고 있는 노드를 특정하여, 특정한 노드에 페이지 재배치 의뢰를 송신한다.
그 후, 판정부(56)는, 자노드 및 다른 노드가 페이지의 재배치를 완료했는지의 여부를 판정한다(단계 S1109). 예컨대, 판정부(56)는, 재배치부(57)에 의한 페이지 재배치 처리가 완료된 것을 확인한 경우에는, 자노드가 페이지의 재배치를 완료했다고 판정한다. 또, 페이지 재배치 처리를 완료했다는 취지의 통지가 수신부(55)에서 수신된 경우에는, 판정부(56)는, 상기 통지를 송신한 다른 노드가 페이지의 재배치를 완료했다고 판정한다.
자노드 및 다른 노드가 페이지의 재배치를 완료했다고 판정한 경우(단계 S1109 긍정)에는, 재개부(59)는 액세스 재개 처리를 실행한다(단계 S1110). 그리고, 재개 의뢰부(60)는, 송신부(54)에, 공유 메모리를 사용하고 있는 다른 노드의 OS에 공유 메모리에의 액세스를 재개한다는 취지의 지시(액세스 재개 의뢰)를 송신하고(단계 S1111), 처리를 종료한다. 이에 따라, 송신부(54)는, 액세스 재개 의뢰를, 공유 메모리를 사용하고 있는 다른 노드에 송신한다. 그리고, 액세스 재개 의뢰를 수신한 리모트 노드(70)의 OS가 액세스 재개 처리를 실행하여, 공유 메모리에의 액세스를 재개한다. 그리고, 리모트 노드(70)의 OS가 액세스 재개 처리를 완료했다는 취지를 홈 노드(50)에 통지한다. 또한, 송신부(54)는, 액세스 재개 의뢰를, 자노드에 접속된 다른 노드 모두에 송신하거나, 또는, 도 28c의 예에 나타내는 테이블을 참조하여, 공유 메모리를 사용하고 있는 노드를 특정하여, 특정한 노드에 액세스 재개 의뢰를 송신한다.
다음으로, 도 30을 이용하여, 액세스 정지 의뢰를 수신한 리모트 노드(70)의 OS가 실행하는 처리에 관해 설명한다. 도 30은, 액세스 정지 의뢰를 수신한 리모트 노드의 OS가 실행하는 처리를 설명하기 위한 플로우차트이다. 도 30에 나타낸 바와 같이, 정지부(72)는 액세스 정지 처리를 실행한다(단계 S1201). 그리고, 완료 통지 작성부(73)는, 액세스 정지 처리가 완료되었다는 취지를 송신부(74)에 통지하고(단계 S1202), 처리를 종료한다. 여기서, 액세스 정지 처리가 완료되었다는 취지가 통지된 송신부(74)는, 액세스 정지 처리가 완료되었다는 취지를 홈 노드(50)에 송신한다.
다음으로, 도 31을 이용하여, 페이지 재배치 의뢰를 수신한 리모트 노드(70)의 OS가 실행하는 처리에 관해 설명한다. 도 31은, 페이지 재배치 의뢰를 수신한 리모트 노드의 OS가 실행하는 처리를 설명하기 위한 플로우차트이다. 도 31에 나타낸 바와 같이, 재배치부(75)는 페이지 재배치 처리를 실행한다(단계 S1301). 이 페이지 재배치 처리에 의해, 새로운 페이지 구성(새로운 VA-PA의 대응 관계)이 OS의 관리 영역으로 설정된다. 그리고, 완료 통지 작성부(73)는, 페이지 재배치 처리가 완료되었다는 취지를 송신부(74)에 통지하고(단계 S1302), 처리를 종료한다. 여기서, 페이지 재배치 처리가 완료되었다는 취지가 통지된 송신부(74)는, 페이지 재배치 처리가 완료되었다는 취지를 홈 노드(50)에 송신한다.
다음으로, 도 32를 이용하여, 액세스 재개 의뢰를 수신한 리모트 노드(70)의 OS가 실행하는 처리에 관해 설명한다. 도 32는, 액세스 재개 의뢰를 수신한 리모트 노드의 OS가 실행하는 처리를 설명하기 위한 플로우차트이다. 도 32에 나타낸 바와 같이, 재개부(76)는 액세스 재개 처리를 실행하고(단계 S1401), 처리를 종료한다. 또한, 완료 통지 작성부(73)는, 단계 S1401의 처리후에, 액세스 정지 처리가 완료되었다는 취지를 송신부(74)에 통지할 수도 있다. 여기서, 액세스 정지 처리가 완료되었다는 취지가 통지된 송신부(74)는, 액세스 정지 처리가 완료되었다는 취지를 홈 노드(50)에 송신한다.
다음으로, 도 33을 이용하여, 도 29 중 단계 S1104 및 도 30 중 단계 S1201에서 나타낸 액세스 정지 처리의 흐름에 관해 설명한다. 도 33은, 액세스 정지 처리를 설명하기 위한 플로우차트이다. 도 33에 나타낸 바와 같이, 정지부(52)(정지부(72))는, 지정된 공유 메모리에 관해 메모리 관리 테이블(페이지 관리 테이블)의 I/O 처리용 록(lock)을 획득한다(단계 S1501). 이에 따라, I/O 장치에 의한 액세스가 보류된다.
여기서, 메모리 관리 테이블의 데이터 구성의 일례에 관해 설명한다. 도 34는, 메모리 관리 테이블의 데이터 구성의 일례를 나타낸 도면이다. 도 34의 예의 메모리 관리 테이블은, 액세스 정지 플래그의 온/오프의 상태를 나타내는 값이 등록되는 「액세스 정지 플래그」의 항목과, I/O 처리용 록의 상태를 나타내는 값이 등록되는 「I/O 처리용 록」의 항목을 갖는다. 또, 도 34의 예의 메모리 관리 테이블은, 다른 페이지 관리 테이블로의 포인터가 등록되는 「다른 페이지 관리 테이블로의 포인터」의 항목과, 어드레스 변환 테이블로의 포인터가 등록되는 「어드레스 변환 테이블로의 포인터」의 항목을 갖는다. 또, 도 34의 예의 메모리 관리 테이블은, 그 밖의 각종 관리 정보가 등록되는 「그 밖의 관리 정보」의 항목을 갖는다.
또, 메모리 관리 테이블에 등록된 「어드레스 변환 테이블로의 포인터」가 나타내는 어드레스 변환 테이블에 관해 설명한다. 도 35는, 어드레스 변환 테이블의 데이터 구성의 일례를 나타낸 도면이다. 도 35의 예의 어드레스 변환 테이블은, 메모리(22)의 물리 어드레스가 등록되는 「PA」의 항목과, 물리 어드레스에 대응하는 논리 어드레스가 등록되는 「VA」의 항목과, 메모리(22)의 물리 어드레스가 나타내는 기억 영역의 사이즈가 등록되는 「영역 길이」의 항목을 갖는다. 또, 도 35의 예의 어드레스 변환 테이블은, 페이지 관리 테이블로의 포인터가 등록되는 「페이지 관리 테이블로의 포인터」의 항목과, 다른 어드레스 변환 테이블로의 포인터가 등록되는 「다른 어드레스 변환 테이블로의 포인터」의 항목을 갖는다. 또, 도 35의 예의 어드레스 변환 테이블은, 그 밖의 각종 관리 정보가 등록되는 「그 밖의 관리 정보」의 항목을 갖는다.
그리고, 정지부(52)(정지부(72))는, 지정된 공유 메모리에 관해, 메모리 관리 테이블의 액세스 정지 플래그를 설정한다(단계 S1502). 이에 따라, 공유 메모리에의 액세스가 정지된다. 계속해서, 정지부(52)(정지부(72))는, 어드레스 변환 테이블을 참조하여, TLB(35a)에, 공유 메모리의 논리 어드레스와 물리 어드레스가 대응된 엔트리가 등록되어 있는 경우에는, 다음과 같은 처리를 행한다. 즉, 정지부(52)(정지부(72))는, TLB(35a)로부터 상기 엔트리를 삭제하고(단계 S1503), 처리를 종료한다.
여기서, 공유 메모리의 논리 어드레스와 물리 어드레스가 대응된 엔트리가 TLB(35a)로부터 삭제되면, 애플리케이션이 공유 메모리에의 액세스를 행하는 경우에 TLB 미스가 발생한다. 본 실시예에서는, 이러한 TLB 미스가 발생한 경우에, TLB 미스 처리가 인터럽트 처리로서 실행되어, 애플리케이션에 의한 공유 메모리에의 액세스가 억제된다.
도 36은, TLB 미스 처리의 흐름을 설명하기 위한 플로우차트이다. 도 36에 나타낸 바와 같이, OS는, 인터럽트가 발생한 프로그램 카운터로부터 프로세스를 특정한다(단계 S1601). 계속해서, OS는, 발생 어드레스로부터 도 35에 나타낸 어드레스 변환 테이블을 검색한다. 대응하는 어드레스 변환 테이블이 검색되면, 그 어드레스 변환 테이블 내의 페이지 관리 테이블의 포인터로 지시되는 페이지 관리 테이블을 체크한다. 액세스할 곳의 어드레스가 나타내는 기억 영역이, 액세스가 정지된 기억 영역, (그 밖의 관리 정보에 스와프 아웃된 것이 기록되어 있는) 스와프 아웃이 발생한 기억 영역, 또는, 이상이 발생한 기억 영역(어드레스 변환 테이블이 없는 기억 영역) 중 어느 것인지를 판정한다(단계 S1602).
액세스 정지 플래그가 온인 경우, 즉 액세스가 정지된 기억 영역인 경우(단계 S1602 : 액세스 정지중)에는, OS는, 대상 프로세스 정보를 실행중 프로세스 리스트로부터 제거하고, 액세스 재개 대기 리스트로 이동시킨다(단계 S1603). 여기서, 액세스 재개 대기 리스트의 데이터 구성의 일례에 관해 설명한다. 도 37은, 액세스 재개 대기 리스트의 데이터 구성의 일례를 나타낸 도면이다. 도 37의 예에 나타내는 액세스 재개 대기 리스트는, 프로세스를 식별하기 위한 식별자가 등록되는 「프로세스 식별자」의 항목과, 재개 프로그램 카운터 등의 레지스터 정보가 후퇴된 영역을 가리키는 포인터가 등록되는 「프로세스 복원 정보」의 항목을 갖는다. 또, 도 37의 예에 나타내는 액세스 재개 대기 리스트는, 재개 대기의 공유 메모리의 논리 어드레스가 등록되는 「재개 대기 공유 메모리 어드레스」의 항목과, 다음 리스트로의 포인터가 등록되는 「다음 리스트로의 pointer」의 항목을 갖는다.
계속해서, OS는, OS 내의 스케쥴러 모듈에 다른 프로세스 기동을 의뢰하고(단계 S1606), 처리를 종료한다.
또, 스와프 아웃이 발생한 기억 영역인 경우(단계 S1602 : swap out)에는, OS는, 액세스할 곳의 페이지의 스와프 인 처리를 기동한다(단계 S1604). 그리고, OS는, 대상 프로세스 정보를 실행중 프로세스 리스트로부터 제거하고, 스케줄 대기 리스트로 이동시키고(단계 S1605), 단계 S1606으로 진행한다. 여기서, 스케줄 대기 리스트의 데이터 구성의 일례에 관해 설명한다. 도 38은, 액세스 재개 대기 리스트의 데이터 구성의 일례를 나타낸 도면이다. 도 38의 예에 나타내는 액세스 재개 대기 리스트는, 프로세스를 식별하기 위한 식별자가 등록되는 「프로세스 식별자」의 항목과, 재개 프로그램 카운터 등의 레지스터 정보가 후퇴된 영역을 가리키는 포인터가 등록되는 「프로세스 복원 정보」의 항목을 갖는다. 또, 도 38의 예에 나타내는 액세스 재개 대기 리스트는, 다음 리스트로의 포인터가 등록되는 「다음 리스트로의 pointer」의 항목을 갖는다.
또, 이상이 발생한 기억 영역인 경우(단계 S1602 : 이상 어드레스)에는, OS는, 액세스한 프로세스에 액세스 에러를 발생시키는 「이상 어드레스 액세스 처리」를 실행하고(단계 S1607), 처리를 종료한다.
다음으로, 도 39를 이용하여, 도 29 중 단계 S1110 및 도 32 중 단계 S1401에서 나타낸 액세스 재개 처리의 흐름에 관해 설명한다. 도 39는, 액세스 재개 처리를 설명하기 위한 플로우차트이다. 도 39에 나타낸 바와 같이, 재개부(59)(재개부(76))는, 지정된 공유 메모리에 관해 메모리 관리 테이블의 액세스 정지 플래그를 클리어한다(단계 S1701). 이에 따라, CPU에 의한 공유 메모리에의 액세스가 재개된다.
그리고, 재개부(59)(재개부(76))는, 지정된 공유 메모리에 관해, 메모리 관리 테이블의 I/O 처리용 록을 해방시킨다(단계 S1702). 이에 따라, I/O 장치에 의한 액세스가 재개된다. 그 후, 재개부(59)(재개부(76))는, 액세스 재개 대기 프로세스 리스트를 체크하고, 프로세스를 스케줄 대기 리스트로 이동시키고(단계 S1703), 처리를 종료한다.
또한, 정지부(52), 정지부(72), 재개부(59), 재개부(76) 등이 실행하는 처리를 프로세스가 행할 수도 있다. 도 40은, 실시예 1에 따른 CPU가 실행하는 OS 및 프로세스의 기능 구성의 일례를 나타낸 도면이다. 도 40의 예는, 도 28a의 예와 비교하여, 프로세스가 정지부(52), 정지부(72), 재개부(59), 재개부(76)를 갖는 점이, 도 28a의 예와 상이하다. 여기서, OS가 미리 공유 메모리의 물리 어드레스와, 각종 이벤트 핸들러를 대응된 정보를 작성하는 것으로 한다. 본 정보의 작성은, 예를 들어 애플리케이션이 "공유 메모리의 어드레스"와, "수취하고자 하는 이벤트 종별"(액세스 정지 의뢰, 액세스 재개 의뢰 등) 및 그 이벤트에 관한 "이벤트 핸들러 프로그램의 어드레스"의 대응을 OS에 의뢰함으로써 행한다. 애플리케이션은 통상 "공유 메모리의 가상 어드레스(VA)"만을 알고 있고, 물리 어드레스(PA)는 모른다. 따라서, OS측에서 VA를 PA로 변환하고 기록한다. 그 PA에 관련된 이벤트(예를 들어 액세스 정지 의뢰)가 발생한 경우, 그 이벤트, 및 PA에 대응하는 이벤트 핸들러 프로그램이 기동되게 된다. (이벤트 핸들러 프로그램의 개시 어드레스가 등록되어 있기 때문에, 그 개시 어드레스로부터 프로그램의 동작을 시작하게 한다).
그리고, 정지부(52) 및 정지부(72)는, 검출부(51)에 의해 ICE 또는 PCE가 검출된 경우에는, 작성된 정보를 참조하여, CE 어드레스 레지스터(41b)로 설정된 공유 메모리의 물리 어드레스에 대응하는 제1 이벤트 핸들러를 판독한다. 구체적으로는, 애플리케이션이 동작중에 이벤트가 발생한 경우, 그 시점에서 동작하고 있던 레지스터 정보를 스택으로 후퇴시키고, 제1 이벤트 핸들러 프로그램의 개시 어드레스로부터 이벤트 핸들러 프로그램의 동작을 시작한다. 그렇게 하면, 제1 이벤트 핸들러가, 애플리케이션의 공유 메모리에 대한 일체의 액세스(read/write 및 I/O 액세스)를 정지시킨다. 정지시키기 위한 방법으로는, 1) 프로그램 내에서 "공유 메모리에 대한 액세스 정지 플래그"를 준비해 두고, 애플리케이션은 이 플래그가 온이 되지 않았을 때에만 액세스를 속행하도록 작성한다. 제1 이벤트 핸들러에서는, 이 플래그를 온으로 한다, 2) 제1 이벤트 핸들러 내에서 애플리케이션의 동작을 정지하여, 애플리케이션의 처리가 일체 진행되지 않도록 하는 등의 방법이 있다.
또, 재개부(59)는, 판정부(56)에 의해 자노드 및 다른 노드가 페이지의 재배치를 완료했다고 판정된 경우에는, 작성된 정보를 참조하여, CE 어드레스 레지스터(41b) 로 설정된 공유 메모리의 물리 어드레스에 대응하는 제2 이벤트 핸들러를 판독한다. 그렇게 하면, 애플리케이션(프로세스)은, 지정된 공유 메모리에 대한 정지했던 모든 액세스(read/write 및 I/O 액세스)를 재개한다. 또, 재개부(76)는, 액세스 재개 의뢰를 수신하면, 작성된 정보를 참조하여, CE 어드레스 레지스터(41b)로 설정된 공유 메모리의 물리 어드레스에 대응하는 제2 이벤트 핸들러를 판독한다. 구체적으로는, 애플리케이션이 동작중에 이벤트가 발생한 경우, 그 시점에서 동작하고 있던 레지스터 정보를 스택으로 후퇴시키고, 제2 이벤트 핸들러 프로그램의 개시 어드레스로부터 이벤트 핸들러 프로그램의 동작을 시작한다. 그렇게 하면, 제2 이벤트 핸들러가, 애플리케이션(프로세스)의 지정된, 공유 메모리에 대한 정지했던 모든 액세스를 재개시킨다. 재개시키기 위한 방법으로는, 1) 프로그램 내에서 "공유 메모리에 대한 액세스 정지 플래그"를 준비해 두고, 애플리케이션은 이 플래그가 온이 되지 않았을 때에만 액세스를 속행하도록 작성한다. 제2 이벤트 핸들러에서는, 이 플래그를 오프로 한다, 2) 제1 이벤트 핸들러 내에서 애플리케이션이 동작을 정지했기 때문에, PC의 리라이트에 의해, 애플리케이션의 처리가 제1 이벤트 핸들러로부터 복귀하도록 하는 등의 방법이 있다. 또한, 재개부(59)로부터 직접 호출되는 자노드 내의 이벤트 핸들러와, 재개부(76)로부터 호출되는 다른 노드 상의 이벤트 핸들러는, 동일한 명령열을 포함하는 프로그램이어도 좋고, 상이한 명령열을 포함하는 프로그램이어도 좋다. (프로그래머의 취향의 문제이며, 어느 쪽이라도 실현 가능하다).
[실시예 1의 효과]
전술한 바와 같이, 정보 처리 시스템(1)은, 메모리를 각각이 구비하는 복수의 빌딩 블록과, 복수의 빌딩 블록 사이를 접속하는 XB(2)를 갖는다. 복수의 빌딩 블록 중 적어도 하나의 빌딩 블록(10)은, 빌딩 블록(10) 또는 다른 빌딩 블록이 구비하는 메모리에 포함되는 빌딩 블록(10) 또는 다른 빌딩 블록에 의해 액세스되는 공유 메모리 영역에 기억된 데이터에 관해, 다음과 같은 처리를 행한다. 즉, 빌딩 블록(10)은, 정해진 시간내에 정해진 횟수를 초과하여 발생하는 ICE, 또는, 공유 메모리 영역 내의 동일 개소에 발생하는 PCE를 검출한다. 빌딩 블록(10)은, 에러가 검출된 경우에는, 빌딩 블록(10) 및 다른 빌딩 블록에 의한 공유 메모리에의 액세스를 억지하도록 제어한다. 빌딩 블록(10)은, 공유 메모리 영역과는 상이한 메모리 영역에 데이터의 복원을 행한다. 빌딩 블록(10)은, 상이한 메모리 영역을 다른 빌딩 블록에 통지한다. 빌딩 블록(10) 또는 다른 빌딩 블록에 의한 공유 메모리에의 액세스를 재개하도록 제어한다. 따라서, 정보 처리 시스템(1)에 의하면, 정보 처리 시스템(1)이 다운될 가능성을 억제할 수 있다.
또, 정보 처리 시스템(1)은, 수신한 물리 어드레스에 기초하여, 액세스 대상이 공유 영역인지 로컬 영역인지를 판별하기 때문에, 로컬 영역에 저장하는 커넬 데이터나 사용자 데이터의 보안 레벨을 높게 유지할 수 있다. 또, 정보 처리 시스템(1)은, 모든 메모리를 캐쉬 가능하게 하기 때문에, 메모리 액세스에서의 레이턴시를 용이하게 은폐할 수 있다.
또, CPU(21)는, 다른 CPU가 액세스하는 메모리의 공유 영역에 대하여, 메모리(22)에 액세스하는 경우와 동일한 방법으로 액세스한다. 즉, CPU(21)가 갖는 연산부(31)는, 액세스 대상이 되는 기억 영역이 메모리(22) 상에 존재하는 경우에도, 다른 메모리 상에 존재하는 경우에도, 논리 어드레스를 출력하기만 하면 된다.
이 때문에, CPU(21)는, I/O의 배타 제어 등의 처리나 프로그래밍 등을 실행하지 않더라도, 용이하게 공유 영역에 액세스할 수 있기 때문에, 메모리 액세스 성능을 향상시킬 수 있다. 또, CPU(21)는, 실행하는 프로그램이나 OS에 개변을 하지 않더라도 공유 메모리를 적절하게 이용할 수 있는 결과, 프리페치 처리의 실행을 종래와 같이 행할 수 있기 때문에, 메모리 액세스의 성능을 향상시킬 수 있다.
또, CPU(21)는, 다른 CPU로부터의 메모리 액세스의 대상이 로컬 영역에의 액세스라고 판정한 경우에는, 부정 응답을 회신한다. 이 때문에, 정보 처리 시스템(1)은, 공유 영역 이외에 대한 액세스를 방지하는 결과, 에러를 방지할 수 있다.
또, 캐쉬 디렉토리 관리부(36)는, 노드 맵(34)을 이용하여, 물리 어드레스를 노드 맵(34)에 대응시켜 기억된 CPUID로 변환한다. 이 때문에, CPU(21)는, 액세스 대상이 되는 물리 어드레스가 분류된 메모리에 액세스하는 CPU를 식별할 수 있다.
또, CPU(21)는, 메모리(22)에 기억된 데이터를 캐쉬한 CPU를 관리하는 디렉토리를 이용하여, 캐쉬 코히어런스의 제어를 행한다. 이 때문에, 정보 처리 시스템(1)은, 정보 처리 시스템(1)이 갖는 CPU의 수가 증가한 경우에도, XB(2)의 트래픽을 증가시키지 않고, 효율적으로 캐쉬 코히어런스를 유지할 수 있다.
구체적으로는, 정보 처리 시스템(1)에서는, 각 CPU간의 통신이, 리모트 CPU와 홈 CPU 사이, 또는, 리모트 CPU와 홈 CPU와 갱신한 데이터를 캐쉬하는 로컬 CPU 사이로 한정된다. 이 때문에, 정보 처리 시스템(1)은 효율적으로 캐쉬 코히어런스를 유지할 수 있다.
지금까지 본 발명의 실시예에 관해 설명했지만, 실시예는 전술한 실시예 이외에도 다양한 상이한 형태로 실시되어도 좋다. 따라서, 다른 실시예를 설명한다.
(1) 빌딩 블록에 관해
전술한 정보 처리 시스템(1)은, 4개의 CPU를 갖는 빌딩 블록(10∼10e)을 갖고 있었다. 그러나, 실시예는 이것에 한정되지 않고, 빌딩 블록(10∼10e)은, 임의의 수의 CPU 및 각 CPU가 액세스하는 메모리를 가질 수 있다. 또, CPU와 메모리는, 일대일로 대응하고 있을 필요는 없고, 메모리에 직접 액세스하는 CPU는 전체의 일부이어도 좋다.
(2) CPU가 송신하는 패킷에 관해
전술한 CPU(21)는, CPUID와 PA를 갖는 패킷을 메모리 액세스의 요청으로서 송신했다. 그러나, 실시예는 이것에 한정되지 않는다. 즉, CPU(21)는, 액세스 대상이 되는 메모리에 액세스하는 CPU를 일의적으로 식별할 수 있는 것이라면, 임의의 정보를 저장한 패킷을 출력해도 좋다.
또 예컨대, CPU(21)는, CPUID로부터 VC(Virtual Connection) ID로 변환하고, VCID를 저장하는 것으로 해도 좋다. 또, CPU(21)는, 패킷에 데이터 길이를 나타내는 길이 등의 정보를 저장하는 것으로 해도 좋다.
(3) CPU가 발행하는 오더(명령)에 관해
전술한 바와 같이, 각 CPU(21∼21c)는, 요청이나 오더를 발행하여 캐쉬의 코히어런스를 유지했다. 그러나, 전술한 요청이나 오더는 어디까지나 일례이며, 예컨대 CPU(21∼21c)는 CAS(Compare And Swap) 명령을 발행해도 좋다.
이와 같이, CPU(21∼21c)가 CAS 명령을 발행한 경우에는, 배타 제어의 컨텐션이 복수의 CPU 사이에서 빈발하더라도, 각 CPU의 캐쉬 상에서 처리가 행해진다. 그 결과, CPU(21∼21c)는, 메모리 액세스의 발생에 의한 지연을 방지하고, 각 CPU간의 트랜잭션이 혼잡한 것을 방지할 수 있다.
(4) 하이퍼바이저를 경유한 제어에 관해
전술한 정보 처리 시스템(1)에서는, OS에 의해 하드웨어인 어드레스 변환부(35)에 액세스를 행하는 예에 관해 설명했다. 그러나, 실시예는 이것에 한정되지 않고, 예를 들어 가상 머신을 동작시키는 하이퍼바이저(HPV : Hypervisor)가 어드레스 변환부(35)에 액세스를 행해도 좋다.
즉, 하이퍼바이저가 동작하는 노드에서, OS는, 캐쉬나 MMU 등의 CPU(21∼21c)의 하드웨어 자원에 대하여 직접적인 조작을 하지 않고, 조작을 하이퍼바이저에 의뢰하게 된다. 이와 같이, 각 CPU(21∼21c)는, 하이퍼바이저를 통한 제어를 접수하는 경우에는, 가상 어드레스를 리얼 어드레스(RA : Real Address)로 변환하고, 그 후 리얼 어드레스를 물리 어드레스로 변환하게 된다.
또, 하이퍼바이저가 동작하는 노드에서는, 인터럽트 처리는, OS에는 직접 인터럽트하지 않고, HPV에 대하여 인터럽트를 행한다. 이러한 경우에는, 하이퍼바이저가, OS의 인터럽트 처리 핸들러를 판독함으로써 인터럽트를 행한다. 또한, 전술한 하이퍼바이저가 실행하는 처리는, 가상 머신을 동작시키기 위해 실행되는 공지된 처리이다.
(5) 파티션을 이용한 처리에 관해
전술한 정보 처리 시스템(1)에서, 각 CPU(21∼21c)는, 하나의 노드 맵을 이용하여 메모리 액세스를 송신했다. 그러나, 실시예는 이것에 한정되지 않는다. 예컨대, 각 빌딩 블록(10∼10e)은 복수의 노드군으로서 동작하며, 각 노드군마다 동일한 펌웨어(하이퍼바이저)를 동작시키는 하나의 논리 파티션을 구성해도 좋다.
이러한 경우에는, 각 CPU(21∼21c)는, 액세스할 곳의 CPU를 나타내는 노드 맵과, 동일 논리 파티션 내의 CPU를 나타내는 노드 맵을 갖는다. 이와 같이, 각 CPU(21∼21c)는, 동일 논리 파티션 내에 포함되는 CPU를 나타내는 노드 맵을 가짐으로써, 에러 발생 통지, 다운 요구, 리셋 요구 패킷 등의, 논리 파티션을 초과하여 전송하면 안되는 특수 패킷의 전송 범위를 식별할 수 있다.
(6) 서비스 프로세서를 경유한 제어에 관해
전술한 정보 처리 시스템(1)에서는, 서비스 프로세서(24)에 의해 하드웨어인 노드 맵(34)에 액세스를 행하는 예에 관해 설명했다. 그러나, 실시예는 이것에 한정되지 않고, 서비스 프로세서(24) 이외의 노드 맵(34)에 액세스하도록 구성해도 좋다. 예를 들면, CPU(21∼21c) 상의 하나 또는 모든 CPU에서 동작하고 있는 기본 펌웨어 BIOS(Basic Input/Output System) 또는 HPV 등이 노드 맵(34)에 액세스를 행할 수 있도록 구성해도 좋다.
1 : 정보 처리 시스템 2 : XB
10∼10e : 빌딩 블록 20 : 노드
21∼21c : CPU 22∼22c : 메모리
23, 26 : 통신부 24 : 서비스 프로세서
25 : 제어부 27, 27a : XB 접속부
28 : PCIe 접속부 30 : 연산 처리부
31 : 연산부 32 : L1 캐쉬
33 : L2 캐쉬 34 : 노드 맵
35 : 어드레스 변환부 36 : 캐쉬 디렉토리 관리부
37 : 패킷 제어부 37a : 패킷 생성부
37b : 패킷 수신부 40 : 라우터
41 : 메모리 액세스부 41a : ECC 체크부
41b : CE 어드레스 레지스터 41c : ICE 발생 횟수 카운터
42 : PCIe 제어부 42a : 요청 생성부
42b : PCIe 버스 제어부

Claims (9)

  1. 기억 장치를 각각이 구비하는 복수의 노드와, 상기 복수의 노드간을 접속하는 인터커넥트를 갖는 정보 처리 장치로서,
    상기 복수의 노드 중 적어도 하나의 노드는,
    상기 하나의 노드 또는 다른 노드가 구비하는 기억 장치에 포함되는 상기 하나의 노드 및 상기 다른 노드에 의해 액세스되는 공유 메모리 영역에 기억된 데이터에 관해, 정해진 시간내에 정해진 횟수를 초과하여 발생하는 정정 가능한 에러, 또는, 상기 공유 메모리 영역 내의 동일 개소에 발생하는 정정 가능한 에러를 검출하는 검출부와,
    상기 검출부에 의해 상기 에러가 검출된 경우에, 상기 하나의 노드 및 다른 노드에 의한 상기 공유 메모리 영역에의 액세스를 억지(抑止)하도록 제어하는 억지 제어부와,
    상기 공유 메모리 영역과는 상이한 메모리 영역에 상기 데이터의 복원을 행하는 복원부와,
    상기 상이한 메모리 영역에 관한 정보를 상기 다른 노드에 통지하는 통지부와,
    상기 하나의 노드 및 다른 노드에 의한 상기 데이터에의 액세스를 재개하도록 제어하는 재개 제어부를 갖는 것을 특징으로 하는 정보 처리 장치.
  2. 제1항에 있어서, 상기 억지 제어부는, 상기 다른 노드에 대하여 상기 다른 노드가 실행하는 애플리케이션에 의한 상기 공유 메모리 영역에의 액세스를 정지하는 지시를 송신하고, 상기 하나의 노드가 실행하는 애플리케이션에 의한 상기 공유 메모리 영역에의 액세스를 정지하는 것을 특징으로 하는 정보 처리 장치.
  3. 제1항 또는 제2항에 있어서, 상기 복원부는, 상기 공유 메모리 영역의 상기 에러를 포함하는 페이지를 복사하기 위해 다른 기억 영역의 페이지를 획득하여, 상기 공유 메모리 영역의 상기 에러를 포함하는 페이지의 영역에 저장된 데이터를 상기 다른 기억 영역의 페이지의 영역에 복사하는 것을 특징으로 하는 정보 처리 장치.
  4. 제3항에 있어서, 상기 복원부는, 상기 공유 메모리 영역의 페이지를 복수로 분할하여, 상기 에러를 포함하는 분할된 페이지의 영역에 저장된 데이터를, 상기 다른 기억 영역의 페이지의 영역에 복사하는 것을 특징으로 하는 정보 처리 장치.
  5. 제3항에 있어서, 상기 복원부는, 상기 다른 기억 영역의 페이지를 획득할 때, 획득 가능한 페이지 용량이 정해진 용량 이하인 경우, 또는, 상기 다른 기억 영역의 페이지의 획득을 실패한 경우에, 상기 공유 메모리 영역의 페이지의 분할을 행하는 것을 특징으로 하는 정보 처리 장치.
  6. 제3항에 있어서, 상기 복원부는, 자노드에서의 OS의 기동시, 또는, 자노드 또는 다른 노드의 공유 메모리를 사용하는 애플리케이션의 기동시에, 상기 다른 기억 영역으로서 사용할 수 있는 정해진 사이즈의 영역을 미리 확보해 두는 것을 특징으로 하는 정보 처리 장치.
  7. 기억 장치를 각각이 구비하는 복수의 노드와, 상기 복수의 노드간을 접속하는 인터커넥트를 갖는 정보 처리 장치로서,
    상기 복수의 노드 중 적어도 하나의 노드는,
    상기 하나의 노드가 구비하는 기억 장치에의 액세스의 제어를 행하고, 상기 기억 장치로부터의 판독 데이터의 에러 검출을 행하는 에러 검출부를 구비하는 액세스 제어부와,
    처리부를 구비하고,
    상기 하나의 노드가 구비하는 처리부는,
    상기 하나의 노드가 구비하는 기억 장치에 포함되는 상기 하나의 노드 및 그 다른 노드에 의해 액세스되는 공유 메모리 영역에 기억된 데이터에 관해, 상기 에러 검출부에 의해 정해진 시간내에 정해진 횟수를 초과하여 정정 가능한 에러가 검출된 경우, 또는, 상기 에러 검출부에 의해 상기 공유 메모리 영역 내의 동일 개소에 정정 가능한 에러를 검출한 경우에, 상기 하나의 노드 및 상기 다른 노드에 의한 상기 공유 메모리 영역에의 액세스를 억지하고,
    상기 하나의 노드가 구비하는 기억 장치에 포함되는, 상기 공유 메모리 영역과는 상이한 메모리 영역에 상기 데이터의 복원을 행하고,
    상기 상이한 메모리 영역에 관한 정보를 상기 다른 노드에 통지하고,
    상기 하나의 노드 및 다른 노드에 의한 상기 데이터에의 액세스를 재개시키는 것을 특징으로 하는 정보 처리 장치.
  8. 기억 장치를 각각이 구비하는 복수의 노드와, 상기 복수의 노드간을 접속하는 인터커넥트를 갖는 정보 처리 장치에서의 상기 복수의 노드 중 적어도 하나의 노드에,
    상기 하나의 노드 또는 다른 노드가 구비하는 기억 장치에 포함되며, 상기 하나의 노드 및 상기 다른 노드에 의해 액세스되는 공유 메모리 영역에 기억된 데이터에 관해, 정해진 시간내에 정해진 횟수를 초과하여 발생하는 정정 가능한 에러, 또는, 상기 공유 메모리 영역 내의 동일 개소에 발생하는 정정 가능한 에러를 검출하고,
    상기 에러가 검출된 경우에, 상기 하나의 노드 및 다른 노드에 의한 상기 공유 메모리 영역에의 액세스를 억지하도록 제어하고,
    상기 공유 메모리 영역과는 상이한 메모리 영역에 상기 데이터의 복원을 행하고,
    상기 상이한 메모리 영역에 관한 정보를 상기 다른 노드에 통지하고,
    상기 하나의 노드 및 다른 노드에 의한 상기 데이터에의 액세스를 재개하도록 제어하는 처리를 실행시키는 것을 특징으로 하는 제어 프로그램을 기록한 컴퓨터 판독가능한 기록 매체.
  9. 기억 장치를 각각이 구비하는 복수의 노드와, 상기 복수의 노드간을 접속하는 인터커넥트를 갖는 정보 처리 장치에서의 상기 복수의 노드 중 적어도 하나의 노드가,
    상기 하나의 노드 또는 다른 노드가 구비하는 기억 장치에 포함되며, 상기 하나의 노드 및 상기 다른 노드에 의해 액세스되는 공유 메모리 영역에 기억된 데이터에 관해, 정해진 시간내에 정해진 횟수를 초과하여 발생하는 정정 가능한 에러, 또는, 상기 공유 메모리 영역 내의 동일 개소에 발생하는 정정 가능한 에러를 검출하고,
    상기 에러가 검출된 경우에, 상기 하나의 노드 및 다른 노드에 의한 상기 공유 메모리 영역에의 액세스를 억지하도록 제어하고,
    상기 공유 메모리 영역과는 상이한 메모리 영역에 상기 데이터의 복원을 행하고,
    상기 상이한 메모리 영역에 관한 정보를 상기 다른 노드에 통지하고,
    상기 하나의 노드 및 다른 노드에 의한 상기 데이터에의 액세스를 재개하도록 제어하는 처리를 실행하는 것을 특징으로 하는 제어 방법.
KR1020120115353A 2012-02-29 2012-10-17 정보 처리 장치, 제어 방법 및 제어 프로그램을 기록한 컴퓨터 판독가능한 기록 매체 KR101476001B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
JP2012044848A JP5614419B2 (ja) 2012-02-29 2012-02-29 情報処理装置、制御方法および制御プログラム
JPJP-P-2012-044848 2012-02-29

Publications (2)

Publication Number Publication Date
KR20130099801A true KR20130099801A (ko) 2013-09-06
KR101476001B1 KR101476001B1 (ko) 2014-12-23

Family

ID=47044874

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020120115353A KR101476001B1 (ko) 2012-02-29 2012-10-17 정보 처리 장치, 제어 방법 및 제어 프로그램을 기록한 컴퓨터 판독가능한 기록 매체

Country Status (6)

Country Link
US (1) US8856588B2 (ko)
EP (1) EP2634696B1 (ko)
JP (1) JP5614419B2 (ko)
KR (1) KR101476001B1 (ko)
CN (1) CN103294616B (ko)
TW (1) TWI480883B (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2023153768A1 (ko) * 2022-02-08 2023-08-17 삼성전자 주식회사 전자 장치에서 데이터베이스 파일을 복구하는 방법

Families Citing this family (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5906881B2 (ja) * 2012-03-27 2016-04-20 富士通株式会社 情報処理装置及び情報処理装置の制御方法
US20150269092A1 (en) * 2014-03-19 2015-09-24 Fujitsu Limited Information processing device and shared memory management method
CN105807728B (zh) * 2014-12-29 2019-03-08 联想(北京)有限公司 一种控制方法及电子设备
JP6540309B2 (ja) 2015-07-16 2019-07-10 富士通株式会社 共有メモリシステム、演算処理装置、及び方法
JP2017111750A (ja) * 2015-12-18 2017-06-22 富士通株式会社 情報処理装置、共有メモリ管理方法及び共有メモリ管理プログラム
US10387281B2 (en) * 2017-08-30 2019-08-20 Micron Technology, Inc. Flash memory block retirement policy
CN107943605B (zh) * 2017-11-14 2021-03-19 青岛海信移动通信技术股份有限公司 一种存储卡处理方法及装置
KR102413096B1 (ko) * 2018-01-08 2022-06-27 삼성전자주식회사 전자 장치 및 그 제어 방법
US10990369B2 (en) * 2018-04-30 2021-04-27 EMC IP Holding Company LLC Repurposing serverless application copies
CN109144901B (zh) * 2018-10-10 2024-01-02 古进 公式化虚拟地址转换
JP7283784B2 (ja) * 2021-02-19 2023-05-30 Necプラットフォームズ株式会社 メモリ障害検出装置、検出プログラム、および検出方法
FR3120465B1 (fr) 2021-03-03 2023-10-13 Thoonsen Trading Dispositif antivol electronique ameliore
EP4053814A1 (fr) 2021-03-03 2022-09-07 Thoonsen Trading Dispositif antivol electronique a pile
JP2022187116A (ja) * 2021-06-07 2022-12-19 富士通株式会社 多重制御プログラム、情報処理装置および多重制御方法

Family Cites Families (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS61195444A (ja) * 1985-02-26 1986-08-29 Toshiba Corp コンピユ−タシステム
JPH0877078A (ja) 1994-09-07 1996-03-22 Fujitsu Ltd シェアードストレージ装置
JPH09128303A (ja) 1995-10-31 1997-05-16 Toshiba Corp メモリ管理装置
US6148377A (en) * 1996-11-22 2000-11-14 Mangosoft Corporation Shared memory computer networks
JPH11175409A (ja) 1997-12-05 1999-07-02 Nec Corp メモリ制御方式
US6742145B2 (en) 2001-03-01 2004-05-25 International Business Machines Corporation Method of de-allocating multiple processor cores for an L2 correctable error
EP1376356A1 (en) * 2002-06-26 2004-01-02 Fujitsu Siemens Computers, LLC Error reporting network in multiprocessor computer
US7222270B2 (en) * 2003-01-10 2007-05-22 International Business Machines Corporation Method for tagging uncorrectable errors for symmetric multiprocessors
US7418557B2 (en) 2004-11-30 2008-08-26 International Business Machines Corporation Managing multiprocessor operations
US7409580B2 (en) * 2005-02-09 2008-08-05 International Business Machines Corporation System and method for recovering from errors in a data processing system
JP2007233903A (ja) * 2006-03-03 2007-09-13 Hitachi Ltd 記憶制御装置及び記憶制御装置のデータ回復方法
US7774645B1 (en) * 2006-03-29 2010-08-10 Emc Corporation Techniques for mirroring data within a shared virtual memory system
JP4930078B2 (ja) 2007-01-31 2012-05-09 富士通株式会社 情報処理方法、情報処理装置、情報処理プログラムおよび該プログラムを記録した記録媒体
US20090132876A1 (en) * 2007-11-19 2009-05-21 Ronald Ernest Freking Maintaining Error Statistics Concurrently Across Multiple Memory Ranks
JP4892746B2 (ja) * 2008-03-28 2012-03-07 エヌイーシーコンピュータテクノ株式会社 分散共有メモリ型マルチプロセッサシステム及びプレーンデグレード方法
US8719543B2 (en) * 2009-12-29 2014-05-06 Advanced Micro Devices, Inc. Systems and methods implementing non-shared page tables for sharing memory resources managed by a main operating system with accelerator devices
US20110161620A1 (en) * 2009-12-29 2011-06-30 Advanced Micro Devices, Inc. Systems and methods implementing shared page tables for sharing memory resources managed by a main operating system with accelerator devices
US8533567B2 (en) * 2010-08-09 2013-09-10 International Business Machines Corporation Low delay and area efficient soft error correction in arbitration logic
US8489829B2 (en) * 2010-12-01 2013-07-16 International Business Machines Corporation Reduction of communication and efficient failover processing in distributed shared memory-based application

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2023153768A1 (ko) * 2022-02-08 2023-08-17 삼성전자 주식회사 전자 장치에서 데이터베이스 파일을 복구하는 방법

Also Published As

Publication number Publication date
EP2634696A2 (en) 2013-09-04
US8856588B2 (en) 2014-10-07
TWI480883B (zh) 2015-04-11
US20130227224A1 (en) 2013-08-29
CN103294616B (zh) 2016-01-20
EP2634696A3 (en) 2013-11-27
EP2634696B1 (en) 2014-12-24
TW201337938A (zh) 2013-09-16
JP5614419B2 (ja) 2014-10-29
CN103294616A (zh) 2013-09-11
KR101476001B1 (ko) 2014-12-23
JP2013182355A (ja) 2013-09-12

Similar Documents

Publication Publication Date Title
KR101476001B1 (ko) 정보 처리 장치, 제어 방법 및 제어 프로그램을 기록한 컴퓨터 판독가능한 기록 매체
KR101442913B1 (ko) 정보 처리 장치, 제어 방법, 및 제어 프로그램을 기록한 컴퓨터 판독 가능한 기록 매체
EP2608044B1 (en) Information processing apparatus and memory access method
US8521977B2 (en) Information processing apparatus and access control method
JP5931196B2 (ja) I/oノード及び複数の計算ノードに備えられたキャッシュメモリの制御方法
KR20130111167A (ko) 정보 처리 장치, 연산 장치 및 정보 전송 방법
US20140201468A1 (en) Accelerated recovery for snooped addresses in a coherent attached processor proxy
JP2000250883A (ja) 不均等メモリ・アクセス・システムにおいてトランザクションのキャンセルによるデータ損失を避けるための方法およびシステム
JP2011170477A (ja) ハイパーバイザ及びサーバ装置
JP2014160502A (ja) 情報処理装置およびメモリアクセス方法
JP5949977B1 (ja) 情報処理装置、情報処理方法、メインプロセッサコア、プログラム、情報処理方法、サブプロセッサコア
JP5800058B2 (ja) 情報処理装置、制御方法および制御プログラム
JP2015022380A (ja) 情報処理装置、仮想マシンの移行方法及び仮想マシンの移行プログラム
EP1684168B1 (en) Synchronizing registers
CN107515723B (zh) 用于管理存储系统中的存储器的方法和系统
JP2015082197A (ja) 計算機システム、その処理方法

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
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: 20171117

Year of fee payment: 4

LAPS Lapse due to unpaid annual fee