FG 메타데이터 캐시를 활성화한 후 PowerFlex SDS가 충돌하기 시작함
Summary: FG(Fine Granularity) 메타데이터 캐시를 활성화한 후 PowerFlex SDS가 충돌하기 시작합니다.
Symptoms
시나리오
특정 보호 도메인에서 FG 메타데이터 캐시를 활성화한 후 일부 SDS가 충돌하고 재시작됩니다.
증상
- 보호 도메인에서 FG 메타데이터 캐시가 활성화되었습니다(MDM 이벤트에서).
2023-09-27 02:19:51.115000:4614824:CLI_COMMAND_SUCCEEDED INFO Command set_default_fgl_metadata_cache_size succeeded 2023-09-27 02:20:27.996000:4614851:MDM_CLI_CONF_COMMAND_RECEIVED INFO Command enable_fgl_metadata_cache received, User: 'admin'. Protection Domain: pd1
- 메시지 파일에서 oom-killer 프로세스가 서비스를 중지하기 때문에 SDS 서비스가 다시 시작되고 있음을 알 수 있습니다.
Sep 27 02:20:28 sds60 kernel: sds-3.6.700.103 invoked oom-killer: gfp_mask=0x201da, order=0, oom_score_adj=0 Sep 27 02:20:28 sds60 kernel: sds-3.6.700.103 cpuset=/ mems_allowed=0-1 Sep 27 02:20:28 sds60 kernel: CPU: 1 PID: 9615 Comm: sds-3.6.700.103 Kdump: loaded Tainted: G OE ------------ 3.10.0-1160.80.1.el7.x86_64 #1 Sep 27 02:20:28 sds60 kernel: Hardware name: VMware, Inc. VMware Virtual Platform/440BX Desktop Reference Platform, BIOS 6.00 11/12/2020 Sep 27 02:20:28 sds60 kernel: Call Trace: Sep 27 02:20:28 sds60 kernel: [] dump_stack+0x19/0x1f Sep 27 02:20:28 sds60 kernel: [] dump_header+0x90/0x22d Sep 27 02:20:28 sds60 kernel: [] ? ktime_get_ts64+0x52/0xf0 Sep 27 02:20:28 sds60 kernel: [] ? delayacct_end+0x8f/0xc0 Sep 27 02:20:28 sds60 kernel: [] oom_kill_process+0x2d5/0x4a0 Sep 27 02:20:28 sds60 kernel: [] ? oom_unkillable_task+0x93/0x120 Sep 27 02:20:28 sds60 kernel: [] out_of_memory+0x31a/0x500 Sep 27 02:20:28 sds60 kernel: [] __alloc_pages_nodemask+0xae4/0xbf0 Sep 27 02:20:28 sds60 kernel: [] alloc_pages_current+0x98/0x110 Sep 27 02:20:28 sds60 kernel: [] __page_cache_alloc+0x97/0xb0 Sep 27 02:20:28 sds60 kernel: [] filemap_fault+0x270/0x420 Sep 27 02:20:28 sds60 kernel: [] __xfs_filemap_fault+0x7e/0x1d0 [xfs] Sep 27 02:20:28 sds60 kernel: [] xfs_filemap_fault+0x2c/0x40 [xfs] Sep 27 02:20:28 sds60 kernel: [] __do_fault.isra.61+0x8a/0x100 Sep 27 02:20:28 sds60 kernel: [] do_read_fault.isra.63+0x4c/0x1b0 Sep 27 02:20:28 sds60 kernel: [] handle_mm_fault+0xa20/0xfb0 Sep 27 02:20:28 sds60 kernel: [] ? ep_scan_ready_list.isra.7+0x1b9/0x1f0 Sep 27 02:20:28 sds60 kernel: [] __do_page_fault+0x213/0x510 Sep 27 02:20:28 sds60 kernel: [] do_page_fault+0x35/0x90 Sep 27 02:20:28 sds60 kernel: [] page_fault+0x28/0x30
Sep 27 02:20:28 sds60 kernel: Out of memory: Kill process 1262 (sds-3.6.700.103) score 240 or sacrifice child Sep 27 02:20:28 sds60 kernel: Killed process 1262 (sds-3.6.700.103), UID 0, total-vm:75663912kB, anon-rss:9100672kB, file-rss:3944kB, shmem-rss:10796856kB Sep 27 02:20:29 sds60 systemd: sds.service: main process exited, code=killed, status=9/KILL Sep 27 02:20:29 sds60 systemd: Unit sds.service entered failed state. Sep 27 02:20:29 sds60 systemd: sds.service failed.
- SDS 충돌에는 2개의 NUMA 노드(Non-Uniform Memory Access)가 있습니다. 이것은 "numactl --hardware"에서 볼 수 있습니다.
available: 2 nodes (0-1) node 0 cpus: 0 1 2 3 4 5 6 node 0 size: 20923 MB node 0 free: 1014 MB node 1 cpus: 7 8 9 10 11 12 13 node 1 size: 21166 MB node 1 free: 19481 MB
- 동일한 스토리지 보호 도메인의 다른 SDS가 충돌하지 않으며 NUMA 노드가 하나만 있습니다.
available: 1 nodes (0) node 0 cpus: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 node 0 size: 42089 MB node 0 free: 19881 MB
영향
이로 인해 데이터 성능이 저하되어 재구축이 이루어지고, 많은 수의 SDS가 동시에 충돌하는 경우 데이터 가용성 손실이 발생합니다.
Cause
FG 메타데이터 캐시를 사용하면 FG 기반 볼륨이 읽기를 캐싱하여 성능을 향상시킬 수 있습니다. 또한 읽기를 캐시하려면 OS에서 더 많은 메모리가 필요하므로 OS에서 메모리를 사용할 수 있어야 합니다. 이 메모리를 사용할 수 없는 경우 OS는 oom-killer(메모리 부족)를 사용하여 SDS 서비스일 가능성이 높은 가장 큰 메모리 사용자를 중지합니다.
이 경우 충돌이 발생하고 충돌이 발생하지 않은 SDS는 SVM입니다. 그들 모두는 각각의 ESXi 호스트에서 할당 된 40 + GB의 RAM과 14 개의 vCPU를 가지고있었습니다. 기본적으로 SDS는 NUMA 노드 0에서만 메모리를 끌어올 수 있습니다. NUMA 노드가 여러 개 있는 경우 SDS는 FG 메타데이터 캐시를 활성화할 때 메모리 요구 사항을 충족하기 위해 NUMA 노드 1에서 끌어올 수 없습니다.
하나 또는 두 개의 NUMA 노드가 있는 SVM 구성에서 차이가 발생하는 것은 기본 하드웨어에 기인할 수 있습니다. 이 경우 하나의 NUMA 노드가 있는 SVM에는 소켓당 18개의 코어가 있으므로 14개의 vCPU가 모두 하나의 CPU 소켓에 맞을 수 있습니다. 두 개의 NUMA 노드가 있는 SVM에는 소켓당 12개의 코어만 있었기 때문에 하나의 CPU 소켓에 vCPU를 모두 수용할 수 없었고 두 소켓 모두에 분산해야 했습니다. 이를 위해서는 두 개의 NUMA 노드가 필요합니다.
Resolution
해결 방법
SVM 또는 OS에 새 메모리 요구 사항을 충족하기에 충분한 메모리가 있는지 확인합니다.
몇 가지 해결 방법이 있습니다. 다음 하나만 사용해야 합니다.
2개의 NUMA 노드가 있는 노드의 SDS conf.txt에 아래 줄을 추가하고 SDS 프로세스를 재시작합니다(모든 정기 유지 보수 절차 준수).
numa_memory_affinity=0
conf.txt의 이 줄은 SDS가 두 NUMA 노드의 메모리를 사용하도록 허용합니다.
이 설정이 필요한 이유에 대한 추가 설명서는 여기에서 찾을 수 있습니다.
기본 하드웨어와 일치하도록 vCPU 수를 줄입니다. 이 경우 SVM에 12개의 vCPU가 있으면 단일 NUMA 노드에서 모든 메모리를 사용할 수 있습니다.
영향을 받는 버전
PowerFlex 3.5.xPowerFlex
3.6.xPowerFlex
4.x
수정된 버전
이는 정상적인 작동입니다.