Anslut till Senaste Tekniska Nyheter, Bloggar, Recensioner

Undersöker OnePlus prestandabeteende: optimering eller felaktig framställning?

Benchmarks och prestandamätningar är en grundpelare i utvärderingen av enheter och integrerade delar av granskningsprocessen för många människor – inklusive både faktiska konsumenter såväl som publikationer eller analytiker som oss själva. Tidigare, när detta förhållande mellan riktmärken och verkliga appar bröts, har vi alltid försökt avslöja sådant beteende för att få leverantörerna att korrigera sina sätt, vilket har lett till en hel del artiklar genom åren:

Då och då dyker dessa ämnen alltid upp igen när leverantörer försöker “särskilja” sina enheter bland mängden – det är en upprepad process som tyvärr vid det här laget inte längre riktigt förvånar oss när det händer.

Dagens pjäs passar inom denna klass av artiklar, och täcker mer specifikt OnePlus nyaste OnePlus 9 Pro flaggskeppstelefon, och hur dess prestandabeteende verkligen lyckas vara extremt unikt i det nuvarande mobila landskapet. Det är något så ovanligt och förbryllande, eftersom det verkligen suddar ut gränsen mellan batterioptimering, prestandafusk och allmän felaktig framställning av enhetsspecifikationer.

Vi har upptäckt att OnePlus svartlistar populära applikationer bort från de snabbaste kärnorna, vilket gör att typiska arbetsbelastningar som webbsurfning blir långsammare. Vi har bekräftat att (a) benchmarks eller (b) okända appar får full prestanda; de flesta av de populäraste apparna som inte är benchmark får avsevärt reducerad prestanda. Detta är kanske för att förbättra batteritiden på bekostnad av prestanda, men det betyder att de vanliga benchmarkresultaten är något värdelösa för användarupplevelsen.

Börjar med konstiga benchmarksiffror

Som alltid med dessa berättelser börjar allt när man upptäcker några konstiga konstigheter när man går igenom den vanliga granskningen. OnePlus 9 Pro släpptes i början av april, men på grund av annat arbete i pipelinen fick vi aldrig granska telefonen helt förrän nu – ja, det är också lite försenat på grund av dagens stycke.

I testet hade jag stött på något som verkligen förbryllade mig, och fångade min uppmärksamhet; till synes oförklarliga benchmarksiffror för långsamma webbläsare som inte var i linje med någon annan Snapdragon 888-enhet på marknaden, och får bara en bråkdel av poängen och prestanda för andra enheter.

OnePlus 9 Pro – Chrome & Vivaldi Performance

Speciellt Chrome verkade lida av extremt konstigt beteende som i värsta fall slutade med att webbläsaren bara kunde använda SoC:s små Cortex-A55-kärnor.

I den första/vänstra videon – jag startar Chrome på nytt och kör webbläsarbaserad Speedometer 2.0 benchmark. Under den första körningen klarar telefonen av en poäng på 61,5 – en låg poäng som är mycket onormal för en Snapdragon 888. Att övervaka CPU:s beteende under körningen påpekar att systemet aldrig laddar Cortex-X1-kärnan i Snapdragon 888, och kör istället riktmärket på Cortex-A78-kärnorna. Dessutom körs dessa på endast 2GHz istället för sina maximala 2,41GHz. Vad som är mer förbryllande är att när man kör om testet omedelbart igen i sekvens, är arbetsbelastningen nu helt isolerad till de små Cortex-A55-kärnorna, med ett förväntat hemskt resultat på 16,8.

Vi kommer att gå in mer i detalj lite senare om webbläsare – men det enda sättet jag någonsin lyckats uppnå full prestanda för Snapdragon 888 och få X1-kärnorna som laddas i benchmark var i Vivaldi, vilket resulterade med en poäng på 107 som är i linje med andra Snapdragon 888-telefoner. Vad som dock är ytterst förbryllande är att även om denna poäng var upprepningsbar back-to-back, var den bara någonsin möjlig att uppnå på en ny installation av webbläsaren. Att stänga appen och starta om den gjorde att den inte längre fungerade på Cortex-X1-kärnorna och bara kördes på Cortex-A78-kärnorna – den här gången på hela 2,41 GHz.

I någon annan WebView-behållare integrerad i någon app, kunde jag aldrig få något webbinnehåll att fungera på X1-kärnorna, eller om det fungerade, fungerade det som Vivaldi genom att det fungerade en gång och sedan aldrig igen.

Detta resulterade i några riktigt udda benchmarksiffror som skildrar OnePlus 9 Pro som en budgetenhet från början av 2010, med hemsk prestanda.

