Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

[インデックス 15286] ファイルの概要

このコミットは、Go言語のosパッケージにおけるProcessState.SysUsageメソッドのドキュメントを改善するものです。具体的には、Unix系システムにおいてSysUsageが返す情報がgetrusage(2)システムコールによって定義されるstruct rusageと一致することを明記し、ユーザーがより適切なリソース使用量情報を取得できるようガイダンスを提供しています。

コミット

commit c92d3552e5de31a5195aef5ff04979d61dcbf1a6
Author: Russ Cox <rsc@golang.org>
Date:   Fri Feb 15 17:11:13 2013 -0500

    os: point users of ProcessState.SysUsage to getrusage(2)
    
    R=golang-dev, bradfitz
    CC=golang-dev
    https://golang.org/cl/7352044

GitHub上でのコミットページへのリンク

https://github.com/golang/go/commit/c92d3552e5de31a5195aef5ff04979d61dcbf1a6

元コミット内容

このコミットの元のメッセージは「os: point users of ProcessState.SysUsage to getrusage(2)」です。これは、osパッケージのProcessState.SysUsageメソッドを使用する開発者に対して、その戻り値がgetrusage(2)システムコールによって提供される情報と関連していることを示す、という意図を簡潔に表しています。これにより、ユーザーはより詳細なリソース使用量情報を得るために、Unix系のgetrusage(2)マニュアルページを参照すべきであることが示唆されています。

変更の背景

Go言語のosパッケージには、終了したプロセスの状態に関する情報を提供するProcessState型があります。この型には、プロセスのシステムリソース使用量に関する情報を返すSysUsage()メソッドが含まれています。しかし、このメソッドの戻り値はinterface{}型であり、具体的な型はシステムに依存します。

以前のドキュメントでは、SysUsage()が返す値がUnix系システムでは*syscall.Rusage型であることを示していましたが、その*syscall.Rusageが具体的にどのような情報を含んでいるのか、またその情報がどこに由来するのかについての詳細な説明が不足していました。

このコミットの背景には、開発者がSysUsage()から得られるリソース使用量データをより正確に理解し、活用できるようにするという目的があります。特に、Unix系システムにおける*syscall.Rusageが、標準的なgetrusage(2)システムコールによって提供されるstruct rusageと直接対応していることを明記することで、開発者はgetrusage(2)のマニュアルページを参照して、各フィールドの意味や利用可能なリソース情報を詳細に把握できるようになります。これにより、Goプログラムでプロセスのリソース使用量を分析する際の明確性が向上します。

前提知識の解説

os.ProcessState.SysUsage()

Go言語のosパッケージは、オペレーティングシステムとのインタラクションを提供します。os.ProcessStateは、os.Processが終了した後にその状態に関する情報(終了コード、CPU時間など)を保持する構造体です。 SysUsage()メソッドは、このProcessStateの一部として提供され、終了したプロセスのシステム依存のリソース使用量情報を返します。戻り値の型はinterface{}であるため、具体的な型は実行環境(OS)によって異なります。例えば、Unix系システムでは*syscall.Rusage型が返されます。

getrusage(2)システムコール

getrusage(2)は、Unix系オペレーティングシステムで利用可能なシステムコールの一つです。このシステムコールは、現在のプロセス、またはその子プロセスが使用したリソースに関する統計情報を取得するために使用されます。 getrusage(2)は、struct rusageという構造体へのポインタを引数として受け取り、その構造体にリソース使用量情報を格納します。この構造体には、ユーザーCPU時間、システムCPU時間、最大常駐セットサイズ(RSS)、ページフォルトの数、I/O操作の数など、多岐にわたる情報が含まれています。

syscall.Rusage

Go言語のsyscallパッケージは、低レベルのオペレーティングシステムプリミティブへのアクセスを提供します。syscall.Rusageは、Unix系システムにおけるgetrusage(2)システムコールが使用するC言語のstruct rusageに対応するGo言語の構造体です。 この構造体は、ru_utime(ユーザーCPU時間)、ru_stime(システムCPU時間)、ru_maxrss(最大常駐セットサイズ)、ru_minflt(ソフトページフォルト)、ru_majflt(ハードページフォルト)、ru_inblock(ブロック入力操作)、ru_oublock(ブロック出力操作)など、様々なリソース使用量に関するフィールドを持ちます。これらのフィールドは、プロセスのパフォーマンス特性を理解するために非常に有用です。

技術的詳細

このコミットによる変更は、Go言語のosパッケージのドキュメント、具体的にはsrc/pkg/os/doc.goファイルに対するものです。技術的な変更点は、ProcessState.SysUsage()メソッドのコメントに、Unix系システムにおける*syscall.Rusagegetrusage(2)マニュアルページで定義されているstruct rusageと一致するという記述を追加したことです。

これにより、SysUsage()の戻り値の型が*syscall.Rusageであると知っている開発者は、さらにgetrusage(2)のマニュアルページを参照することで、syscall.Rusage構造体の各フィールドが具体的に何を意味し、どのように解釈すべきかを正確に理解できるようになります。これは、特にプロセスのリソース使用量を詳細に分析したり、パフォーマンスチューニングを行ったりする際に不可欠な情報となります。

例えば、ru_utimeru_stimeはそれぞれユーザーモードとカーネルモードでのCPU使用時間を示し、ru_maxrssはプロセスが使用した最大メモリ量を示します。これらの情報は、アプリケーションのボトルネックを特定したり、リソースリークを検出したりするのに役立ちます。ドキュメントにこの参照を追加することで、Goの標準ライブラリの使いやすさと情報の網羅性が向上しています。

コアとなるコードの変更箇所

--- a/src/pkg/os/doc.go
+++ b/src/pkg/os/doc.go
@@ -79,6 +79,8 @@ func (p *ProcessState) Sys() interface{} {
 // SysUsage returns system-dependent resource usage information about
 // the exited process.  Convert it to the appropriate underlying
 // type, such as *syscall.Rusage on Unix, to access its contents.
+// (On Unix, *syscall.Rusage matches struct rusage as defined in the
+// getrusage(2) manual page.)
 func (p *ProcessState) SysUsage() interface{} {
  	return p.sysUsage()
 }

コアとなるコードの解説

変更はsrc/pkg/os/doc.goファイル内のSysUsage()メソッドのドキュメントコメントに対して行われています。

元のコメントは以下の通りでした。

// SysUsage returns system-dependent resource usage information about
// the exited process.  Convert it to the appropriate underlying
// type, such as *syscall.Rusage on Unix, to access its contents.

このコメントは、SysUsage()がシステム依存のリソース使用量情報を返し、Unix系では*syscall.Rusageに変換する必要があることを説明していました。

今回のコミットで追加された行は以下の2行です。

// (On Unix, *syscall.Rusage matches struct rusage as defined in the
// getrusage(2) manual page.)

この追加により、*syscall.RusageがUnix系のgetrusage(2)システムコールのマニュアルページで定義されているstruct rusageと直接対応していることが明示されました。これにより、開発者はsyscall.Rusageの各フィールドの意味や、それがどのようなリソース使用量情報を提供しているのかを、getrusage(2)のマニュアルページを参照することで正確に理解できるようになります。これは、Goの標準ライブラリのドキュメントの質を高め、ユーザーがより深くシステムレベルの情報を活用できるようにするための重要な改善です。

関連リンク

参考にした情報源リンク