60年前から存在するメモリの欠陥を克服し、レイテンシーを削減する新たな手法「Tailslayer」が登場

Googleの研究員であるローリー・ワイアード氏が、60年前から存在しているDRAMの欠陥を克服するためのライブラリ「Tailslayer」を公開しました。
GitHub - LaurieWired/tailslayer: Library for reducing tail latency in RAM reads · GitHub
https://github.com/LaurieWired/tailslayer
Your RAM Has a 60 Year Old Design Flaw. I Bypassed It. - YouTube

コンピューターのメモリとして広く使用されているDRAMは、キャパシタに蓄えられた電荷の有無で「0」と「1」を判別する仕組みです。キャパシタ内の電荷は時間と共に失われるため、電荷を一度読み出して書き込み直す「リフレッシュ」という作業を一定時間ごとに行い続ける必要があります。
リフレッシュの作業中はメモリへアクセスすることができず、CPUがメモリにアクセスしようとした際にDRAMがリフレッシュ作業中だった場合、数百ナノ秒から数マイクロ秒の待機時間が発生してしまいます。この問題は1966年にDRAMが考案された時から長期に渡って存在していました。
多くの人にとって数百ナノ秒がどれくらいの長さなのかを実感することは難しいものの、CPUのクロック数でいうと数千クロックを捨てている計算に。リアルタイム性を特に重視する金融などの分野で問題になっていました。なお、コンピューター内部での数百ナノ秒がどんな長さなのかについては以下の記事を読むと把握できます。
プログラマーが知っておくべき「PC内部の通信速度」 - GIGAZINE

Tailslayerは、メモリに書き込む際に複数の独立したDRAMチャネルにデータを複製します。そして読み込みの際には複製先の全てのアドレスに読み取り命令を出し、一番最初に読み込めたデータを採用するという仕組み。リフレッシュ中のメモリからデータが読めずとも、複数配置したデータのどれかがリフレッシュ中でなければ長い待ち時間は発生しないというわけです。
「複数の独立したDRAMチャネル」に書き込む方法を編み出すため、ワイアード氏はメモリコントローラーが物理アドレスをどのように扱っているかを統計的なタイミング測定を用いて特定。データが異なるチャネルに配置されるよう、チャネルスクランブリングオフセットを用いて書き込みを行うと述べています。
AMD EPYC 9255におけるTailslayerを使用した際のレイテンシーの違いは下図の通り。横軸がレイテンシーで縦軸がそのレイテンシーが現れる頻度を示しています。赤い点線はTailslayerを使用しなかった場合のレイテンシーの分布です。青線はTailslayerを使用した場合の分布で、2つに複製しただけの場合から6つに複製した場合までを4段階の濃さで表示しています。Tailslayerを使うとレイテンシーを抑えることが可能で、6箇所に複製する設定では最悪の場合でもレイテンシーを250ナノ秒程度に抑えることに成功しました。

AMD、Intel、GravitonなどさまざまなCPUとメモリの組み合わせで違いを確かめた結果は下図の通り。いずれの場合でも、Tailslayerを使用して6個に複製した場合にはレイテンシーのスパイクを回避できていることが分かります。

ワイアード氏によると、99.99パーセンタイル点でのレイテンシーは最大で15分の1まで削減できたとのこと。高頻度取引(HFT)のような極めてわずかな遅延が大きな影響を与える分野で活用できるはずだと述べました。
・関連記事
インターネットの速度が遅い原因は多くの場合帯域幅とレイテンシーにあるとの指摘 - GIGAZINE
オンラインゲームはレイテンシを感じさせないゲームプレイをどのように実現しているのか? - GIGAZINE
ウェブサイトのパフォーマンスを測定するときに平均値ではなくパーセンタイル値を採用するべき理由 - GIGAZINE
プログラムの動作が異常に遅い原因は「ランダムアクセス」かもしれない - GIGAZINE
CPU使用率が増加するとパフォーマンスがどのように低下するかをGitHubのパフォーマンスエンジニアリングチームが解説 - GIGAZINE
戦闘機「F-35」にはC++の特殊ルール適用版が使われており例外処理や再帰関数が禁止されている - GIGAZINE
・関連コンテンツ
in ハードウェア, ソフトウェア, Posted by log1d_ts
You can read the machine translated English article A new method called 'Tailslayer' has eme….






