32비트 아키텍처로 분할

32비트 아키텍처로 분할

저는 칩셋 공급업체의 맞춤형 임베디드 Linux 배포판에 애플리케이션 소프트웨어를 통합하고 있습니다. 제가 개발하고 있는 ARM 기반 제품입니다. 커널은 64비트로 구축되었지만 나머지 사용자 공간은 32비트인 것을 확인했습니다.

사용자 공간이 32비트인 경우에도 커널을 64비트로 구축하면 성능상의 이점이 있습니까? 이 SOC는 ARM Cortex-a53을 기반으로 합니다.

사용자 공간을 32비트로 설정하면 사용자 공간 RAM 공간이 더 작아지는 것으로 제안되었습니다. 커널에도 동일하게 적용되지만 커널은 64비트입니다. 성능이 좋아질 것 같은데요?

하드웨어에 대한 특정 정보:

  • ARM 피질 a53
  • 1GB RAM

추신: 기밀 유지 제한으로 인해 공급업체 이름을 공개할 수 없습니다.

답변1

Linux 프로세스의 가상 주소 공간은 두 가지 영역으로 나뉩니다.

  • 커널 공간
  • 사용자 공간.

32비트 아키텍처로 분할

arm 또는 i386과 같은 32비트 아키텍처에서 전통적인 분할은 다음과 같이 3:1입니다.

    +--------+ 0xffffffff
    | Kernel |
    +--------+ 0xc0000000
    |        |
    | User   |
    |        |
    +--------+ 0x00000000
  • 커널 공간 - 1GiB
  • 사용자 공간 - 3GiB

따라서 커널은 언제든지 최대 1GiB의 물리적 메모리를 매핑할 수 있지만 나머지 물리적 메모리에 액세스하려면 임시로 매핑된 가상 주소 공간이 필요하기 때문에 추가 분할이 필요합니다. 분석은 다음과 같습니다.

  • 낮은 896MiB(0xc0000000~0xf7ffffff)는 커널 물리적 주소 공간에 직접 매핑됩니다.
  • 나머지 128MiB(0xf8000000 ~ 0xffffffff)는 요청 시 커널에서 상위 메모리에 매핑하는 데 사용됩니다.

배열은 다음과 같습니다.

                                                 physical memory 2 GiB 
                                          +------> +------------+
                                          |        |  1152 MiB  |  
                                          |        |            |  
    +------------------+ 0xffffffff  -----+        |  HIGH MEM  |  
    | On Demand 128MiB |                           |            |  
    +------------------+ 0xf8000000  ------------> +------------+  
    |                  |             ------+  
    |  Direct mapped   |                   +-----> +------------+   
    |    896 MiB       |             --+           |   896 MiB  |        
    +------------------+ 0xc0000000    +---------> +------------+  

따라서 Linux 커널은 highmem 인터페이스를 통해 2/4/6/8 GiB 범위의 물리적 메모리에 대한 간접적인 액세스를 제공합니다. 그러나 임시 매핑 생성과 관련된 비용은 상당히 높을 수 있습니다. 아키텍처는 코어의 페이지 테이블, 데이터 TLB 및/또는 MMU 레지스터를 조작해야 합니다.

64비트 아키텍처 정보

3G/1G 파티셔닝은 적용되지 않습니다. 거대한 주소 공간으로 인해 사용자 공간과 커널 공간 간의 분할 방식을 선택하여 전체 물리적 메모리를 커널 주소 공간에 매핑할 수 있습니다. 이렇게 하면 32비트 아키텍처에서 발생하는 임시 매핑의 모든 오버헤드가 절약됩니다.

64비트 아키텍처의 Linux 커널에서는 높은 메모리 지원이 선택 사항이며, 64비트 아키텍처의 Linux에서는 높은 메모리 지원도 비활성화됩니다.

인용하다:Linux 고용량 메모리 처리.

관련 정보