Linux 커널 드라이버 sr.c sr_block_ioctl에 mutex_lock이 필요한 이유는 무엇입니까?

Linux 커널 드라이버 sr.c sr_block_ioctl에 mutex_lock이 필요한 이유는 무엇입니까?

내 컴퓨터에는 두 개의 광학 디스크 드라이브(ODD)가 있습니다. ODD 2개에 파일(3.8G)을 동시에 구웠어요.

  • CentOS 6.9 Linux Kernel 2.6.32에서는 약 10분 정도 소요됩니다.
  • CentOS 7.2 Linux Kernel 3.10.0의 경우 약 16분

시스템 로그를 확인한 결과 동시에 하나의 명령만 실행할 수 있는 것으로 나타났습니다. 이는 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. 두 개의 ODD 드라이버가 동일한 전역 변수를 사용하는 이유는 무엇입니까?

  2. 왜 여기에 추가하나요 mutex_lock? ODD는 명령을 완료하는 데 2~3초 정도 걸릴 수 있습니다.

답변1

나는 같은 문제를 가지고있다.

이 패치를 찾았습니다.[PATCH] [SCSI] sr: 장치별 뮤텍스를 사용하여 다중 드라이브 성능 수정

이 패치를 적용하면 문제가 해결될 수도 있습니다.

관련 정보