네트워크 스케줄러

선입 선출 (먼저 들어온 것이 먼저 나가는) 데이터 구조에서 대기 중인 패킷. **네트워크 스케줄러**(network scheduler)는 **패킷 스케줄러**(packet scheduler), **큐잉 규율**(queueing discipline, **qdisc**), 또는 **큐잉 알고리즘**(queueing algorithm)이라고도 불리며, 패킷 교환 통신 네트워크의 노드에 있는 아비터이다. 이는 프로토콜 스택과 네트워크 인터페이스 컨트롤러의 송수신 큐에서 네트워크 패킷의 시퀀스를 관리한다. 여러 운영체제에서 사용할 수 있는 다양한 네트워크 스케줄러가 있으며, 이들은 기존의 많은 스케줄링 알고리즘을 구현한다. 네트워크 스케줄러 로직은 다음으로 전달할 네트워크 패킷을 결정한다. 네트워크 스케줄러는 네트워크 패킷을 전송될 때까지 임시로 저장하는 큐잉 시스템과 연결되어 있다. 시스템은 단일 또는 다수의 큐를 가질 수 있으며, 이 경우 각 큐는 하나의 흐름, 트래픽 분류, 또는 우선순위의 패킷을 보관할 수 있다. 어떤 경우에는 시스템의 제약 내에서 모든 전송을 스케줄링하는 것이 불가능할 수도 있다. 이러한 경우 네트워크 스케줄러는 어떤 트래픽을 전달하고 어떤 것을 삭제할지 결정하는 역할을 한다.
# 용어 및 책임
네트워크 스케줄러는 특정 네트워크 트래픽 제어 이니셔티브를 구현하는 데 책임이 있을 수 있다. 네트워크 트래픽 제어는 네트워크 혼잡, 지연 및 패킷 손실을 줄이는 것을 목표로 하는 모든 조치를 포괄하는 용어이다. 특히, 액티브 큐 관리 (AQM)는 과도한 네트워크 혼잡을 방지하기 위한 더 큰 목표를 달성하기 위해 대기 중인 네트워크 패킷을 선택적으로 삭제하는 것이다. 스케줄러는 삭제할 패킷을 선택해야 한다. 트래픽 셰이핑은 패킷이 버스트로 대기열에 있을 때 전송을 지연시켜 트래픽 흐름의 대역폭 요구 사항을 부드럽게 한다. 스케줄러는 전송되는 패킷의 타이밍을 결정한다. QoS는 서비스 클래스(차등화 서비스) 또는 예약된 연결(통합 서비스)을 기반으로 트래픽에 우선순위를 부여하는 것이다.
# 알고리즘
시간이 지남에 따라 많은 네트워크 큐잉 규율이 개발되었다. 이들 각각은 다양한 송수신 버퍼 내에서 네트워크 패킷의 특정 재정렬 또는 삭제를 제공한다.url-status = live 큐잉 규율은 특정 클래스의 네트워크 패킷에 대한 지연을 줄이는 것과 같이 다양한 네트워킹 조건을 보상하려는 시도로 일반적으로 사용되며, 주로 QoS 조치의 일부로 사용된다.url-status = liveurl-status = liveurl-status = live 클래스 기반 큐잉 규율은 나무의 가지처럼 작동하는 클래스를 생성할 수 있게 한다. 그런 다음 패킷을 각 클래스로 필터링하는 규칙을 설정할 수 있다. 각 클래스는 그 자체로 다른 클래스 기반 또는 클래스리스 큐잉 규율을 할당받을 수 있다. 클래스리스 큐잉 규율은 더 많은 큐잉 규율을 추가하는 것을 허용하지 않는다.url-status=live 네트워크 트래픽 관리에 적합한 알고리즘의 예시는 다음과 같다. {| class="wikitable sortable" |+큐잉 알고리즘 !알고리즘 !약어 !유형 !HW 지원 |- |일반 셀 속도 알고리즘 |GCRA | | |- |무응답 흐름을 위한 CHOose and Kill |CHOKe |Classless | |- |제어된 지연 |CoDel |Classless | |- |Common Applications Kept Enhancedurl-status=live |CAKE | | |- |Earliest TxTime First |ETF |Classless |Yes |- |선입 선출 |FIFO |Classless | |- |공정 큐잉 |FQ |Classless | |- |공정 큐잉 제어 지연 |FQ-CoDel |Classless | |- |Proportional Integral controller Enhanced를 이용한 Flow Queuing |FQ-PIE |Classless | |- |일반화된 무작위 조기 감지 |GRED |Classless | |- |Heavy-Hitter Filterurl-status=live |HHF |Classless | |- |Multiqueue Priority |MQ-PRIO |Classless |Yes |- |Multiqueue |MULTIQ |Classless |Yes |- |네트워크 에뮬레이터url-status=live |NETEM |Classless | |- |Proportional Integral controller-Enhancedurl-status=live |PIE |Classless | |- |무작위 조기 검출 |RED |Classless | |- |확률적 공정 블루 |SFB |Classless | |- |Stochastic Fairness Queueing |SFQ |Classless | |- |토큰 버킷 필터 |TBF |Classless | |- |클래스 기반 큐잉 |CBQ |Classful | |- |크레딧 기반 셰이퍼 |CBS |Classful |Yes |- |디피싯 라운드 로빈url-status=live |DRR |Classful | |- |향상된 전송 선택 |ETS |Classful | |- |계층적 공정 서비스 곡선 |HFSC |Classful | |- |계층적 토큰 버킷publisher=kernel.org |HTB |Classful | |- |Priority |PRIO |Classful | |- |Quick Fair Queueingurl-status=live |QFQ |Classful | |- |시간 인식 우선순위 셰이퍼 |TAPRIO |Classful |Yes |} 위에 제시된 몇 가지는 리눅스 커널 모듈로 구현되었으며access-date=2013-09-07url-status=live 자유롭게 이용 가능하다.
# 버퍼블로트
버퍼블로트는 패킷 교환 네트워크에서 과도한 패킷 버퍼링으로 인해 높은 지연과 패킷 지연 변화가 발생하는 현상이다. 버퍼블로트는 불필요하게 높은 버퍼링 백로그를 피하기 위해 패킷을 전략적으로 삭제하는 네트워크 스케줄러로 해결할 수 있다. 예를 들어 CoDel, FQ-CoDel, 무작위 조기 검출 등이 있다.
# 구현

