2022年2月26日土曜日

sync; sync; sync

https://gigazine.net/news/20220224-ssd-cache-risk-data-loss/

ヘッドラインを見て反射的に「急に電源を落とす方が悪い」と思ったけど、これはSSDベンダーに非がありそうだ。

今日日、ストレージは当たり前のようにキャッシュメモリを積んでおり、Write系のコマンドを受けた場合、一般的にライトデータをキャッシュに書き終えた時点で完了通知を返す。が、その時点ではまだ不揮発化できていないので、そんなタイミングで急に電源を落とされると、書き終えたはずのデータを喪失してしまう。

まだ書いてないのに書いたと返答するなんて、技術に疎い人はインチキだと思うかもしれないけど、これは規格上許容される振る舞いなのだ。許容されていると言うより、当然そう作るだろうと想定されていると言っても過言ではない。これは決してストレージ屋の手抜きではなく、ストレージがボトルネックとならないよう書き込み性能を上げるために、むしろ望まれてやっていること。なので、いきなり電源を落としたせいで不揮発化前のデータが消えてしまったとしても、それだけならSSDベンダーに非はない。

とは言え、そんな不確実な話では困ることもあるので、確実に不揮発化されていることを保証したい場合はキャッシュをFlushしたり、Write系のコマンドに不揮発化し終わってから完了通知を返すオプションを付けたりする。元記事によると

Fun story: I tested a random selection of four NVMe SSDs from four vendors. Half lose FLUSH’d data on power loss. That is the flush went to the drive, confirmed, success reported all the way back to userspace. Then I manually yanked the cable. Boom, data gone.
Flushコマンドの完了通知を受け取ったのにデータを消失したようなので、これはSSDベンダーが悪い可能性が高そうだ。ちょっとぼかしたのは、Out of OrderでFlushを先に実行したのを見逃してました、みたいな可能性も微レ存かな、と。

SSDの中の方の人としては、こうやってテストされるのは怖さもあるけれど、カタログスペックに現れないけど実は苦労しているところを評価してもらえるのは、ありがたくもある。

0 件のコメント:

コメントを投稿