[Linux] Oracle Linux 6 update 9

原文はこちら。
https://blogs.oracle.com/wim/entry/oracle_linux_6_update_9

Oracle Linux 6 update 9を先頃リリースしました。ULN (Unbreakable Linux Network) および Oracle Linux Yumリポジトリからご利用いただけます。
Unbreakable Linux Network (ULN)
http://linux.oracle.com/
Oracle Linux Yum Server
http://yum.oracle.com/ 
通例通り、ISOイメージはMy Oracle Supportからダウンロードでき、数日するとSoftware Delivery Cloudからもダウンロードできるようになります。
My Oracle Support
http://support.oracle.com/
Oracle Software Delivery Cloud
http://edelivery.oracle.com/
変更内容を含むリリースノートが公開されています。
Oracle® Linux Release Notes for Release 6 Update 9
http://docs.oracle.com/cd/E37670_01/E84716/html/index.html
1点、Oracle Linux 6.9のテスト中に発見しました。”upstream”のglibcに対する最近の変更により、メモリの破損を引き起こし、結果としてデータベースの起動に失敗する可能性がある、というものです。
この事象をリリース前に見つけたため、もちろんのことながら不具合を修正しました。

以下のコード変更によって不具合が混入していました (glibc-rh1012343.patch)
char newmode[modelen + 2];
 -  memcpy (mempcpy (newmode, mode, modelen), "c", 2);
 +  memcpy (mempcpy (newmode, mode, modelen), "ce", 2);
    FILE *result = fopen (file, newmode);
ご覧の通り、誰かがnewmodeにeを追加(c から ceにコピー内容を変更) しましたが、最後にNull文字がないために、newmodeのサイズを大きく(+2から+3に変更)するのを忘れていました。
Oracle Linux 6.9に取り込んだglibcに適用した修正パッチは以下の通りです。
-  char newmode[modelen + 2];
 -  memcpy (mempcpy (newmode, mode, modelen), "ce", 2);
 +  char newmode[modelen + 3];
 +  memcpy (mempcpy (newmode, mode, modelen), "ce", 3);
OracleでのBug IDは25609196です。このパッチはglibc src rpmにあります。お客様が遭遇する症状は、fopen()の失敗が原因でデータベースの起動に失敗するというものです。以下はその例です。
Wed Mar 22 *17:19:51* 2017
*ORA-00210: cannot open the specified control file*
ORA-00202: control file:

'/opt/oracle/oltest/.srchome/single-database/nas/12.1.0.2.0-8192-72G/control_001'
ORA-27054: NFS file system where the file is created or resides is
not mounted with correct options
*Linux-x86_64 Error: 13: Permission denied*
Additional information: 2
ORA-205 signalled during: ALTER DATABASE   MOUNT...
Shutting down instance (abort) 

[Linux] Announcing the release of Oracle Linux 6 Update 9

原文はこちら。
https://blogs.oracle.com/linux/entry/announcing_the_release_of_oracle

Oracle Linux 6の最終アップデートリリースであるOracle Linux 6 Update 9の一般提供を発表できうれしく思っています。個別のRPMパッケージはUnbreakable Linux Network (ULN) および Oracle Linux Yum Server から入手できます。
Unbreakable Linux Network (ULN)
https://linux.oracle.com/
Oracle Linux Yum Server
http://yum.oracle.com/
ISOイメージはOracle Software Delivery Cloudからもうすぐダウンロードできるようになる予定です。
Oracle Software Delivery Cloud
http://edelivery.oracle.com
Oracle Linux 6 Update 9は以下のカーネルパッケージを同梱しています。
  • Unbreakable Enterprise Kernel (UEK) Release 4 (kernel-uek-4.1.12-61.1.28.el6uek) for x86-64
  • Unbreakable Enterprise Kernel (UEK) Release 2 (kernel-uek-2.6.39-400.294.3.el6uek) for i386
  • Red Hat Compatible Kernel (kernel-2.6.32-696.el6) for i386 and x86-64

