Benchmark-fusket slår tillbaka: Hur OnePlus och andra blev gripna på bar gärning och vad de har gjort åt det

OnePlus och Meizu har ertappats med att fuska på benchmarks. XDA undersöker hur det hände och vad som kan göras för att förhindra att det händer igen.

För några år sedan blev det ett stort uppståndelse, när många stora tillverkare ertappades med att fuska med riktmärken. OEM-tillverkare av alla storlekar (inklusive Samsung, HTC, Sony, och LG) deltog i denna kapprustning för att försöka lura användare utan att bli gripen, men tack och lov slutade de så småningom sitt benchmarkfusk efter några uppriktiga diskussioner med branschexperter och journalister.

Redan 2013 var det så upptäckt att Samsung på konstgjord väg ökade sina GPU-klockhastigheter i vissa applikationer, vilket utlöste en serie av undersökningar in i benchmarkfusk över hela sortimentet av tillverkare. Vid den tiden fann undersökningen att nästan alla tillverkare förutom Google/Motorola ägnade sig åt benchmarkfusk. De investerade alla tid och pengar i försök att få ut lite extra prestanda ur sina telefoner i riktmärken, på ett sätt som skulle inte ha någon positiv effekt på daglig användning, i ett försök att lura användare att tro att deras telefoner var snabbare än de faktiskt var. Dessa utvecklingsinsatser sträckte sig över hela skalan, från att ställa in klockhastighetsgolv till att tvinga klockhastigheterna till sina maximala inställningar, till att till och med skapa speciella högre effekttillstånd och speciella klockhastigheter som bara var tillgängliga vid benchmarking, med dessa ansträngningar som ofta resulterade i bara ett par procentenheters ökningar i riktmärke.

Det var stor upprördhet när det upptäcktes, eftersom dessa försök till benchmarkfusk stred mot själva poängen med själva riktmärkena. De flesta riktmärken är inte till för att berätta för dig den teoretiska maximala prestandan för en telefon i labbförhållanden som inte är reproducerbara i daglig användning, men de är snarare till för att ge dig en referenspunkt för jämförelser i verkligheten mellan telefoner. Efter lite av en offentlig utskällning (och några privata samtal) från teknikpublikationer, branschledare och allmänheten fick de flesta tillverkare beskedet att benchmarkfusk helt enkelt inte var acceptabelt och slutade som ett resultat. De flesta av de få som inte slutade vid den tidpunkten slutade strax efter, eftersom det gjordes betydande förändringar till hur många benchmarks som körs, i ett försök att motverka benchmarkfusk (genom att minska nyttan från Det). Många riktmärken gjordes längre så att den termiska strypningen från maximering av klockhastigheter skulle bli direkt uppenbar.

När vi intervjuades John Poole, skaparen av Geekbench, ämnet benchmark fusk och vad företag som Primate Labs kan göra för att förhindra det dök upp. Primate Labs gjorde i synnerhet Geekbench 4 ganska lite längre än Geekbench 3, delvis för att minska effekterna av benchmarkfusk. Minska fördelarna för att säkerställa att utvecklingen kostnaderna för benchmarkfusk är inte värt det.

"Problemet är att när vi väl har dessa stora körtider om du börjar spela saker genom att rampa upp klockan hastigheter eller inaktivera regulatorer eller något liknande, kommer du att börja utsätta verklig fara i telefon... Om du ska spela det... du kommer inte få ut så mycket av det. Du kanske fortfarande får ett par procent, men är det verkligen värt det?" - John Poole


Vad hände

Tyvärr måste vi rapportera att vissa OEM-tillverkare har börjat fuska igen, vilket betyder att vi borde hålla utkik igen. Tack och lov har tillverkare blivit allt mer lyhörda för sådana här problem, och med rätt uppmärksamhet kan detta åtgärdas snabbt. Det är lite chockerande att se tillverkare implementera benchmark-fusk i ljuset av hur illa motreaktionen var förra gången det försöktes (med vissa riktmärken som helt utesluter fuskenheter från deras prestanda listor). Med den motreaktionen i kontrast till hur små prestandavinsterna från benchmarkfusk vanligtvis är (med de flesta av försöken som resulterade i en poängökning på mindre än 5 % förra gången), hade vi verkligen hoppats att allt detta skulle ligga bakom oss.

