2016년 9월 30일 금요일

OS 튜닝 ( 게임 서버 CPU 튜닝하기 )

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 서버도 아니라 위 부분 정도만 튜닝하고 적용합니다. 

댓글 없음:

댓글 쓰기