Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

30.6.3. 튜닝할 값

30.6.3.1. CPU/메모리

30.6.3.1.1. 논리, 물리적, cpu, ack 스레드 수
논리, 물리적, cpu 및 I/O 승인 작업을 여러 스레드에 분산할 수 있으며, 초기 구성 중에 지정할 수 있는 수는 VDO 장치를 다시 시작하는 경우 나중에 지정할 수 있습니다.
하나의 코어 또는 하나의 스레드는 주어진 시간 동안 유한한 양의 작업을 수행할 수 있습니다. 예를 들어 하나의 스레드가 모든 데이터 블록 해시 값을 계산하면 초당 처리할 수 있는 데이터 블록 수에 하드 제한이 적용됩니다. 여러 스레드(및 코어)에서 작업을 분할하면 병목 현상이 발생할 수 있습니다.
스레드 또는 코어가 100% 사용에 접근하면 처리를 위해 더 많은 작업 항목이 대기열에 추가되는 경향이 있습니다. 이로 인해 CPU의 유휴 사이클이 줄어들 수 있지만 개별 I/O 요청에 대한 큐링 지연 및 대기 시간이 일반적으로 증가합니다. 일부 큐잉 이론 모델에 따르면 70 % 또는 80% 이상의 사용률이 정상적인 처리 시간보다 여러 번 더 오래 걸릴 수있는 과도한 지연으로 이어질 수 있습니다. 따라서 해당 스레드 또는 코어가 항상 사용되고 있지 않은 경우에도 50% 이상의 사용률로 스레드 또는 코어에 대해 작업을 추가로 배포하는 것이 유용할 수 있습니다.
스레드 또는 CPU가 매우 가볍게 로드되는 경우(및 너무 자주 잠자기)하는 경우 수행할 작업을 제공하는 것이 추가 비용이 발생할 가능성이 더 큽니다. (다른 스레드를 깨우려는 스레드는 스케줄러의 데이터 구조에 전역 잠금을 획득해야 하며 작업을 다른 코어로 전송하기 위해 프로세스 간 중단을 잠재적으로 보낼 수 있습니다.) VDO 스레드를 실행하도록 구성된 코어는 스레드 간에 또는 스레드가 코어 간에 이동하는 경우 또는 스레드가 코어 간에 이동하므로 지정된 데이터의 일부가 캐시될 가능성이 적어집니다. 따라서 너무 많은 작업 배포가 성능이 저하될 수 있습니다.
I/O 요청당 논리, 물리적 및 CPU 스레드에서 수행하는 작업은 워크로드 유형에 따라 달라질 수 있으므로, 서비스는 예상되는 다양한 유형의 워크로드로 시스템을 테스트해야 합니다.
성공적인 중복 제거와 관련된 동기화 모드에서는 추가 I/O 작업(이전에 저장된 데이터 블록 읽기), 일부 CPU 사이클(새 데이터 블록 분리) 및 저널 업데이트(이전의 저장 데이터 블록의 PBN에 대한 매핑)가 새 데이터의 쓰기에 비해 추가로 포함됩니다. 중복이 비동기 모드에서 감지되면 위에서 설명한 읽기 및 비교 작업 비용으로 데이터 쓰기 작업을 방지할 수 있습니다. 중복이 감지되었는지 여부에 관계없이 쓰기당 하나의 저널 업데이트만 발생할 수 있습니다.
압축이 활성화된 경우 압축 가능한 데이터의 읽기 및 쓰기에는 CPU 스레드에서 더 많은 처리를 수행해야 합니다.
0바이트 모두 포함된 블록은일반적으로 발생하기 때문에 특별히 처리됩니다. 블록 맵에서 이러한 데이터를 나타내는 데 특수 항목이 사용되며, 제로 블록은 스토리지 장치에 쓰거나 읽을 수 없습니다. 따라서 all-zero 블록을 쓰거나 읽는 테스트로 인해 잘못된 결과가 발생할 수 있습니다. 또한 물리적 스레드에서 수행한 참조 개수 업데이트가 0개 또는 초기화되지 않은 블록은 0개 또는 초기화되지 않은 블록에 대해 0개 이상의 초기화되지 않은 블록으로 작성되지 않은 테스트의 경우도 마찬가지입니다.
I/O 작업 확인은 I/O 작업별로 하나의 콜백이 발행되므로 수행되는 작업이나 작업 유형에 따라 크게 영향을 받지 않는 유일한 작업입니다.
30.6.3.1.2. CPU 유사성 및 NUMA
NUMA 노드 경계를 통해 메모리에 액세스하는 데는 로컬 노드의 메모리에 액세스하는 것보다 시간이 오래 걸립니다. 노드의 코어 간에 마지막 수준 캐시를 공유하는 Intel 프로세서에서 노드 간 캐시 경합이 노드 내의 캐시 경합보다 훨씬 더 큰 문제입니다.
top 과 같은 툴은 작업 중인 CPU 사이클과 정지된 사이클을 구분할 수 없습니다. 이러한 툴은 실제 작업에서 캐시 경합과 느린 메모리 액세스를 해석합니다. 결과적으로 노드 간에 스레드를 이동하는 경우 스레드의 명확한 CPU 사용률을 줄이는 동시에 초당 수행하는 작업 수를 늘리는 것처럼 보일 수 있습니다.
VDO의 많은 커널 스레드는 하나의 스레드에서만 액세스하는 데이터 구조를 유지하지만 I/O 요청에 대한 메시지를 자주 교환합니다. VDO 스레드가 여러 노드에서 실행되는 경우 경합이 길거나 스레드가 스케줄러에 의해 한 노드에서 다른 노드로 다시 할당하는 경우 경합이 높을 수 있습니다. VDO 스레드와 동일한 노드에서 다른 VDO 관련 작업(예: I/O 제출)을 실행할 수 있는 경우 VDO 스레드와 동일한 노드에서 경합이 더 감소될 수 있습니다. 하나의 노드에 모든 VDO 관련 작업을 실행하기에 충분한 사이클이 없으면 다른 노드로 이동하는 스레드를 선택할 때 메모리 경합을 고려해야 합니다.
실제적인 경우 taskset 유틸리티를 사용하여 한 노드에서 VDO 스레드를 수집합니다. 다른 VDO 관련 작업을 동일한 노드에서 실행할 수도 있는 경우 경합을 추가로 줄일 수 있습니다. 이 경우 한 노드에 처리 수요를 따라가는 CPU 성능이 부족하면 다른 노드로 이동할 스레드를 선택할 때 메모리 경합을 고려해야 합니다. 예를 들어, 스토리지 장치의 드라이버에 유지 관리해야 하는 상당한 수의 데이터 구조가 있는 경우 장치의 인터럽트 처리 및 VDO의 I/O 제출(장치의 드라이버 코드를 호출하는 BIOS 스레드)을 다른 노드로 이동하는 데 도움이 될 수 있습니다. I/O 승인(ack threads) 및 상위 I/O 제출 스레드(사용자 모드 스레드)(직접 I/O 또는 커널의 페이지 캐시 플러시 스레드)를 연결하는 것도 좋은 방법입니다.
30.6.3.1.3. 빈도 제한
전력 소비가 문제가 아닌 경우 /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor 파일에 문자열 성능을 쓰는 경우 더 나은 결과가 발생할 수 있습니다. 이러한 sysfs 노드가 없으면 Linux 또는 시스템의 BIOS에서 CPU 빈도 관리를 구성하는 다른 옵션을 제공할 수 있습니다.
특정 작업을 수행하는 데 필요한 시간은 작업 전환 또는 캐시 경합 없이 다른 작업으로 인해 다른 작업으로 인해 달라질 수 있으므로 성능 측정은 워크로드에 따라 동적으로 다양한 빈도가 다를 수 있습니다.