## 리눅스 커널
리눅스 커널의 패킷 스케줄러는 넷필터, [[nftables, 버클리 패킷 필터와 함께 네트워크 스택의 일부이다.]] 리눅스 커널 패킷 스케줄러는 리눅스 커널의 네트워크 스택의 필수적인 부분이며 모든 NIC의 송수신 링 버퍼를 관리한다. 패킷 스케줄러는 `tc` (트래픽 제어의 약어)라는 유틸리티를 사용하여 구성된다. 기본 큐잉 규율로서 패킷 스케줄러는 pfifo_fast라고 불리는 선입 선출 구현을 사용하지만,url-status = live systemd는 버전 217부터 기본 큐잉 규율을 `fq_codel`로 변경했다.url-status = live `Ifconfig` 및 `ip` 유틸리티를 통해 시스템 관리자는 각 장치에 대해 이더넷 프레임 수 기준으로 크기에 관계없이 버퍼 크기 `txqueuelen` 및 `rxqueuelen`을 별도로 구성할 수 있다. 리눅스 커널의 네트워크 스택에는 네트워크 스케줄러가 관리하지 않는 다른 버퍼들이 포함되어 있다.모든 버퍼의 전체 크기는 버퍼블로트 프로젝트의 비판 지점이었으며, 이는 주로 OpenWrt에서 테스트된 CoDel을 부분적인 해결책으로 제공했다. 버클리 패킷 필터 필터는 패킷 스케줄러의 분류기에 첨부될 수 있다. 2015년 리눅스 커널 버전 4.1에서 도입된 eBPF 기능은 고전적인 BPF 프로그래밍 가능한 분류기를 eBPF로 확장한다.url-status=live 이들은 LLVM eBPF 백엔드를 사용하여 컴파일하고 `tc` 유틸리티를 사용하여 실행 중인 커널에 로드할 수 있다.url-status=live
## BSD 및 OpenBSD
ALTQ는 BSD를 위한 네트워크 스케줄러 구현이다. OpenBSD 버전 5.5부터 ALTQ는 HFSC 스케줄러로 대체되었다.
## 셀 프리 네트워크 스케줄링
통신 네트워크의 스케줄러는 패킷 우선순위, 타이밍, 자원 분배를 포함한 자원 할당을 관리한다. 고급 구현은 현대 네트워크 구성의 복잡성을 해결하기 위해 인공지능을 increasingly 활용한다. 예를 들어, 셀 프리 네트워크에서는 다수의 무선 장치(RU)와 사용자 장비(UE) 간의 상호작용을 효율적으로 처리하기 위해 지도 신경망(NN) 기반 스케줄러가 도입되었다. 이 접근 방식은 계산 복잡성을 줄이면서 지연 시간, 처리량 및 자원 할당을 최적화하여 5G 이후 네트워크를 위한 유망한 솔루션이 되고 있다.doi = 10.1016/j.adhoc.2025.103738
# 내용주
Notelist