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 )。