close
본문으로 이동

네트워크 스케줄러

위키백과, 우리 모두의 백과사전.
Image
선입 선출 (먼저 들어온 것이 먼저 나가는) 데이터 구조에서 대기 중인 패킷.

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

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

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

용어 및 책임

[편집]

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

알고리즘

[편집]

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

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

네트워크 트래픽 관리에 적합한 알고리즘의 예시는 다음과 같다.

큐잉 알고리즘
알고리즘 약어 유형 HW 지원
일반 셀 속도 알고리즘 GCRA
무응답 흐름을 위한 CHOose and Kill CHOKe Classless
제어된 지연 CoDel Classless
Common Applications Kept Enhanced[6] CAKE
Earliest TxTime First ETF Classless
선입 선출 FIFO Classless
공정 큐잉 FQ Classless
공정 큐잉 제어 지연 FQ-CoDel Classless
Proportional Integral controller Enhanced를 이용한 Flow Queuing FQ-PIE Classless
일반화된 무작위 조기 감지 GRED Classless
Heavy-Hitter Filter[7] HHF Classless
Multiqueue Priority MQ-PRIO Classless
Multiqueue MULTIQ Classless
네트워크 에뮬레이터[8] NETEM Classless
Proportional Integral controller-Enhanced[9] PIE Classless
무작위 조기 검출 RED Classless
확률적 공정 블루 SFB Classless
Stochastic Fairness Queueing SFQ Classless
토큰 버킷 필터 TBF Classless
클래스 기반 큐잉 CBQ Classful
크레딧 기반 셰이퍼 CBS Classful
디피싯 라운드 로빈[10] DRR Classful
향상된 전송 선택 ETS Classful
계층적 공정 서비스 곡선 HFSC Classful
계층적 토큰 버킷[11] HTB Classful
Priority PRIO Classful
Quick Fair Queueing[12] QFQ Classful
시간 인식 우선순위 셰이퍼 TAPRIO Classful

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

버퍼블로트

[편집]

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

구현

[편집]

리눅스 커널

[편집]
Image
리눅스 커널의 패킷 스케줄러는 넷필터, nftables, 버클리 패킷 필터와 함께 네트워크 스택의 일부이다.

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

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

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

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

BSD 및 OpenBSD

[편집]

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

셀 프리 네트워크 스케줄링

[편집]

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

같이 보기

[편집]

내용주

[편집]
  1. 모든 버퍼의 전체 크기는 버퍼블로트 프로젝트의 비판 지점이었으며, 이는 주로 OpenWrt에서 테스트된 CoDel을 부분적인 해결책으로 제공했다.

각주

[편집]
  1. Traffic Control HOWTO: Classless Queuing Disciplines (qdiscs). tldp.org. 2014년 2월 22일에 원본 문서에서 보존된 문서. 2013년 11월 24일에 확인함.
  2. Traffic Control HOWTO: Components of Linux Traffic Control. tldp.org. 2014년 2월 18일에 원본 문서에서 보존된 문서. 2013년 11월 24일에 확인함.
  3. Traffic Control HOWTO: Traditional Elements of Traffic Control. tldp.org. 2013년 5월 27일에 원본 문서에서 보존된 문서. 2013년 11월 24일에 확인함.
  4. Queuing Disciplines: Order of Packet Transmission and Dropping (PDF). tau.ac.il. 2006년 10월 25일. 2016년 3월 4일에 원본 문서 (PDF)에서 보존된 문서. 2014년 3월 18일에 확인함.
  5. Advanced traffic control - ArchWiki. wiki.archlinux.org. 2023년 9월 22일에 원본 문서에서 보존된 문서. 2023년 9월 11일에 확인함.
  6. Let them run CAKE. LWN.net. 2024년 11월 12일에 원본 문서에서 보존된 문서. 2019년 9월 3일에 확인함.
  7. Heavy-Hitter Filter qdisc. kernel.org. 2017년 2월 22일에 원본 문서에서 보존된 문서. 2016년 7월 25일에 확인함.
  8. Network emulator Linux kernel network scheduler module. kernel.org. 2017년 2월 22일에 원본 문서에서 보존된 문서. 2013년 9월 7일에 확인함.
  9. Proportional Integral controller Enhanced (PIE). kernel.org. 2017년 2월 22일에 원본 문서에서 보존된 문서. 2016년 7월 25일에 확인함.
  10. DRR Linux kernel network scheduler module. kernel.org. 2017년 2월 23일에 원본 문서에서 보존된 문서. 2013년 9월 7일에 확인함.
  11. HTB Linux kernel network scheduler module. kernel.org. 2013년 9월 7일에 확인함.
  12. QFQ Linux kernel network scheduler module. kernel.org. 2017년 2월 23일에 원본 문서에서 보존된 문서. 2013년 9월 7일에 확인함.
  13. The Linux kernel network scheduler. kernel.org. 2012년 12월 26일. 2013년 9월 7일에 확인함.
  14. tc(8) - Linux manual page. man7.org. 2023년 9월 7일에 원본 문서에서 보존된 문서. 2023년 9월 11일에 확인함.
  15. Linux Advanced Routing and Traffic Control HOWTO, Section 9.2.1. pfifo_fast. lartc.org. 2012년 5월 19일. 2014년 9월 21일에 원본 문서에서 보존된 문서. 2014년 9월 19일에 확인함.
  16. systemd System and Service Manager: NEWS file. freedesktop.org. 2015년 5월 22일. 2014년 12월 22일에 원본 문서에서 보존된 문서. 2015년 6월 9일에 확인함.
  17. Linux kernel 4.1, Section 11. Networking. kernelnewbies.org. 2015년 6월 21일. 2015년 10월 16일에 원본 문서에서 보존된 문서. 2016년 4월 19일에 확인함.
  18. BPF and XDP Reference Guide. Cilium documentation web site. 2018년 4월 24일에 원본 문서에서 보존된 문서. 2018년 8월 21일에 확인함.
  19. Huleihel, Yara; Maman, Gil; Hadad, Zion; Shasha, Eli; Permuter, Haim H. (2025). Data-driven cell-free scheduler. Ad Hoc Networks 169 (Elsevier). doi:10.1016/j.adhoc.2025.103738.