Tidpunkten för detta försök är särskilt olämplig, eftersom benchmarkfusk för ett par månader sedan lämnade världen av att vara ett rent entusiastoro och gick in i den offentliga sfären när Volkswagen och Fiat Chrysler båda ertappades med att fuska på sina utsläpp riktmärken. Båda företagen implementerade mjukvara för att upptäcka när deras dieselbilar genomgick utsläppstester och fick dem att byta till ett lågemissionsläge som såg deras bränsleekonomi minska, i ett försök att konkurrera med bensinbilar i bränsleeffektivitet samtidigt som de höll sig inom lagstadgade gränser för utsläpp tester. Hittills har skandalen resulterat i miljarder i böter, tiotals miljarder i återkallelsekostnader och anklagelser som har väckts - absolut inte den typen av vedergällning OEM-tillverkare skulle någonsin se för att blåsa upp sina benchmark-poäng, som enbart är för användarjämförelser och inte används för att mäta några regleringar krav.

Medan undersöker hur Qualcomm uppnår snabbare appöppningshastigheter på den då nya Qualcomm Snapdragon 821 märkte vi något konstigt på OnePlus 3T som vi inte kunde reproducera på Xiaomi Mi Note 2 eller den Google Pixel XL, bland andra Snapdragon 821-enheter. Vår chefredaktör, Mario Serrafero, använde Qualcomm Trepn och Snapdragon Performance Visualizer för att övervaka hur Qualcomm "förstärker" CPU: n klockhastighet när man öppnade appar och märkte att vissa appar på OnePlus 3T inte föll tillbaka till sina normala tomgångshastigheter efter öppning. Som en allmän tumregel undviker vi att testa benchmarks med prestandaövervakningsverktyg öppna när det är möjligt på grund av de extra prestandakostnader som de medför (särskilt i icke-Snapdragon-enheter där det inte finns några officiella skrivbordsverktyg), men i den här incidenten hjälpte de oss att märka något konstigt beteende som vi troligen skulle ha missat annat.

När du går in i vissa benchmarking-appar, skulle OnePlus 3T: s kärnor hålla sig över 0,98 GHz för de små kärnorna och 1,29 GHz för de stora kärnorna, även när CPU-belastningen sjönk till 0%. Detta är ganska konstigt, eftersom båda uppsättningarna av kärnor normalt faller ner till 0,31 GHz på OnePlus 3T när det inte är någon belastning. När vi först såg detta var vi oroliga att OnePlus CPU-skalning helt enkelt var inställd på lite konstigt, Men vid ytterligare tester kom vi till slutsatsen att OnePlus måste vara inriktat specifikt applikationer. Vår hypotes var att OnePlus riktade in sig på dessa benchmarks med namn och gick in i ett alternativt CPU-skalningsläge för att pumpa upp sina benchmarkpoäng. En av våra främsta bekymmer var att OnePlus möjligen satte lösare termiska begränsningar i det här läget för att undvika problemen de hade med OnePlus One, OnePlus X och OnePlus 2, där telefonerna hanterade de extra kärnorna som kom online för flerkärniga delen av Geekbench dåligt, och då och då sänks avsevärt som ett resultat (till den punkt där OnePlus X ibland fick lägre poäng i multikärndelen än i singeln kärnsektion). Du kan hitta kraftiga strypningar i vår OnePlus 2 recension, där vi fann att enheten kunde avskaffa upp till 50 % av Geekbench 3 flerkärniga poäng. Senare, när vi började jämföra strypning och termik mellan enheter, OnePlus 2 blev ett läroboksexempel på vad OEM bör undvika.

