FPGA開発日記

カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages , English Version https://fpgadevdiary.hatenadiary.com/

ISSの出力のログファイルサイズを制御したい

ISSでOSをシミュレーションしていると、デッドロックしているのを見逃してしまい、ディスクを食い潰していることがある。 これを防ぐために、指定したサイズのファイルサイズを越えると、シミュレーションをストップする機能を追加した。

github.com

使ったのは、stdio.hのfgetpos()だ。これにより、FILE*の現在のオフセット量を取得できる。1ステップシミュレーションをする度に、このオフセットの値を確認していき、指定したファイルサイズを越えると、そのタイミングでシミュレーションをストップする。

    // Check Max Size
    if (stdout != GetDbgFilePointer()) {
        int64_t cur_file_size = GetCurrentDbgFileSize ();
        if ((GetMaxDebugFileSize () != 0) &&
            (cur_file_size > GetMaxDebugFileSize ())) {
            SetStopSim (true);
            DebugPrint ("<Achieved Log File size = %d[byte]>\n", GetCurrentDbgFileSize ());
        }
    }

ちなみに、このオプション--max_sizeはMB単位で指定するようにしており、指定しなかった場合はデフォルトの0、そして0の場合は比較操作をしないようにしている。 Google Flagsでの指定だ。

DEFINE_int64 (max_size, 0, "Max size of log file [MB]");