19P by xguru 2일전 | favorite | 댓글 2개
  • BPF(eBPF)의 관찰 기능을 활용해 시스템 성능을 항상 자동으로 튜닝할 수 있도록 설계된 경량화된 도구

해결하고자 하는 문제점

  • 너무 많은 튜닝 옵션: 리눅스 커널에는 1600개 이상의 튜닝 가능한 sysctl 매개변수가 존재. 다양한 환경에 맞는 설정을 찾는 것은 복잡하고 어려움
  • 관리자 개입의 감소: 현대 클라우드 시스템에서는 수동적인 튜닝보다는 자동화된 관리가 필요. 대부분 시스템은 초기 설정 이후 관리자의 개입이 거의 없음
  • 정적인 설정의 한계: 시스템 환경은 계속 변동되기 때문에, 고정된 값으로 튜닝하는 것은 비효율적일 수 있음

핵심 설계 원칙

  • 최소 오버헤드: 고빈도 이벤트 추적을 피하고, 꼭 필요한 경우에만 관찰 기능 사용
  • 정책 설명 명확화: syslog에 "무엇"이 "왜" 변경되었는지 기록
  • 관리자 우선: 관리자가 값을 설정하면 자동 튜닝 기능 비활성화
  • 무설정 원칙: 별도의 설정 없이 자동으로 튜닝. 가능한 한 매직 넘버를 피함
  • 동적 조절: TCP 메모리 사용량이 증가할 경우 버퍼 크기를 줄여 시스템 균형을 맞춤

주요 개념

  • 튜너(tuner): 각 튜너는 BPF 프로그램에서 발생한 이벤트를 처리하며 관련된 튜닝 가능한 항목을 관리
  • 전략(strategy): 튜너는 여러 가지 전략을 가질 수 있으며, 각 전략은 평가 함수를 통해 효과적인 전략을 선택
  • 이벤트(event): 튜너 ID, 시나리오, 네트워크 네임스페이스 정보 등이 포함되며, 튜너는 이 정보를 바탕으로 적절한 조치를 수행

아키텍처

  • bpftune은 데몬으로, 여러 .so 형식의 플러그인 튜너를 로드하여 관리.
  • 각 튜너는 고유의 ID를 가지며, BPF와 사용자 공간에서 이벤트를 처리.
  • BPF 구성 요소는 bpftune.bpf.h를 포함하며, 공유 변수와 맵 정의를 사용.

지원 튜너 목록

  • TCP connection tuner: 혼잡 제어 알고리즘 자동 튜닝
  • neighbour table tuner: 이웃 테이블 크기 자동 확장
  • route table tuner: 라우트 테이블 크기 자동 확장
  • sysctl tuner: 튜닝된 sysctl 값이 수동 설정과 충돌할 경우 튜너 비활성화
  • TCP buffer tuner: TCP 버퍼 크기 자동 조정
  • net buffer tuner: 코어 네트워크 관련 튜닝 자동 조정
  • netns tuner: 네트워크 네임스페이스 추가 및 제거 감지

Hacker News 의견

  • 시스템 문제를 진단하고 해결하는 것이 더 어려워질 수 있다는 우려가 있음
  • "피드백 루프"라는 개념이 문제 발생 가능성을 설명하는 데 중요함
    • Linux 커널, BPF, 프로그램 자체의 문제가 아니라 작동 방식 때문임
    • 위험이 없을 수도 있고, 제어 장치가 있을 수도 있으며, 문제가 발생해도 안정적인 상태로 수렴할 수 있음
  • 제어 이론이 소프트웨어 엔지니어링에서 다소 과소 적용되고 있음
  • 이 도구를 사용하는 사람들의 의견을 듣고 싶음
    • 효과적인지, 설정 시간이 가치가 있는지 궁금함
  • bpftune은 설정이 필요 없는 도구로 설계되었음
    • 많은 설정을 배우지 않아도 되어 자동화된 지원을 환영함
  • CachyOS에서 바로 사용할 수 있음
    • 설치 후 CachyOS Hello -> Apps/Tweaks 경로로 접근 가능함
  • 공유 k8s 클러스터와 같은 다중 테넌트 환경에서의 효과가 궁금함
    • 각 애플리케이션이 다른 목적을 가지고 있으며 시간이 지남에 따라 노드 간 이동함
    • 그러나 대부분의 애플리케이션 간에 유사점이 있을 가능성이 높음
  • TCP 버퍼 크기 조정이 가치가 있는지 궁금함
  • 매개변수를 최적의 값으로 조정하는 것이 쉬웠다면 커널이 처음부터 그렇게 했어야 하지 않을까 하는 의문이 있음
  • 단순한 패킷 필터링에서 추적 및 모니터링으로 발전한 것이 훌륭함
    • 대부분의 사람들이 알아야 할 훌륭한 도구임
    • 몇 년 동안 사용해 왔음