Episodes[9] // C# Shellと、排他制御と、FPGAと


「あ、FPGAのドライバーだ……FPGAだ!」


 忠志は素っ頓狂な声を上げた。ツバメのシステムで実行したperfコマンドの出力を見て、何がCPUを占拠しているのかを理解したのである。



 突然のできことにアカネは目をパチクリさせた。


「え?」

「FPGAです! このモジュールはFPGAのドライバーだ」


 忠志は思わずホシの肩を両手で揺すった。ホシはやれやれといった表情を浮かべたまま、為されるがままだった。


 一方、アカネは怪訝な表情を浮かべる。


「FPGA、何に使ってるんです?」

「主に画像処理に」

「……それが暴走している」

「でも、そもそもCPUの使用率を下げるために使っていたはずなので……」


 すると、それまで腕を組んで押し黙っていたホシが、口を開いた。


「排他制御にスピンロックを使っている箇所があります。関係ありませんか?」


 なるほど、それまでソースコードを読んでいたというわけだ。


「スピンロック?」


 忠志の問いに、アカネが答える。


「スピンロックとは、ロックが解放されるまでループして待つという方法のことですね。ビジーウェイトとも言います」


 得意げなアカネの鼻を、ホシが即座にくじいた。


「つまり、トイレが空くまで一々何度も確認しにくるような待機方法です。利点は空いたときにすぐに飛び込めること」


 ホシはアカネをちらりと見た。

 忠志にはアカネの表情を直視する勇気はなかった。


「ああ……」

「つまり、誰がトイレを占拠して迷惑をかけているのを特定しないといけないわけですね」


 そう言ってアカネはニッコリと小首をかしげた。


――待て、トイレの話題を出したのはホシだ。僕じゃない。


 だが、ホシは澄まし顔だ。アカネの反応はともかく、ホシとしては一矢報いれば満足というということだろうか。


 いずれにしても、ホシの意図は分からないが、言動からするとアカネに対抗心を燃やしているように見える。思わぬ災害に発展しないよう気をつけなければ。


「嵯峨博士、どうされました?」


 ホシに促され、忠志は慌てて取り繕う。


「ああ、思い出した。このFPGAは並列処理ができないので、ドライバー内で排他制御をしているんです。だから……その……リアルタイム処理とバッチ処理が重なると、シビアに……つまり、FPGAの奪い合いのオーバーヘッドが無視できなくなる」


 しどろもどろにそう言った後、忠志は両手を挙げて白状した。


「って論文に書いてありました」


 すると、アカネは白けた表情を浮かべる。

 しかし、他方のホシは、仏頂面が少し和らいだように見えた。気のせいだろうか。


「もし何かが意図的にロックを占有し続けたらどうなりますか?」


「タイムアウトするまで、待ち続けると思います。やってみるのが一番です」


 忠志はシミュレーターの視神経にテスト用の映像を入力した後、コンソールに簡単なプログラムを打ち込んだ。



===================================================

maint@nebulai-test:~$ csharp

saru C# Shell, type "help;" for help


Enter statements below.

csharp> LoadAssembly("NebulAI.dll");

csharp> using System.Threading;

csharp> using Hut.NebulAI.ComputerVision;

csharp> var p = new ImageProcessor();

csharp> p.IsHardwareAccelerated

true

csharp> p.AcceleratorInfo.DeviceName

"/dev/ipu0"

csharp> p.ProcessStream((x, y, z) => {for(;;) {Thread.Sleep(1000);}});

===================================================


「これで、FPGAを占有した状態になったはずです」


 忠志は、別のシリアルコンソールで、topコマンドを実行する。CPU使用率上位に表示されたプロセスを見て、忠志は息を呑んだ。


===================================================

[kworker/0:0H]

[kworker/1:0H]

[kworker/2:0H]

[kworker/3:0H]

[kworker/4:0H]

[kworker/5:0H]

[kworker/6:0H]

[kworker/7:0H]

[kworker/8:0H]

[kworker/9:0H]

[kworker/10:0H]

[kworker/11:0H]

[kworker/12:0H]

[kworker/13:0H]

[kworker/14:0H]

[kworker/15:0H]

===================================================



「……kworkerばっかりだ」


 それは、忠志が最初の手術で見たtopコマンドの結果と同じであった。

 結果が同じだからといって、原因が同じとは限らない。しかし、少なくともハリマ熱病ウィルスと同じ症状を再現することができたということである。


「つまり、管理者権限すら必要ないということですか」

「一般ユーザー権限だけでこんな結果が起きるなんて――」


 すると、アカネが忠志の言葉を遮った。


「そもそもスピンロックをこういう風に使うのは設計ミスですが、今回そこは本質的なところではありません。一般ユーザー権限でもCPU使用率を百パーセントにするのは簡単です。ネットワークアプリケーションの脆弱性で任意コードが実行できれば良い」

「ああ、確かに。つまり、問題はハリマ熱病ウイルスは一般ユーザー権限で動作している可能性さえあるということですね」

「ウィルスの捜索範囲を広げなければなりません。それが分かったのは、確かに前進ですが……」


 アカネは面倒臭そうにそう言うと、欠伸をしてソファーに寝転がった。本当にこの人はマイペースだ、と忠志は思った。三百年前の日本ではさぞかし窮屈だったことだろう。


 ホシは足を組み直し、タブレット端末を机に置いた。


「では、ウィルスの動きを封じられないとして、CPUの使用率を下げる方法は……?」

「手っ取り早いのは……視覚サービスを停止することです」


===================================================

maint@nebulai-test:~$ sudo service stop nebulai-visiond

maint@nebulai-test:~$

===================================================


 忠志がコマンドを打ち込むと、たちまちCPUの使用率は下がり、平常通りとなった。しかし、これはシミュレーターだからできることである。


「でも、この方法は、視覚を完全に奪います。過去の映像記憶さえ思い出せなくなるかもしれません」


「医療行為として認められないかも知れません」


 と、ホシ。


「違いない。とんだ荒療治だ。ただ、CPUの使用率が下がります。コア数を減らす必要もないでしょう。そうすれば、会話はできるようになる。介助があれば日常生活に復帰できます」


「確かに、医療の基本は治療による作用が副作用を上回るかどうか、です。しかし、法律ではこのような治療法は原則として想定されておらず、仮にできたとしても、長期の治験が必要となります」

「なるほど……」

「はぁ、法律ってこういうときに役立たないですよね」


 そう言って、アカネは寝返りを打った。


 その時、突然ツバメが絶叫した。


「ぎゃぼしー!」


 視線がツバメに集まる。

 アカネは血相を変えた。


「ツバメさん!?」


  • Xで共有
  • Facebookで共有
  • はてなブックマークでブックマーク

作者を応援しよう!

ハートをクリックで、簡単に応援の気持ちを伝えられます。(ログインが必要です)

応援したユーザー

応援すると応援コメントも書けます

新規登録で充実の読書を

マイページ
読書の状況から作品を自動で分類して簡単に管理できる
小説の未読話数がひと目でわかり前回の続きから読める
フォローしたユーザーの活動を追える
通知
小説の更新や作者の新作の情報を受け取れる
閲覧履歴
以前読んだ小説が一覧で見つけやすい
新規ユーザー登録無料

アカウントをお持ちの方はログイン

カクヨムで可能な読書体験をくわしく知る