Vi nådde laget kl Primate Labs (skaparna av Geekbench), som var avgörande för att avslöja den första vågen av benchmark-fusk, och samarbetade med dem för ytterligare tester. Vi tog med en OnePlus 3T till Primate Labs kontor i Toronto för en inledande analys. De första testerna inkluderade en ROM-dump som fann att OnePlus 3T direkt letade efter en hel del appar vid namn. Mest anmärkningsvärt var att OnePlus 3T letade efter Geekbench, AnTuTu, Androbench, Quadrant, Vellamo och GFXBench. Eftersom vi vid det här laget hade ganska tydliga bevis för att OnePlus ägnade sig åt benchmark-fusk, byggde Primate Labs ett "Bobs minigolfputt" version av Geekbench 4 för oss. Tack vare väsentliga förändringar mellan Geekbench 3 och 4, den "Minigolf" version var tvungen att byggas om från grunden specifikt för denna testning. Den här versionen av Geekbench 4 är utformad för att undvika benchmark-detektering, för att låta Geekbench köras som normalt applikation på telefoner som fuskar (som går längre än paketbytet som lurar de flesta försök till benchmark fusk).


Ett överraskande exempel

Direkt när appen öppnades var skillnaden tydlig. OnePlus 3T gick på tomgång på 0,31 GHz, som den gör i de flesta appar, snarare än på 1,29 GHz för de stora kärnorna och 0,98 GHz för de små kärnorna som den gör i den vanliga Geekbench-appen. OnePlus gjorde den CPU-guvernör mer aggressiv, vilket resulterade i ett praktiskt konstgjordt klockfrekvensgolv i Geekbench som inte fanns där i den dolda Geekbench-konstruktionen. Det var inte baserat på CPU-arbetsbelastningen, utan snarare på appens paketnamn, som den dolda konstruktionen kunde lura. Även om skillnaden i individuella körningar var minimal, lyser de termiska strypningsavslappningarna i vårt ihållande prestandatest, som visas nedan.

Från våra tester verkar det som att detta har varit en "funktion" i Hydrogen OS ett bra tag nu och inte lades till i Oxygen OS förrän communityn byggdes fram till Nougat-utgåvan (efter två ROM slogs samman). Det är lite tråkigt att se, särskilt i ljuset av mjukvaruproblemen som OnePlus har haft den här månaden efter sammanslagningen av ROM, från bootloader sårbarheter till GPL-efterlevnadsproblem. Vi är hoppfulla att när dammet lägger sig efter sammanslagningen av de två teamen kommer OnePlus att återgå till formen och fortsätta att positionera sig som ett utvecklarvänligt alternativ.

Med "Minigolf" version av Geekbench i handen gick vi ut och började testa andra telefoner för benchmark-fusk också. Tack och lov visar våra tester inget fusk från företagen som var inblandade i skandalen för ett halvt decennium sedan. HTC, Xiaomi, Huawei, Honor, Google, Sony och andra verkar ha konsekventa poäng mellan det vanliga Geekbench-bygget och "Minigolf" bygga vidare på våra testenheter.

Tyvärr hittade vi möjliga bevis på benchmarkfusk som vi ännu inte har kunnat bekräfta från ett par andra företag, som vi kommer att undersöka vidare. Det allra värsta exemplet på detta var i den Exynos 8890-drivna Meizu Pro 6 Plus, som tog benchmarkfusket till en annan ytterlighet.


Ett hemskt exempel

Meizu har historiskt sett sin CPU-skalning extremt konservativt. Noterbart är att de ofta ställer in sina telefoner så att de stora kärnorna sällan kommer online, även när de är i deras "prestandaläge", vilket gör flaggskeppsprocessorerna (som de utmärkta Exynos 8890) som de lägger i sina flaggskeppstelefoner fungerar som mellanregisterprocessorer. Detta kom på sin spets förra året när Anandtech kallade Meizu ut för deras dåliga prestanda på Anandtechs JavaScript-riktmärken på Mediatek Helio X25-baserade Meizu Pro 6, och noterade att de stora kärnorna förblev offline under större delen av testet (när testet skulle ha körts nästan uteslutande på det stora kärnor). Anandtech märkte förra veckan att en mjukvaruuppdatering hade skickats till Meizu Pro 6 som äntligen gjorde det möjligt för Meizu att använda dessa kärnor till fullo. Anandtechs seniorredaktör för smartphones, Matt Humrick, anmärkte den där "Efter uppdatering till Flyme OS 5.2.5.0G presterar PRO 6 betydligt bättre. Kraken, WebXPRT 2015 och JetStream-poängen förbättras med cirka 2x-2,5x. Meizu justerade tydligen belastningströskelvärdet, vilket gjorde att trådar kunde migrera till A72-kärnorna oftare för bättre prestanda."

