OpenBSD: PF 큐가 4 Gbps 장벽을 돌파
Source: Hacker News
소개
OpenBSD의 PF 패킷 필터는 오래전부터 pf.conf(5)의 queue 규칙을 통해 HFSC 트래픽 셰이핑을 지원해 왔습니다. 그러나 HFSC 서비스‑곡선 구조(struct hfsc_sc)에 내장된 32‑비트 제한 때문에 대역폭 값이 약 4.29 Gbps( u_int의 최대값)로 제한되었습니다.
10 G, 25 G, 100 G 네트워크 인터페이스가 보편화되고 SMP 및 고속 드라이버를 위한 커널 작업이 진행됨에 따라, 이 제한은 실질적인 장애물이 되었습니다. 큐에 bandwidth 10G를 설정하면 값이 조용히 래핑되어 잘못되고 예측할 수 없는 스케줄링 동작을 초래했습니다.
패치
새로운 패치는 커널의 HFSC 스케줄러에서 대역폭 필드를 32‑비트에서 64‑비트 정수로 확장하여 병목 현상을 완전히 제거합니다. 동일한 변경으로 pftop(1)에서 4 Gbps를 초과하는 대역폭 값이 잘못 표시되던 버그도 수정되었습니다.
주요 변경 사항
- HFSC 스케줄러의 대역폭 필드가 이제 64‑비트.
pftop이 고속 대역폭 값을 올바르게 표시.- 4 Gbps 이하 값을 사용하는 기존 설정에는 영향 없음.
실용적인 영향
PF 큐 대역폭 설정이 현대 고속 인터페이스에서도 올바르게 동작합니다. 익숙한 구문은 그대로 유지됩니다:
queue rootq on em0 bandwidth 10G
queue defq parent rootq bandwidth 8G default
최대 999 G까지 지원되며, 오늘날 및 미래의 인터페이스에 충분합니다. 4 G 이하 값을 사용하는 기존 설정은 수정 없이 그대로 작동합니다.
사용 예시
# 인터페이스 em0에 10 Gbps 대역폭을 가진 루트 큐 정의
queue rootq on em0 bandwidth 10G
# 8 Gbps 대역폭을 가진 기본 자식 큐 정의
queue defq parent rootq bandwidth 8G default
참고 자료
- OpenBSD 프로젝트: https://www.openbsd.org/
- PF 매뉴얼 페이지: https://man.openbsd.org/pf
- PF 큐잉 문서: https://man.openbsd.org/pf.conf#QUEUEING
pftop소스: https://cvsweb.openbsd.org/ports/sysutils/pftop- 패치 토론: https://marc.info/?l=openbsd-tech&m=177375870004342&w=2
- 패치 결론(커밋 준비 완료): https://marc.info/?l=openbsd-tech&m=177379810031898&w=2
- OpenBSD 재단 기부: https://www.openbsdfoundation.org/donations.html