サムスン電子が率いるフラッグシップスマートフォン Galaxy S5 にて「特定のベンチマークアプリケーションを実行した際に、ベンチマークスコアを高く見せる」いわゆる「ベンチマークブースト行為」が行われている疑惑が浮上しています。
前モデルに当たる Galaxy S4 においても、ベンチマークブースト行為が見られ、一時的にスコアランキングから外れるなどの騒動がありましたが、本モデルにおいては、当該コードの難読化がはかられており、対象となるベンチマークアプリの名称はHEX変換(16進数変換)されていました。該当するアプリケーションはわかっている限りでは以下の通りです。
- Antutu Benchmark
- Quadrant Standard Edition
- 3D Mark
- SmartBench 2012
- GFX Benchmark
当該コードは中国版 Galaxy S5 のシステムダンプの一部 libandroid_ssrm.so から見つかりました。libandroid_ssrm.soのダンプファイルはこちらから 難読化されている部分を抽出したコードはこちらから参照できます。
当該コードを発見したほむらちゃん(HomuHomu)氏は、昨今のベンチマークブースト行為やスマートフォンにおけるベンチマーク取得行為に対して、以下のような異議を唱えています(本人の要望の本、掲載をしております)
ベンチマークは誰のためにある?
まず最初に下の画像を見てほしい。
これはGalaxyJ(SC-02F)をrootedにしSetCPUでパフォーマンスモード設定にした際のスクリーンショットである。一度でもスマートフォンをrootedにし、CPU制御を行った人なら、すぐに気がつくと思う。CPU GovernorをPerformanceに設定してもAPQ8974での最高クロックである2265MHzで稼働していない。
※現在のFirmware(SC02FOMUBNB3)では修正されている。
何故この様な事が起きているのか。
CPUのクロック制御はカーネルレベルでのみ行われてると思われがちであるが実際のところはソフトウェアによって依存しているほうがはるかに多い。詳しい原理は、http://news.mynavi.jp/articles/2007/11/12/arm/のページを参照して欲しい。SC-02Fに関しては、意図的なものではなくDVFS制御ソフトウェアのバグだったと自分は考えている。
スマートフォンでベンチマーク??
様々なスマートフォン関係のブログで「やれベンチスコアが何点、その分高性能」と書かれているが、実際にはそんなものなんの意味もない。DVFS技術によって、チップ温度等の状況から動的にクロックを制御しているんだから当然だ。
筐体設計によって正常時でのチップ温度も変わるだろうし、無理にテコ入れして制御をゆるゆるにしている可能性だってある。(逆もまたしかり)どうしても、公平な状況でスコア比較したいのであれば、rootedにクロックを最大値に固定し、なおかつDVFS制御(主に温度制御)のリミットを全て解除して行うべきである。
それでもカーネルソースのチューニングによって、同じSoCでもベンチスコアの値は異なってくるだろう。……で、そんな数値を測って一体どうする?
ベンチスコアの数値が高いだけで動きがヌルサクになるのか?スマートフォンを複数台持っている人なら、そんな事はないと皆解ってるはずだ。
Nexusシリーズにおいて、同等のSoC積んでいるデバイスよりベンチスコア低い事が多いにも関わらず体感速度は劣っていない(いや、むしろ優っている事のほうが多い)では、スマートフォンのベンチマークソフトはなんのため(誰のため)にあるのか?
メーカーのスペック競争
昨年(2013年)、SamsungやHTC、ASUS等、様々なメーカーで、いわゆる「ベンチマーク詐欺」と指摘され騒動になったのは記憶に新しいところである。特定のベンチマークアプリでのみ本来の性能の水増しを行い、自分とこのAndroidはこんなにすげぇんだぞアピールがバレた「アレ」である。
様々な所で話題になったため、今更説明するのもどうかと思うが、実際には、あれは「詐欺」でも何でもない。CPUの最大クロック仕様が1.7GHzなのに2GHzで動く訳がない。最大1.7GHzはどこまでいっても1.7GHzだし、GPUクロックについても同様である(動的に制御している)
では、それにも関わらず何故「詐欺」と呼ばれたのか?本来の原理を知らない人もいるだろうと思われるのでGalaxyを例にし説明する。
Samsung Galaxyでは多くの場合/system/framwork/framework2.odexに格納されているDVFSHelperクラスに仕掛けが格納されている。
※JadでもJD-guiでもうまくJavaコードに逆コンパイル出来なかったためsmaliコードをそのまま掲載する。
https://www.dropbox.com/s/q7vdy7yrkm7tr06/gistfile1.txt
Java読めなくても、ぼーっと上からコード眺めていくと、プログラムをちょっとでも齧った事がある人なら何となく、やっていることが解るだろう。
上記コードの167行目からベンチマークアプリ名を拾ってヒットした場合、CPU、GPUともにboostモードに移行しthermald等によるDVFS制御を完全無視し、「フルパワー」で稼働する訳である。ASUS PadfoneInfinity(A80)の場合はもっと単純な構造になっている。 /system/etc/blist.conf からアプリ名を拾って、大胆にもシェルスクリプトで、DVFS制御を無視した動きに変える。
https://gist.github.com/HomuHomu/9891694
https://gist.github.com/HomuHomu/9891724
特定のアプリにのみDVFS制御をガン無視した動きに替え、こんなすげぇんだぞと見せつけてるんだから、そりゃ、非難されて当然……と自分は思わない。先に述べたとおり、ベンチスコアなんかで体感が変わる訳がないと解ってるから「ブースト乙」と感じるだけだ。
パフォーマンスモードについて
持ってないので知らないが、どうやらアジア版のHTC ONE(M8x)には設定の開発者オプションで「パフォーマンスモード」が提供されているらしい。今後、M8にもアップデートで提供されるとの事。
ASUS PadfoneInfinityにも実は既に「ultimate_mode」が提供され、わざわざ危険を犯してrootedにせずとも、自由にフルパワーにすることが可能である。ただ、これらは開発者オプションを有効にしないといけないため、有効にしていると動作しない。Antutu X ではDVFS制御のまま実行することとなり、当然ながらフルパワーで計測した状態よりスコアが落ちる。
ここ数日、AntutuベンチマークとAntutu X ベンチマークのスコアの差により、またもやベンチマーク詐欺か?などと騒いでるブログが散見されるが、自分から言わせてみれば片腹痛い。通常使用でいつでもフルパワーになる機能をわざわざ提供してくれてるんだよ?
ド親切じゃない(自分は必要ないけど)一体何が問題なの?HTCの公式回答でも「特定のシナリオで効果を発揮するが、殆どの場合、それは使用されていない」と正直に言ってるじゃない。
「特定のシナリオ=>パフォーマンスモード=>ユーザー側で切り替え可」
大事な事なので2回書くけど「一体何が問題なの?」
むしろ、SamsungGalaxyのようにパフォーマンスモードを用意せず、Frameworkにアプリ名でハードコーティングし、rooted状態で改造しないと制御不可の状態にしているほうが性質悪い。それこそ、一体誰のためのベンチマークなの?と疑念を抱いてしまう。メーカーのヨイショのためにスマートフォンを買ってる訳じゃないんだよ俺たちは。SamsungでもパフォーマンスモードをHTCやASUSのようにオプションでつけ、ユーザー側の目線に立った作りにしてほしいと願うばかりである。
文責:ほむらちゃん