さくらインターネットブースで展示したデモンストレーションの構築時に使ったトリック(?)を紹介します。2019今回展示したデモデモ制作の背景2019年は、さくらインターネットとしてもこれまでより大きなブースを作ることになり、立ち寄られた方に楽しんでもらえる「インタラクティブなデモ」をしよう、ということになりました。役不足です(同モデルにはビデオ出力がない)。サーバー用の組み込みビデオプロセッサでは、ビデオの出力性能が貧弱で、今回のデモのようなインタラクティブな描画には向きません。搭載し、同ボードから映像を出すことにしました。搭載したデュアルプロセッサのワークステーション」ですが、非常に大きなマシンなので、搬出・搬入も一苦労します。このため、最初から最後までデータセンター内でマシン(予備機を含めて2台)のセットアップを済ませておき、データセンターからビックサイトの展示会場まで直送することにしました。会場でデモ中に映像が途切れるようなことがあってはテンションだだ下がりです。このため、データセンターに置いたまま、デモの動作が途切れないかを確認するための手段が必要でした。ビデオカードを増設した場合には、そのような便利機能は使えません。装置でも倉庫に転がっていればよかったのですが、そもそもホスティング事業が主なビジネスともいえる弊社の場合、KVM切り替え機すらほとんど見かけません。出力された映像をリモートから確認するというイレギュラーな要件に適したオモチャを適当に見繕う必要がありました。キャプチャデバイスなどをサーバラック内に仕込む方法です。等を用意する必要があり、面倒です。ボードを利用することにしました。信号キャプチャーが可能です。1フレームを読み取るのは割と簡単です。今回、会期中にマシン障害が発生した場合の対策として本番機と予備機の2台を準備しました。この2台のマシンの出力を同時にモニタリングするために複数映像を同時表示できるHDMIマルチビューアを利用しました。信号が出続ける特徴があり、長期間にわたるビデオキャプチャのトラブルを防ぐ上でも有効です。マルチビューアはシリアルコンソール操作により表示内容の切り替えも可能ですので、両方の画面を出力したり、片方の画面をフルスクリーン表示したり、と遠隔操作することも可能です。16.04と、BIOSのPOST画面が映っている)これでリモートからVNC経由でデータセンター内の画面を表示できるようになりました。この仕組みは1ヶ月以上無事に動き続け、でデモの開発はほぼリモートで行われ、実際にマシンの前で作業を行ったのは搬出前の動作確認(1日)のみで済みました。最適化の余地コードを見られるとすぐわかるのですが、非常に雑な実装でフレームバッファのコピーを繰り返しています。RGB順のピクセルフォーマットとは異なっています。コントローラに食わることでゼロコピー化も可能でしょう。ビデオのピクセルデータを受け取る時点で工夫するのが理想です。渡せれば画面の差分転送が可能になるので、そこまでやりきれば、一般的なデスクトップ画面などを転送する場合にパフォーマンスが高いものが作れるのではないかと思っています。VNCは、変更があった領域のみを転送することが可能なプロトコルですので、各種パフォーマンスのチューニングをしていけば今後で活用余地が見いだせるのではないかと思っています。今回使用したVNCサーバーは、まだホントに画面が映るだけで差分転送をしていないので画面全体を毎回再転送するため非効率でした。エンコードしてストリーミングする実装を使ったほうが良かったと思います。エンコーダを持っているので、映像のストリーム送信の用途には向いています。CSI変換モジュールを取り付けるとHDMI映像をキャプチャできます。OpenMomoなどが利用できる状況にはなかったのですが、今時だとH.264+WebRTCなどもアリですね。ボードで色々試しています。ボードでこしらえた「受信したDVI-D映像を表示できるVNCサーバー」を使ってみました。HDMI映像をIP経由でストリーミングできる手段は増えてきていますが、こんな方法もあるということで参考になれば幸いです。7日目の記事もお楽しみに。