0.6.0 (2017年4月3日)

カーネル・リリース:

4.1.12-97.el6uek

新機能:

  • 関数境界トレース(FBT)は、コア・カーネル内のほとんどの関数のentryプローブでサポートされています。現在の実装では、関数の引数またはreturnプローブの取得はサポートされていません(x86_64での制限されたサポートを除く)。この機能は現在開発中です。

  • ipプロバイダが実装され、他の実装と互換性のあるパラメータや適切なトランスレータによってip:::send、ip:::receive、ip:::drop-inおよびip:::drop-outがサポートされます。IPv4とIPv6の両方がサポートされます。

  • ユーザー・スペース・トレースポイント(USDT)が、64ビット・プロセスと32ビット・プロセスの両方についてSPARCで機能するようになりました。

  • SDTプローブで使用される型とトランスレータが、カーネル・ソースのDTRACE_PROBEマクロから取得されるようになりました。モジュールを変更する必要なく、新しいプローブ引数の型と変換が自動的に選択されます。perf-eventプローブ引数の型は同じ方法で取得されます。

  • SDTプローブに使用されるDTRACE_PROBEn()マクロが新しいDTRACE_PROBE()マクロに置き換えられました。このマクロは、引数をカウントする必要がなく、CONFIG_DTRACEが無効になっている場合でも誤用(型のない引数など)が診断されることを除き、まったく同じように動作します。USDTの場合も同様です。ただし、番号が古いUSDTマクロが、__VA_ARGS__のカンマの省略をサポートしていないコンパイラ(c89/strict-ANSIモードのGCCなど)でコンパイルする必要があるコードでも引き続き使用できるという点を除きます。これには、新しいインストール済内部ヘッダー/usr/include/sys/sdt_internal.hが含まれます。

  • SDTでis-enabledプローブがサポートされるようになりました。これは、指定されたプローブを有効にしないかぎり、常にfalseを返す式であり、通常はif文で直接使用され、コストの高いデータを使用するプローブを有効にするまで、そのプローブの実に必要なこのデータの収集を抑制するために使用できます。

    if (DTRACE_PROBE_ENABLED(probename)) /* expensive stuff */

    DTRACE_PROBE()自体と同様に、DTRACE_PROBE_ENABLED()のプロバイダごとのラッパーを使用できます。

  • dtraceコンシューマ(dtrace(1)を含む)を-pで捕捉できるようになりましたが、その場合、自身を停止できないため、シンボル解決が機能低下します。(以前は、このような捕捉は抑制されていましたが、このようにするコードによってバグが発生し、他のプロセスが終了した後もdtraceが他のプロセスの-cとともに自身の捕捉を実行するように求められた場合、dtraceは終了しませんでした。)

  • ipプロバイダのDトランスレータが使用できるようになりました。

バグ修正:

  • プリエンプション処理の論理エラーのため、プリエンプションが実際には無効になっていない場合に無効になっているという前提でコードが実行されていた可能性があります。

  • プローブ処理(プローブ・コンテキスト)はリエントラントではありませんが、別のプローブを処理した結果として起動されるプローブによって処理コアへのリエントリが発生し、通常、悪影響が生じます。処理コアが、ERRORプローブ処理を除くリエントリ試行をブロックするように変更されました。これは、DTrace設計での意図的な(および許容可能な)例外です。

  • sparc64のD caller変数の値を取得するためのファスト・パス実装が修正されました。

  • D stackアクションの実装がより堅牢になり、メモリー・アクセス障害が致命的なものではなくなりました。

  • D ustackアクションの実装が、安定性と精度を向上させるために完全に修正されました。

  • スキップするスタック・フレームの数が様々なプロバイダの実装の変更に合わせて調整されているため、DTrace関連のフレームが必要に応じてスキップされます。これにより、D stackアクションおよびD caller変数の値が正しくなります。

  • D stackdepth変数を実装すると、DTraceプローブ・スクラッチ・バッファの終了を超えてメモリー書込みが発生する可能性があります。

  • SPARCシステム上の多数のdtrace -c/-pおよびUSDTの修正。dtraceおよび子プロセスのハングからファイル記述子が不足しているdtraceまで様々な症状があります。

  • -cまたは-p exec()を使用してプロセスを頻繁にモニターする場合のメモリーおよびfdリークを修正します。

ユーザーから見える内部の変更:

  • DTraceで/proc/$pid/map_filesが使用されるようになりました(使用可能な場合)。

  • D ustackアクションの実装がカーネルに適切に移動されました。この変更は、ロックのないメカニズムを使用してページ表構造に直接アクセスする必要があるために行われました。

  • システムがパニック・モードに入ったときにプローブ処理がバイパスされます。これにより、DTraceによってパニック関連の出力が中断されなくなります。

  • dtrace -SはDIFが命令カウンタのオフセットをダンプするようになったため、DIF逆アセンブリをカーネルからのエラーとより簡単に一致させることができます。

  • DIF述語がdtrace -S出力で逆アセンブルされます。