네트워크 스케줄러

네트워크 스케줄러(network scheduler)는 패킷 스케줄러(packet scheduler), 큐잉 규율(queueing discipline, qdisc), 또는 큐잉 알고리즘(queueing algorithm)이라고도 불리며, 패킷 교환 통신 네트워크의 노드에 있는 아비터이다. 이는 프로토콜 스택과 네트워크 인터페이스 컨트롤러의 송수신 큐에서 네트워크 패킷의 시퀀스를 관리한다. 여러 운영체제에서 사용할 수 있는 다양한 네트워크 스케줄러가 있으며, 이들은 기존의 많은 스케줄링 알고리즘을 구현한다.

네트워크 스케줄러 로직은 다음으로 전달할 네트워크 패킷을 결정한다. 네트워크 스케줄러는 네트워크 패킷을 전송될 때까지 임시로 저장하는 큐잉 시스템과 연결되어 있다. 시스템은 단일 또는 다수의 큐를 가질 수 있으며, 이 경우 각 큐는 하나의 흐름, 트래픽 분류, 또는 우선순위의 패킷을 보관할 수 있다.

어떤 경우에는 시스템의 제약 내에서 모든 전송을 스케줄링하는 것이 불가능할 수도 있다. 이러한 경우 네트워크 스케줄러는 어떤 트래픽을 전달하고 어떤 것을 삭제할지 결정하는 역할을 한다.

 용어 및 책임 
네트워크 스케줄러는 특정 네트워크 트래픽 제어 이니셔티브를 구현하는 데 책임이 있을 수 있다. 네트워크 트래픽 제어는 네트워크 혼잡, 지연 및 패킷 손실을 줄이는 것을 목표로 하는 모든 조치를 포괄하는 용어이다. 특히, 액티브 큐 관리 (AQM)는 과도한 네트워크 혼잡을 방지하기 위한 더 큰 목표를 달성하기 위해 대기 중인 네트워크 패킷을 선택적으로 삭제하는 것이다. 스케줄러는 삭제할 패킷을 선택해야 한다. 트래픽 셰이핑은 패킷이 버스트로 대기열에 있을 때 전송을 지연시켜 트래픽 흐름의 대역폭 요구 사항을 부드럽게 한다. 스케줄러는 전송되는 패킷의 타이밍을 결정한다. QoS는 서비스 클래스(차등화 서비스) 또는 예약된 연결(통합 서비스)을 기반으로 트래픽에 우선순위를 부여하는 것이다.

 알고리즘 
시간이 지남에 따라 많은 네트워크 큐잉 규율이 개발되었다. 이들 각각은 다양한 송수신 버퍼 내에서 네트워크 패킷의 특정 재정렬 또는 삭제를 제공한다.
큐잉 규율은 특정 클래스의 네트워크 패킷에 대한 지연을 줄이는 것과 같이 다양한 네트워킹 조건을 보상하려는 시도로 일반적으로 사용되며, 주로 QoS 조치의 일부로 사용된다.

클래스 기반 큐잉 규율은 나무의 가지처럼 작동하는 클래스를 생성할 수 있게 한다. 그런 다음 패킷을 각 클래스로 필터링하는 규칙을 설정할 수 있다. 각 클래스는 그 자체로 다른 클래스 기반 또는 클래스리스 큐잉 규율을 할당받을 수 있다. 클래스리스 큐잉 규율은 더 많은 큐잉 규율을 추가하는 것을 허용하지 않는다.

