Community

리눅스 리뷰 #1: 우선순위 부여의 Proxy Exec 도입 논의

Foreground/Background Task 간에 우선순위 부여에 프록시 실행이란 방법을 도입하려고 논의 중입니다. Foreground/Background Task 간에 우선순위 부여는 중요한 작업이 Background Task 에 의해 중단되지 않도록 하면서, 리소스 사용을 효율적으로 관리하여 중요한 작업이 더 많은 리소스를 사용하도록 하면서, Background Task 의 성능을 저하시키지 않도록 하는 작업입니다. Real Time 우선순위를 가진 프로세스가 우선 순위가 낮은 프로세스에 리소스를 요청하면 우선 순위 역전이 일어나 작업이 중단될 수 있는데, 이럴 경우를 위해서 고전적으로 낮은 우선 순위의 프로세스를 일시적으로 우선 순위를 높게 하는 우선 순위 상속이란 방법을 사용했습니다. 이 방법은 다른 프로세스의 우선 순위를 일시적으로 높게 하는 것으로 원래 프로세스의 성능 저하를 가지고 올 수 있고 구현이 복잡합니다. 특히 안드로이드 어플은 일반적으로 Real Time Priority 를 안정적으로 사용할 수 없고, 우선순위 역전인 많이 일어나며, SCHED_OTHER 의 경우는 우선순위 상속을 사용할 수 없습니다. 이런 이유로 Proxy Execution 이란 방법을 도입하려는 논의가 이루어지고 있습니다. 프록시 실행의 핵심 아이디어는 리소스를 기다리는 작업과 해당 리소스를 소유하는 작업 간의 "차단된" 관계를 추적하는 것입니다. 현재 커널에서는 리소스를 기다리는 작업이 실행 대기열에서 제거되지만 대신 프록시 실행을 사용하면 여전히 실행 가능한 것처럼 대기열에 남아 있게 됩니다. 스케줄러가 실제로 차단된 작업을 실행하도록 선택하면 차단된 링크를 따라 대신 리소스 소유자를 실행합니다. 실제로 대기 작업은 필요한 리소스를 확보한다는 목표를 위해 주어진 런타임의 일부를 사용하게 됩니다. 프록시 실행 아이디어는 간단하지만 구현은 복잡합니다. 1. 리소스를 보유한 프로세스가 두번째 리소스에서 차단될 수 있고, 이런 경우 스케줄러는 실제로 실행될 수 있는 작업에 도달하기 위해 적당한 길이로 제한된 링크 체인이어야 할 수도 있습니다. 2. 스케줄러가 이러한 링크가 가리키는 작업을 실행하려면 차단된 작업을 보유자가 실제로 실행 중인 CPU로 마이그레이션해야 합니다. 3. 차단된 체인 끝에 있는 리소스 보유자가 다른 이유로 현재 절전 모드(실행할 수 없음)에 있을 수 있습니다. 일단 벤치마킹의 결과 바닐라 커널에서는 fs 잠금의 우선순위 반전에 의한 값들이 존재하지만, Proxy Execution 을 적용한 커널에서는 그래프에서 보듯이 존재하지 않음을 알 수 있습니다. Proxy Execution 에 어떻게 리눅스에 도입될지 궁금해집니다. 😀 How to reduce complexity in Proxy Execution - https://lpc.events/event/17/contributions/1482/

알림

알림이 없습니다