Man page of CHIKU_WAIT(2)

システムソフトウェアとポエムの差が激しいので,高山病に注意

オープンソースカンファレンス2019 Hokkaidoに出展してきた

はじめに

今年も、オープンソースカンファレンス2019 Hokkaido(OSC19do)が札幌で5月31日(金) と6月1日(土) の2日間開催され、僕は2日目に公立はこだて未来大学高度ICTコース・システムソフトウェア研究室のブースでシステムソフトウェアの展示をしていました。

展示したもの

「インストール不要!画像閲覧みまもりVisor ~OSの下からあなたのネットサーフィンを見守りたい~」というものを展示しました。ハイパーバイザでストレージI/Oを見守って、その中に画像が有ったらOSの下からUDPで隣のPCに送りつけて安全安心なインターネッツをしているか見守るソフトウェアです。自分で作っておきながら本当に悪趣味ですね。

仕組み

本当はコードも乗せたいですが、今の御時世何があるか分からないので、ふわっと概要だけ書きます。(逮捕されたくない)

いつも通り、準パススルー型ハイパーバイザのBitVisor: A Single-VM Lightweight Hypervisorベースで作りました。OSとストレージのやり取りやデバイス入出力を下から監視したい時、おもしろハイパーバイザを作りたいときはシンプルでオススメです。

入出力の中で画像を監視したいので、BitVisor内のAHCIドライバ(drivers/ata/ahci.c)内のahci_copy_dmabuf関数内で、シャドウバッファとゲストのバッファ間のコピーするデータを覗いてその中に0xFFD8(JPEGの開始マーカ)があるか見守っています。 そして開始マーカを発見したら、BitVisorのUDPパケット作成機能を使って、開始マーカ以降のデータを別PCに送ります。受け取ったPC側は画像を画面に表示するという仕組みです。 なお、複数のデータブロック(セクタをまたがる)場合には、データが欠損してうまく画像が出力できなかったり、モザイクが出たりします。これはこれで趣のあるのか…?

実際に動かすとこういう感じです。

このデモは、ブラウザが書き込むキャッシュに存在する画像に反応して出力しています。デモの面白さを上げるために、Linuxの方でvm.dirty_expire_centisecsvm.dirty_writeback_centisecsなどのダーティメモリの保持期間やページキャッシュの設定を少し変えて書き込み頻度を上げています。

そして最後にUSBメモリに書き込んでUSBブートするだけで完成です。BitVisorがブートしたらもうUSBメモリは抜いて大丈夫です。これでお手軽に見守れる環境が完成します。

展示してみて

低レイヤーは中々グラフィカルな面白いデモを作りづらく、興味関心を持ってもらうのがとても難しいと感じています。今回の画像を題材にしたおもしろハイパーバイザはグラフィカルかつ悪趣味に画像を無慈悲に表示するので、結構興味持ってもらえたのかなと思っています。いろんなの人が見てくれて高評価で嬉しかった。 やっぱり低レイヤーは楽しいね。

ただ、作っているときに低レイヤーの面白さと、個人の倫理観(技術者倫理とも言うのか?)が常にぶつかっていて謎に葛藤しました。出来ればこういう悪趣味なものは作りたくないね

公立はこだて未来大学システムソフトウェア研究室では、研究とは特に関係なく毎年OSC doでおもしろ低レイヤーデモを展示しています。来年もお楽しみに!