Solaris 動的トレースガイド

第 21 章 syscall プロバイダ

syscall プロバイダは、システム内のすべてのシステムコールに開始時 (entry) と終了時 (return) のプローブを提供します。システムコールは、ユーザーレベルのアプリケーションとオペレーティングシステムカーネルを結びつける主要なインタフェースです。このため、syscall プロバイダは、システム関連のアプリケーションの動作について非常に多くの情報を提供します。

プローブ

syscall プロバイダは、システムコールごとにプローブを 1 組ずつ提供します。 うち 1 つは、システムコールに入る前に起動する entry プローブです。もう 1 つは、システムコールが完了したあと、ユーザーレベルの制御に戻る前に起動する return プローブです。どの syscall プローブでも、関数名は計測されるシステムコールの名前です。モジュール名は未定義です。

syscall プロバイダが提供するシステムコールの名前は、/etc/name_to_sysnum ファイルで確認できます。多くの場合、syscall が提供するシステムコールの名前は、マニュアルページのセクション 2 の名前と対応しています。しかし、syscall プロバイダが提供するプローブの中には、文書化されたシステムコールに直接対応していないものもあります。以下では、この矛盾の主な原因について説明します。

古いシステムコール

syscall プロバイダが提供するシステムコールの名前が、以前の実装内容を反映している場合があります。たとえば、以前の UNIXTM を反映して、/etc/name_to_sysnum ファイル内では exit(2) の名前が rexit になっています。同様に、time(2) の名前は gtimeexecle(2)execve(2) の名前はどちらも exece になっています。

サブコード化されたシステムコール

セクション 2 のシステムコールの一部は、文書化されていないシステムコールの下位操作として実装されています。たとえば、System V セマフォ関連のシステムコール (semctl(2)semget(2)semids(2)semop(2)、および semtimedop(2)) は、semsys という単一のシステムコールの下位操作として実装されています。semsys システムコールは、最初の引数として、要求されたシステムコールを示す実装固有の「サブコード」(SEMCTLSEMGETSEMIDSSEMOP、または SEMTIMEDOP) を取ります。単一のシステムコールを使用して複数のシステムコールを実装しているため、複数の System V セマフォに対して syscall プローブは syscall::semsys:entry および syscall::semsys:return の 1 組だけ存在します。

大規模ファイルのシステムコール

4G バイトを超える大規模ファイルをサポートする 32 ビットプログラムは、64 ビットファイルのオフセットを処理できなければなりません。大規模ファイルの場合、大規模オフセットを使用するため、大規模ファイルを操作するときは、複数のシステムインタフェースを並行して利用します (lf64(5) のマニュアルページを参照)。これらのインタフェースについては、lf64 に記載されています。ただし、インタフェースごとに個別のマニュアルページは用意されていません。これらの大規模ファイルシステムコールインタフェースは、表 21–1 のように、独自の syscall プローブとして記載されています。

表 21–1 sycall 大規模ファイルプローブ

大規模ファイル syscall プローブ

システムコール 

creat64

creat(2)

fstat64

fstat(2)

fstatvfs64

fstatvfs(2)

getdents64

getdents(2)

getrlimit64

getrlimit(2)

lstat64

lstat(2)

mmap64

mmap(2)

open64

open(2)

pread64

pread(2)

pwrite64

pwrite(2)

setrlimit64

setrlimit(2)

stat64

stat(2)

statvfs64

statvfs(2)

非公開システムコール

一部のシステムコールは、ユーザーとカーネル間の境界にまたがる Solaris サブシステムの非公開実装です。このため、マニュアルページのセクション2 に、これらのシステムコールはありませんこのようなシステムコールの例として、POSIX.4 メッセージキューの実装の一部として使用される signotify システムコールや、fuser(1M) を実装するために使用される utssys システムコールなどがあります。

引数

entry プローブの場合、引数 (arg0 .. argn) はシステムコールの引数です。return プローブの場合、arg0arg1 の両方に戻り値が格納されます。システムコールに失敗した場合は、D 変数 errno にゼロ以外の値が入ります。

安定性

以下の表に、syscall プロバイダの安定性を DTrace の安定性機構に従って示します。安定性機構の詳細については、第 39 章安定性を参照してください。

要素 

名前の安定性 

データの安定性 

依存クラス 

プロバイダ 

発展中 

発展中 

共通

モジュール 

非公開 

非公開 

不明 

機能 

変更の可能性あり 

変更の可能性あり 

ISA 

名前 

発展中 

発展中 

共通

引数 

変更の可能性あり 

変更の可能性あり 

ISA