この手の問題を診断する際に Simics は完璧なツールなのですが 実行するためには 問題が発生するプログラムを Simics に取り込まなければなりません すなわち Simics 上で Simics を実行するのです まず Simics 内部に開発ホストの複製を作成します これは何も難しいことでは

Similar documents
Pervasive PSQL v11 のベンチマーク パフォーマンスの結果

Microsoft* Windows* 10 における新しい命令セットの利用

Insert your Title here

Arcserve Replication/High Availability 製品の仕組み

Microsoft Word - EFI_Framework_Debug_JP.doc

X-MON 3.1.0

DVDFab6新機能_05.indd

Windows Server 2012 および Windows Server 2008 のインストール

SetupVerup_dl_M

「Microsoft

目次 1 VirtualBoot for Hyper-V とは バックアップを実行するマシンの設定 確認すべきこと SPX によるバックアップ VirtualBoot for Hyper-V を実行するマシンの設定 確

040402.ユニットテスト

Using VectorCAST/C++ with Test Driven Development

nLiteによるドライバの統合 - フロッピーディスク不要のXPインストールCDの作成方法 -

ご利用のコンピュータを設定する方法 このラボの作業を行うには 事前設定された dcloud ラボを使用するか 自身のコンピュータをセットアップします 詳細については イベントの事前準備 [ 英語 ] とラボの設定 [ 英語 ] の両方のモジュールを参照してください Python を使用した Spar

