我的电脑有两个光盘驱动器 (ODD)。我同时将文件(3.8 G)刻录到两个 ODD 上。
- 在 CentOS 6.9 Linux Kernel 2.6.32 上,大约需要 10 分钟
- 在 CentOS 7.2 Linux Kernel 3.10.0 上,大约需要 16 分钟
我查看了系统日志,发现同一时间只能运行一个命令。这意味着同时向 ODD1 和 ODD2 发送 ATAPI 命令。它们不是并行执行的。
我检查了 Linux 内核驱动程序sr.c sr_block_ioctl()
。
他们mutex_lock
在 Linux 内核 2.6.36 中添加了此功能。
我发现这使得 ATAPI 命令不能并行执行。我添加了调试日志来转储&sr_mutex
,我发现两个 ODD 使用相同的互斥锁密钥...sr_mutex
是 (static DEFINE_MUTEX(sr_mutex);) 中的全局变量。sr.c
另一方面,我发现在 Linux 中sd.c
没有使用锁ioctl
内核最新版本...
问题:
为什么两个ODD驱动程序使用相同的全局变量?
为什么要添加到
mutex_lock
这里呢? ODD可能需要2~3秒才能完成一个命令。