# RAMCloud
`A Philosophy of Software Design` 第20章で事例として取り上げられる分散ストレージシステムのプロジェクト。著者らの全体目標は、データセンターネットワークを介してクライアントマシンがストレージシステムにアクセスする際の遅延を可能な限り小さくすることであり、その達成のためにカーネルを迂回して RAMCloud がネットワークインターフェースコントローラと直接通信できる特殊なハードウェア方式を採用した。これはカーネル経由のネットワーキングでは要件を満たせないという事前の計測結果に基づく決定であり、複雑性の増加を伴う「根本的な修正」の一例として本章で紹介される。この1点を最適化したことで、システムの残り大部分は単純な設計のままで済んだとされる。(Source: [[@2018__YaknyamPress__A Philosophy of Software Design - Chapter 20 Designing for Performance]] §20.1)
RAMCloud プロジェクトではまた、単一の操作のコストを単体で計測するマイクロベンチマークのためのフレームワークを独自に構築した。フレームワーク自体の構築には数日を要したが、以後は新しいマイクロベンチマークを5〜10分で追加できるようになり、既存ライブラリと RAMCloud 独自クラス双方の性能を把握する基盤として数十件のマイクロベンチマークが蓄積されている。(Source: [[@2018__YaknyamPress__A Philosophy of Software Design - Chapter 20 Designing for Performance]] §20.1)
## wiki 内の言及
- [[@2018__YaknyamPress__A Philosophy of Software Design - Chapter 20 Designing for Performance]]: 第20章の中心事例。`Buffer` クラスは可変長のメモリ配列(リモートプロシージャコールの要求・応答メッセージなど)を管理するために設計され、メモリコピーと動的記憶割り当てのオーバーヘッドを減らすことを目的とする。論理的には1本の連続したバイト配列に見えるが、内部的には複数の不連続なメモリチャンク(呼び出し側が所有する外部チャンクと、`Buffer` 自身が所有し内部にコピーして格納する内部チャンク)に分割できる。少なくとも1回のリモートプロシージャコールの実行中に4つ以上の `Buffer` が作成されるほど頻繁に使われており、この `Buffer` クラスのクリティカルパス(内部チャンクへの小領域確保)を再設計した結果、速度が約2倍になり、コード行数も20%削減された(1886行→1476行)。
## 関連
- 概念: [[性能を意識した設計]]
- 実体: [[John Ousterhout]]
- 書籍: [[wiki/entities/A Philosophy of Software Design|A Philosophy of Software Design]]