Application Compatibility

Oracle LinuxはRed Hat Enterprise Linux (RHEL) とのユーザー空間の互換性を維持しています。これはOSの基礎となるカーネルバージョンとは独立しています。ユーザー空間にある既存のアプリケーションはUEK Release 4とOracle Linux 6.9の組み合わせでも変更せずに引き続き動作するはずです。既にRHEL 6もしくはOracle Linux 6で動作検証済みのアプリケーションが再度動作検証をする必要はありません。

Bug Fixes

Oracle Linux 6 Update 9では、アップストリーム・リリースで入り込んだglibcの不具合を修正済みです。この不具合により、Oracle Databaseが特定の状況下で起動に失敗する可能性があります。
Oracle Linux 6 update 9
https://blogs.oracle.com/wim/entry/oracle_linux_6_update_9
[Linux] Oracle Linux 6 update 9
https://orablogs-jp.blogspot.jp/2017/03/oracle-linux-6-update-9.html
この不具合はOracleが自社製品を使用したOracle Linuxのテスト中に発見、修正されました。他社のLinuxディストリビューションでOracle Databaseをお使いのお客様は、お使いのディストリビューションのプロバイダとパッチの有無について対話することをお勧めします。

このリリースに含まれている注目すべき機能

  • 全システムコンポーネントでTransport Layer Security (TLS) 1.2 をサポート
    その他の変更には、vsftpd でのTLS 1.2のサポートやauditd でのincremental_asyncのサポートが含まれます。
  • cpuid ユーティリティ
    このユーティリティは、CPUID命令から収集されたCPUに関する詳細情報をダンプし、正確なCPUモデルを判別することができます。cpuid ユーティリティは、Intel、AMD、およびVIA CPUをサポートしています。
  • Hyper-Vのゲストとして実行時の機能改善
  • Active Directoryに対するSSSD(System Security Services Daemon)のサポート強化
上記機能の詳細およびOracle Linux 6 Update 9でのその他の新機能や変更点の詳細は、Oracle Linux Product Documentation Libraryのリリースノートをご覧ください。
Oracle® Linux Release Notes for Release 6 Update 9
http://docs.oracle.com/cd/E37670_01/E84716/html/index.html
Oracle Linux Product Documentation Library
http://docs.oracle.com/cd/E37670_01/index.html
Oracle Linuxはダウンロード、利用、配布にあたりお金はかかりませんし、全てのアップデートおよびエラータは自由にご利用いただけます。
Oracle Linux Yum Server
http://yum.oracle.com/
サポートについては、どのシステムでサポートサブスクリプションが必要かを決定してください。
Oracle Linux Support
http://www.oracle.com/us/technologies/linux/support/overview/index.html
これはOracle Linuxがシステムの開発、テスト、本運用のための理想的な選択肢たらしめるものです。システムの全てを最新かつセキュアに保ちながら、どのサポート範囲が各システムで最適かを個別に決めてください。Oracle Linux Premier Supportをお持ちのお客様は、Oracle Kspliceを使ったダウンタイム無しでのカーネル・アップデートや、Oracle OpenStack for Oracle Linuxのサポートを受けることができます。
Oracle Linuxの詳細は以下のURLをご覧ください。
Oracle Linux OS and Support
http://www.oracle.com/linux

[Support, Integration, FMW] How to provide enough information to SOA Support for start the troubleshoot?

原文はこちら。
https://blogs.oracle.com/soaproactive/entry/how_to_provide_enough_information

以下はサポートの観点からみた、(Q&AのSRではない)トラブルシューティングに関わる新規SR(サービスリクエスト、Service Request)を作成する際には常に含めておく標準的にして基本的なアクションプランです。
このようにすれば、サポートは最初のトリアージを行い、報告された挙動を確認し、新しいアクションプランを提示して、適切な次のステップを定義することができるはずです。