네트워크 트래픽 관리에 적합한 알고리즘의 예시는 다음과 같다.
+큐잉 알고리즘알고리즘약어유형HW 지원일반 셀 속도 알고리즘GCRA무응답 흐름을 위한 CHOose and KillCHOKeClassless제어된 지연CoDelClasslessCommon Applications Kept EnhancedCAKEEarliest TxTime FirstETFClassless선입 선출FIFOClassless공정 큐잉FQClassless공정 큐잉 제어 지연FQ-CoDelClasslessProportional Integral controller Enhanced를 이용한 Flow QueuingFQ-PIEClassless일반화된 무작위 조기 감지GREDClasslessHeavy-Hitter FilterHHFClasslessMultiqueue PriorityMQ-PRIOClasslessMultiqueueMULTIQClassless네트워크 에뮬레이터NETEMClasslessProportional Integral controller-EnhancedPIEClassless무작위 조기 검출REDClassless확률적 공정 블루SFBClasslessStochastic Fairness QueueingSFQClassless토큰 버킷 필터TBFClassless클래스 기반 큐잉CBQClassful크레딧 기반 셰이퍼CBSClassful디피싯 라운드 로빈DRRClassful향상된 전송 선택ETSClassful계층적 공정 서비스 곡선HFSCClassful계층적 토큰 버킷HTBClassfulPriorityPRIOClassfulQuick Fair QueueingQFQClassful시간 인식 우선순위 셰이퍼TAPRIOClassful

위에 제시된 몇 가지는 리눅스 커널 모듈로 구현되었으며 자유롭게 이용 가능하다.

 버퍼블로트 
버퍼블로트는 패킷 교환 네트워크에서 과도한 패킷 버퍼링으로 인해 높은 지연과 패킷 지연 변화가 발생하는 현상이다. 버퍼블로트는 불필요하게 높은 버퍼링 백로그를 피하기 위해 패킷을 전략적으로 삭제하는 네트워크 스케줄러로 해결할 수 있다. 예를 들어 CoDel, FQ-CoDel, 무작위 조기 검출 등이 있다.

 구현 

 리눅스 커널 

리눅스 커널 패킷 스케줄러는 리눅스 커널의 네트워크 스택의 필수적인 부분이며 모든 NIC의 송수신 링 버퍼를 관리한다.

패킷 스케줄러는 tc (트래픽 제어의 약어)라는 유틸리티를 사용하여 구성된다. 기본 큐잉 규율로서 패킷 스케줄러는 pfifo_fast라고 불리는 선입 선출 구현을 사용하지만, systemd는 버전 217부터 기본 큐잉 규율을 fq_codel로 변경했다.

Ifconfig 및 ip 유틸리티를 통해 시스템 관리자는 각 장치에 대해 이더넷 프레임 수 기준으로 크기에 관계없이 버퍼 크기 txqueuelen 및 rxqueuelen을 별도로 구성할 수 있다. 리눅스 커널의 네트워크 스택에는 네트워크 스케줄러가 관리하지 않는 다른 버퍼들이 포함되어 있다.

버클리 패킷 필터 필터는 패킷 스케줄러의 분류기에 첨부될 수 있다. 2015년 리눅스 커널 버전 4.1에서 도입된 eBPF 기능은 고전적인 BPF 프로그래밍 가능한 분류기를 eBPF로 확장한다. 이들은 LLVM eBPF 백엔드를 사용하여 컴파일하고 tc 유틸리티를 사용하여 실행 중인 커널에 로드할 수 있다.

 BSD 및 OpenBSD 
ALTQ는 BSD를 위한 네트워크 스케줄러 구현이다. OpenBSD 버전 5.5부터 ALTQ는 HFSC 스케줄러로 대체되었다.

 셀 프리 네트워크 스케줄링 
통신 네트워크의 스케줄러는 패킷 우선순위, 타이밍, 자원 분배를 포함한 자원 할당을 관리한다. 고급 구현은 현대 네트워크 구성의 복잡성을 해결하기 위해 인공지능을 increasingly 활용한다. 예를 들어, 셀 프리 네트워크에서는 다수의 무선 장치(RU)와 사용자 장비(UE) 간의 상호작용을 효율적으로 처리하기 위해 지도 신경망(NN) 기반 스케줄러가 도입되었다. 이 접근 방식은 계산 복잡성을 줄이면서 지연 시간, 처리량 및 자원 할당을 최적화하여 5G 이후 네트워크를 위한 유망한 솔루션이 되고 있다.

 같이 보기 
 대기행렬이론
 통계적 시분할 다중화
 서비스 유형

 내용주 

 각주 

분류:네트워크 성능
분류:리눅스 커널 특징
분류:네트워크 이론
분류:네트워크 스케줄링 알고리즘