Linux의 Numa 아키텍처에 대해 이야기해 보겠습니다. (그림과 텍스트로 자세한 설명)
이 기사는 Linux의 Numa 아키텍처에 대한 관련 지식을 제공하는 데 도움이 되기를 바랍니다.
다음 사례는 Ubuntu 16.04 기준이며, 다른 Linux 시스템에도 적용 가능합니다. 제가 사용한 케이스 환경은 다음과 같습니다.
머신 구성: 32 CPU, 64GB 메모리
NUMA의 스토리지 레벨 개념:
1) 프로세서 레이어: 프로세서 레이어라고 불리는 단일 물리적 코어. 2) 로컬 노드 계층: 노드의 모든 프로세서에 대해 이 노드를 로컬 노드라고 합니다. 3) 홈 노드 계층: 로컬 노드에 인접한 노드를 홈 노드라 한다. 4) 원격 노드 계층: 로컬 노드나 이웃 노드가 아닌 노드를 원격 노드라고 합니다. 다양한 유형의 노드의 메모리에 액세스하는 CPU 속도는 다릅니다. 로컬 노드에 액세스하는 속도는 가장 빠르며, 원격 노드에 액세스하는 속도는 가장 느립니다. 즉, 액세스 속도는 노드의 거리와 관련됩니다. 거리가 멀수록 액세스 속도가 느려집니다. 이 거리를 For Node Distance라고 합니다. 애플리케이션은 서로 다른 CPU 모듈 간의 상호 작용을 최소화하도록 노력해야 합니다. 애플리케이션을 CPU 모듈에서 수정할 수 있으면 애플리케이션의 성능이 크게 향상됩니다.
** Kunpeng 920 프로세서를 사용하는 CPU 칩의 구성에 대해 이야기해 보겠습니다. ** Kunpeng 920 프로세서 시스템 온 칩의 각 슈퍼 코어 클러스터에는 6개의 코어 클러스터, 2개의 I/O 클러스터 및 4개의 DDR 컨트롤러가 포함되어 있습니다. 각 슈퍼 코어 클러스터는 CPU 칩에 패키지되어 있습니다. 각 칩은 최대 3200MT/s의 데이터 전송 속도를 갖춘 4개의 72비트(64비트 데이터 + 8비트 ECC) 고속 DDR4 채널을 통합합니다. 단일 칩은 최대 512GB×4 DDR 저장 공간을 지원할 수 있습니다. L3 캐시는 물리적으로 L3 캐시 TAG와 L3 캐시 데이터의 두 부분으로 나뉩니다. L3 캐시 TAG는 각 코어 클러스터에 통합되어 청취 대기 시간을 줄입니다. L3 Cache DATA는 온칩 버스에 직접 연결됩니다. Hydra Root Agent(Hydra Home Agent, HHA)는 멀티 칩 시스템의 캐시 일관성 프로토콜을 처리하는 모듈입니다. POE_ICL은 일반적으로 패킷 시퀀서, 메시지 큐, 메시지 배포로 사용되거나 프로세서 코어의 특정 작업을 구현하는 데 사용할 수 있는 시스템 구성 하드웨어 가속기입니다. 또한 각 슈퍼 코어 클러스터는 ARM의 GICv4 사양과 호환되는 GICD(Generic Interrupt Controller Distributor) 모듈로 물리적으로 구성됩니다. 단일 칩 또는 다중 칩 시스템에 여러 슈퍼 코어 클러스터가 있는 경우 시스템 소프트웨어에는 하나의 GICD만 표시됩니다.
numactl 사용법
Linux에서는 수동 조정 명령인 numactl을 제공합니다(기본적으로 설치되지 않음). Ubuntu에서의 설치 명령은 다음과 같습니다.
sudo apt install numactl -y
우선 man numactl 또는 numactl을 통해 알아볼 수 있습니다. --h 매개변수의 기능과 출력 내용입니다. 시스템의 Numa 상태를 확인하십시오:
numactl --hardware
다음을 실행하여 얻은 결과:
available: 4 nodes (0-3) node 0 cpus: 0 1 2 3 4 5 6 7 node 0 size: 16047 MB node 0 free: 3937 MB node 1 cpus: 8 9 10 11 12 13 14 15 node 1 size: 16126 MB node 1 free: 4554 MB node 2 cpus: 16 17 18 19 20 21 22 23 node 2 size: 16126 MB node 2 free: 8403 MB node 3 cpus: 24 25 26 27 28 29 30 31 node 3 size: 16126 MB node 3 free: 7774 MB node distances: node 0 1 2 3 0: 10 20 20 20 1: 20 10 20 20 2: 20 20 10 20 3: 20 20 20 10
이 그림과 명령에서 얻은 결과에 따르면 이 시스템에는 총 4개의 노드가 있음을 알 수 있습니다. , 각각 8개의 CPU와 16G 메모리를 수신합니다. 여기서 주목해야 할 점은 CPU가 공유하는 L3 캐시도 자체적으로 해당 공간을 받게 된다는 점입니다. numastat 명령을 통해 Numa 상태를 확인할 수 있습니다. 반환 값 내용:
numa_hit: 이 노드에 메모리를 할당하기 위한 것이며, 이 노드에서 할당된 횟수입니다. 이 노드에 메모리를 할당했지만 최종적으로 다른 노드에서 할당되었습니다. 할당 횟수
numa_foreign: 다른 노드에 할당하려고 할 때 이 노드에서 메모리가 할당된 횟수입니다. interleave_hit: 인터리브 전략을 사용하여 이 노드에서 메모리를 할당한 횟수
local_node: 이 노드의 프로세스가 이 노드에서 할당된 횟수 해당 노드에 할당된 횟수
other_node: 횟수입니다. 다른 노드 프로세스는 노드에 할당됩니다
참고: numa_miss 값이 상대적으로 높은 것으로 확인되면 할당 전략을 조정해야 함을 의미합니다. 예를 들어 지정된 프로세스 연결이 지정된 CPU에 바인딩되어 메모리 적중률이 향상됩니다.
root@ubuntu:~# numastat node0 node1 node2 node3 numa_hit 19480355292 11164752760 12401311900 12980472384 numa_miss 5122680 122652623 88449951 7058 numa_foreign 122652643 88449935 7055 5122679 interleave_hit 12619 13942 14010 13924 local_node 19480308881 11164721296 12401264089 12980411641 other_node 5169091 122684087 88497762 67801
NUMA 메모리 할당 전략
--localalloc 또는 -l: 프로세스가 로컬 노드에서 메모리 할당을 요청하도록 지정합니다. --membind=nodes 또는 -m 노드: 프로세스가 지정된 노드에서만 메모리 할당을 요청할 수 있도록 지정합니다. --preferred=node: 메모리 확보를 위해 권장 노드를 지정합니다. 획득에 실패하면 다른 노드를 시도하세요. --interleave=nodes 또는 -i 노드: 프로세스가 라운드 로빈 알고리즘을 사용하여 지정된 노드에서 메모리 할당을 인터리브 방식으로 요청하도록 지정합니다.
numactl --interleave=all mongod -f /etc/mongod.conf
因为NUMA默认的内存分配策略是优先在进程所在CPU的本地内存中分配,会导致CPU节点之间内存分配不均衡,当开启了swap,某个CPU节点的内存不足时,会导致swap产生,而不是从远程节点分配内存。这就是所谓的swap insanity 现象。或导致性能急剧下降。所以在运维层面,我们也需要关注NUMA架构下的内存使用情况(多个内存节点使用可能不均衡),并合理配置系统参数(内存回收策略/Swap使用倾向),尽量去避免使用到Swap。
Node->Socket->Core->Processor
随着多核技术的发展,将多个CPU封装在一起,这个封装被称为插槽Socket;Core是socket上独立的硬件单元;通过intel的超线程HT技术进一步提升CPU的处理能力,OS看到的逻辑上的核Processor数量。
Socket = Node
Socket是物理概念,指的是主板上CPU插槽;Node是逻辑概念,对应于Socket。
Core = 物理CPU
Core是物理概念,一个独立的硬件执行单元,对应于物理CPU;
Thread = 逻辑CPU = Processor
Thread是逻辑CPU,也就是Processo
lscpu的使用
显示格式:
Architecture:架构
CPU(s):逻辑cpu颗数
Thread(s) per core:每个核心线程,也就是指超线程
Core(s) per socket:每个cpu插槽核数/每颗物理cpu核数
CPU socket(s):cpu插槽数
L1d cache:级缓存(google了下,这具体表示表示cpu的L1数据缓存)
L1i cache:一级缓存(具体为L1指令缓存)
L2 cache:二级缓存
L3 cache:三级缓存
NUMA node0 CPU(s) :CPU上的逻辑核,也就是超线程
执行lscpu,结果部分如下:
root@ubuntu:~# lscpu Architecture: x86_64 CPU(s): 32 Thread(s) per core: 1 Core(s) per socket: 8 Socket(s): 4 L1d cache: 32K L1i cache: 32K L2 cache: 256K L3 cache: 20480K NUMA node0 CPU(s): 0-7 NUMA node1 CPU(s): 8-15 NUMA node2 CPU(s): 16-23 NUMA node3 CPU(s): 24-31
相关推荐:《Linux视频教程》
위 내용은 Linux의 Numa 아키텍처에 대해 이야기해 보겠습니다. (그림과 텍스트로 자세한 설명)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