(注意)OSB製品に対するSRを作成する場合、以下のSOA*をOSBに置き換えてください(BAM、MFTなども同様です)。

1. 最新かつアップデートされたログや出力ファイル(.logや.out)を提供してください。
  • 全サービスを停止
  • 全てのlog、outファイルを管理サーバ、SOA*管理対象サーバから削除
  • tmpディレクトリやcacheディレクトリの内容を削除
  • 参考資料
  • サービスを開始
  • 1回だけ挙動を再現
  • 全てのlog、outファイルを管理サーバおよびSOA* 管理対象サーバから収集し、Zipで固めてアップロード
  • 報告した挙動に該当するタイムスタンプを明示
注意
  • ファイル削除前に適切にバックアップを取っておいてください
  • 本番環境で発生した事象に対するSRで再起動ができない場合には、サーバの停止・開始はスキップしていただいてかまいません
2. 停止時間の間にincdir_というフォルダの有無を確認し、存在すればZipで固めてSRとともにアップロードしてください。当該フォルダは以下の場所にあります。
<Domain_Home>/servers/<your_server>/adr/diag/ofm/<your_domain>/<your_server>/incident/incdir_?
3. 常に再現可能でしょうか、それとも発生タイミングはランダムですか?
4. クラスタ環境で発生していますか?もしそうであれば、どのような構成ですか?
5. 事象が発生している環境は新規インストールした環境ですか?
6. 事象が発生している環境は以前のバージョンをアップグレードした環境ですか?もしそうであれば、以下の情報も提供してください。
  • 移行元のバージョン
  • 移行時に参照したOracleドキュメントのURL
7. この事象がいつから発生し始めましたか?そのタイミングで何か変更を実施しましたか?
8. WebLogic ServerおよびSOA*サーバーを起動する際にコンソールに現れた全てのエラー、ならびに問い合わせている事象が発生したときにコンソールに現れた全てのエラーをSRに貼り付けてください。
9. この事象が発生した環境は開発環境、QA(検証)環境、本番環境のいずれでしょうか?
10. 別の環境でこの事象を再現するチャンスがありますか?
11. この事象・問題によって生じる業務上の影響はどのようなものでしょうか?
12. お問い合わせの事象を再現するための手順を詳細に(Step-by-stepで)お知らせください。
13. SOA 11gのサーバー環境を素早くプロファイリングするためのツールで、RDAというものがあります。
How to Run Remote Diagnostic Agent ( RDA ) Against SOA Products (Doc ID 1571554.2)
https://support.oracle.com/rs?type=doc&id=1571554.2
上記URLの[FAQ]タブから
How to Configure, Run and Avoid Questions in RDA With a Single Command?
を展開して、そこに記載の手順に従って実行します。
RDAを実行したディレクトリに作成されたRDA_output_*.zipというファイルを、SRとともにアップロードしてください。

14. RDAを実行できない場合には、OPatchインベントリを提供ください。
  • 11gの場合
    • 以下のコマンドを実行し、両ファイルをSRとともにアップロードしてください。YYYY、MM、DDは下記コマンドを実行した西暦年月日に置き換えます。
      1. SOA_HOMEをORACLE_HOMEに設定して以下を実行
        opatch lsinventory -detail > opatch-detail-soa_home_YYYYMMDD.txt
      2. ORACLE_COMMONをORACLE_HOMEに設定して以下を実行
        opatch lsinventory -detail > opatch-detail-common_home_YYYYMMDD.txt
    • OPatchコマンドの動作を確認する必要がある場合には、以下のドキュメントを確認してください。
      Oracle Fusion Middleware Patching With OPatch
      http://docs.oracle.com/cd/B28359_01/em.111/b31207/oui7_opatch.htm
  • 12cの場合
    • 以下のコマンドを実行し、ファイルをSRとともにアップロードしてください。YYYY、MM、DDは下記コマンドを実行した西暦年月日に置き換えます。
      • SOA12_MIDDLEWARE_HOMEをORACLE_HOMEに設定して以下を実行
        opatch lsinventory -detail > opatch-<oracle_home>_YYYYMMDD.txt
    • OPatchコマンドの動作を確認する必要がある場合には、以下のドキュメントを確認してください。
      Oracle® Fusion Middleware Opatchによるパッチ適用 12c (12.2.1.1)
      http://docs.oracle.com/cd/E80149_01/lcm/OPATC/toc.htm
      Oracle® Fusion Middleware Patching with OPatch 12c (12.2.1.2)
      http://docs.oracle.com/middleware/12212/lcm/OPATC/toc.htm