Saken är den att dessa siffror inte föll i linje med några andra benchmarkpoäng för enheten. Alla våra interna riktmärken samt riktmärken från tredje part presenterade normala prestandasiffror med vad du kan förvänta dig av en Snapdragon 888-telefon, som inte visar något särskilt annorlunda.

Dykning djupare: spår av upptäckt, OnePlus kärnkod

Naturligtvis väckte detta förbryllande beteende mitt intresse när jag försökte ta reda på vad som händer och vad som går fel. När jag undersökte enhetens OS-loggar lyckades jag upptäcka ett repeterbart beteende mellan applikationer som betedde sig extremt konstigt och de som inte gjorde det.

I synnerhet finns det poster när det gäller någon sorts OnePlus Performance-tjänst som körs på telefonen som hanterar kvalitetsförfrågningar. Generellt sett är den här typen av mekanismer inte särskilt intressanta eftersom många leverantörer har sidomekanismer för OS-ramverk för att möjliggöra bättre prestandaupplevelser som till exempel när man startar eller växlar mellan appar. Det som var konstigt med OnePlus här är att det inte behandlade alla appar lika:

I/OPPerf: perfAcquire # perflock change #: SPerfInfo{net.oneplus.launcher 160 cpu_bouncing_01 0}

I/OPPerf: perfAcquire # SCHEDTUNE change # : SPerfInfo{net.oneplus.launcher 160 cpu_bouncing_01 0}

I/OPPerf: mayPerfRelease # : SPerfInfo{net.oneplus.launcher 160 cpu_bouncing_01 0}

I/OPPerf: mayPerfRelease # återställ SCHEDTUNE # : SPerfInfo{net.oneplus.launcher 160 cpu_bouncing_01 0}

I/OPPerf: perfAcquire # SPerfInfo{com.android.chrome 160 cpu_bouncing_02 0}

I/OPPerf: perfAcquire # set SCHEDTUNE #: SPerfInfo{com.android.chrome 160 cpu_bouncing_02 0}

I det här loggutdraget ser vi att tjänsten får ett visst schedtune-prestandalås (i huvudsak en viss QoS-nivå) när den går in i standardstartprogrammet, och när den byter bort från den släpper den detta lås. När man byter till Chrome får det också en brist med någon parameter som heter “cpu_bouncing_02” – lite mer detaljer senare om detta.

I/OPPerf: perfAcquire # SPerfInfo{net.oneplus.launcher 160 cpu_bouncing_01 0}

I/OPPerf: perfAcquire # set SCHEDTUNE #: SPerfInfo{net.oneplus.launcher 160 cpu_bouncing_01 0}

I/OPPerf: mayPerfRelease # : SPerfInfo{net.oneplus.launcher 160 cpu_bouncing_01 0}

I/OPPerf: mayPerfRelease # återställ SCHEDTUNE # : SPerfInfo{net.oneplus.launcher 160 cpu_bouncing_01 0}

Det konstiga är att när man byter till en tredjepartswebbläsare som Vivaldi, så visas inte låset, och prestationstjänsten gör faktiskt aldrig någonting när man byter bort från startprogrammet.

Jag var nyfiken på vad cpu_bouncing är tänkt att vara och visst finns det en OnePlus modul inom företagets kärnmodifieringar vilket verkar vara relaterat till anpassade CPU-frekvensregleringspolicyer och konfigurationer.

Utöver det verkar det också som att OnePlus hade gjort några schemaläggarmodifieringar och lagt till vad den kallar TPD eller mekanism för beslut om trådplacering som möjliggör anpassade CPU-affinitetsmaskerbegränsande tråd- och uppgiftsplaceringar baserat på en klassificering som går utöver det vanliga generiska systemets CPU-affinitet, eller till och med Android-standardramverksapp-cpuset. Detta verkar för mig vara vad som är mekanismen som begränsar arbetsbelastningen från att placeras på Cortex-X1-kärnorna – eller till och med A78-kärnorna på vissa ställen.

En svartlista istället för en vitlista – Spoofing av populära appar

Hittills har vi hittat att det verkar som om OnePlus OS upptäcker den app som körs för närvarande och påtvingar olika CPU-DVFS- och schemaläggarbeteenden beroende på vad du kör. På grund av det tidigare nämnda observerade beteendet i OS-loggarna när du byter till Chrome eller andra appar (jag använder den officiella Twitter-appen här som ett exempel), är ett sätt att bekräfta prestandaavvikelsen att helt enkelt försöka förfalska en anpassad app för att identifiera sig själv som en av de upptäckta apparna, vilket jag gjorde med vår anpassade verktygsapp:

