FirefoxでYoutube見続けるとSSDが早死にする問題とその対処法
Firefoxのキャッシュの振る舞いを見ていたら問題を見つけたので対処方法を紹介します。
目次
FirefoxでYoutubeを見続けるとどうなるか
タスクマネージャを開いてFirefoxでYoutubeを見てみると、おかしいことがわかります。
動画を見ているだけなのにSSDへの書き込みが連続して発生するのです。
試しに後述のabout:configでbrowser.cache.disk.parent_directoryでキャッシュの位置をUSBメモリなどにしてみるとよくわかります。
またキャッシュされた内容はアドレスバーにabout:cacheと入力すると確認できます。
そしてわかったこと。
なんとFirefoxはYoutube動画をすべてディスクキャッシュとしてため込んでいるのです。
動画なんて何度も見ることは少ないのでキャッシュする意味は少ないはずです。
これではSSDの書き込みが延々と発生し、SSDの寿命に影響が出そうです。
Firefoxのキャッシュの仕組み
アドレスバーにabout:configと入力すると設定変更が出来ます。
検索でcacheと打ち込むとキャッシュに関する設定が出ます。
今回の問題に関わる設定は以下の通り。
設定 | 説明 |
---|---|
browser.cache.disk.enable | ディスクキャッシュを有効にするかどうか |
browser.cache.disk.capacity | ディスクキャッシュサイズKB(smart_sizeがdisableの時に有効 |
browser.cache.disk.smart_size.enabled | ディスクキャッシュをディスク容量から自動設定する |
browser.cache.disk.max_entry_size | ディスクキャッシュするコンテンツの最大サイズKB |
browser.cache.disk.content_type_media_limit | メディアデータを格納する最大% |
browser.cache.disk.parent_directory | キャッシュフォルダへのフルパス(要追加) |
browser.cache.memory.enable | メモリキャッシュを有効にするかどうか |
browser.cache.memory.capacity | メモリキャッシュサイズKB |
browser.cache.memory.max_entry_size | メモリキャッシュする最大サイズKB |
問題は、Youtubeのビデオはチャンクというコマ切れになっており、メディアデータとして認識されていないことと、browser.cache.disk.capacityがもともと大きすぎる(51200=51.2MB!)ことです。
これによりYoutube動画のチャンクがもれなくディスクキャッシュされてしまう、というわけですね。
またbrowser.cache.disk.enableをfalseにしてディスクキャッシュを無効にしたとしてもbrowser.cache.memory.max_entry_sizeが5MBあるのでメモリキャッシュも動画データですぐに食いつぶされてしまいます。
ちなみにFirefoxはディスクキャッシュが有効の場合、優先してディスクキャッシュに記録します。セッションキャッシュなど有効期間が短い時だけメモリにキャッシュします。
なのでメモリキャッシュは実際はほとんど使われません。
FirefoxでYoutube見続けるとSSDが早死にする問題の対処法
さて、対処法を紹介します。
about:configを開いて以下の項目を128にします。
browser.cache.disk.max_entry_size
これはディスクキャッシュするコンテンツの最大サイズKBで、デフォルトでは51.2MBになっています。Youtubeの動画データのチャンクは128KBは必ず超えるので、それ以下のJavascriptやHTMLや画像データはキャッシュされ、動画データは無事キャッシュされなくなる、というわけです。
ちなみにこうしても128KBを超えるデータは幸か不幸かメモリキャッシュには入らないのでメモリキャッシュを食いつぶす心配もありません。
Firefoxのキャッシュフォルダを変更するには
上のエントリの
browser.cache.disk.parent_directoryのキャッシュフォルダへのフルパスを追加すればFirefoxのキャッシュフォルダを変更できます。
例えばTドライブにUSBのポータブルSSDを差し込んでキャッシュ専用にしてしまったとしたら
browser.cache.disk.parent_directoryはT:\
のような感じに設定すればOKでしょう。
C:のSSD全体の寿命を気にするなら、システムの設定の環境変数のTEMPとTMPも上のテンポラリ用ドライブにしておけば書き込み頻度を抑えることができます。
ちなみにこの設定はFirefoxの再起動が必要となります。
まとめ
ということでFirefoxでYoutube見続けるとSSDが早死にする問題の対処法でした。
歴史あるソフトなのでネット回線が非常にボトルネックだった時代から設定が引き継がれています。今となってはHDDディスクキャッシュより光回線の方が速い場合もありますね。
(ちなみに2018年のアップデートでRace Cache With Network=RCWNという機能が追加され、スピンアップ時間などで遅い場合に備えキャッシュがある場合でもネットワークリクエストをして早い者勝ちにする仕組みが導入されています。これはabout:configのnetwork.http.rcwn.enabledをfalseにすることで切ることもできます。従量回線の場合はこちらの方がよさそうですね)
余談
実はそもそもSSDは書き込みが多いと壊れやすいのか?という問題と、書き込みを分散するウェアレベリングの効果はないのではないのか?という議論があります。
これは、経験的に申し上げますとSSDは書き込みが多いと個体によってはだんだん壊れますが、HDDと違い見た目ではほとんど感じられません。あと一つのブロックに集中して書かないようにずらしていくウェアレベリングは一定の効果はあります。
というのは、私が過去にメーカーでNANDフラッシュのウェアレベリングドライバを書いていたから笑
SSDは物理ブロックレベルでみてみると、実は納入された時点ですでにいくつか物理ブロックが壊れている場合があるのです。この確率はメーカーによって出されていてドライバはそれを前提に出荷時にそれらのブロックを隠します。ちょうど液晶のドット欠けみたいなものですね。
で、この壊れやすさは同じ型番のフラッシュでも個体によってもかなり変わってきます。で、ずっと使ったメモリの物理ブロックのマップを見るとブロックが死んで歯抜けになっているのがわかります。
でもこれはユーザーからみると、その分、余分に用意されたリザーブ領域があてがわれるので、全く壊れていることが認識できません。予約領域がなくなった場合でもだんだん容量が減っていくだけで、HDDの様にファイルシステムが扱う不良セクタとして現れるわけではないのです。
あとウェアレベリングはあくまで、局所的なデータの消し書き(一つのファイルを書いて消してを繰り返すこと)をするような場合に物理ブロックが偏らないようにする仕組みなので、ネットで見かける、「ドライブ全体を何度も繰り返し消し書きしたけどウェアレベリングの効果はなかったよ」というのはそもそもウェアレベリングの目的を取り違えている様です。
ということで余談でした。あくまでこれは過去の話なのとNANDフラッシュの個体差や設計による話なので、現在では確かにここまでシビアではないかもしれませんけどね。