[JavaScript] Oracle JET v3.0.0 released

原文はこちら。
https://blogs.oracle.com/mobile/entry/oracle_jet_v3_0_0

先週Oracle Java Extension Toolkit (JET) Ver. 3.0.0がリリースされました。これはツールキットのメジャーリリースであり、3rdパーティライブラリのアップデートとともに、JETコンポーネント、Cookbook、ツールおよびテーマの重要なアップデートが含まれています。

変更点や変更に伴う影響に関する詳細情報はリリースノートをご覧ください。
JET v3.0.0 Release Notes
http://www.oracle.com/webfolder/technetwork/jet/globalSupport-releaseNotes.html
既にOracle JETをお使いの場合、既存のOracle JETアプリケーションを最新のv 3.0.0へ移行する上で必要な手順は、Migration Guideを参照し、Developer Guideのチェックをお願いします。
Migration Guilde
http://www.oracle.com/webfolder/technetwork/jet/globalSupport-migrationGuide.html
JavaScript Extension Toolkit (JET) Developing Applications with Oracle JET
http://docs.oracle.com/middleware/jet300/jet/developer/GUID-F4E07884-1C35-4B7C-84E3-60F6D949D344.htm#JETDG-GUID-F4E07884-1C35-4B7C-84E3-60F6D949D344
Oracle JETのページのSuccess Storiesもご覧ください。
Oracle JET
http://www.oraclejet.org/
Success Stories
http://www.oracle.com/webfolder/technetwork/jet/globalStories.html

[WLS, FMW] Oracle Database 12.2 Feature Support with WebLogic Server

原文はこちら。
https://blogs.oracle.com/WebLogicServer/entry/oracle_database_12_2_feature

ようやくリリースされました。Oracle Database 12cR2のダウンロードが可能になりました。WebLogic Server(WLS)とOracle Database 12cR2の連携は、2年間にわたって進められてきました。

このエントリでは、WebLogic ServerリリースでOracle Database 12cR2の機能がどのようにサポートされているかについて説明します。

Using Older Drivers with the 12.2 Database Server

WebLogic ServerとOracle Database 12cR2を連携する上で最も簡単な方法は、WebLogic Serverのインストーラに含まれるOracle JDBCドライバのjarファイルを使用することです。Oracle Database 12cR2に対して11.2.0.3、11.2.0.4、12.1.0.1、12.1.0.2のJDBCドライバを使用している場合、既知の問題またはアップグレードの問題はありません。ドライバのサポートとOracle Database 12cR2の機能に関する詳細情報は、以下のURLを参照してください。
Which version of JDBC drivers are supported ?(Oracle JDBC FAQ)
http://www.oracle.com/technetwork/database/enterprise-edition/jdbc-faq-090281.html#01_01

Using the Oracle 12.2 Drivers with the 12.2 Database Server

新しいOracle Database 12cRの機能を使うためには、Oracle Database 12cR2のJDBCドライバjarファイルを使う必要があります。

