view text/abyss.tex @ 17:a873cb5949cd default tip

Fix format.
author Kaito Okura <e175748@ie.u-ryukyu.ac.jp>
date Tue, 15 Sep 2020 16:55:43 +0900
parents 404d88c60399
children
line wrap: on
line source

\section{Abyssサーバー}
本稿で提案しているAbyssサーバーはクライアント側から送られたRakuスクリプトを実行するためのサーバーである.

Figure2はAbyssサーバーを用いたRakuの実行手順である.
AbyssサーバーはユーザーがRakuを直接立ち上げるのではなく, まず同一ホスト内でAbyssサーバーを起動し, ユーザーはAbyssサーバーにファイルパスをソケット通信で送り, Abyssサーバーがファイルを開き実行し, その実行結果をユーザーに返す.

\begin{center}
    \includegraphics[width=80mm]{images/abyss.pdf}
    \caption{Abyssサーバーを用いたRakuの実行}
    \label{fig:Abyss_execute}
\end{center}

\section{Abyssサーバーの高速化}
Rakuは開発中のため, 主なアプリケーションはコンパイラとテストコードしかない.
最初の目標として, テストの高速化を行う.
% 現状では..秒かかる.
% テストは..項目あり, 連続的に実行される.
我々の方法では, テストスクリプトをサーバーに連続的に送り実行することになる.
この時に, 毎回コンパイラをロードしなおすのでは高速化にならない.
サーバーからの出力はソケット経由で行われるが, 各テスト項目ごとにソケットのopen/closeを繰り返すのは望ましくない.

一方で, 前のテストの結果が次のテストに影響することは望ましくない.
例えば, 大域変数が残っていたりする場合である.
これらの後始末をする必要がある.

複数のテストの実行や入出力をパイプライン的に実行することにより, 高速化が可能だと思われる.

パイプライン実行は並列実行と異なり, 個々のテストは並行に実行されない.
サーバー上での並列実行を可能にするには, 複数の実行ワーカーを用意すればよい.

これらの内容により, テストを高速で実行することが最初の目標となる.

実際のスクリプト環境として使用する場合には, 実行するスクリプト間での干渉を抑える必要がある.
しかし, JITコンパイルされた結果を再利用しないとすると, 実行時間は不利になる.
これらを調整する仕組みとAPIを開発し, 評価する必要がある.

現在は, Abyssサーバーの実行の再現を行なっている.