I vårt anpassade spårningstest för CPU-frekvensskalning, som fungerar på absoluta tidsskalor i mikrosekundsgranulariteter, ser vi omedelbart att det finns en stor skillnad mellan att köra testet som en obeskrivlig arbetsbelastning och att köra det förfalskat som Chrome- eller Twitter-apparna. Som det anonyma testet är CPU-beteendet generellt i linje med vad vi skulle se i Qualcomm-enheten, men ganska lite mer aggressivt på grund av att OnePlus använder ett 8ms belastningsspårningsfönster. CPU:n når snabbt X1-kärnorna på 2,84GHz som man kan förvänta sig.

Chrome- och Twitter-förfalskade varianter av samma test beter sig väldigt olika och skalningen är mycket långsammare och når maximala prestandatillstånd 3-4 gånger långsammare. Det är i allmänhet fortfarande bra, men det som verkligen är oroande här är återigen att arbetsbelastningen faktiskt aldrig når X1-kärnorna, eller bara vid mycket minskade frekvenser långt under 2,84GHz-tillståndet.

Vi har bekräftat att skalningen är annorlunda, men vad är exakt resultatet? Genom att köra SPEC-sviten förklädd som både Chrome och Twitter kan vi se några enorma skillnader i den resulterande prestandan, jämfört med att köra arbetsbelastningen som en oupptäckt applikation.

I den förkromade spoofade varianten verkar det som att arbetsbelastningen tillåts skala upp till Cortex-X1-kärnorna i Snapdragon 888, men dessa är begränsade till 2,26 GHz istället för 2,84 GHz. Denna 20 % minskning av frekvensen kommer med en motsvarande 20 % minskning av poängprestanda i testet.

I den Twitter-spoofade varianten når arbetsbelastningen aldrig X1-kärnorna och faller istället in på ett stabilt tillstånd på 2GHz på Cortex-A78-kärnorna. Prestandan här är på motsvarande sätt ganska mager och visar bara 64% av vad Snapdragon 888 ska uppnå. Denna siffra här faller också i linje med webbläsarens benchmarksiffror tidigare när de schemaläggs på A78-kärnorna.

Vi har också kontaktat Primate Labs John Poole för att replikera beteendet i ett populärt riktmärke som GeekBench. Att förfalska GeekBench 5 som antingen Chrome eller Twitter resulterar också i avsevärt lägre benchmarksiffror som ligger 20 % under toppprestanda för Snapdragon 888. X1-kärnorna här verkar gå till 2380MHz, vilket överensstämmer med begränsningen som finns i OnePlus kärnkällor, och A78-kärnorna går heller aldrig längre än 2GHz i de flertrådade testerna.

Jag är inte så säker på varför vi ser en entrådad beteendeavvikelse mellan SPEC och GB5 här, och varför min testverktygssats försämrades mycket lägre i prestanda, men det verkar vara relaterat till OnePlus extremt invecklade policy för trådplacering.

PCMark är tänkt att vara mer av en verklig representation av enhetens prestanda när det gäller dynamiska gränssnittsarbetsbelastningar. Även här, när man ändrar applikations-ID till något som LinkedIn resulterar det i några dramatiska prestandaminskningar i vissa av testerna. Undertestet “Writing” som jag anser vara ett av de viktigaste och mest representativa för enhetens övergripande lyhördhet ser en enorm minskning med 34% i sin poäng. Datamanipulationstestet är också mycket enkeltrådigt bundet, och eftersom X1-kärnorna är kastrerade ser det också en stor 36% minskning.

Vilka appar påverkas, och den riktiga elefanten i rummet

Vi pratade främst om Chrome och Twitter fram till nu, men den stora frågan här är vilka andra applikationer som påverkas och upptäcks av OnePlus prestandabegränsande mekanism. Även om jag inte har upptäckt något som en rykande pistol när det gäller den faktiska svarta listan som används för applikationsdetektering – troligen begravd djupt in i operativsystemets ramverk, skulle det näst bästa vara att helt enkelt testa olika populära applikationer och bekräfta oavsett om de upptäcks eller inte:

02

us.zoom.videomöten

com.whatsapp

com.facebook.katana

com.zhiliaoapp.musically (TikTok)

com.instagram.android

com.snapchat.android

com.google.android.youtube

com.chrome.beta

com.android.chrome

01

com.android.settings

net.oneplus.launcher

net.oneplus.forum

net.oneplus.weather

com.oneplus.backuprestore

com.oneplus.filemanager

com.oneplus.note