注意いただきたいのは、Oracle Database 12cR2のJDBCドライバjarファイルはJDK 8でコンパイルされている、という点です。JDK 8をサポートするWebLogic Serverのうち、最も古いものは12.1.3ですが、Oracle Database 12cR2のJDBCドライバjarファイルは以前のバージョンのWebLogic Serverでは動作しません。以前のバージョンのWebLogic Serverでは、上述の通り、WebLogic Serverのインストーラに含まれるJDBCドライバファイルを使って、Oracle Database 12cR2に接続することができます。このエントリはWebLogic ServerのFusion MiddleWare (FMW) デプロイメントには当てはまりません(訳注:Fusion Middleware Infrastructureのことを指しています)。次期リリースバージョンであるFusion Middleware 12.2.1.3で、Oracle Database 12cR2のドライバjarファイルが同梱され、サポートされることでしょう。

Required Oracle 12.2 Driver Files

Oracle Database 12cR2のJDBCドライバjarファイルは、WebLogic Server 12.1.3、12.2.1、12.2.1.1、12.2.1.2に付属していません。
この章では、Oracle Database 12cR2のJDBCドライバを上記リリースのWebLogic Serverで利用するために必要なファイルを紹介します。これらのファイルは、Oracle Database 12cR2の $ORACLE_HOME ディレクトリにインストールされます。

注意
これらのjarファイルは、WebLogic Serverを実行するために使用されるCLASSPATHの先頭に追加する必要があり、すべての12.1.0.2のクライアントjarファイルの前に設定する必要があります。

以下のojdbcファイルのうち一つを選択します(以前のリリースでは名前に7が入っていましたが、このリリースでは8が入っています)。
  • jdbc/lib/ojdbc8.jar
  • jdbc/lib/ojdbc8_g.jar
  • jdbc/lib/ojdbc8dms.jar
  • jdbc/lib/ojdbc8dms_g.jar
下表は追加が必要なドライバファイルです。
FileDescription
jdbc/lib/simplefan.jarFast Application Notification (新規)
ucp/lib/ucp.jarUniversal Connection Pool
opmn/lib/ons.jarOracle Network Server (ONS)クライアント
jlib/orai18n.jar国際化サポート
jlib/orai18n-mapping.jar国際化サポート
jlib/orai18n-collation.jar国際化サポート
jlib/oraclepki.jarOracle Walletのサポート
jlib/osdt_cert.jarOracle Walletのサポート
jlib/osdt_core.jarOracle Walletのサポート
rdbms/jlib/aqapi.jarAQ JMS のサポート
lib/xmlparserv2_sans_jaxp_services.jarSQLXML のサポート
rdbms/jlib/xdb.jarSQLXML のサポート

Download Oracle 12.2 Database Files

12cR2のJDBCドライバjarファイルを使ってこれらのリリースのいずれかを実行したい場合は、必要最小限のインストールのために、Oracle Database Clientのカスタムインストールを実行することをOracleは推奨します。以下のURLからDatabaseエントリを選択します。
Oracle Technology Network
http://www.oracle.com/technetwork/index.html
Oracle Database 12c Release 2で、ご使用のOSプラットフォームの「See All」のリンクを選択します。最小インストールでは、Oracle Database 12c Release 2 Clientにある適切なzipファイルを選択してダウンロードします。ファイルを解凍し、インストーラを実行しますが、その際にカスタムを選択し、以下のチェックボックスを選択します。
  • Oracle JDBC/Thin interfaces
  • Oracle Net listener
  • Oracle Advanced Security
管理者パッケージ・クライアント(Administrator package client)のインストーラ、またはデータベースのフルインストーラを使用してjarファイルを取得することもできます。jarファイルはすべてのプラットフォームで同じです。

Update the WebLogic Server CLASSPATH

Oracle Database 12cR2とOracle 12.2 JDBCドライバを使うためには、WebLogic Server環境のCLASSPATHを変更しなければなりません。上記の表で示した必須ファイルをCLASSPATHに(12.1.0.2ドライバjarファイルの前に)追加してください。

以下のサンプルコードは、WebLogic Server環境のCLASSPATHを更新するシンプルなシェルスクリプトです。環境変数ORACLE_HOMEが(例えば /somedir/app/myid/product/12.2.0/client_1 のように)適切に設定されていることを確認してください。
#!/bin/sh
# source this file in to add the new 12.2 jar files at the beginning of the CLASSPATH
case "`uname`" in
*CYGWIN*)
  SEP=";"
  ;;
