永久仮称

ゲーム関係、本、映画などの日記、最近は新型コロナの記事記録

PS3の3月1日障害の考察

3月1日9時から翌日9時迄、薄型以前の初期型PS3に障害が発生した。
公式にSCEから閏年問題として発表された。幸い友人の初期型PS3持ちは当日起動して居ないようだ。そのためネット上(スラドツイッター2ch)の事象を統合すると以下だろうか。

  • 3月1日9時から発生、
  • ファーム表示上では2000年1月1日で変更出来ない
  • PSNへの接続の他、トロフィーなど日時を利用するアプリで異常。
  • OnlineOFFLINE関係無く発生。
  • エラーメッセージはハードウェアエラ
  • 翌日9時には正常起動可能
  • ただし起動直後は3月1日付け
  • 公式リリースにて閏年問題と発表

エラーメッセージ内容、後期機種で発生しない事、ファームバージョンに関係無い事等から部品の問題には間違い無く、時計の部品はRTCしか無いだろう。
RTCの値を想定してみるとこんな感じらしい

現実       RTC     表示
2010/02/28 2010/02/28 2010/02/28
2010/03/01 2010/02/29 2000/01/01 ←RTCの誤りを修正
2010/03/02 2010/03/01 2010/03/01 ←RTCが1日ずれたまま

ファームで日付が初期化されていたのはRTCから正常な値が取得出来なかった事に間違い無いだろう。
謎なのが公式に閏年問題として発表された点だ。発表した事は問題無い。部品に問題があり、SCEに非が無い事を示したかったのかもしれない。そうでは無く、RTCが閏年の情報つまり日付の形でファームウェアに渡していた仕様だ。
PCで解説すると

  1. RTCは電池を入れてから秒数を延々とカウントする。
  2. PCの電源を入れるとRTCはOSにカウントを返す。
  3. OSはカウントに値を加算して実日時を示す整数にする。
  4. OSは実日時整数を表示する段階で日付、時刻に計算して使用する。(ココで初めて閏年の計算が必要になる
  5. OSが定期的にInternet上のNTPサーバーを確認し、実日時整数を修正する。同時にカウントに加算する値を修正する。

話を簡略する為にファームウェアとOSを混ぜたが、大体こんな感じの筈だ。

PS3での疑問点はファームウェア表示の段階迄閏年を計算する必要が無いのにRTCで閏年計算した点だ。しかもRTCは実際の時刻を持つ必要は無いのに正確にOFFLINEでも発生した。と言うのはRTCはそれ程信用出来ないのだ。2000以前のPCを使っていた人なら気が付くが、結構時間がずれる。電源オンオフ等の周囲の電圧から影響を受けやすいのだ。それに、全部一度に製造した訳でも無いのに出荷時点で時刻を合わせる必要がある。後から電池を入れ直すとかも出来無い。
ではおかしな仕様を組み込んだ利点は何だろうか。
RTCからファームに日付時刻形式で渡しているかはわからない。が、多少の時刻差を持ってしてもユーザーから修正できる日時とは別に、修正出来無い部品に日付時刻を持っていたかったのでは無かろうか。修正出来無い日時は改造対策やら、動物の森のようなリアルタイムゲームに応用出来るだろう。ネット認証にも応用出来るかもしれない。穿った見方ではソニータイマーの実装だって可能だ。これ等の理由であれば仕様を公開出来無い理由に説明が付く。いや閏年問題と発表しているのだから違うのかもしれない。
今回の件でSCEの対応は、異常状態のRTCでもファームが適当な日時を設定可能にする位だろう。しかし、次にいつ起こるかわからない話なので、放置するのか対応するのかも不明だ。信頼性の低い部品を使用しているのだから放置しては危ない気もする。
正直な話、閏年計算を間違えるのは良くある話だ。ITニュースを漁れば幾らでも出てくる。携帯プレイヤーから海外銀行のATMでも発生したそうだ。何せ日付関係はなかなかテストが難しいのだ。しかし、発生した事象から仕様をあれこれ想像して見るのは楽しい。