com.oneplus.gallery

com.oneplus.camera

com.reddit.frontpage

com.twitter.android

com.amazon.mShop.android.shopping

com.android.vending

com.dropbox.android

org.mozilla.firefox

com.google.android.dialer

com.google.android.gm

com.google.android.documentsui

com.google.android.apps.docs.editors.docs

com.google.android.apps.photos

com.google.android.apps.meetings

com.google.android.apps.messaging

com.linkedin.android

com.discord

com.netflix.mediaclient

com.king.candycrushsaga

com.adobe.lrmobile

com.adobe.reader

tv.twitch.android.app

com.microsoft.emmx

com.brave.browser

com.nianticlabs.pokemongo

com.microsoft.teams

com.adobe.scan.android

org.videolan.vlc

com.strava

com.amazon.avod.tredjepartsklient

com.airbnb.android

com.ubercab

com.ubercab.äter

com.microsoft.office.outlook

com.microsoft.office.excel

com.microsoft.office.powerpoint

com.microsoft.office.officehubrow

com.microsoft.office.word

Den här listan är inte på något sätt uttömmande, utan representerar helt enkelt de appar som jag testade innan jag ansåg det tillräckligt för att få fram poängen.

Vad som är uppenbart här är att detta inte är en mekanism som bara gäller för en handfull appar, utan gäller för i stort sett allt som har någon nivå av popularitet i Play Butik, inklusive hela Googles appsvit, alla Microsofts Office-appar, alla populära appar för sociala medier och alla populära webbläsare som Firefox, Samsung Internet eller Microsoft Edge. Vivaldi var en av webbläsarna som inte upptäcktes och därefter en av de enda jag lyckades få ut någon rimlig prestanda ur.

De enda appar som var särskilt frånvarande från upptäckt var några av de populära spelen där ute, medan sådana som Candy Crush var prestandabegränsade, Genshin Impact var det inte. Utöver spel upptäcktes naturligtvis ingen benchmark-app. Andra applikationer som inte heller upptäcktes var mindre populära alternativ – medan till exempel Uber och Uber Eats detekteras, Lyft och Grubhub inte var det.

Utöver alla populära applikationer – det som verkligen sticker ut är att alla OnePlus egna förstapartsappar ingår i den här listan, även så långt som operativsystemets systeminställningar, och det är här saker och ting blir problematiska.

Hur kvantifierar vi prestanda i ett sådant scenario?

Vid denna tidpunkt finns det uppenbarligen en stor koppling mellan prestandan som visas i de mest populära applikationerna där ute och de upplevelser som användarna kommer att ha inom de mest populära applikationerna på marknaden, och till och med OnePlus egna appar.

Den enda öppna frågan som återstår är hur exakt hela denna mekanism påverkar den subjektiva användarupplevelsen. När allt kommer omkring har telefonen varit ute i några månader nu och i princip ingen har anmärkt något om telefonens allmänna prestanda. Anledningen här är att medan prestandatoppar uppenbarligen är begränsade, förblir den en lyhörd telefon, och det finns mekanismer som kämpar mot begränsningarna, såsom OS-ramverksförstärkare och beröringsförstärkare. Till exempel, medan du kommer att hitta webbinnehåll ganska mycket begränsat till de små Cortex-A55-kärnorna för det mesta, gäller detta inte när du interagerar med telefonen eftersom tillfällig touch-booster kommer att migrera saker till de mellersta A78-kärnorna.

Jag skulle inte skylla på någon om de inte nödvändigtvis hade märkt prestandaskillnaden – jag hade inte direkt märkt det själv utöver enheternas extremt långsamma rullningshastighetsinställning. Men när jag har den sida vid sida med en Samsung Galaxy S21 Ultra, eller en Xiaomi Mi11 (Ultra) och är uppmärksam, märker jag väldigt mycket att OnePlus 9 Pro är mindre lyhörd.

Problemet med påståenden som “mindre lyhörd” är att vi inte kan kvantifiera det ordentligt. Även om det finns legitima granskare där ute som är nöjda med att skriva om subjektiva prestationsutvärderingar – vår stamtavla här på AnandTech handlar om att kunna motivera dessa påståenden med objektiva mätningar. I det här fallet lämnar OnePlus oss med mycket begränsade alternativ.

Optimering, eller felaktig framställning av vad du säljs?

En ytterligare fråga är varför just OnePlus har skapat en sådan mekanism i första hand? Vad exakt är målet som företagets mjukvaruteam försökte uppnå? Generellt sett ingick tidigare applikationsdetekteringsmekanismer som försök att måla enheter i bättre ljus med avseende på deras prestanda. I det här fallet är detta faktiskt fortfarande fallet – det är bara det att istället för att öka riktmärkets prestanda, minskar företaget den verkliga applikationsprestandan till lägre än den teoretiska hårdvarukapaciteten.

