Sabato Rob Clark ha inviato una richiesta pull aggiungendo il codice di consapevolezza della scadenza DMA-BUF/DMA-FENCE al sottosistema Direct Rendering Manager (DRM) con l’imminente ciclo Linux 6.4.
Questa richiesta pull fornisce l’infrastruttura di base per consentire un suggerimento di”scadenza”per l’utilizzo da parte dei driver di grafica/display DRM. Questa richiesta pull non implementa il supporto della scadenza per nessuno dei driver DRM, ma almeno ora consente ai driver di farlo nelle proprie richieste pull.
Questo supporto per la consapevolezza delle scadenze è un suggerimento per le recinzioni in modo che le scadenze in tempo reale come vblanks possano essere comunicate al segnalatore della recinzione per migliorare le decisioni di gestione della potenza/frequenza. Questo supporto per la consapevolezza della scadenza è stato in parte ispirato dalla gestione attualmente eseguita dal driver grafico del kernel di Intel.
Quando implementato dai driver DRM , la speranza è che con questi suggerimenti sulle scadenze le GPU aumentino la loro frequenza di clock/stato di alimentazione, se necessario, per non perdere le scadenze. Un commento al codice con i nuovi suggerimenti sulla scadenza del DRM prosegue spiegando:
In un mondo ideale, sarebbe possibile eseguire la pipeline di un carico di lavoro in modo tale che un regolatore di frequenza del dispositivo basato sull’utilizzo possa arrivare a una frequenza minima che soddisfi il requisiti del caso d’uso, al fine di ridurre al minimo il consumo energetico. Ma nel mondo reale ci sono molti carichi di lavoro che sfidano questo ideale. Ad esempio, ma non limitato a:
Carichi di lavoro che effettuano il ping-pong tra dispositivo e CPU, con periodi alternati di CPU in attesa del dispositivo e dispositivo in attesa della CPU. Ciò può comportare che devfreq e cpufreq visualizzino il tempo di inattività nei rispettivi domini e, di conseguenza, riducano la frequenza.
Carichi di lavoro che interagiscono con una scadenza periodica basata sul tempo, come il rendering GPU con doppio buffer rispetto al capovolgimento di pagine con sincronizzazione vblank. In questo scenario, il mancato rispetto di una scadenza vblank si traduce in un *aumento* del tempo di inattività sulla GPU (poiché deve attendere un ulteriore periodo vblank), inviando un segnale al devfreq della GPU per ridurre la frequenza, quando in realtà è il contrario è necessario.
A tal fine, è possibile impostare suggerimenti di scadenza su un &dma_fence tramite &dma_fence_set_deadline. Il suggerimento di scadenza fornisce un modo per il conducente in attesa, o spazio utente, per trasmettere un adeguato senso di urgenza al conducente di segnalazione.
Un suggerimento per la scadenza viene fornito in ktime assoluto (CLOCK_MONOTONIC per le API rivolte allo spazio utente). L’ora potrebbe essere un punto nel futuro (come la scadenza basata su vblank per sfogliare le pagine o l’inizio del ciclo di composizione di un compositore) o l’ora corrente per indicare un suggerimento di scadenza immediata (ad es. finché questa recinzione non viene segnalata).
Possono essere fissate più scadenze su un dato recinto, anche in parallelo. Consulta la documentazione per &dma_fence_ops.set_deadline.
Il suggerimento sulla scadenza è proprio questo, un suggerimento. Il driver che ha creato la barriera può reagire aumentando la frequenza, facendo diverse scelte di programmazione, ecc. O non facendo nulla.
Il codice di base attorno alla scadenza DRM DMA-BUF/DMA-FENCE la consapevolezza può essere trovata tramite questa richiesta pull. Le patch sono già state lanciate per implementare la gestione dei suggerimenti di scadenza all’interno di driver come Intel e Freedreno, quindi è possibile che anche loro possano essere pronti per il ciclo di Linux 6.4 che inizierà tra circa un mese.