Tyvärr verkar det som att snarare än att förbättra CPU-skalningen för sina nya enheter för att få bättre benchmark-poäng, verkar de ha ställt in telefonen att byta till att använda de stora kärnorna när vissa appar är det löpning.

När du öppnar en benchmarking-app rekommenderar vår Meizu Pro 6 Plus att du byter till "Performance Mode" (vilket bara räcker för att bekräfta att de letar efter specifika paketnamn), och det verkar göra en väsentlig skillnad. När telefonen är i standardläget "Balansläge" får telefonen konsekvent runt 604 och 2220 på Geekbenchs enkelkärniga och flerkärniga sektioner, men i "Performance Mode" får 1473 och 3906 poäng, till stor del tack vare att de stora kärnorna förblir avstängda under större delen av testet i "Balance Mode" och slås på i "Prestandaläge". Meizu verkar låsa de små kärnorna till sin maximala hastighet på 1,48 GHz och sätta ett hårt golv för två av deras stora kärnor på 1,46 GHz när de körs Geekbench i "Performance Mode" (med de andra två stora kärnorna som tillåts skala fritt och ganska aggressivt), vilket vi inte ser när kör "Minigolf" bygga.

Även om det kan vara en trevlig funktion att kunna välja mellan ett högeffektläge och ett lågeffektläge, verkar det i det här fallet inte vara något mer än ett salongstrick. Meizu Pro 6 Plus ser anständiga poäng i "Performance Mode" för den vanliga Geekbench-appen, men när du använder "Minigolf" byggd av Geekbench, sjunker den direkt tillbaka på samma prestandanivå som den har när den är inställd på "Balansläge". Det högre prestandatillståndet på Meizu Pro 6 Plus är bara för benchmarking, inte för daglig användning.

En sak att notera är att när vi testade Meizu Pro 6 Plus i "Performance Mode" med hemligheten byggd av Geekbench, de stora kärnorna kom online om vi spelade in klockhastigheterna med Qualcomm Trepn. Vi har ännu inte bestämt om Meizu känner igen att Trepn kör och slår på de stora kärnorna i del på grund av det, eller om det helt enkelt sätter på de stora kärnorna på grund av den extra CPU-belastningen som den skapar. Även om det kan låta kontraintuitivt att en extra belastning i bakgrunden (som när vi höll prestandadiagram på under testet) skulle öka resultaten av ett riktmärke, Meizus konservativa skalning kan betyda att den extra omkostnaden var tillräckligt för att skjuta den över kanten och kalla de stora kärnorna till handling, vilket förbättrar prestandan för alla uppgifter.


När mottagliga OEM: er tar upp feedback...

