Linuxカーネルドライバsr.c sr_block_ioctlにmutex_lockが必要なのはなぜですか?

Linuxカーネルドライバsr.c sr_block_ioctlにmutex_lockが必要なのはなぜですか?

マイコンピュータには2つの光ディスクドライブ(ODD)があります。 ODD 2個でファイル(3.8G)を同時に焼きました。

  • CentOS 6.9 Linux Kernel 2.6.32では約10分かかります。
  • CentOS 7.2 Linux Kernel 3.10.0では約16分

システムログを確認したところ、同時に1つのコマンドしか実行できないことがわかりました。これは、ATAPIコマンドをODD1とODD2に同時に送信することを意味します。並列に実行されません。

Linuxカーネルドライバを確認しましたsr.c sr_block_ioctl()

彼らはmutex_lockLinuxカーネル2.6.36にこの機能を追加しました。

これにより、ATAPI コマンドが並行して実行されないことが示されました。ダンプにデバッグログを追加しましたが、両方のODDが(静的DEFINE_MUTEX(sr_mutex);)のグローバル変数である&sr_mutex同じミューテックスキーを使用していることがわかりました。一方、Linuxでは、最新バージョンのロックカーネルが使用されていないことがわかりました...sr_mutexsr.csd.cioctl

質問:

  1. 2つのODDドライバが同じグローバル変数を使用するのはなぜですか?

  2. なぜここに追加しますかmutex_lock? ODDはコマンドの完了に2〜3秒かかることがあります。

ベストアンサー1

私も同じ問題があります。

このパッチを見つけました。[PATCH] [SCSI] sr:デバイス固有のミューテックスを使用したマルチドライブパフォーマンスの変更

このパッチを適用すると、問題が解決する可能性があります。

おすすめ記事