한국어English日本語简体中文繁體中文DeutschไทยTiếng ViệtРусскийPortuguês (Brasil)EspañolBahasa Indonesia

게임 렉 백서 › L7 서버 OS (커널)

OS·커널·드라이버·펌웨어 업데이트 뒤 성능 변화 Performance regression after OS / kernel / driver / firmware update

원인 ID so-os-update · 주 담당 인프라팀·서버 인프라

그림과 실험이 있는 원본 카드로 열기 →

게임 코드는 그대로인데 서버 OS·커널·드라이버·펌웨어를 업데이트한 뒤부터 서버가 느려집니다. 업데이트로 기본값, 스케줄러, CPU 취약점 완화(mitigations), 드라이버 동작이 바뀌기도 합니다.

왜 정기 보안 패치나 새 서버 이미지로 커널·드라이버·펌웨어가 바뀜 → 그러면 기본값·스케줄러가 바뀌거나 새 취약점 완화가 켜져, 같은 일에 CPU 시간이 더 들고 스레드가 CPU를 배정받는 순서가 달라짐 → 화면에서는 잘되던 서버가 업데이트한 날부터 늘 조금씩 느려져 입력 지연, 사람이 몰리면 뚝뚝 끊김·슬로우모션

증상
입력 지연, 뚝뚝 끊김, 슬로우모션
요인
지연, 정체, 지터
누가 겪나
서버 전체
언제
항상, 사람이 몰릴 때
담당
주 담당 인프라팀·서버 인프라
인프라팀 할 일
업데이트는 일부 서버에 먼저 적용하고 틱 시간·지연·CPU 사용률을 이전 버전과 비교한 뒤 넓히기, 게임 패치와 다른 날 배포, 업데이트 전후 커널·드라이버·펌웨어 버전과 주요 sysctl 값 기록, 문제가 생기면 이전 커널로 부팅해 확인, 완화를 끄는 설정(mitigations=off)은 보안 위험을 따져 결정.
수치 감각
커널 버전이 바뀌면 기본 동작도 바뀝니다. 예를 들어 리눅스는 6.6부터 스케줄러를 CFS에서 EEVDF로 옮겨 가기 시작했고, 접속 대기열 상한(somaxconn) 기본값도 5.4부터 128에서 4,096으로 바뀌었습니다. CPU 취약점 완화는 커널에서 프로그램으로 돌아갈 때(시스템 콜을 마칠 때마다), 컨텍스트 스위칭·가상 머신 전환 때 CPU 내부 버퍼를 비우는 등 일을 더합니다. 패킷마다 시스템 콜을 부르는 네트워크 서버일수록 영향을 더 받습니다. 일부 취약점은 완전히 막으려면 SMT(코어 하나를 스레드 두 개처럼 쓰는 기능)를 꺼야 하고, SMT를 끄면 작업에 따라 성능이 크게 떨어집니다. 커널 파라미터 mitigations=off는 이 완화를 모두 꺼 성능을 되찾지만 취약점에 노출됩니다.
그래프에서는
어느 순간부터 계단처럼 올라감 · 서버 틱 시간, CPU 사용률, 같은 부하의 지연
확인할 곳
패키지 관리자의 업데이트 기록과 재부팅 시각, uname -r로 본 커널 버전, ethtool -i로 본 NIC 드라이버 정보를 지연이 오른 시각과 맞춰 봄. 업데이트한 서버와 안 한 서버를 같은 부하에서 mpstat·pidstat로 비교하고, /sys/devices/system/cpu/vulnerabilities/의 완화 상태도 비교
이러면 맞음
지연·CPU 사용률이 업데이트 뒤 재부팅한 시각부터 한 단계 올라 그대로 머물고, 같은 부하에서 업데이트한 서버만 높음. 이전 커널·드라이버로 부팅하면 돌아옴
이러면 아님
업데이트한 서버와 안 한 서버가 같은 부하에서 똑같이 느리면 이 원인이 아님. 같은 날 게임 패치도 배포했고 유저당 패킷 수·크기가 달라졌으면 “패치로 트래픽 패턴이 바뀜”
확인 수단
인프라 도구로 확인(게임 코드 불필요)
더 알아보기
완화 상태는 /sys/devices/system/cpu/vulnerabilities/ 아래 파일에서 확인합니다. 기본값(mitigations=auto)은 SMT를 켜 둔 채 완화하지만 auto,nosmt로 두면 취약한 CPU에서 SMT를 꺼서 커널을 올린 뒤 논리 코어 수가 절반으로 줄 수 있습니다. 게임 패치와 같은 날 OS를 업데이트하면 원인을 가리기 어려우니 따로 배포합니다.

출처

  1. The kernel’s command-line parameters Linux kernel
    mitigations=: off는 CPU 취약점 완화를 모두 꺼 성능을 높이지만 취약점에 노출, 기본 auto는 SMT를 켠 채 완화, auto,nosmt는 필요하면 SMT를 끔
  2. MDS - Microarchitectural Data Sampling Linux kernel
    완화는 커널에서 사용자 공간으로 돌아갈 때와 가상 머신에 들어갈 때 CPU 버퍼를 비움, /sys/devices/system/cpu/vulnerabilities/ 아래 파일로 취약점·완화 상태 확인, 완전히 막으려면 SMT를 꺼야 하는 CPU가 많고 SMT를 끄면 작업에 따라 성능 영향이 큼
  3. Spectre Side Channels Linux kernel
    완화하려고 컨텍스트 스위칭·가상 머신 전환 때 분기 예측 버퍼를 비우고 강한 완화는 모든 프로그램에 오버헤드를 더함
  4. EEVDF Scheduler Linux kernel
    리눅스는 6.6부터 CFS에서 EEVDF 스케줄러로 옮겨 가기 시작
  5. listen(2) — Linux manual page Linux man-pages
    somaxconn 기본값이 리눅스 5.4부터 128에서 4,096으로 바뀜
  6. ethtool(8) — Linux manual page ethtool
    ethtool -i로 네트워크 장치의 드라이버 정보 조회

함께 보면 좋은 원인

같은 층: L7 서버 OS (커널)

같은 증상(입력 지연)의 다른 층 원인

그림과 실험이 있는 원본 카드 보기