Efter våra tester kontaktade vi OnePlus om problemen vi hittade. Som svar, OnePlus lovade snabbt att sluta rikta in benchmarking-appar med sitt benchmarkfusk, men tänker fortfarande behålla det för spel (som också blir benchmarkade). I en framtida version av OxygenOS kommer denna mekanism inte att triggas av riktmärken. OnePlus har tagit emot vårt förslag att lägga till en växling också, så att användarna vet vad som händer under huven, och åtminstone borde den orättvisa och vilseledande fördelen i riktmärken vara rättad. På grund av den kinesiska nyårshelgen och deras eftersläpning av funktioner kan det dock dröja ett tag innan vi ser användarvänliga anpassningsalternativ för denna prestandafunktion. Även om det bara är en förbättring att korrigera beteendet, är det fortfarande lite nedslående att se regelbundet applikationer (som spel), eftersom det är en krycka att rikta in sig på specifika appar, istället för att förbättra den faktiska prestandan skalning. Genom att på konstgjord väg öka processorns aggressivitet och därmed klockhastigheterna för specifika appar istället för att förbättra deras telefoners förmåga att identifiera när den faktiskt behöver högre klockhastigheter skapar OnePlus inkonsekvent prestanda för sina telefoner, vilket bara kommer att bli mer uppenbart när telefonen blir äldre och fler spel som OnePlus inte har riktat in sig på är släppte. Men implementeringen tillåter för närvarande spel att prestera bättre. OnePlus gav också ett uttalande för denna artikel, som du kan läsa nedan:

 'För att ge användarna en bättre användarupplevelse i resurskrävande appar och spel, särskilt grafiskt intensiva De implementerade vi vissa mekanismer i communityn och Nougat-byggen för att trigga processorn att köra mer aggressivt. Utlösningsprocessen för benchmarking av appar kommer inte att finnas i kommande OxygenOS-byggen på OnePlus 3 och OnePlus 3T.'

Vi är glada att höra att OnePlus kommer att ta bort benchmarkfusket från sina telefoner. Framöver kommer vi att fortsätta att försöka pressa OEM-tillverkare att vara mer konsumentvänliga när det är möjligt och kommer att hålla utkik efter framtida benchmarkfusk.

Tyvärr är det enda riktiga svaret på denna typ av bedrägeri konstant vaksamhet. Som smartphone-entusiastgemenskapen måste vi hålla ögonen ute efter försök att lura användare som detta. Det är inte själva benchmarkpoängen som vi är intresserade av, utan snarare vad benchmarks säger om telefonens prestanda. Medan benchmark-fusket ännu inte var aktivt på OnePlus 3 när vi granskade det räckte en enkel mjukvaruuppdatering för att lägga till denna vilseledande "funktion", och illustrerar tydligt att det inte är möjligt att kontrollera enheterna för benchmarkfusk när de lanseras första gången tillräckligt. Problem som denna kan läggas till dagar, veckor, månader eller till och med år efter att enheten har lanserats, artificiellt att blåsa upp de globala medelvärden som samlats in av riktmärken månader framåt, vilket påverkar den slutliga databasen resultat. Det bör noteras att även med dessa justeringar som tillverkarna var tvungna att investera tid och pengar för att utveckla, Vi ser vanligtvis bara ett par procentenheters ökning av jämförelseresultaten (exklusive ett par fransfall som Meizu, där fusket täcker över mycket större problem). Ett par procentenheter, vilket är mycket mindre än gapet mellan de bäst presterande och sämst presterande enheterna. Vi skulle dock hävda att med enheter som kör allt mer liknande hårdvara, kan de extra procentenheterna vara den avgörande faktorn i rankningstabellerna som användare i slutändan slår upp. Bättre drivrutinsoptimering och smartare CPU-skalning kan ha en helt enorm effekt på enhetens prestanda, med skillnaden mellan poängen för den högpresterande Qualcomm Snapdragon 820-baserade enheten och den sämst presterande (från en stor OEM) över 20 % på Geekbench. Tjugo procent från drivrutinsoptimering, snarare än ett par procentenheter från att spendera tid och pengar för att lura dina användare. Och det handlar bara om utvecklingsinsatser som kan påverka benchmarkpoäng. Många av de största fördelarna med att investera i att förbättra en enhets programvara dyker inte alltid upp på riktmärken, med OnePlus som erbjuder utmärkta verkliga prestanda i sina enheter. Det borde verkligen vara tydligt var ett företags utvecklingsinsatser bör fokuseras i detta fall. Vi når ut till fler företag som fuskar på benchmarks när vi hittar dem, och vi hoppas att de är lika mottagliga som OnePlus.


Vi vill tacka teamet på Primate Labs än en gång för att de har arbetat med oss ​​för att avslöja detta problem. Det skulle ha varit betydligt svårare att korrekt testa för Benchmark Cheating utan "Mini Golf"-utgåvan av Geekbench.