Windows_NT)
  SEP=";"
  ;;
*)
  SEP=":"
  ;;
esac

dir=${ORACLE_HOME:?}
# We need one of the following
#jdbc/lib/ojdbc8.jar
#jdbc/lib/ojdbc8_g.jar
#jdbc/lib/ojdbc8dms.jar
#jdbc/lib/ojdbc8dms_g.jar
if [ "$1" = "" ]
then
  ojdbc=ojdbc8.jar
else
  ojdbc="$1"
fi

case "$ojdbc" in
ojdbc8.jar|ojdbc8_g.jar|ojdbc8dms.jar|ojdbc8dms_g.jar)
  ojdbc=jdbc/lib/$ojdbc
  ;;
*)
  echo "Invalid argument - must be ojdbc8.jar|ojdbc8_g.jar|ojdbc8dms.jar|ojdbc8dms_g.jar"
  exit 1
  ;;
esac

CLASSPATH="${dir}/${ojdbc}${SEP}$CLASSPATH"
CLASSPATH="${dir}/jdbc/lib/lib/simplefan.jar${SEP}$CLASSPATH"
CLASSPATH="${dir}/ucp/lib/ucp.jar${SEP}$CLASSPATH"
CLASSPATH="${dir}/opmn/lib/ons.jar${SEP}$CLASSPATH"
CLASSPATH="${dir}/jlib/orai18n.jar${SEP}$CLASSPATH"
CLASSPATH="${dir}/jlib/orai18n-mapping.jar${SEP}$CLASSPATH"
CLASSPATH="${dir}/jlib/oraclepki.jar ${SEP}$CLASSPATH"
CLASSPATH="${dir}/jlib/osdt_cert.jar ${SEP}$CLASSPATH"
CLASSPATH="${dir}/jlib/osdt_core.jar${SEP}$CLASSPATH"
CLASSPATH="${dir}/rdbms/jlib/aqapi.jar${SEP}$CLASSPATH"
CLASSPATH="${dir}/lib/xmlparserv2_sans_jaxp_services.jar${SEP}$CLASSPATH"
CLASSPATH="${dir}/jlib/orai18n-collation.jar${SEP}$CLASSPATH"
CLASSPATH="${dir}/rdbms/jlib/xdb.jar${SEP}$CLASSPATH"
例えば、このスクリプトをご自身の環境にsetdb122_jars.shという名前を付けて保存し、ojdbc8.jarとともに実行してください。
. ./setdb122_jars.sh ojdbc8.jar

WebLogic Server Integration with Oracle Database 12.2

いくつかのOracle Database 12cR2の機能はWebLogic Serverに既に含まれていて、新しいDatabaseのバージョン登場を待っていた状態でした。下表はそうした機能をまとめたもので、これらの機能を動作させるには、Oracle Database 12cR2のJDBCドライバjarファイルとOracle Database 12cR2が必要です。
機能WebLogic Serverへの機能追加時期Oracle Databaseでの対応時期
JDBC 4.2のサポート12.1.312.2
Service Switching12.2.112.2
XA Replay Driver12.2.112.2
Gradual Draining12.2.1.2.012.1
12.2で機能強化
UCP MT Shared Poolのサポート12.2.1.1.012.2
@alias や @ldap をURLに含む場合のAGLのサポート12.2.1.2.012.2
Sharding APIWebLogic Serverデータソースで直接利用できないが、(12.2.1で追加された)WebLogic Server UCPネイティブデータソースタイプを使うと利用可能12.2

これらの機能および将来のWebLogic Serverのリリースで追加予定の統合機能に関する詳細は、他のエントリをお待ちください。

[Java] JSR 269 Maintenance Review for Java SE 9

