Por que o driver de kernel do Linux sr.c sr_block_ioctl do mutex_lock?

3

Meu PC tem duas unidades de disco óptico (ODDs). Eu gravo o arquivo (3.8G) em dois ODDs ao mesmo tempo.

  • No kernel 2.6.32 do CentOS 6.9 Linux, são necessários cerca de 10 minutos
  • No kernel 7.0 do Linux do CentOS 7.2, são necessários cerca de 16 minutos

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:

  1. Por que os dois drivers ODD usam a mesma variável global?

  2. Por que adicionar mutex_lock aqui? O ODD pode precisar de 2 ~ 3 segundos para completar um comando.

por Deren.Wang 19.12.2017 / 06:58

0 respostas

Tags