Det enda vettiga skälet för ett sådant beslut är att förbättra en enhets energieffektivitet och batteritid. OnePlus 9 Pro, även om den annonserar sig använda den senaste LTPO OLED-tekniken som Samsungs Galaxy S21 Ultra till exempel, lider fortfarande av avsevärt sämre strömegenskaper och sämre strömeffektivitet. I vårt test av batteritid för webbsurfning, även med denna prestandaförsämrande mekanism på plats, med båda enheterna på 120Hz under samma testförhållanden, uppnår OnePlus 9 Pro 11,75 timmars körtid, jämfört med S21 Ultras 13,98 timmar, den senare som körs vid SoC:s fulla prestandapotential. Jag kommer att köra samma test i en oupptäckt webbläsare som Vivaldi för att se vad det slutar på – men jag misstänker att det kommer att bli betydligt värre för OP9Pro.

Även om applikationsbeteende och prestanda varierar från fall till fall, är den ena aspekten som gäller i nästan alla scenarier att OnePlus 9 Pro inte levererar de fullständiga egenskaperna hos Snapdragon 888. I svartlistade/upptäckta applikationer, när och om X1 kärnor används överhuvudtaget, frekvenser över 2,38 GHz går inte att nå utom för korta booster-ögonblick. De allra flesta appar faller tillbaka till 2GHz Cortex-A78-kärnor. Allt detta är lite ironiskt eftersom anledningen till att de större kärnorna i X-serien skapades med högre prestanda i första hand var för att betjäna prestanda med hög transient respons, något de inte får göra här.

Det enda argumentet jag har för att tolka den här mekanismen som en felaktig framställning av enhetens prestanda snarare än en övergripande energieffektiviseringsoptimering är själva det faktum att den inte gäller lika för alla appar. Om du använder någon mer obskyr app där ute, kommer du att få bättre prestanda än jämfört med en mer populär app. Benchmark-applikationer representerar naturligtvis inte heller enhetens “avsedda” prestanda – och jag hävdar här att det är enhetens avsedda prestanda, eftersom det är så här OnePlus konfigurerar sitt eget operativsystem och förstapartsappar. Utanför lådan beter sig nästan alla förinstallerade appar på detta prestandabegränsade sätt.

Hela situationen är ganska förbryllande, och representerar verkligen det första fallet av en leverantör som implementerar applikations- och benchmarkdetektering på detta sätt, med skillnader i prestanda som skiljer sig i en sådan grad. Jag är inte så säker på vad jag ska göra av det, förbjuder bara att exponera det och låter användarna komma till sin egen slutsats.

Redaktörens anteckning: Dagens artikel fokuserar enbart på OnePlus 9 Pro, testad på firmware 11.2.6.6. På grund av bristande syskon eller tidigare enheter kunde vi inte bekräfta om denna mekanism finns på andra OnePlus-telefoner.

Uppdatering: OnePlus har publicerat ett uttalande till kollegorna på XDA:

“Vår högsta prioritet är alltid att leverera en bra användarupplevelse med våra produkter, delvis baserat på att agera snabbt på viktig feedback från användare. Efter lanseringen av OnePlus 9 och 9 Pro i mars berättade några användare för oss om några områden där vi kunde förbättra enheternas batteritid och värmehantering. Som ett resultat av denna feedback har vårt FoU-team arbetat under de senaste månaderna för att optimera enheternas prestanda när de använder många av de mest populära apparna, inklusive Chrome, genom att matcha appens processorkrav med den mest lämpliga kraften. Detta har bidragit till att ge en smidig upplevelse samtidigt som strömförbrukningen minskat. Även om detta kan påverka enheternas prestanda i vissa benchmarking-appar, är vårt fokus som alltid att göra vad vi kan för att förbättra enhetens prestanda för våra användare.”

Resonemanget stämmer överlag med vad vi misstänkte; syftar till att förbättra enhetens batterilivslängd. OnePlus förklarar dock inte ytterligare varför endast specifika appar var inriktade på, och varför mekanismen var ogenomskinlig för användarna. Dessutom tycks uttalandet läsas som det var en uppdatering efter lanseringen, men beteendet kan bekräftas att det redan har funnits i dag-1 recensioner från andra sajter som t.ex. PhoneArena eller NotebookCheck före lanseringsdatumet för telefonen den 31 mars.