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

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

このコミットは、Go言語の標準ライブラリである net/http パッケージのテストファイル serve_test.go 内のコメントを修正するものです。具体的には、ベンチマークテストの実行方法に関する説明コメントが、より正確なコマンド例に更新されています。

コミット

net/http: fix comment

R=golang-dev, bradfitz CC=golang-dev https://golang.org/cl/6348062

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

https://github.com/golang/go/commit/804e562a62bed963fe96571d442d468a608e7207

元コミット内容

net/http: fix comment

R=golang-dev, bradfitz
CC=golang-dev
https://golang.org/cl/6348062

変更の背景

このコミットの背景は、net/http パッケージのベンチマークテスト BenchmarkServer の使用方法に関するコメントが、実際のGoのテストコマンドのオプションと一致していなかったため、それを修正することにあります。

元のコメントでは、ベンチマーク実行時間を指定するオプションが -test.bench=Benchmarktime=15 のように誤って記載されていました。これは、ベンチマーク名と時間を一つのオプションで指定しようとする形式であり、Goの testing パッケージが提供する正しいオプションではありません。

正しいオプションは、ベンチマーク名を指定する -test.bench と、ベンチマーク実行時間を指定する -test.benchtime を別々に使用する形式です。この修正は、ユーザーがGoのベンチマークツールを正しく利用できるように、ドキュメントの正確性を向上させることを目的としています。特に、CPUプロファイリングを行う際のコマンド例であるため、正確なコマンドはパフォーマンス分析において非常に重要です。

前提知識の解説

このコミットを理解するためには、Go言語のテストとプロファイリングに関する以下の基本的な知識が必要です。

  1. go test コマンド:

    • Go言語の標準的なテスト実行ツールです。パッケージ内のテスト関数(TestXxx)、ベンチマーク関数(BenchmarkXxx)、サンプル関数(ExampleXxx)を実行します。
    • -c オプション: テストバイナリをコンパイルしますが、実行はしません。これにより、テストバイナリを個別に実行したり、プロファイリングツールと連携させたりすることが可能になります。
    • -test.run=XX オプション: 実行するテスト関数を正規表現でフィルタリングします。XX は任意の正規表現パターンです。このコミットの例では、特定のテストを実行しないことを示唆しています(ベンチマークのみを実行する場合など)。
    • -test.bench=BenchmarkServer オプション: 実行するベンチマーク関数を正規表現でフィルタリングします。BenchmarkServer は、BenchmarkServer という名前のベンチマーク関数のみを実行することを示します。
    • -test.benchtime=15s オプション: ベンチマーク関数を各々実行する最小時間を指定します。デフォルトは1秒です。この例では15秒間実行することを意味します。
    • -test.cpuprofile=http.prof オプション: CPUプロファイルデータを指定されたファイル(例: http.prof)に書き出します。これにより、プログラムのCPU使用率が高い部分を特定できます。
  2. go tool pprof:

    • Go言語に付属するプロファイリングツールです。go test -cpuprofile などで生成されたプロファイルデータを解析し、視覚化することができます。
    • http.test: go test -c で生成されたテストバイナリのパスです。プロファイルデータとバイナリを関連付けるために必要です。
    • http.prof: go test -cpuprofile で生成されたプロファイルデータのファイルパスです。
    • (pprof) web: go tool pprof の対話型シェル内で web コマンドを実行すると、プロファイルデータをグラフ形式(通常はSVG)でブラウザに表示します。これにより、関数の呼び出し関係やCPU時間の消費状況を視覚的に把握できます。

技術的詳細

このコミットは、src/pkg/net/http/serve_test.go ファイル内の BenchmarkServer 関数に付随するコメントの修正に焦点を当てています。このコメントは、BenchmarkServer ベンチマークを実行し、そのCPUプロファイルを生成するための具体的なコマンドライン例を提供しています。

変更前は、ベンチマークの実行時間を指定するオプションが -test.bench=Benchmarktime=15 と誤って記述されていました。これは、Goの testing パッケージのベンチマークオプションの正しい構文ではありません。

Goのベンチマーク実行において、ベンチマーク関数をフィルタリングするには -test.bench オプションを使用し、ベンチマークの実行時間を指定するには -test.benchtime オプションを使用します。これらは独立したオプションです。

変更後は、この誤りが修正され、より正確なコマンド例が提供されています。

  • 変更前:

    $ ./http.test -test.run=XX -test.bench=Benchmarktime=15 -test.cpuprofile=http.prof
    

    この行では、-test.bench オプションがベンチマーク名と実行時間の両方を指定しようとしています。Benchmarktime=15 の部分は、testing パッケージによってベンチマーク名の一部として解釈されるか、あるいは無効なオプションとして無視される可能性があります。

  • 変更後:

    $ ./http.test -test.run=XX -test.bench=BenchmarkServer -test.benchtime=15 -test.cpuprofile=http.prof
    

    この行では、-test.bench=BenchmarkServerBenchmarkServer という名前のベンチマーク関数のみを実行するように指定し、-test.benchtime=15 がそのベンチマークを最低15秒間実行するように指定しています。これにより、プロファイルデータがより正確かつ十分に収集されることが期待されます。

この修正は、コードの動作には影響を与えませんが、ドキュメントの正確性を高め、Goのベンチマークおよびプロファイリングツールを効果的に使用するためのガイドラインを改善します。

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

--- a/src/pkg/net/http/serve_test.go
+++ b/src/pkg/net/http/serve_test.go
@@ -1270,7 +1270,7 @@ func BenchmarkClientServer(b *testing.B) {
 //
 // For use like:
 //   $ go test -c
-//   $ ./http.test -test.run=XX -test.bench=Benchmarktime=15 -test.cpuprofile=http.prof
+//   $ ./http.test -test.run=XX -test.bench=BenchmarkServer -test.benchtime=15 -test.cpuprofile=http.prof
 //   $ go tool pprof http.test http.prof
 //   (pprof) web
 func BenchmarkServer(b *testing.B) {

コアとなるコードの解説

変更された行は、src/pkg/net/http/serve_test.go ファイル内の BenchmarkServer 関数に付随するコメントの一部です。このコメントは、Goのベンチマークテストとプロファイリングツールを使用する際の推奨されるコマンドライン例を示しています。

  • 変更前: // $ ./http.test -test.run=XX -test.bench=Benchmarktime=15 -test.cpuprofile=http.prof この行は、ベンチマークの実行時間を指定する際に、-test.bench オプションにベンチマーク名と時間をまとめて指定するという誤った形式を示していました。Goの testing パッケージでは、ベンチマークのフィルタリングと実行時間の指定は別々のオプションで行います。

  • 変更後: // $ ./http.test -test.run=XX -test.bench=BenchmarkServer -test.benchtime=15 -test.cpuprofile=http.prof この修正により、コマンド例はGoの testing パッケージの正しい使用法に準拠するようになりました。

    • -test.bench=BenchmarkServer: BenchmarkServer という名前のベンチマーク関数のみを実行するように指定します。
    • -test.benchtime=15: 各ベンチマーク関数を最低15秒間実行するように指定します。これにより、より安定したベンチマーク結果と十分なプロファイルデータが得られます。

この変更は、Goのベンチマークとプロファイリングのドキュメントの正確性を向上させ、開発者がこれらのツールをより効果的に使用できるようにするためのものです。コードの機能的な動作には影響を与えませんが、Goのツールチェーンの正しい使用法を伝える上で重要な修正です。

関連リンク

参考にした情報源リンク