# bpftune - BPF를 사용한 리눅스 자동 튜닝 도구

> Clean Markdown view of GeekNews topic #17842. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=17842](https://news.hada.io/topic?id=17842)
- GeekNews Markdown: [https://news.hada.io/topic/17842.md](https://news.hada.io/topic/17842.md)
- Type: news
- Author: [xguru](https://news.hada.io/@xguru)
- Published: 2024-11-19T10:36:02+09:00
- Updated: 2024-11-19T10:36:02+09:00
- Original source: [github.com/oracle](https://github.com/oracle/bpftune)
- Points: 20
- Comments: 2

## Summary

bpftune은 BPF(eBPF)의 관찰 기능을 활용하여 리눅스 시스템의 성능을 자동으로 튜닝하는 경량화된 도구로, 수많은 튜닝 옵션과 관리자 개입의 필요성을 줄이고 동적 환경 변화에 대응할 수 있도록 설계되었습니다. 이 도구는 최소 오버헤드, 정책 설명 명확화, 관리자 우선, 무설정 원칙, 동적 조절 등의 핵심 설계 원칙을 따르며, 다양한 튜너와 전략을 통해 시스템의 다양한 측면을 자동으로 조정합니다. 주요 지원 튜너로는 TCP 연결, 이웃 테이블, 라우트 테이블, sysctl 값, TCP 버퍼, 네트워크 버퍼, 네트워크 네임스페이스 등을 자동으로 조정하는 튜너들이 포함됩니다.

## Topic Body

- 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**: 네트워크 네임스페이스 추가 및 제거 감지

## Comments



### Comment 31478

- Author: xguru
- Created: 2024-11-19T10:38:01+09:00
- Points: 1

- [eBPF rethinking the Linux Kernel](https://news.hada.io/topic?id=1958)  
- [BPF : 새로운 타입의 소프트웨어](https://news.hada.io/topic?id=1011)  
- [bpf를 이용한 성능분석](https://news.hada.io/topic?id=88)  
- [eBPF 공식 사이트 오픈](https://news.hada.io/topic?id=2661)  
- [eBPF Summit Recap](https://news.hada.io/topic?id=3117)  
- [eBPF on Windows](https://news.hada.io/topic?id=4240)

### Comment 31476

- Author: xguru
- Created: 2024-11-19T10:37:02+09:00
- Points: 1

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