検索エンジンのスレッド数スケーリングを実測したときの話です。本編の結果は別記事に書きました。今回はその裏側——最初の計測結果を丸ごと捨てた話をします。ベンチマークを取る人には他人事ではないはずです。
最初の計測は、きれいで、間違っていた
1スレッドから順に10スレッドまで、順番に計測しました。結果はきれいな曲線を描き、「11スレッドが最速5.2秒」という数字も出ました。グラフにして、さあ記事に——という段階で、念のため同じ条件を測り直したんです。
同一条件で、結果が最大54%ブレました。 4スレッドは11.0秒だったのが9.0秒に。11スレッドは5.2秒だったのが8.0秒に。5.2秒という「最速記録」は、再現しませんでした。
計測クジラを引いたわけでも、バックグラウンドプロセスの仕業でもありません。犯人はマシンの筐体でした。
犯人: ファンのないMacの熱履歴
計測機は MacBook Air(Apple M4)。ファンレスです。連続して負荷をかけると本体が熱を持ち、サーマルスロットリング(熱によるクロック制限)がかかります。つまり、計測結果が「直前に何を測っていたか」に依存する。
これが厄介なのは、ランダムなノイズではなく系統誤差になることです。1→2→…→10スレッドと順に掃引すると、後半のスレッド数ほど「前の計測で温まった状態」で測ることになる。多スレッド側が不当に不利になり、しかもそれが毎回同じ向きに働くので、何回測って平均しても消えません。ブレではなく偏りです。
最初の「11スレッドが最速5.2秒」は、たまたま冷えた状態で走った1回でした。きれいなグラフほど疑うべきでした。
是正: ラウンドロビン
対策はシンプルです。スレッド数ごとにまとめて測るのをやめて、1〜16スレッドを1周する掃引を4ラウンド繰り返し、各スレッド数はラウンド間の中央値を取る。 こうすると、どのスレッド数も「冷えた状態」と「熱い状態」を均等に経験します。熱履歴の偏りが特定のスレッド数に集中しない。
是正後の計測(128回)で出た結論が、本編の「8スレッドで頭打ち・3.0倍」です。5.2秒という数字は消え、7.4秒が再現可能な床になりました。
【追記 2026-08-29】「均等に経験する」の範囲を、正確に書き直します
上で「どのスレッド数も冷えた状態と熱い状態を均等に経験します」と書きました。これはラウンドの粒度でのみ正しく、掃引の中では成立していません。
結果CSV(
results_threads16_rr.csv・128行)を読み直したところ、4ラウンドとも掃引の順番は 1→16 の昇順のままでした。ランダム化も、昇順・降順の交互もしていません。つまり1周の中では、多スレッド側のほうが温まった状態で測られています。この偏りは残っています。ラウンド別の合計時間(検索語「Tokyo」)はこうなっていました。
ラウンド 合計 round1 127.1秒 round2 155.1秒 round3 152.4秒 round4 161.7秒 1周目だけが冷えている。 ラウンド間のブレは、1スレッドで1%、8スレッドで55%、13スレッドで56%。負荷が高い条件ほど熱の影響を受けています。
したがって、ラウンドロビン+中央値が実際に達成したのは次の3点です。
- 条件ごとのまとめ取りをやめた(ある条件だけが自分の熱を溜め込むのを防いだ)
- 冷えた1周目と熱い4周目を、全スレッド数が1回ずつ受け取るようにした
- 中央値(4点なので中央2点の平均)で、最も冷えた値と最も熱い値を落とした
掃引内の昇順バイアスは残っています。 完全に消すには、周回ごとに昇順と降順を入れ替えるか、順番そのものをランダム化する必要があります。次の計測ではそうします。
本編の結論(8スレッドで頭打ち・1本比3.0倍・スレッド数は自動決定)は変わりません。
是正が効いたことを、どう確かめるか
「新しい計測は正しい」と言うには根拠が要ります。今回は、ヒット件数が十数倍違う2つの検索語(10,967件と722件)で曲線がほぼ完全に一致したことを妥当性の裏づけにしました。
【追記 2026-08-29】この裏づけの強さについて
当初ここには「もし熱や他の外乱が残っていれば、独立した2系列がここまで揃う理由がありません」と書いていました。これは言いすぎでした。 2系列は同じ掃引・同じ熱の履歴の中で測っているので、同じ向きに歪めば、歪んだまま揃うことがあり得ます。 ここで言えるのは「測り直した結果に一定の再現性がある」というところまでです。
初報のCSVは捨てずに参考として保存してありますが、記事には使わないと決めました。撤回した数字を「参考値」として載せ続けると、いつか誰かがそれを引用します。
教訓
- ファンレス機のベンチは、測定順序が結果に乗る。 順に掃引した曲線は後半が系統的に不利
- きれいな単発記録ほど再現確認を。 冷えた1回は最速記録に化ける
- 是正はラウンドロビン+中央値。 冷熱を全条件に均等配分する
- 妥当性は独立系列の一致で確かめる。 同じ計測の繰り返しだけでは偏りは見えない
ベンチマークの敵はライバル製品ではなく、自分の筐体の熱でした。
そして、ストレージを専有している巨大ログを圧縮して保管し、さらに高速に検索したいなら UwView Pro をどうぞ。永続索引・圧縮キャッシュ検索・約1/9保管で、開き直しも検索も一段速くなります(全OS対応・買い切り/月額プランあり)。
開発者より: アプリ・Kindle本・公開プロジェクトの一覧は GitHub: amru195704 にまとめています。
お願い
本記事の情報は参考目的で掲載しており、正確性・完全性を保証するものではありません。機能の有無は各バージョン時点の確認であり、今後のアップデートで変わる可能性があります。誤記・不正確な情報がございましたら、コメント欄よりご指摘いただければ、確認のうえ修正いたします。


コメント