Linux 커널은 몇 개의 코어를 처리할 수 있습니까?

Linux 커널은 몇 개의 코어를 처리할 수 있습니까?

나는 이론적 한계와 아마도 대형 CPU를 갖춘 시스템의 예에 관심이 있습니다.

답변1

실제로는 적어도 2048년입니다. 구체적인 예로 SGI는 자사 제품을 판매합니다.자외선시스템은 256개의 소켓(2,048개 코어)과 16TB의 공유 메모리를 사용할 수 있으며 모두 단일 코어에서 실행됩니다. 나는 이 구성으로 판매된 시스템을 최소한 몇 개 알고 있습니다.

SGI에 따르면:

Altix UV는 Novell 및 Red Hat의 표준 배포판을 포함하여 완전히 수정되지 않은 Linux를 실행합니다.

답변2

런치패드 입니다말해야 해우분투에 관해서는 다른 사람들에게도 적용된다고 생각합니다.

1.Intel x86:
Maximum CPUs: 32 (including logical CPUs)
Maximum memory: 64GB
Maximum filesize: 8TB
Maximum filesystem size (ext3) 16TB
Maximum per-process virtual address space: 4GB

2.AMD64/EM64T:
Maximum CPUs: 64
Maximum memory: 128GB
Maximum filesize: 8TB
Maximum filesystem size (ext3): 16TB
Maximum per-process virtual address space: N/A

These are standard max limitations whereas Linux cluster systems can scale up to 1024 CPU's.

x86 및 x86_64의 경우 이는 각각 32개 또는 64개 CPU입니다.

Redhat도 같은 말을 했지만테이블 관리가 쉽다. Redhat EL6은 x86의 경우 32개의 CPU 코어를 제공하고, x86_64의 경우 128 또는 4096개의 CPU 코어를 제공할 수 있습니다.

답변3

x86_64 Linux 커널은 단일 시스템 이미지에서 최대 4096개의 프로세서 스레드를 처리할 수 있습니다. 이는 하이퍼스레딩이 활성화된 경우 최대 프로세서 코어 수가 2048개임을 의미합니다. 예, 2048개 이상의 프로세서 코어를 갖춘 컴퓨터가 있지만 고속 상호 연결(일반적으로 Infiniband 패브릭)로 연결된 여러 Linux 커널이 협력하는 클러스터로 실행됩니다.

~/arch/x86/Kconfig의 최신 커널 3.13부터 시작:

NR_CPUS 구성

    ---help---
      This allows you to specify the maximum number of CPUs which this
      kernel will support.  If CPUMASK_OFFSTACK is enabled, the maximum
      supported value is 4096, otherwise the maximum value is 512.  The
      minimum value which makes sense is 2.

      This is purely to save memory - each supported CPU adds
      approximately eight kilobytes to the kernel image.

업데이트: 최신 커널에서는 이는 아키텍처에 따라 다릅니다.4.15 x86_64에서 NR_CPUS를 8192로 설정할 수 있습니다.적절한 상황에서, 동시에32비트 arm은 32에서 멈춥니다..

답변4

스레드는 멀티태스킹 모델 및 스레드 관리 체계의 영향을 받습니다. 내 기억이 맞다면 인텔 기반 시스템용 Gdt는 Linux용입니다. 아이디어는 최대 8192개의 스레드가 가능하다는 것입니다. 시스템이 스레드를 관리하기 위해 gdt를 사용한다고 가정합니다. 32비트 시스템에서는 작업 전환이 관리되며 32비트 및 64비트 시스템의 인터럽트 벡터에는 gdt 항목이 필요합니다. 팔이 어떻게 만들어졌는지는 잘 모르겠지만, 동일한 관절이 이루어져야 합니다. 작업 전환 개념은 작업 할당 모델에서 GDT를 반복합니다.

gdt 체계를 깨면 각 스레드의 스택 프레임에 대해 한 페이지, 스레드의 코드 베이스에 대해 한 페이지, 힙 공간에 대해 한 페이지가 있을 때 보유하고 있는 메모리까지 확보할 수 있습니다. 코드 페이지나 힙이 있다고 가정할 수는 없으며 이는 무작위 변수입니다. 일반적으로 각 스레드에는 두 개의 스택 프레임이 있으며, 하나는 스레드에 의해 유지되고 다른 하나는 Linux 커널에 의해 유지됩니다. 스왑 공간이라는 가상 메모리 개념을 추가하면 모델이 엉망이 되지만 이는 스레드 우선순위와 관련이 있습니다.

관련 정보