Meu PC tem duas unidades de disco óptico (ODDs). Eu gravo o arquivo (3.8G) em dois ODDs ao mesmo tempo.
Eu verifiquei o log do sistema e descobri que apenas um comando pode estar em execução ao mesmo tempo. Isso significa enviar comandos ATAPI para ODD1 e ODD2 ao mesmo tempo. Eles não são executados em paralelo.
Eu verifiquei os drivers do kernel do Linux sr.c sr_block_ioctl()
.
Eles adicionaram mutex_lock
no kernel Linux 2.6.36.
Descobri que isso faz com que os comandos ATAPI não sejam executados em paralelo.
Eu adicionei o log de depuração para despejar o &sr_mutex
e descobri que os dois ODDs usam a mesma chave mutex ... sr_mutex
é uma variável global em sr.c
(static DEFINE_MUTEX (sr_mutex);)
Por outro lado, eu achei sd.c
não usa um bloqueio em ioctl
na última versão do kernel Linux ...
Perguntas:
Por que os dois drivers ODD usam a mesma variável global?
Por que adicionar mutex_lock
aqui? O ODD pode precisar de 2 ~ 3 segundos para completar um comando.
Tags drivers