インストール先 PC 推奨環境 Intel Virtualization Technology 対応 CPU Windows 7 以降 64 bit メモリ 4 GB 以上 ハードディスク空き容量 20 GB 以上 インターネット接続 ( アップデートを うため ) ( 動作を保証するものではありま

手順書 14 JumboSpot 用 Pi-STAR のバックアップ手順 2 はじめに JumboSpot を稼働するために必要なコンピュータとして RaspberryPi ZERO W( 以下 ラズパイ という ) を使用しているが 不意な停電やシャットダウン操作を行わずに電源を切った場合などの際

目次 1. はじめに バックアップと復元の概要 Active Directoryのバックアップ Active Directoryの復元 ドメインコントローラの復元 ( 他のドメインコントローラが利用できる場合 )

9 WEB監視

はじめに 商業登記電子認証ソフトは, 商業登記に基づく電子認証制度に係る会社 法人の代表者等の電子証明書を取得するために使用する専用ソフトウェアで, 法務省が提供するものです 商業登記電子認証ソフトを用いることにより, 電子証明書の発行申請に必要となるファイルの作成及び電子証明書の取得 ( ダウンロ

memcached 方式 (No Replication) 認証情報は ログインした tomcat と設定された各 memcached サーバーに認証情報を分割し振り分けて保管する memcached の方系がダウンした場合は ログインしたことのあるサーバーへのアクセスでは tomcat に認証情報

Windows Server 2003 のインストール

5400 エミュレーターII 構成の手引き(第6章 トラブルシューティング)

IBM SPSS Amos インストール手順 (サイト ライセンス)

第一章 LPC2478 ボードの概要...3 第二章 uclinux の初体験 SD カードのテスト USB メモリのテスト USB Devices のテスト network のテスト...6 第三章 uclinux のコンパイル...

ソフトウェア更新の前に お客様に より快適に LGL22 をご利用いただくため ソフトウェア更新によるアップグレードを行っております この手順書は LGL22 とパソコンを microusb ケーブルにて接続してソフトウェア更新を行う方法となります ソフトウェア更新は microusb ケーブルによ

Updating grandMA2 via USB

XAMPP で CMS のお手軽 テスト環境を手に入れよう 2011/5/21 上村崇 1

Sophos Enterprise Console

データ移行ツール ユーザーガイド Data Migration Tool User Guide SK kynix Inc Rev 1.01

CLUSTERPRO MC ProcessSaver 2.3 for Windows 導入ガイド 第 5 版 2018 年 6 月 日本電気株式会社

また IS12T はアップデート以外の動作もできませんので アラームも動作しません IS12T のバージョンによりソフトウェアアップデート所要時間は異なります また インターネットの接続速度や パソコンの性能といったお客様の利用環境により 時間が延びることがあります 本アップデートについて 本ソフト

PHP 開発ツール Zend Studio PHP アフ リケーションサーハ ー Zend Server OSC Tokyo/Spring /02/28 株式会社イグアスソリューション事業部

Microsoft PowerPoint - DEXCS2015_Salome_Installation pptx

CR-UK1ソフトウェアユーザーズガイド

CommCheckerManual_Ver.1.0_.doc

第 3 章 メディア障害とバックアップ リカバリ この章では メディア障害の発生に備えたバックアップ方法と 障害時の基本的なリカバリ方法につい て説明します 1. メディア リカバリ概要 2. ファイルの多重化 3. アーカイブ モードの設定 4. バックアップ概要 5. 一貫性バックアップ ( オ

VMware vSphere ESXi のインストール

1. インストール方法 STEP 1 ダウンロードしたファイルを任意の場所に解凍します Windows 標準の機能を用いて解凍する場合は ファイルを選択して 右クリックメニューから [ すべて展開 ] を選択し 表示されたメッセージに従って解凍します STEP 2 解凍されたフォルダにある Setu

TFTP serverの実装

CompuSec SW 強制削除手順

NFC EXPRESS ASUS NFC Express は Windows 8 対応の外付けデバイスです NFC 対応のスマートデバイス または付属の NFC タグをタッチするだけで 簡単に様々なアクションを実行することができます NFC Express をインストールする NFC Experss

Ver25 メディアマート株式会社 アドバンスト アナリティクス株式会社 Statistics 25.0 のインストール手順書 Authorized User ライセンス ( シングルライセンス ) 1. 事前に IBM SPSS Statistics 25 をインストールする場合 Administ

手順書 20 イメージ最小化作業 はじめに JumboSpot を動かすために使用している RaspberryPi( 以下 ラズパイ という ) に Pi-Star という OS 兼ソフトウェアを microsd カードにセットアップして利用しているが バックアップイメージを残す際に利用するソフトウ

マイフォルダへのアクセス マイフォルダ をクリックすると マイフォルダの一覧画面へ遷移します 利用の手引き ver.5 フォルダの作成 新規フォルダ をクリックして フォルダ名を入力し 作成 ボタンをクリックする ファイルのアップロード ファイルをアップロードしたいフォルダをクリックして開き アップ

CodeRecorderでカバレッジ

Stratus everrun Enterprise Arcserve Unified Data Protection バックアップ / リストア手順書

Microsoft Word - matlab-coder-code-generation-quick-start-guide-japanese-r2016a

Ver26 メディアマート株式会社 アドバンスト アナリティクス株式会社 Statistics 26.0 のインストール手順書 (Windows 版 ) Authorized User ライセンス ( シングルライセンス ) 1. 事前に IBM SPSS Statistics 26 をインストール

PN-T321

(2) [ バックアップツール ] が表示されます [1] [2] [3] [4] [5] [6] Windows Storage Server 2012 バックアップ手順 (V_01) < 画面の説明 > [1] バックアップ項目リスト登録されているバックアップセットの一覧です [2] 新規 ボタ

Linux のインストール

スライド 1

提案書

DSP版モデル対応_リカバリー_手順書_[F12]_

EPSON GT-S620/GT-F720 活用+サポートガイド

CLUSTERPRO MC ProcessSaver 1.2 for Windows 導入ガイド 第 4 版 2014 年 3 月 日本電気株式会社

自己紹介 湯浅陽一 1999 年より Linux kernel 開発に参加 MIPS アーキテクチャのいくつかの CPU へ Linux kernel を移植

サイボウズモバイル KUNAI Lite for Android マニュアル

目 次 1. はじめに アルコールチェッカー管理ソフトのインストール アルコールチェッカー管理ソフトのアンインストール アルコールチェッカー管理ソフトの操作方法 ソフトの起動 NG 判定値の設定

Microsoft Word - XOOPS インストールマニュアルv12.doc

ダウンロードページアップデートマニュアル.ppt

目次 第一章インストールと製品登録 1.1 インストール & ライセンス認証 3 第二章製品活用 - Leawo itransfer 3.1 コンピュータのファイルを iphone に転送 iphone のファイルをコンピュータにバックアップ ファイルを itunes から

AcronisUniversalRestore_userguide_en-US

EPSON GT-D1000 活用+サポートガイド

Red Hat Enterprise Linuxのcron(8)デーモンにデフォルト定義されたtmpwatch命令の動作による、WebOTXのトラブル対処方法

Transcription:

Simics 上での Simics のデバッグ 投稿者 :Jakob Engblom,, 2012/12/05 私はたびたび書いたり話したりしていますが Simics は並列処理のバグのデバッグと マルチスレッドやマルチコアシステムの障害に対するデバッグには実に有効です 非常に複雑なアプリケーション 具体的に言えば Simics 自体の上で このことを証明した例を最近経験しました この例は Simics の反復の完成度と 複雑なソフトウェアに潜む手ごわいバグを解決する際の有効性の両方の 分かりやすい証明であると考えています 私はたびたび書いたり話したりしていますが Simics は並列処理のバグのデバッグと マルチスレッドやマルチコアシステムの障害に対するデバッグには実に有効です 非常に複雑なアプリケーション 具体的に言えば Simics 自体の上で このことを証明した例を最近経験しました この例は Simics の反復の完成度と 複雑なソフトウェアに潜む手ごわいバグを解決する際の有効性の両方の 分かりやすい証明であると考えています この例の説明は Simics に含まれていたバグから始めましょう ある特定の構成に限って発生するバグがありました Simics のターゲットは プロセッサのシミュレーションをテストする ベアメタル型テストコードを実行する Power アーキテクチャマシンです この構成ではたまに Simics またはモデルに含まれているバグのために Simics がクラッシュしました テストを 50 回実行するうちの 1 回程度しか発生しないので 追跡が難しいバグでした 診断のためにデバッガを接続してバグの再現を試みると そういうときに限って発生しません ( 昔からハイセンバグと呼ばれるものです )

この手の問題を診断する際に Simics は完璧なツールなのですが 実行するためには 問題が発生するプログラムを Simics に取り込まなければなりません すなわち Simics 上で Simics を実行するのです まず Simics 内部に開発ホストの複製を作成します これは何も難しいことではなく 単純に 8 コア Intel ターゲット上に標準的な Linux の Fedora 16 をインストールするだけです Linux をインストールしてブートすると システムのチェックポイントが取得されます 次に ホストからの開発コードツリーが TAR ファイルとしてパッケージングされて DVD イメージファイルに置かれます Simics は ブートされたターゲットシステムのチェックポイントから起動され Simics 上で稼働している Fedora Linux は DVD イメージを仮想 DVD ドライブに挿入してマウントします TAR ファイルは ターゲット上のファイルシステムにコピーされて展開されます このようにして Simics のインストールが完了すると新しいチェックポイントが取得されて Simics 上で Simics を実行できるようになります この時点で得られる成果は 完全に自身で完結していて 制御可能で 再現可能な環境です 以下のスクリーンショットは Simics 上で Simics が稼働する様子を示しています ホストと外部の Simics Fedora システムの両方で 同じデスクトップの壁紙を使っています

次のステップは Simics の中にあるバグの再現です この目的のために バグに遭遇するまで内部の Simics を繰り返し実行するシェルコマンドを使用します ( このセッションは明らかに Simics をインストールした 後のチェックポイントから開始します ) ここでの成果は バグに遭遇するまで Simics を実行する準備が整った この構成です

ここまでの流れをまとめると Simics 上で稼働する Simics を構築しました Power アーキテクチャ構成の 内部 Simics はホスト上でクラッシュしました Fedora 16 が稼働している 外部 Simics は 開発ホス トの仮想レプリカ ( ただし Simics 内部を除く ) を提供しています バグの検索とバグの再現の効率を上げるために スクリプトを追加して外部 Simics 内で使用しました

その Simics スクリプトで IA ターゲットシステムに含まれているプロセッサに割り当てたタイムスライスを変更しました こうすることで 並列実行プロセスと Simics でシミュレートしている Fedora 16 OS 内のスレッドのスケジューリングに大きな変化が起こり バグを早く再現する ( バグを再現するまでの内部 Simics の実行回数が少なくなる ) ことにつながります 内部 Simics が起動されて タイミングの変更が IA プロセッサに適用されたら 内部 Simics がテストケースの実行を開始する前にチェックポイントを取得します これで バグに直接つながるチェックポイントが利用できます バグの再現のためにターゲットのウォームアップや Simics を特定の構成にする必要は全くありません チェックポイントは結果的に この問題に関する自己完結したバグレポートとなります 内部 Simics の segfault( セグメントエラー ) ハンドラにマジック命令 ( ブルースター ) を埋め込みます これで 内部 Simics のクラッシュは簡単に捕捉できます 正しいページフォルトの捕捉を試みたり 正しい場所にブレークポイントを設定するよりも このようにマジック命令を使用する方が簡単な場合があります マジック命令とは コード中でバイオマーカーのような役割を果たすもので デバッグ情報や OS Awareness に関係なく常にトリガーの働きをします しかも マジック命令は起動するまでオーバーヘッドは発生しません

ついに 内部 Simics を 20 回程度実行すると バグをトリガーできるようになりました チェックポイントと Simics の反復能力によって バグの再現は困難ではなくなりました Simics のクラッシュは もはやいつでも再現できるようになったので 次はデバッグに移って Simics がクラッシュする理由を考えることにしましょう たまにしか起こらないハイセンバグは 100% 再現可能なボーアバグに変わりました デバッグの最初のステップは 内部 Simics の中に多数ある 動的にロードされたモジュールのマッピングについて考えることです これは 外部 Simics を稼働させて Fedora シェルに Ctrl-Z を送信し 内部 Simics を一時停止させることで実現します このとき Simics 上で動作している Fedora Linux 上の /proc ファイルシステムに ロードアドレスを検出するための応答指令信号が送られます Simics が起動した後にチェックポイントが取得されているので これはチェックポイント中で検出される ソフトウェア構成内のマッピングであることが分かります チェックポイントがオープンされるたびに 同じマッピングが適用されます こうして情報が保存され 使用している Simics モジュールのためのシンボリックデバッグ情報を設定するために利用されます デバッグの次のステップでは チェックポイントを再びオープンし そこからリバース実行を始めて マジック命令がヒットするまで実行を続けます ここで segfault ハンドラが実行される前に内部 Simics が動作していた最終時点のバックアップを取得するために OS awareness が利用されます これによって外部 Simics は 内部 Simics のクラッシュを引き起こした命令とまったく同じ命令を実行します Simics は コードが存在しないロケーション (BCDE) でコードの実行を試みていたことが判明しました そこから 1 命令戻ると BCDE ロケーションへの JMP 命令を実行していました では この JMP BCDE 命令を実行するに至った理由は何でしょう この命令は明らかに Simics の静的コー ドには含まれていませんが Simics 自身が命令実行中に何か生成したと考えられます (Simics には JIT コン パイラが含まれているので 実行中にコードを変更する可能性は 十分にあります )

誤った JMP 命令が作成された状況を調べるために 命令 (JMP BCDE) にメモリー書き込みブレークポイントを設定して リバース実行を進めてみました Simics は 命令の JMP 部分をメモリーに書き込んだ時点で停止しました ここでスタックのバックトレースを実行して コードは JIT が生成したコードストリームに 5 バイトの JMP XYZQ 命令を書き込もうとしていたことが分かりました JMP 命令コードを含むバイトの書き込み時にブレークポイントがヒットしたことから 命令が実行されて Simics がクラッシュしたとき 命令以外の 4 バイト (JMP 命令が本来目指していたロケーションである XYZQ) はまだ書き込まれていなかったことが分かります 命令を ( プロセッサ上で ) 書かれている順序どおりに 1 ステップずつ実行することで 内部 Simics の中でスレッドの切り替えが起こり 入ってきたスレッドが即座に 5 バイトの JMP 命令を実行して現在の問題が起こったと判明しました JMP バイトだけが書き込まれていたことから 狙っていた XYZQ( もともとの ABDCE コードを実行するにはそれでもよかった ) へのジャンプではなく BCDE へのジャンプとなってしまったことが分かります したがって 今回の状況は 読み取りはメモリーの内容をコードに書かれたとおりに実行して 書き込みは通常のデータの書き込みを行うという性質に基づいた 読み取りと書き込みの競合条件の問題であると診断されました 問題が特定されれば その修正はとてもたやすいことでした 同じ構成で Simics の競合条件がもう 1 つ見つかり それも修正されました さらに頻度の高いケースである 複数のスレッドの同時実行に関係する問題で 共有しているデータ構造の更新および読み取りを実行する間に 同期が不完全になるというものでした

要約すると このブログエントリーでは Simics を利用して 現実世界に存在する複雑なソフトウェアシステムの 1 つでもある Simics の 並列実行のバグを検出して修正した一例を説明しました 成功のカギとなったのは Simics が備えている反復能力です タイミングが関係する たまにしか発生しないイベントにも対応できますし チェックポイント スクリプティング リバース実行 デバッグ設備と連携させることもできます 原文はこちら :http://blogs.windriver.com/m2m/2012/12/biggest-predictions-for-m2m.html 本社ブログサイト :http://blogs.windriver.com/