Solaris、最新ベータでついにスレッドに名前が付けられるようになる

  • Named Threads

In Oracle Solaris 11.3, you can now label an application's threads to simplify debugging the application. Observability tools like ps, prstat, and, DTrace can display metrics based on the assigned names. This feature is especially useful for applications such as Java that have many threads.

For more information, see prstat (1M) and pthread_attr_setname_np (3C) man pages.

nmoshのスレッドAPIはスレッドに名前を付けることができるが( http://d.hatena.ne.jp/mjt/20130114/p1 )、Windows上でしか付けられない。カーネルオブジェクトの名前付けは非常に頭の痛い問題で、POSIXでは当然カバーしておらず、カーネル種別毎に異なる実装が必要になる。
パフォーマンス解析においてスレッドに名前が付いているのは意外と便利で、また、同期問題のトラブルシュートにも意味のあるスレッド名は役に立つことが多い。

カーネル pthreadアトリビュート 自スレッド 他スレッド 備考
Linux ? pthread_setname_np 16bytes
NetBSD pthread_attr_setname_np pthread_setname_np PTHREAD_MAX_NAMELEN_NPまで、3引数
FreeBSD ? pthread_set_name_np ちょっとスペル違う、Getが無い
OpenBSD ? pthread_set_name_np ちょっとスペル違う、Getが無い
MacOS X なし pthread_setname_np なし セットできるのは自スレッドのみ、Getは他スレッド可。
Solaris pthread_attr_setname_np pthread_setname_np Join待ちスレッドでも合法、今後リリース予定の11.3から。32bytes UTF-8

この多様性! ...nmoshは方針としてカーネル機能は全てスクリプトに見せようとしているので、これらの全種のstubを用意しないといけない。。
アトリビュートに付けられる = スレッドを生成した瞬間に付けられる なので、当然一番表現力が高い。実際にはOS Xのように自スレッドにしかセットできないということもあるので、どこで付けるかという問題は常に重要になる。
付けた名前はpsのようなツールやDTraceで使用できる... とされているが、肝心のDynamic Tracing Guideが更新されてないのでどこで使えるのかは定かでない。
ちなみに、Solaris 11.3の他のPOSIX拡張としてはposix_spawnのchdirサポートが有る( http://docs.oracle.com/cd/E53394_01/html/E54847/gpqoi.html#scrolltoc )。