Linux는 서버, 개발 환경 및 임베디드 시스템에 적합합니다. 1. 서버 운영 체제로서 Linux는 안정적이고 효율적이며 종종 고 대전성 애플리케이션을 배포하는 데 사용됩니다. 2. 개발 환경으로서 Linux는 효율적인 명령 줄 도구 및 패키지 관리 시스템을 제공하여 개발 효율성을 향상시킵니다. 3. 임베디드 시스템에서 Linux는 가볍고 사용자 정의 가능하며 자원이 제한된 환경에 적합합니다.

Apache 80 포트가 점유되면 솔루션은 다음과 같습니다. 포트를 차지하고 닫는 프로세스를 찾으십시오. 방화벽 설정을 확인하여 Apache가 차단되지 않았는지 확인하십시오. 위의 방법이 작동하지 않으면 Apache를 재구성하여 다른 포트를 사용하십시오. Apache 서비스를 다시 시작하십시오.

Apache를 시작하는 단계는 다음과 같습니다. Apache 설치 (명령 : Sudo apt-get Apache2를 설치하거나 공식 웹 사이트에서 다운로드) 시작 apache (linux : sudo systemctl start : windes (선택 사항, Linux : Sudo SystemCtl

이 기사에서는 데비안 시스템에서 NGINX 서버의 SSL 성능을 효과적으로 모니터링하는 방법에 대해 설명합니다. NginxOxporter를 사용하여 Nginx 상태 데이터를 프로 메테우스로 내보낸 다음 Grafana를 통해 시각적으로 표시합니다. 1 단계 : nginx 구성 먼저 Nginx 구성 파일에서 stub_status 모듈을 활성화하여 nginx의 상태 정보를 얻어야합니다. nginx 구성 파일에 다음 스 니펫을 추가하십시오 (일반적으로 /etc/nginx/nginx.conf에 있거나 포함 파일에 위치) : location/nginx_status {stub_status

Oracle 청취자를 시작하는 단계는 다음과 같습니다. Windows의 리스너 상태 (LSNRCTL 상태 명령 사용)를 확인하고 Linux 및 UNIX의 Oracle Services Manager에서 "TNS 리스너"서비스를 시작하고 LSNRCTL 시작 명령을 사용하여 리스너가 LSNRCTL 명령을 사용하여 리스너가 시작되었음을 확인하십시오.

이 기사는 데비안 시스템에서 재활용 빈을 구성하는 두 가지 방법 인 그래픽 인터페이스와 명령 줄을 소개합니다. 방법 1 : Nautilus 그래픽 인터페이스를 사용하여 파일 관리자를 엽니 다. 데스크탑 또는 응용 프로그램 메뉴에서 Nautilus 파일 관리자 (일반적으로 "파일")를 찾아 시작하십시오. Recycle Bin 찾기 : 왼쪽 탐색 표시 줄에서 재활용 빈 폴더를 찾으십시오. 찾을 수없는 경우 검색하려면 "기타 위치"또는 "컴퓨터"를 클릭하십시오. 재활용 빈 속성을 구성하십시오 : "Recycle Bin"을 마우스 오른쪽 버튼으로 클릭하고 "속성"을 선택하십시오. 속성 창에서 다음 설정을 조정할 수 있습니다. 최대 크기 : 재활용 빈에서 사용 가능한 디스크 공간을 제한하십시오. 유지 시간 : 재활용 쓰레기통에서 파일이 자동으로 삭제되기 전에 보존을 설정합니다.

Apache 서버를 다시 시작하려면 다음 단계를 따르십시오. Linux/MacOS : Sudo SystemCTL 실행 Apache2를 다시 시작하십시오. Windows : Net Stop Apache2.4를 실행 한 다음 Net Start Apache2.4를 시작하십시오. Netstat -A |를 실행하십시오 서버 상태를 확인하려면 Findstr 80.

Debian Systems에서 ReadDir 시스템 호출은 디렉토리 내용을 읽는 데 사용됩니다. 성능이 좋지 않은 경우 다음과 같은 최적화 전략을 시도해보십시오. 디렉토리 파일 수를 단순화하십시오. 대규모 디렉토리를 가능한 한 여러 소규모 디렉토리로 나누어 읽기마다 처리 된 항목 수를 줄입니다. 디렉토리 컨텐츠 캐싱 활성화 : 캐시 메커니즘을 구축하고 정기적으로 캐시를 업데이트하거나 디렉토리 컨텐츠가 변경 될 때 캐시를 업데이트하며 readDir로 자주 호출을 줄입니다. 메모리 캐시 (예 : Memcached 또는 Redis) 또는 로컬 캐시 (예 : 파일 또는 데이터베이스)를 고려할 수 있습니다. 효율적인 데이터 구조 채택 : 디렉토리 트래버스를 직접 구현하는 경우 디렉토리 정보를 저장하고 액세스하기 위해보다 효율적인 데이터 구조 (예 : 선형 검색 대신 해시 테이블)를 선택하십시오.
