【OS開発よもやま話】パフォーマンスを改善したらアプリが止まった話
ソフトウェア開発には、ヴィルトの法則があるため
開発者は、最適化 の作業から逃れることができません😅
OS も例外ではありません。リリースしたら、アップデートに向けて最適化の作業を延々と続けます。
OS のパフォーマンスが改善することは、誰にとっても嬉しいことです。
不利益なんかあるはずがありません。
・・・アプリの設計が完璧ならね。
《最初の大型アップデート》
製品を発売した後の最初の大型アップデートで、私たちはファイルシステムの高速化を行いました。
アプリケーション開発者からの要求も多かったため、
と思っていました。
◎アプリが止まるという報告
しかしリリース後に、とあるアプリが止まるという報告を受けました。
スマホなどの汎用 OS であれば、
「アプリ側で対応して、パッチをリリースしてね」
で終わるのですが、専用 OS となるとそうもいきません。
リリース前に、各アプリの動作確認はしているのですが
当然、自社で開発したものではないので、詳細なテストは不可能です。
しかし、原因には心当たりがありました。
◎リリース前の出来事
実は、リリース前にも自社開発のアプリが止まる、という出来ことがありました。原因は、アプリ側の実装でした。
ソフトウェアでは、2 つ以上の処理を並列して実行させることがあります。
そのときは、必ず「全ての処理が完了した」ことを確認してから、次の処理に移る必要があります。これを「同期を取る」などと言ったりします。
このときは、アプリ開発者がこの処理を怠っていました。
処理速度や処理順が「固定されている」という前提で、プログラムをしてはいけません。いくら、テストを通過したとしてもです。
市場では、テスト環境では起き得ないことも起きます。
例えば、アップデートによってパフォーマンスが変わってしまったりね😅
つまり、私たちがファイルシステムのパフォーマンスを改善したことによって、処理Bの方が先に完了するようになってしまったわけです。
《苦渋の再アップデート》
おそらく、問題の起きた社外製アプリも同様のことが起きていたのではないかと、私たちは推測しました。
このときは、仕方ないので
「問題の起きた社外製アプリだけ、古いアルゴリズムを適用する」
という再アップデートをしました。
本来、特定のアプリに依存した分岐処理を OS に実装することは不適切です。しかし、パフォーマンスの改善を全て捨て去ってしまうことは出来ませんでした。
◎アプリが OS に迷惑かけることもあるんやで
このときは、ユーザーの間で
という論調がありました。
一般の人からしたら「今まで動いていたものが動かなくなった」ので、
OS のアップデートに不備があったように見えます。
しかし、原因は明らかにアプリの実装でした。
私は、アプリ開発も、ハードウェア制御も、OS 開発も経験してきたのですが、大まかに以下のような傾向があると感じています。
割り込み処理、ミューテックス、セマフォなど、あまり勉強していないことがあります。
また、知識はあっても以下のようなテストをしっかり行っているチームは稀です。
どのようなタイミングで割り込みが入っても止まらない
どのような処理順になっても動作不定にならない
プロのプログラマーを名乗るなら、並列処理くらいは問題なく実装できるようになってほしいものです。