2024.12.19
システムの穴を運用でカバーしようとしてミス多発… バグが大量発生、決算が合わない状態から業務効率化を実現するまで
書換え耐性が低いNAND flashメモリ向けのキャッシュアルゴリズム(全1記事)
リンクをコピー
記事をブックマーク
Shinpei Matsuda氏:「書換え耐性が低いNAND flashメモリ向けのキャッシュアルゴリズム」と題してMatsudaから発表します。
最初に簡単な自己紹介と、個人的な動機について話します。専門は半導体のデバイス、特にトランジスタの物理で、ITエンジニアではありません。研究したいことがあったので退職D進(※退職後、大学院に進学すること)しましたが、その研究所から「あなたの研究計画書は現実的ではありません」と言われました。渋々NAND flashメモリのコントローラーの研究を行いましたが話が合わなすぎて退学しました。
その時に思い付いたアイデアをどこかに出したいと思って学会に投稿もしましたが、いろいろあって話すことができず、そのアイデアの供養として話したいと思いました。
人類が生み出すデータが指数関数的に増加していることが問題になっていて、ハードディスクを置き換えるかたちで、NAND flashメモリの普及が進んでいます。NAND flashメモリは今後も重要なメインストレージデバイスであり続けると思われ、高密度化においては多値化という技術が非常に重要です。
NAND flashメモリも当初は0か1の1ビットしか保存できませんでしたが、1、2、3、4の4つのレベルを書き込む「マルチレベルセル」という技術が生まれました。この高密度化がどんどん進み、今は4bit/cellまで保存できます。
この多値化によって高密度化が達成されましたが、同時にメモリセルの書き換え可能な回数がどんどん減っているという問題があります。今の市場に出ている4bit/cellでは、1,000回しか書き換えることができず、これが6bit/cellまでいくと100回以下になってしまうだろうと言われています。
液体窒素で1,000回まで増やそうという提案もされていますが、この書き換え回数が少ないメモリを液体窒素なしでどうやって使いこなせばいいかというのは技術的な課題なわけです。
そこでまず、メモリアクセスの統計的な性質に注目しました。(スライドを示して)こちらに示したのはストレージへのトレースファイルです。アクセス履歴をまとめたファイルを解析して、左からアクセスの多い順に並べて、縦軸にそのアクセス回数をプロットしたものです。
見てわかるとおり、アクセスが集中しているのはごく一部のページです。この例では、46パーセントのデータは週に一度しかアクセスされないFrozen Dataです。少し脱線しますが、この分布はZipfian分布やZipfの法則と言われている統計的な分布に従うことが知られています。
Zipfain分布は、メモリアクセス以外にも自然言語の単語の出現回数など、いろいろなところで出てきます。
先ほど述べたとおり、大半のデータはほとんどアクセスされないので、書き換え耐性が低いメモリであったとしても、ほとんどアクセスされないFrozen Dataの保存専用のメモリとして使えばいいということになります。
ただ、すべてを書き換え耐性が低いメモリだけで構成すると、一部の書き換えが多いところで何度も書き換えられてメモリが使えなくなってしまうので、複数の種類のNAND flashメモリを組み合わせてストレージとして使えないかと考えました。構成としては、ごく一部のアクセスが集中しているところをSLCのキャッシュで吸収して、Frozen Dataは書き換え耐性が低いメモリに入れます。それ以外はTLCなど、ある程度書き換え耐性のあるメモリに入れるということを考えました。
(スライドを示して)素直にLevel2のキャッシュを組んだ場合がこちらです。この構成にすることで、書き換え耐性の低いメモリの書き換え回数が抑えられると思われますが、同時に1つの問題が考えられます。このストレージにFrozen Dataが入ってきた場合、最初はL1キャッシュに書き込まれ、そのあとL2キャッシュになって下位のメモリ(書き換え耐性の低いメモリ)に落ちるわけです。
L2キャッシュは通り過ぎるだけなので、余計なことをしています。さらにL1、L2キャッシュにおいてFrozen Dataを書き込んでしまうと、NAND flashメモリ特有のガーベッジコレクションが頻発することが懸念されます。NAND flashメモリは上書きできないメモリなので、容量が足りなくなったら全体から空き容量を探してきますが、これが起きるとストレージの性能が大きく低下することも懸念されます。
そのためFrozen Dataに関しては、L1キャッシュから落とす際にL2キャッシュをスキップして、直接もう1つ下位のメモリに落とし込みたいわけです。では、どうやってL2キャッシュをスキップすればいいのか。L1キャッシュから落とすデータのアクセス頻度を区別できれば、実現可能であることがわかります。
つまり、L1キャッシュから落ちるデータがFrozen Dataであると判断した場合は、L2キャッシュをスキップして下位のメモリに直接落とす。Frozen Dataではないと判断した場合は、今までどおりL2キャッシュに落とせばよいということになります。そのため、問題設定は「L1キャッシュからデータを追い出す際に、そのアクセス頻度を区別できるようなキャッシュ置換アルゴリズムは可能だろうか」になります。
最初に、一番広く使われているキャッシュ置換アルゴリズムであるLRU(Least Recently Used)について考えました。LRUはご存じのとおり、(スライドを示して)このようなリストでキャッシュを管理していて、基本的にアクセスのあった順から上に詰めていきますが、途中でキャッシュに入っているデータにアクセスがあった場合は、もう一度上に詰め直します。
こうすることで、末尾はキャッシュに入っているデータの中で、一番アクセスが古いデータになるので、アクセスの古い順から落としていくことになります。しかし、このLRUには落とすデータが本当にFrozen Dataなのかを見分ける術はありません。キャッシュに残すべきかどうかを区別しているだけで、追い出すデータがFrozen Dataかどうかを見分ける情報は持っていません。
そのため、LRU以外のキャッシュ置換アルゴリズムが必要になります。そこで、LRU-kアルゴリズムというアルゴリズムに注目しました。LRU-kでは、アドレスと過去のアクセスのタイムスタンプが保存されているテーブルを作り、そのテーブルに従って追い出すデータを決めます。
(スライドを示して)例えば、上の矢印のような順番にアクセスがあったとして、LRUの場合は新しく3のページが入ってきた時に、どこかのページを追い出さなくてはならなくなり、一番アクセスの古い2を追い出そうとします。
しかし、2は頻繁にアクセスされているページです。アドレス0は、もう1つ前を見ると随分昔にアクセスされているので、コールドだと期待できます。そこで、0を落とすにはどうするか。2番目の過去のタイムスタンプを2nd Lastと呼びますが、2nd Lastのタイムスタンプを見て古い順番に追い出すことによって、入った順番ではなくコールドのデータを選択的にキャッシュから追い出すことができるようになります。LRU-kは、既存のLRUの弱点を克服するために考案された最初のアルゴリズムだと言われています。
LRU-kで管理されているキャッシュにFrozen Dataが書き込まれた場合(このスライドの場合はアドレス3がFrozen Data)、どうなるか。
3はFrozen Dataなので優先的に追い出されますが、その際、2nd Lastのタイムスタンプに何も値が入っていない状態で追い出されることになります。なぜなら、Frozen Dataは過去に一度もアクセスされていないからです。なので、この追い出すデータに2nd Lastのタイムスタンプや値が入っているかによって、そのデータがFrozen Dataかどうかを見分けることができます。
考察です。以上のアイデアを確認するためにLRU-kで管理されたキャッシュと、キャッシュから追い出されるデータの数をカウントするプログラムを作りました。全体で1,200万ページくらい書き込まれていますが、そのうち47万ページがL2をスキップして下位のメモリに落ちてきます。L2キャッシュに落ちるのは100万ページくらいです。
下位のメモリに落ちてくるのは、先ほど言ったように過去に一度しかアクセスされていないFrozenのページです。L2キャッシュに落ちるページも、最初はL1キャッシュから下位のメモリに落ちますが、それ以降はL2キャッシュに落ちます。したがって、提案した手法によってL2キャッシュをスキップしてFrozen Dataを下位のメモリ(低書き換え耐性のメモリ)に追い出すことができることを確認できました。
まとめです。書き換え耐性が極めて低いNAND flashメモリを使いこなすために、LRU-kキャッシュアルゴリズム(LRU-kキャッシュ置換アルゴリズムを使ったアルゴリズム)を応用して、L2キャッシュをスキップしてL1キャッシュから追い出すようなアルゴリズムを提案しました。
このアルゴリズムは、初めてアクセスされるデータにしか適用しませんが、例えば1週間以上経過したタイムスタンプのアクセス履歴は消去する、忘れてしまうなど何か工夫を加えると、実装できるかなと考えています。Q2など、LRU-k以外のアルゴリズムも同じようなことができないかなとちょっと考えています。
また、Future Workとしてなんらかのかたちで実装して、どこかに投稿したいと考えています。NAND flashメモリのメモリコントローラーは素人には扱えないので、OSレイヤーでやるならDevice mapperかなと考えています。以上です。
関連タグ:
2024.12.20
日本の約10倍がん患者が殺到し、病院はキャパオーバー ジャパンハートが描く医療の未来と、カンボジアに新病院を作る理由
2024.12.19
12万通りの「資格の組み合わせ」の中で厳選された60の項目 532の資格を持つ林雄次氏の新刊『資格のかけ算』の見所
2024.12.16
32歳で成績最下位から1年でトップ営業になれた理由 売るテクニックよりも大事な「あり方」
2023.03.21
民間宇宙開発で高まる「飛行機とロケットの衝突」の危機...どうやって回避する?
PR | 2024.12.20
モンスター化したExcelが、ある日突然崩壊 昭和のガス工事会社を生まれ変わらせた、起死回生のノーコード活用術
2024.12.12
会議で発言しやすくなる「心理的安全性」を高めるには ファシリテーションがうまい人の3つの条件
2024.12.18
「社長以外みんな儲かる給与設計」にした理由 経営者たちが語る、優秀な人材集め・会社を発展させるためのヒント
2024.12.17
面接で「後輩を指導できなさそう」と思われる人の伝え方 歳を重ねるほど重視される経験の「ノウハウ化」
2024.12.13
ファシリテーターは「しゃべらないほうがいい」理由 入山章栄氏が語る、心理的安全性の高い場を作るポイント
2024.12.10
メールのラリー回数でわかる「評価されない人」の特徴 職場での評価を下げる行動5選
Climbers Startup JAPAN EXPO 2024 - 秋 -
2024.11.20 - 2024.11.21
『主体的なキャリア形成』を考える~資格のかけ算について〜
2024.12.07 - 2024.12.07
Startup CTO of the year 2024
2024.11.19 - 2024.11.19
社員の力を引き出す経営戦略〜ひとり一人が自ら成長する組織づくり〜
2024.11.20 - 2024.11.20
「確率思考」で未来を見通す 事業を成功に導く意思決定 ~エビデンス・ベースド・マーケティング思考の調査分析で事業に有効な予測手法とは~
2024.11.05 - 2024.11.05