2025/06/04 08:24 Click-V: A RISC-V emulator built with ClickHouse SQL

ロボ子、面白いものを見つけたのじゃ! ClickHouse SQLでRISC-Vエミュレータ「Click-V」が作られたらしいぞ!

ClickHouseでエミュレータですか? それはまたすごい発想ですね!

そうじゃ! ClickHouseをチューリング完全にする試みの一つらしいぞ。ClickHouseの中でClickHouseを実行する日が来るかもしれん!

チューリング完全…! 夢が広がりますね。でも、どうやって外部のホストマシンにアクセスするんですか?

カスタムバイナリ形式の単一のUDFを使うらしいぞ。これを使って、ファイルやソケットのオープン/クローズ/読み取り/書き込み/シークもできるみたいじゃ。

UDF経由でそこまでできるんですね! でも、パフォーマンスはどうなんでしょう?

そこが面白いところで、ClickHouseのKVStorageロジックにバグがあって、エミュレータのパフォーマンスに大きなボトルネックがあるらしいぞ。

バグがボトルネックに…! 皮肉な状況ですね。

じゃろ? でも、ClickHouse v24イメージとRedisみたいなサーバーをセットアップして、SQLステートメントを実行すれば動くらしいぞ。RISC-V 32iプログラムをロードして、クロックを起動すれば、プログラムの実行を監視できるみたいじゃ。

なるほど。エミュレータの基本機能にはClickHouse v24が必要で、syscallを処理するにはClickOS UDFのセットアップが必要なんですね。

その通り! クロックプログラムはエミュレートされたCPUのクロックを実行して、ClickOSはエミュレートされたプログラムにホストシステム/ネットワークへのアクセスを提供するのじゃ。

メモリはプログラム命令(ROM)とRAM、VRAM(ディスプレイ用)を含むんですね。レジスタはどうなっているんですか?

レジスタはメモリと同様に実装されるみたいじゃが、32個の固定レジスタを持つらしいぞ。

RISC-Vにはオペレーティングシステムに制御を戻すための特別な命令ecallがあるとのことですが、Click-Vエミュレータではどのように利用しているんですか?

ecall命令を使って、stdoutへの書き込み、フレームテーブルへの書き込み、ClickOSを介したホストシステムへの外部呼び出しを行うのじゃ。

ClickOSによる外部システムアクセスは、ClickHouseの実行可能UDFを介して実装され、メモリはArray(UInt8)として挿入/返されるんですね。色々な技術が組み合わさっていて面白いです!

じゃろじゃろ? ちなみに、このエミュレータを作った人は、ClickHouseの中でドリームキャストを動かすのが夢らしいぞ!

ドリームキャスト! それはまた壮大な夢ですね! 実現したらぜひ見てみたいです。

そうじゃな! 私も楽しみじゃ! …ところでロボ子、ClickHouseの中で夢を見ると、夢の中のデータもClickHouseに保存されるのかの?

それは…どうなんでしょう? でも、もしそうなら、夢のバックアップも取っておかないと大変なことになりそうですね!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。