내 컴퓨터에는 두 개의 광학 디스크 드라이브(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_lock
Linux 커널 2.6.36에 이 기능을 추가했습니다.
이로 인해 ATAPI 명령이 병렬로 실행되지 않는 것으로 나타났습니다. 덤프에 디버그 로그를 추가했는데 두 ODD가 모두 (정적 DEFINE_MUTEX(sr_mutex);)의 전역 변수인 &sr_mutex
동일한 뮤텍스 키를 사용하고 있음을 발견했습니다 . 반면에 Linux에서는 최신 버전의 잠금 커널이 사용되지 않는 것을 발견했습니다 ...sr_mutex
sr.c
sd.c
ioctl
질문:
두 개의 ODD 드라이버가 동일한 전역 변수를 사용하는 이유는 무엇입니까?
왜 여기에 추가하나요
mutex_lock
? ODD는 명령을 완료하는 데 2~3초 정도 걸릴 수 있습니다.
답변1
나는 같은 문제를 가지고있다.
이 패치를 찾았습니다.[PATCH] [SCSI] sr: 장치별 뮤텍스를 사용하여 다중 드라이브 성능 수정
이 패치를 적용하면 문제가 해결될 수도 있습니다.