OS 튜닝 ( 게임 서버 CPU 튜닝하기 )
* 최근에 DB 서버가 아닌 게임서버도 튜닝할 일이 있었다. 게임서버가 TCP 서버이며 1 프로세스 Mulit Threading 방식인데, CPU 사용율이 많아 OS 상에서 커널파라미터를 수정하여 튜닝한 사례 이다.
1. 조절한 커널 파라미터
# A. SWAP 사용 빈도 vm.swappiness = 1 * 리눅스가 Free 영유 메모리가 있는데도, Swap 을 쓸경우가 빈번합니다. 이 프로퍼티는 Free Memory 여유가 넘치는데도 Swap 을 쓰는 빈도를 최소화하는것입니다. 이프로퍼티로 인해 Swap 자체를 안쓰진 않고, 최소화합니다.
#B. THP Disable echo never > /sys/kernel/mm/transparent_hugepage/enabled echo never > /sys/kernel/mm/transparent_hugepage/defrag * 리눅스가 Memory Page 할당시 큰 메모리 페이지를 자동으로 한번에 할당할 수 있는 방식을 사용합니다. 이는 한번에 큰 메모리를 할당할 경우 성능 저하 및 시스템Hang 같은 현상이 발생하기 쉽기 때문에, 금지하는 것이 좋습니다. 이는 메모리 조각화도 발생시킬수있습니다. 따라서 HUGE 페이지를 사용하지 않도록 Never 로 변경합니다.
#C. NUMA Disable (수정후 서버 재기동 필요) vi /boot/grub/grub.conf kernel /vmlinuz-2.6.32-504.el6.x86_64 ro root=UUID=d55dc716-2f4c-425e-b657-c0a614f27003 rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet numa=off 기본적으로 NUMA 의 개념은 1개 서버를 논리적으로 나눠, CPU/Memory 를 논리적으로 프로세스가 나눠 각각 affinity 하게 쓸수 있게 하겠다는 개념에서 출발합니다. 여러개 프로세스를 구동하는 시스템의 경우 서로 자원 경합을 줄일 수 있기 때문에 효율적일수 있으나 현재 게임서버와 같이 1개의 프로세스가 아주 활동이 빈번하고, 응답이 빨라야 할 경우 NUMA 가 불필요하게 논리적으로 연산발생 및 NUMA 노드 Miss 가 발생하여 성능이 줄어 들 가능성이 있고 CPU 를 많이 소모하게 될 경우가 발생합니다.
- 튜닝 전 CPU 사용율 ( 약 43~45% )
- 튜닝 후 CPU 사용율( 약 30~32% )
3. 추가 설명
DB에는 많은 커널이 튜닝되고 바뀌나 , 게임서버는 효과가 크고 안정성이 높은 커널프로퍼티만 적용했습니다. 제가 관리하는 DB 서버도 아니라 위 부분 정도만 튜닝하고 적용합니다.
댓글 없음:
댓글 쓰기