Új energia­gazdálkodási minta a Linux kernelben – USB-offload sleep módban

Greg Kroah-Hartman a Linux kernel usb-next ágába beolvasztotta a „Support system sleep with offloaded USB transfers”patchet, amelynek célja, hogy a társprocesszorokra (co-processor) átruházott USB-átvitelek a rendszer RAM-sleep üzemmódja alatt is folytatódhassanak. A kiinduló probléma az volt, hogy a Linux kernel System Sleep modellje leállítja a hosztvezérlőt, ha a fő rendszer nem kezel aktív átvitelt, ami megszakítja az offload forgalmat.

Az új koncepció két pilléren nyugszik: az egyik az offload-tevékenység explicit követése eszközszinten, a másik a teljes USB verem célzott módosítása, hogy sleep módban kihagyja azokat a lépéseket, amelyek az offload működését zavarnák. A megvalósítás ennek megfelelően a magban új „offload használat” számolót és ellenőrző felületeket vezet be, és a felfüggesztés/visszaélesztés útvonalában feltételes ellenőrzésekkel kerüli meg a felesleges műveleteket, ha a periféria vagy a vezérlő oldalán aktív offload fut.

Új energia­gazdálkodási minta a Linux kernelben – USB-offload sleep módban

API-k és kódbeli változások – hogyan marad fenn az adatfolyam?

A kernel USB alrendszerében új, publikus felületek jelentek meg az offload állapot kezelésére: az eszközök „offload_usage” számlálója jelzi, ha egy társprocesszor viszi az adatátvitelt, az „usb_offload_check()” pedig rekurzívan feltérképezi az alárendelt eszközök aktivitását. A „usb_suspend_both()/usb_resume_both()” kódútvonalakban az „offload_at_suspend” jelző határozza meg, hogy egyes interfészeket és magát az eszközt valóban fel kell-e függeszteni, vagy inkább érintetlenül kell hagyni a megszakításos URB-k folytonossága érdekében.

Az xHCI platformmeghajtó külön kezelést kap az egyes PM-eseményekre, és bekerült a „xhci_sideband_check()” hívás, amely aktív sideband/offload esetén kihagyja a suspend/resume lépéseket, majd thaw/restore után visszaáll a normál működésre. Mindezt az új „drivers/usb/core/offload.c” modul, a sideband könyvtár bővítései és a fejlécekben bevezetett mezők támasztják alá; összességében több mint kétszáz új sor és néhány törlés úgy alakítja át az energiagazdálkodási útvonalat, hogy a sleep mode és az offload párhuzamosan megférjen egymás mellett.

Tágabb kontextus – USB/Thunderbolt újdonságok a 6.18-rc1 előtt

A beolvasztás egy szélesebb fejlesztési csomag része: Greg Kroah-Hartman Linus Torvaldsnak küldött GIT PULL kérelme a 6.18-rc1 kernel ciklushoz kiterjedt USB és Thunderbolt frissítéseket tartalmaz. A Thunderbolt alrendszerben pontosított dokumentációk és biztonsági módosítások érkeztek, a DWC2/DWC3 és Type-C illesztésekben hordozhatósági és futásidejű stabilitási fejlesztések valósultak meg, míg az xHCI oldalon az új sideband/offload képességek mellett finomodott az eUSB2 kettős izokron sávszélesség kezelése és az automatikus felfüggesztés logikája.

Gábor a Pingvinbázis alapítója és főszerkesztője, több mint 20 éves tapasztalattal rendelkezik a Linux rendszerek és az Open Source szoftverek területén. Jártas a Python, és a PHP nyelvben, valamint a BASH scriptelésben is.