SCHED_DEADLINE
SCHED_DEADLINESCHED_DEADLINE
CPU스케줄러는 리눅스 커널 내에서 버전 3.14,[1][2]이후 Earliest 마감 1(프랑스 전력 공사), 콩스탕 대역 폭 Server(CBS)[3]의 연산 프로그램을 바탕으로 자원 예약 지원:각각의 작업 그런 정책 아래에서 예정된 예산 Q(aka 런타임)을 사용하여 기간 P는 커널 있기 위해에 해당하는 관련된 사용할 수 있습니다.Q시간 있어단위는 모든 프로세서에서 P시간 단위마다 필요합니다.이렇게 하면SCHED_DEADLINE
특히 멀티미디어나 산업용 제어와 같은 실시간 애플리케이션에 적합하며, 여기서 P는 태스크의 후속 활성화 사이의 최소 시간에 대응하고 Q는 태스크의 각 활성화에 필요한 최악의 실행 시간에 대응합니다.
Linux 커널의 CPU 스케줄러 배경
Linux 커널에는 서로 다른 스케줄러 [4]클래스가 포함되어 있습니다.기본적으로는 커널 2.[5]6.23 버전에서 도입된 Complete Fair Scheduler(CFS)라고 하는 스케줄러 메커니즘을 사용합니다.내부적으로 이 기본 스케줄러 클래스는 다음과 같이 알려져 있습니다.SCHED_NORMAL
커널에는 2개의 POSIX[6] 준거 실시간스케줄링 클래스도 포함되어 있습니다SCHED_FIFO
(선입선출) 및SCHED_RR
둘 다 [4]디폴트클래스보다 우선됩니다.그SCHED_DEADLINE
스케줄링 클래스는 [7][8]2014년 3월 30일에 출시된 Linux 커널 메인라인 버전 3.14에서 Linux 스케줄러에 추가되었으며 다른 모든 스케줄링 클래스보다 우선합니다.
디폴트 스케줄러인 CFS는 다양한 사용 사례에 대처하는 데 매우 적합합니다.예를 들어 장시간 실행되는 코드 컴파일이나 숫자 크런치 등의 배치 워크로드와 데스크톱 애플리케이션, 멀티미디어 등의 인터랙티브애플리케이션을 혼재시키는 경우 CFS는 인터랙티브한 태스크의 우선순위를 동적으로 해제합니다.단, 어플리케이션에 예측 가능하고 정확한 스케줄이 필요한 경우 보통 다른 실시간스케줄러(SCHED_R 또는 SCHED_FIFO) 중 하나로 재발해야 합니다.SCHED_NORMAL 클래스의 태스크보다 먼저 태스크가 스케줄 됩니다.
작동
같은 시스템에서 실시간 워크로드와 이기종 타이밍 요건을 혼재시키는 경우,SCHED_RR
그리고.SCHED_FIFO
이는 태스크 우선순위에 기초하기 때문에 우선순위가 높은 태스크가 예상보다 오래 실행되면 우선순위가 낮은 태스크가 제어되지 않은 방법으로 임의로 지연될 수 있습니다.
와 함께SCHED_DEADLINE
대신 태스크는 태스크별(및 각 기간이 시작된 후 태스크별 마감일 내에)에 필요한 태스크별 런타임에 대해 독립적으로 타이밍 요건을 선언하고 커널은 스케줄러에서 이를 받아들입니다.이제 할당된 예산보다 오래 작업을 실행하려고 하면 커널은 해당 작업을 일시 중단하고 다음 활성화 기간으로 실행을 연기합니다.스케줄러의 이 비작업 절약 속성을 통해 작업 간에 시간적 분리를 제공할 수 있습니다.그 결과, 싱글 프로세서 시스템 또는 분할된 멀티 프로세서 시스템(사용 가능한 CPU 간에 태스크가 분할되어 각 태스크가 특정 CPU에 고정되어 이행할 수 없음)에서 모두 받아들여지는 중요한 속성이 생깁니다.SCHED_DEADLINE
태스크 자체가 차단되어 실행할 필요가 없는 경우를 제외하고 태스크는 기간 동안 모든 실행 시간대에 예산과 동일한 전체 시간으로 예약됩니다.또한 CBS 알고리즘의 독특한 특성은 태스크가 차단 및 실행을 재개하는 경우에도 일시적인 분리를 보장한다는 것입니다.이는 태스크가 너무 늦게 일어날 때마다 태스크 스케줄링 기한을 전체 기간으로 리셋함으로써 이루어집니다.멀티프로세서 상에서 이행할 수 있는 태스크의 일반적인 경우:SCHED_DEADLINE
는 글로벌 EDF를 구현합니다.[9]설명에 따라 글로벌 EDF에 대한 일반 지연이 적용됩니다.
스케줄러가 어떻게 기능하는지를 보다 잘 이해하기 위해서, 다음의 순서를 검토해 주세요.SCHED_DEADLINE
기간이 다를 수 있으며 마감일이 기간과 동일해야 합니다.각 태스크에 대해 커널은 설정된 런타임 및 (상대적인) 기간 외에 현재 런타임 및 현재(절대) 기한을 추적합니다.작업은 글로벌 EDF를 사용하여 현재 마감일에 따라 CPU로 스케줄링됩니다.태스크 예약 정책이 처음에 다음과 같이 설정된 경우SCHED_DEADLINE
현재 기한은 현재 시각에 설정된 기간을 더한 값으로 초기화되며 현재 예산은 설정된 예산과 동일하게 설정됩니다.작업이 CPU에서 실행되도록 스케줄링될 때마다 커널은 현재 사용 가능한 예산만큼 작업을 실행하도록 허용하고 작업이 취소될 때마다 현재 예산은 실행된 시간만큼 줄어듭니다.현재 예산이 0이 되면 다음 활성화 기간까지 작업이 일시 중지(슬롯)되며, 그 후 현재 예산이 설정된 값으로 다시 채워지고 마감일이 작업 기간과 동일한 값만큼 앞당겨집니다.
이것은 일시적인 분리를 보장하기에 충분하지 않다.태스크가 활성화되고 나서 바로 중단되었다가 현재 마감에 가까워지거나 심지어 그 이후에 깨어난 경우, 현재 마감일이 만료될 때가 가까워지거나 심지어 과거에도 마찬가지인 구성된 예산의 거의 모든 설정된 예산에서 깨어날 수 있습니다.이 경우 해당 작업은 다른 작업보다 먼저 스케줄이 잡혀 단일 프로세서 시스템에서는 예산만큼 다른 마감 작업의 실행을 지연시킬 수 있습니다.이 문제를 피하기 위해SCHED_DEADLINE
는 CBS 알고리즘에 정의된 웨이크업스케줄 규칙을 채택합니다.태스크가 실행 중일 때 태스크가 차단된 후 비교적 짧은 시간이 경과된 경우 태스크에 대한 이전 현재 기한 및 예산은 변경되지 않습니다.단, 과도한 시간이 경과한 경우 커널은 현재 기한을 현재 시각에 예약 기간을 더한 값으로 리셋하고 현재 예산을 할당된 예약 예산으로 리셋합니다.예시의 상세한 것에 대하여는,[9] 을 참조해 주세요.
멀티프로세서 또는 멀티코어 시스템의 경우SCHED_DEADLINE
는 글로벌 EDF를 구현하기 때문에 태스크는 사용 가능한 CPU 간에 이행할 수 있습니다.이 경우 설정된 예산은 각 기간 동안 CPU에서 작업을 실행할 수 있는 총 누적 시간입니다.그러나 스케줄러는 태스크의 어피니티 마스크도 존중하기 때문에 분할 스케줄링 시나리오, 그룹 내 태스크 분할 시나리오, CPU 분할 시나리오, 각 태스크 분할을 특정 CPU 파티션에 고정함으로써 얻을 수 있는 클러스터화된 스케줄링 시나리오를 쉽게 작성할 수 있습니다.
자세한 내용은SCHED_DEADLINE
커널 소스 [9]트리 내의 매뉴얼을 참조해 주십시오.CBS에 대한 자세한 내용과 CBS가 시간적 분리를 가능하게 하는 방법에 대한 자세한 내용은 원본 CBS [3]문서를 참조하거나 이 기사의 CBS에 대한 섹션이 lwn.net에 게재되었습니다.
역사
Early Deadline First(EDF) 알고리즘에 기초한 Linux 스케줄링 클래스의 초기 아이디어는 Scuola Superiore Sant'Anna와[11] 그 스핀오프 회사인 Evidence Srl의 [12]Real-Time Systems(ReTiS) Lab의 작은 맥락에서 탄생했습니다.그런 다음, Providence Srl은 FP7 프레임워크 프로그램을 통해 유럽위원회가 지원하는 ACTURS [13][14]프로젝트의 자금을 패치 첫 번째 버전의 자금 조달과 개발을 촉진하기 위해 활용했다.오리지널 버전은 Michael Trimarchi와 Fabio Checoni의 산발적인 도움을 받아 Dario Faggioli(최초 3가지 버전 개발을 위해 Evidence Srl이 계약)와 Juri Lelli(4번째 버전 이후)에 의해 개발되었습니다.Johan Eker는 ACTURS 내에서의 코디네이션과 에릭슨으로부터의 서포트를 담당하고 있습니다.Juri Lelli, Luca Aveni 및 Claudio Scordino는 재활용(GRUB) 및[16] 주파수 스케일링(GRUB-PA[17]) 기능의 개발에 협력하고 있습니다.
패치는 Linux 커널 메일링 리스트(LKML)를 통해 커널 커뮤니티에 정기적으로 릴리스되고 있습니다.각 릴리스는 코드를 최신 버전의 커널에 맞추고 이전 제출 시 받은 코멘트를 고려했습니다.스케줄러의 인기가 높아지면서, 더 많은 커널 개발자들이 그들의 피드백과 그들의 공헌을 제공하기 시작했습니다.
이 프로젝트는 원래 이름이SCHED_EDF
2009년에 [18]Linux 커널 커뮤니티에 발표되었습니다.이 이름은 몇 [19]주 후 Real-Time Linux Workshop에도 소개되었습니다.Linux 커널 커뮤니티의 [20]요청에 따라 이름이 SCHED_DEADLINE으로 변경되었습니다.
최근 몇 년 동안 다음과 같은 버전이 출시되었습니다.
- 스케줄러의 첫 번째 버전은 2009년9월 22일에 제출되었습니다.이름은 다음과 같습니다.
SCHED_EDF
를 클릭합니다.[18] - 이름이 변경된 후 스케줄러의 첫 번째 버전
SCHED_DEADLINE
2009년 [21]10월 16일에 LKML에 제출되었습니다. - 스케줄러의 두 번째 버전은 2010년 2월 28일 LKML에 제출되었으며 Defline Inheritance 프로토콜의 [22]첫 번째 구현이 있었습니다.
- 스케줄러의 세 번째 버전은 2010년 10월 29일에 LKML에 제출되었으며, 동적 태스크 이행을 [23]통한 글로벌/클러스터형 멀티프로세서 스케줄링이 지원되게 되었습니다.
- 스케줄러의 네 번째 버전은 2012년 4월 6일에 LKML에 제출되었으며 동적 작업 마이그레이션 및 PREEME_RT와의 [24]통합을 위한 rq 선택 처리가 향상되었습니다.
- 스케줄러의 5번째 버전은 2012년 [25]5월 23일에 LKML에 제출되었습니다.
- 스케줄러의 6번째 버전은 2012년 [26]10월 24일에 LKML에 제출되었습니다.
- 스케줄러의 7번째 버전은 2013년 [27]2월 11일에 LKML에 제출되었습니다.내부 연산은 (오버플로우를 피하기 위해) 마이크로초 분해능으로 제한되며 RFC 태그는 삭제되었습니다.
- 스케줄러의 8번째 버전은 2013년 [28]10월 14일에 LKML에 제출되었습니다.
- 스케줄러의 9번째 버전은 2013년 [29]11월 7일에 LKML에 제출되었습니다.
- 마지막 버전은 메인라인 Linux 커널(커밋 번호 a0fa1d3cdbccec9597fe53b6177a9a6e20f2f8[30])에 병합되었으며 이후 정규 버전이 됩니다.
Linux Weekly[31] News 및 Phoronix[32] 웹사이트의 기사는 다음과 같이 주장했다.SCHED_DEADLINE
는 다음 릴리즈에서 메인라인 커널에 통합될 수 있습니다.마지막으로 4년 이상 경과하여 9개의 릴리스가 제출된 후 패치가 받아들여지고 Linux 커널 3.14에 [7][8]통합되었습니다.
SCHED_DEADLINE기 전에, 실시간 시스템(ReTiS)Lab[11]스콜라 슈페리오레 Sant'Anna의 리눅스 커널 안에, OCERA,[33]은 AQuoSA 구조는 FRESCOR project,[34]안에 IRMOS.[35] 하지만, th등을 포함한 다른 유럽 연구 프로젝트의 맥락에서 CBS에서 방송되며 변형을 다양한 다른 오픈 소스 구현한 것입니다.ese 사전 노력는 메인라인 커널 내의 통합에 적합한 구현을 제공하는 것이 아니라 연구 프로젝트를 위한 실험 결과를 수집하는 것이 주된 목표인 학술적 접근법에서 시작되었습니다.IRMOS를 사용하여 연구소는 Linux 커널 [10]개발자들과 처음으로 진지하게 접촉했습니다.
커널 4.13 이후 SCHED_DEADLINE은[36] Gready Recabilation of Unused Bandwidth([37]GRUB) 알고리즘을 사용하여 CBS를 완료했습니다.이 지원은 ReTiS Lab이 Evidence Srl과 협력하여 개발했습니다.
커널 4.16 이후 SCHED_DEADLINE은 GRUB-PA [17]알고리즘을 구현하여 ARM 플랫폼의 에너지 소비를 줄이도록 더욱 발전되었습니다.이 작업은 ARM Ltd.가 Providence Srl 및 Scuola Superiore Sant'[38]Anna와 협력하여 수행했습니다.
학력
SCHED_DEADLINE
는 일부 학술 워크숍, 컨퍼런스 및 저널을 통해 발표되었습니다.
- Dario Faggioli, Fabio Checoni, Michael Trimarchi, Claudio Scordino, Linux 커널용 EDF 스케줄링 클래스, 제11회 실시간 Linux 워크숍(RTLWS), 독일 드레스덴, 2009년 9월[19][39]
- Nicola Manica, Luca Abeni, Luigi Palopoli, Dario Faggioli, Claudio Scordino, 일정 가능한 디바이스 드라이버: 구현 및 실험 결과, 임베디드 실시간 애플리케이션(OSPERT)용 운영체제 플랫폼 국제 워크숍, 벨기에 브뤼셀, 2010년 7월[40][41]
- Juri Lelli, Giuseppe Lipari, Dario Faggioli, Tomaso Cucinotta, Linux 글로벌 EDF의 효율적이고 확장 가능한 구현, 임베디드 실시간 애플리케이션용 운영체제 플랫폼 국제 워크숍(OSPERT), Porto(포르투갈), 2011년 [42][43]7월
- Enrico Bini, Giorgio Butzazo, Johan Eker, Stefan Schorr, 라파엘 게라, 게르하르트 폴러, 칼-Erik Arzen, Vanesa Romero Segovia, Claudio Scordino, 멀티코어 시스템 자원 관리: ACTURS 접근법, IEEE Micro, vol. 31, no. 3, 페이지 72-81, 2011년 [14]5월/6월.
- Andrea Parri, Juri Lelli, Mauro Marinoni, Giuseppe Lipari, Linux에서의 멀티프로세서 대역폭 상속 프로토콜 설계 및 구현, 제15회 실시간 Linux 워크숍(RTLWS), 스위스 Lugano-Manno,[44] 2013년 10월
- Luca Abeni, Juri Lelli, Claudio Scordino, Luigi Paolopoli, SCHED_DEADLINE의 CPU 회수, 제16회 실시간 Linux 워크숍(RTLWS), 독일 뒤셀도르프,[45] 2014년 10월
- Juri Lelli, Claudio Scordino, Luca Abeni, Dario Faggioli, Linux 커널에서의 마감일정, 소프트웨어: 연습과 경험, 46(6): 821–839, 2016년 [46]6월
- Claudio Scordino, Luca Aveni, Juri Lelli, Linux 커널에서의 에너지 인식 실시간 스케줄링, 응용 컴퓨팅에 관한 제33회 ACM/SIGAPP 심포지엄(SAC 2018), 프랑스 Pau, 2018년 [47]4월
- Claudio Scordino, Luca Abeni, Juri Lelli, Linux 실시간 및 에너지 효율: 이론과 실천, ACM SIGAPP Applied Computing Review(ACR) 제18권 No.4, 2018.[48]
이 프로젝트는 2010년 [49][50]커널 서밋, Linux Plumbers Conference 2012 [51][52]및 Embedded Linux Conference [53]2013에서도 발표되었습니다.
다른 정보
그 프로젝트는 공식 페이지를 [54]가지고 있다.메인라인 통합 전에는 Git Hub [55]웹사이트에서 코드를 공개적으로 사용할 수 있었습니다. Git Hub 웹사이트는 Gitorius의 [56]이전 저장소를 대체했습니다.메인라인 통합 이후 공식 코드는 Linux 커널 소스 트리에 포함되어 있습니다.
Linux Weekly News,[1][57] Slashdot,[58] OSNews[2][59] 및 Linux [60]Today에 여러 기사가 게재되었습니다.유튜브에도[61] 동영상이 올라오고 있다.
메인라인 커널에 통합하기 전에SCHED_DEADLINE
이미 육토 [28]프로젝트에 통합되었습니다.또, 리나로 [62]프로젝트에의 참가에 대한 관심도 있었습니다.
「 」를 참조해 주세요.
레퍼런스
- ^ a b [1] Linux 주간 뉴스, Linux 마감 일정
- ^ a b [2] OSNets, Linux 커널에서의 기한 스케줄
- ^ a b [3] L.Abeni와 G.Butzazo, "하드한 실시간 시스템에 멀티미디어 애플리케이션 통합", 1998년 마드리드, 제19회 IEEE Real-Time Systems Symposium, 페이지 4-13
- ^ a b Bar, Moshe. "The Linux Scheduler". Linux Journal. Retrieved 2012-04-14.
- ^ Molnár, Ingo (2007-04-13). "[patch] Modular Scheduler Core and Completely Fair Scheduler [CFS]". linux-kernel (Mailing list).
- ^ [4] IEEE 정보기술 표준– 휴대용 운영체제 인터페이스, POSIX.1b, 실시간 확장 (IEEE 규격 1003.1b-1993)
- ^ a b "Linux kernel 3.14, Section 1.1. Deadline scheduling class for better real-time scheduling". kernelnewbies.org. 2014-03-30. Retrieved 2014-04-02.
- ^ a b [5] Phoronix, Linux 3.14 커널에는 이미 많은 흥미로운 기능이 탑재되어 있습니다.
- ^ a b c 마감 작업 스케줄링
- ^ a b T. 쿠치노타와 F.Checoni, "IRMOS 실시간 스케줄러", "CBS: EDF 기반 스케줄링 및 시간 격리" 섹션
- ^ a b [6] 이탈리아 피사, 스쿠올라 수페리오레 산탄나 ReTiS Lab
- ^ [7] 증거 Srl, SCHED_DEADLINE v6 프레스 릴리즈
- ^ [8] ACTURS FP7 프로젝트
- ^ a b [9] Enrico Bini, Giorgio Butzzo, Johan Eker, Stefan Schorr, 라파엘 게라, 게르하르트 폴러, Karl-Erik Arzen, Vanesa Romero Segovia, Claudio Scordino, 멀티코어 시스템 자원 관리:ACTURS 접근법, IEEE Micro, vol. 31, no. 3, 페이지 72-81, 2011년 5월/6월.
- ^ [10] SCHED_DEADLINE 프로젝트 이력
- ^ "CPU reclaiming for SCHED_DEADLINE [LWN.net]". lwn.net. Retrieved 2018-10-24.
- ^ a b "GRUB-PA". git.kernel.org. Retrieved 2018-10-24.
- ^ a b [11] SCHED_DEADLINE(SCHED_EDF)의 최초 제출
- ^ a b [12] Dario Faggioli, Fabio Checoni, Michael Trimarchi, Claudio Scordino, Linux 커널용 EDF 스케줄링 클래스, 제11회 실시간 Linux 워크숍(RTLW), 독일 드레스덴, 2009년 9월
- ^ [13] SCHED_EDF에서 SCHED_DEADLINE으로 명칭 변경 요청
- ^ [14] SCHED_DEADLINE 초판
- ^ [15] SCHED_DEADLINE 두 번째 버전
- ^ [16] SCHED_DEADLINE의 세 번째 버전
- ^ [17] SCHED_DEADLINE 제4판
- ^ [18] SCHED_DEADLINE 5번째 버전
- ^ [19] SCHED_DEADLINE 6번째 버전
- ^ [20] SCHED_DEADLINE 7번째 버전
- ^ a b [21] SCHED_DEADLINE 8번째 버전
- ^ [22] SCHED_DEADLINE 9번째 버전
- ^ [23] 메인라인 커널의 SCHED_DEADLINE 병합 커밋
- ^ "Deadline scheduling: coming soon?". lwn.net.
- ^ [24] Phoronix, SCHED_DEADLINE Linux 3.14에 추가 예정
- ^ [25] CORDIS에 관한 OCERA 유럽 연구 프로젝트
- ^ [26] CORDIS에 관한 FRESCOR 유럽 연구 프로젝트
- ^ [27] CORDIS에 관한 IRMOS 유럽 연구 프로젝트
- ^ "kernel/git/torvalds/linux.git - Linux kernel source tree". git.kernel.org. Retrieved 2017-09-05.
- ^ [28] 미사용 대역폭(GRUB)의 그리디 회수 알고리즘
- ^ "kernel/git/torvalds/linux.git - Linux kernel source tree". git.kernel.org. Retrieved 2019-01-04.
- ^ [29] 실시간 Linux 워크숍 (RTLWS) 2009
- ^ [30] Nicola Manica, Luca Abeni, Luigi Palopoli, Dario Faggioli, Claudio Scordino, 일정 가능한 디바이스 드라이버:구현 및 실험 결과, 임베디드 실시간 애플리케이션(OSPERT)용 운영체제 플랫폼 국제 워크숍, 벨기에 브뤼셀, 2010년 7월
- ^ [31] ACTURS 국제 출판물
- ^ [32] Juri Lelli, Giuseppe Lipari, Dario Faggioli, Tomaso Cucinotta, Linux 글로벌 EDF의 효율적이고 확장 가능한 구현, 임베디드 실시간 애플리케이션용 운영체제 플랫폼(OSPERT), Porto(포르투갈), 2011년 7월
- ^ [33] 임베디드형 실시간 애플리케이션(OSPERT), Porto(포르투갈), 2011년 7월 운영체제 플랫폼 국제 워크숍
- ^ [34] 실시간 Linux 워크숍(RTLWS) 2013
- ^ [35] 실시간 Linux 워크숍(RTLWS) 2014
- ^ Lelli, Juri (2015). "Deadline scheduling in the Linux kernel". Software: Practice and Experience. 46 (6): 821–839. doi:10.1002/spe.2335.
- ^ Scordino, Claudio; Abeni, Luca; Lelli, Juri (2018-04-09). Energy-aware real-time scheduling in the linux kernel. ACM. pp. 601–608. doi:10.1145/3167132.3167198. ISBN 9781450351911.
- ^ "ACM SIGAPP Applied Computing Review (ACR) Vol. 18 No. 4, 2018" (PDF).
- ^ [36] 커널 서밋 2010 (KS2010)에서의 SCHED_DEADLINE
- ^ [37] 커널 서밋 2010에서 발표된 ReTiS Lab, SCHED_DEADLINE
- ^ [38] Linux 배관공 컨퍼런스 2012
- ^ [39] SOOS 프로젝트, SCHED_DEADLINE 2012 Linux Flumbers Conference에서
- ^ [40] 임베디드 Linux Conference, San Francisco, 2013.주식회사 도시바 요시타케 고바야시 SCHED_DEADLINE의 데드라인 미스 검출
- ^ [41] SCHED_DEADLINE 프로젝트 공식 홈페이지
- ^ [42] 새로운 GitHub 공개 저장소
- ^ "Archived copy". Archived from the original on 2010-12-27. Retrieved 2011-01-11.
{{cite web}}
: CS1 maint: 제목으로 복사(링크) 이전 Gitorious 저장소 - ^ [43] Linux Weekly News, SCHED_DEADLINE에 마침표 추가
- ^ [44] Slashdot, Linux 커널에 대한 마감 일정 제안
- ^ [45] OSNets, Linux용 SCHED_DEADLINE의 새로운 버전 이용 가능
- ^ [46] Linux 오늘 SCHED_DEADLINE에 마침표 추가
- ^ [47] YouTube의 SCHED_DEADLINE 동영상
- ^ [48] 리나로의 SCHED_DEADLINE