ZFS 사용시 메모리(RAM) 사용량 최적화 하기.
출처: https://svrforum.com/os/287551
Proxmox ZFS 사용시 메모리(RAM) 사용량 최적화 하기.
이번글에서는 Proxmox 에서 핵심기능인 ZFS를 사용할때 발생하는 메모리 과다점유를 해결하는방법입니다.
물론 RAM용량을 늘리는게 가장 효율적인방법이겠지만.. 메모리를 올리기 어려운환경에서 적용하시면 되겠습니다.
기본적으로 ZFS에서는 ARC(Adaptive Replacement Cache)라는 기능을 통해 빠른속도를 보여주는데 이게 사용하는 램의 용량과 디스크의 용량/상황에 따라서 엄청난량의 메모리 점유율을 보여주기도합니다.
https://namu.wiki/w/ZFS
제가 겪은걸로는 VM으로는 약 16G만 사용하고있었는데 ARC로 32G를 먹어버리는.. 엄청난 점유율을 보여줬습니다.
실제로 쉘로가서 arcstat 명령어를 쳐보니 이렇게 31G나 먹고있더군요..하핳
해결방법은 시스템 메모리상에서 ARC로 사용되는 메모리에 제한을 두면됩니다.
제가 해당 ZFS에 대해 모르는 내용이 많아 구글링해서 제가 적용해본 내용을 그대로 사용하였습니다.
1. KSM 튜닝
SM(Kernel Same-page Merging)은 소중한 RAM을 조금 더 활용하기 위한 훌륭한 도구입니다. Proxmox에서는 기본적으로 활성화되어 있지만 기본 설정은 RAM 사용량이 급증할 수 있는 ZFS 시스템에서 사용하기에 적합하지 않습니다. 디스크를 많이 사용하는 작업이 처음 발생하는 경우(예: 한 zpool에서 다른 zpool로의 백업 또는 복제).
KSM은 중복 메모리 페이지를 단일 페이지로 줄여 작동하므로 여러 VM이 동일한 리소스를 메모리에 저장한 경우 동일한 리소스의 여러 복사본으로 RAM 공간을 낭비하는 대신 RAM에 한 번만 저장하고 공유합니다. 이는 대부분의 VM에서 동일한 운영 체제를 실행할 때 가장 잘 작동합니다.
KSM Tuning은 VM에 안전하게 할당할 수 있는 RAM의 양을 늘리지 않지만 RAM 사용률이 높은 기간 동안 추가 버퍼를 제공하므로 내가 안전하게 할 수 있는 모든 RAM을 할당하는 것이 조금 나아집니다.
기본KSM의 KSM_THRES_COEF은 20이며, 이는 전체 시스템 RAM의 20% 미만이 사용 가능한 경우 KSM이 트리거됨을 의미합니다. 이 계산 공식은 다음과 같습니다.
임계값 * 총 RAM / 100
Proxmox Web GUI에 따라 총 62.83GiB의 RAM이 있으므로 내 시스템의 기본값은 다음과 같습니다.
20 * 62.83GiB / 100 = 12.566GiB
즉, KSM은 내 RAM 사용량이 50.264GiB(총 RAM 62.83GiB - 12.566GiB 여유 RAM 임계값 = 50.264GiB 트리거 포인트)에 도달한 경우에만 작동을 시작합니다.
나는 숫자를 조금 가지고 놀았고 KSM_THRES_COEF약 41GiB의 RAM 사용량에서 KSM을 트리거하기 위해 값 35를 생각해 냈습니다.
35 * 62.83GiB / 100 = 21.9905GiB 62.83GiB - 21.9905GiB = 40.8395GiB 임계값
수정방법
vi /etc/ksmtuned.conf 로 가서
빨간색 네모칸 안의 주석을 없애고 값을 35로 변경해준뒤에 저장해주시면됩니다.
재부팅이 필요하나 이건 아래 진행할 ARC 메모리 값 변경후에 진행할거라 일단은 두셔도 됩니다.
2. ARC 튜닝
이제 앞서 설명한 ARC의 최대값에 대한 튜닝입니다.
ARC의 경우 사용하는 총 용량의 1TB당 1G 그러니까 약 1%정도를 권장한다고하니 참고하시면 되겠습니다.
참고링크에서는 8TB정도를 사용해서 8G를 기준으로했지만 저같은경우 SSD 2TB, HDD 10TB를 사용하기때문에 총 용량 12TB를 기준으로 예시를 만들었습니다.
12TB인 경우 최대 램 12G 최소 6G로 설정할것인데 이걸 바이트로 표기해줘야합니다.
12GB인경우 12 * 1024 * 1024 * 1024 이므로 총 128849018888 이 되고 /2 하면 최소값이 6G가 됩니다.
아래 /etc/modprobe.d/zfs.conf 를 만들어주시면서 내용을 넣어주시면됩니다.
vi /etc/modprobe.d/zfs.conf
options zfs zfs_arc_min=6442450944
options zfs zfs_arc_max=12884901888
그리고 아래명령어들로 arc설정이 적용되도록 해주고 재부팅을한번해주세요.
update-initramfs -u
pve-efiboot-tool refresh
재부팅을하고나서 arcstat을 하면 아래처럼 값이 잘 적용되는걸 확인하실 수 있습니다.
48GB에서 10G로 줄어버리는 매직...
그래도 램은 아껴써야합니다 ㅎㅎ
참고 : https://www.dlford.io/memory-tuning-proxmox-zfs/
Proxmox ZFS 사용시 메모리(RAM) 사용량 최적화 하기.
목차
안녕하세요. 달소입니다.
이번글에서는 Proxmox 에서 핵심기능인 ZFS를 사용할때 발생하는 메모리 과다점유를 해결하는방법입니다.
물론 RAM용량을 늘리는게 가장 효율적인방법이겠지만.. 메모리를 올리기 어려운환경에서 적용하시면 되겠습니다.
기본적으로 ZFS에서는 ARC(Adaptive Replacement Cache)라는 기능을 통해 빠른속도를 보여주는데 이게 사용하는 램의 용량과 디스크의 용량/상황에 따라서 엄청난량의 메모리 점유율을 보여주기도합니다.
https://namu.wiki/w/ZFS
제가 겪은걸로는 VM으로는 약 16G만 사용하고있었는데 ARC로 32G를 먹어버리는.. 엄청난 점유율을 보여줬습니다.
실제로 쉘로가서 arcstat 명령어를 쳐보니 이렇게 31G나 먹고있더군요..하핳
해결방법은 시스템 메모리상에서 ARC로 사용되는 메모리에 제한을 두면됩니다.
제가 해당 ZFS에 대해 모르는 내용이 많아 구글링해서 제가 적용해본 내용을 그대로 사용하였습니다.
1. KSM 튜닝
SM(Kernel Same-page Merging)은 소중한 RAM을 조금 더 활용하기 위한 훌륭한 도구입니다. Proxmox에서는 기본적으로 활성화되어 있지만 기본 설정은 RAM 사용량이 급증할 수 있는 ZFS 시스템에서 사용하기에 적합하지 않습니다. 디스크를 많이 사용하는 작업이 처음 발생하는 경우(예: 한 zpool에서 다른 zpool로의 백업 또는 복제).
KSM은 중복 메모리 페이지를 단일 페이지로 줄여 작동하므로 여러 VM이 동일한 리소스를 메모리에 저장한 경우 동일한 리소스의 여러 복사본으로 RAM 공간을 낭비하는 대신 RAM에 한 번만 저장하고 공유합니다. 이는 대부분의 VM에서 동일한 운영 체제를 실행할 때 가장 잘 작동합니다.
KSM Tuning은 VM에 안전하게 할당할 수 있는 RAM의 양을 늘리지 않지만 RAM 사용률이 높은 기간 동안 추가 버퍼를 제공하므로 내가 안전하게 할 수 있는 모든 RAM을 할당하는 것이 조금 나아집니다.
기본KSM의 KSM_THRES_COEF은 20이며, 이는 전체 시스템 RAM의 20% 미만이 사용 가능한 경우 KSM이 트리거됨을 의미합니다. 이 계산 공식은 다음과 같습니다.
임계값 * 총 RAM / 100
Proxmox Web GUI에 따라 총 62.83GiB의 RAM이 있으므로 내 시스템의 기본값은 다음과 같습니다.
20 * 62.83GiB / 100 = 12.566GiB
즉, KSM은 내 RAM 사용량이 50.264GiB(총 RAM 62.83GiB - 12.566GiB 여유 RAM 임계값 = 50.264GiB 트리거 포인트)에 도달한 경우에만 작동을 시작합니다.
나는 숫자를 조금 가지고 놀았고 KSM_THRES_COEF약 41GiB의 RAM 사용량에서 KSM을 트리거하기 위해 값 35를 생각해 냈습니다.
35 * 62.83GiB / 100 = 21.9905GiB 62.83GiB - 21.9905GiB = 40.8395GiB 임계값
수정방법
vi /etc/ksmtuned.conf 로 가서
빨간색 네모칸 안의 주석을 없애고 값을 35로 변경해준뒤에 저장해주시면됩니다.
재부팅이 필요하나 이건 아래 진행할 ARC 메모리 값 변경후에 진행할거라 일단은 두셔도 됩니다.
2. ARC 튜닝
이제 앞서 설명한 ARC의 최대값에 대한 튜닝입니다.
ARC의 경우 사용하는 총 용량의 1TB당 1G 그러니까 약 1%정도를 권장한다고하니 참고하시면 되겠습니다.
참고링크에서는 8TB정도를 사용해서 8G를 기준으로했지만 저같은경우 SSD 2TB, HDD 10TB를 사용하기때문에 총 용량 12TB를 기준으로 예시를 만들었습니다.
12TB인 경우 최대 램 12G 최소 6G로 설정할것인데 이걸 바이트로 표기해줘야합니다.
12GB인경우 12 * 1024 * 1024 * 1024 이므로 총 128849018888 이 되고 /2 하면 최소값이 6G가 됩니다.
아래 /etc/modprobe.d/zfs.conf 를 만들어주시면서 내용을 넣어주시면됩니다.
vi /etc/modprobe.d/zfs.conf
options zfs zfs_arc_min=6442450944
options zfs zfs_arc_max=12884901888
그리고 아래명령어들로 arc설정이 적용되도록 해주고 재부팅을한번해주세요.
update-initramfs -u
pve-efiboot-tool refresh
재부팅을하고나서 arcstat을 하면 아래처럼 값이 잘 적용되는걸 확인하실 수 있습니다.
48GB에서 10G로 줄어버리는 매직...
그래도 램은 아껴써야합니다 ㅎㅎ
참고 : https://www.dlford.io/memory-tuning-proxmox-zfs/