原文はこちら。
https://blogs.oracle.com/darcy/entry/jsr_269_mr_java_se

Java SE 7、Java SE 8の時にもあったように、Java SE 9において、JSR 269(Annotation Processing API)はメンテナンスレビュー(Maintenance Review、MR)が進んでいます。
JSR 269 Maintenance Review
https://blogs.oracle.com/darcy/entry/jsr_269_maintenance_review
JSR 269 Maintenance Review for Java SE 8
https://blogs.oracle.com/darcy/entry/jsr_269_mr_for_java
JSR 269: Pluggable Annotation Processing API
https://jcp.org/en/jsr/detail?id=269
javax.lang.model.*における言語構造としてだけでなく、Filerなどにおけるjavax.annotation.processingでの別のインタラクション・ポイントとしても、API変更のほとんどはプラットフォームへのモジュール追加をサポートします。
JSR 376: JavaTM Platform Module System
https://jcp.org/en/jsr/detail?id=376
アノテーションの繰返しのサポートを改善するために、ちょっとしたAPIの変更も行われました。 API変更の詳細なサマリは、MR資料に含まれています。
JSR 269 MR summary
https://jcp.org/aboutJava/communityprocess/maintenance/jsr269/summary-2017-02-28.html
APIの変更は、既存のプロセッサーのソースやバイナリリンケージ、および実行時の動作と大きく互換性がありように意図されています。ただし、JDK 9で実行している場合は、既存のプロセッサーが正常に動作することを確認する際に便利です。JDK 9早期アクセスバイナリーは以下のURLからダウンロードできます。
JDK 9 Project
https://jdk9.java.net/
是非JDK 9でプロセッサーを実行した体験を(原文の)コメント欄やメールでご連絡ください。API変更に関するフィードバックは以下のメーリングリストに対してお送りください。
compiler-dev -- Technical discussion about the development of the Java compiler (javac)
http://mail.openjdk.java.net/mailman/listinfo/compiler-dev

[Java] Malthusian Locks

原文はこちら。
https://blogs.oracle.com/dave/entry/malthusian_locks1

Malthusian LocksについてEuroSys 2017で発表します。
Malthusian Locks
https://blogs.oracle.com/dave/resource/eurosys17-dice.pdf
EuroSys 2017
http://eurosys2017.org/
上記PDFは抜粋で、arxivにもUpされています。
Malthusian Locks
https://arxiv.org/abs/1511.06035

Abstract:

モダンなマルチスレッド環境で動作するアプリケーションは時としてオーバースレッド(スレッド過多)の場合があります。スレッドが多すぎる場合、パフォーマンスの改善が見込めないどころか、スケーラビリティが壊れてパフォーマンスが低下する原因になることがあります。また、利用可能なCPUコアに比べて準備されているスレッドが少ない場合にも発生する可能性があります。こういったソフトウェアにはロック競合が多いこともあります。一定期間内にロックを循環する個別のスレッドの数を意図的に制限するためロック許可ポリシーを変更することによって、このようなロックの存在を利用します。具体的には、ロックが(継続的に保持されて)飽和状態となるために必要なスレッド数よりも多くのスレッドが循環している場合、筆者の考える手法では、余分なスレッドの一部を選択して取り除きます。ロック競合に陥っている場合、メモリ管理におけるスワッピングの概念を借りて、同時実行制限(CR、 concurrency restriction)を課します。結果として決まる入場順は、確かに短期的には不公平ではありますが、定期的に不動態化されたスレッドと、アクティブに循環しているスレッド間でシフトすることで、明示的に長期的な公平性を提供します。具体的には、無制限のバイパスや欠乏を許す、よくあるtest-and-setテストに比べ、スループットが影響をうけない、もしくは改善され、そして不公平が制限されます。パイプラインやプロセッサ、キャッシュといった共有リソースの競合の減少によって、並行性の制限が結果として全体的なリソース消費を削減し、システム全体の負荷容量を向上させる可能性があります。