Poucas perguntas sobre chamadas do sistema e módulos do kernel (serviços do kernel em paralelo)

1

Tenho poucas perguntas sobre as chamadas do sistema e os módulos do kernel.

  1. Vamos supor que temos dois aplicativos (A e B) e cada um deles está sendo executado em um núcleo diferente. (A-CPU 0, B-CPU 1) Quando dois aplicativos chamam uma mesma chamada de sistema em paralelo, eles são executados em paralelo? Em caso afirmativo, qual é o núcleo da CPU em que as chamadas do sistema são executadas? A chamada do sistema é executada no núcleo da CPU do chamador?

  2. Vamos supor que temos um módulo do kernel e dois aplicativos (A e B) estão chamando uma mesma função do módulo do kernel por meio do ioctl (em paralelo). Eles executam em paralelo? Em caso afirmativo, qual é o núcleo da CPU que atende à função do módulo do kernel. Se não for, qual seria a maneira mais eficiente de fornecer função paralela do módulo do kernel para vários aplicativos?

por Younghyun 23.02.2015 / 11:28

1 resposta

1

Quando o suporte ao SMP foi adicionado pela primeira vez ao Linux, ele usou um "bloqueio gigante" ou " BKL " (grande bloqueio do kernel), isso ainda estava presente até alguns anos atrás . Isso efetivamente tornou o kernel single threaded (exceto para serviços de interrupção de hardware), de modo que não mais do que um syscall poderia estar ativo, o que naturalmente limitava o desempenho para muitos tipos de carga de trabalho.

Com o passar do tempo, o BKL foi substituído por um bloqueio refinado, algumas chamadas do sistema podem ser executadas de forma totalmente simultânea, outras não totalmente. Para um exemplo simples, considere a alocação de PIDs e a criação de processos no kernel do Linux. PIDs são implementados com um bitmap , alocação e liberação de números PID pode ser feita com operações atômicas sem trava. Mas, a manutenção da tabela de processos não é tão simples, isso é feito com um bloqueio de "lista de tarefas" para garantir a integridade da estrutura de dados relevante ( pid_hash ).

Para responder às perguntas, então:

When two applications call a same system call in parallel, are they executed in parallel?

Assumindo um kernel contemporâneo, sim. Mas, dependendo do syscall, eles podem girar, produzir ou adiar certas operações. As invocações simultâneas não poderão atualizar as mesmas estruturas de dados ou acessar o mesmo hardware ao mesmo tempo em que exclusões ou bloqueios são usados.

If so, what is the CPU core where the system calls execute? Does system call run on its caller's CPU core?

Ele será iniciado na CPU chamadora, poderá ser reprogramado para outra CPU, dependendo do syscall e do que está acontecendo em algum outro lugar do sistema, a menos que você tenha definido uma afinidade rigorosa. Se você pensar um pouco sobre o comportamento do getcpu () syscall, deve ser mais claro (ignorando o fato de que pode não ser um syscall real em x86 ).

Let's assume that we have a kernel module and two applications (A and B) are calling a same function of the kernel module through ioctl (in parallel). Do they execute in parallel?

Sim, espera-se que o módulo use o bloqueio refinado e outras primitivas de sincronização, conforme necessário.

If so, what is the CPU core that services kernel module function.

O mesmo que acima, ele será iniciado na CPU de chamada.

If it is not, what would be the most efficient way to provide parallel kernel module function for multiple applications?

Dependendo do módulo (e hardware), a eficiência depende do uso cuidadoso e mínimo do bloqueio correto (possivelmente evitando spinlocks, reduzindo a cópia da memória, etc.) e do uso correto da afinidade do processador. No caso de você estar perguntando sobre onde as chamadas do sistema não são ou não podem ser processadas simultaneamente, é difícil dar uma boa resposta. Pode ser possível delegar algumas partes do driver a um daemon de espaço do usuário multiencadeado (observei isso com alguns aceleradores de criptografia em que o acelerador em si só podia executar uma operação por vez e em que algumas pequenas operações eram mais rápidas CPU).

O livro PDF gratuito Drivers de Dispositivos Linux (3ª edição) é inestimável para este tipo de trabalho, Capítulo 5 em particular: Condições de Concorrência e Raça .

    
por 23.02.2015 / 17:24