Por que o espaço do usuário é mais lento que o kernel?

3

Ouvi dizer que sistemas de arquivos baseados em FUSE são notoriamente lentos porque são implementados em um programa de espaço do usuário. O que é sobre o espaço do usuário que é mais lento que o kernel?

    
por dan 20.12.2014 / 17:20

2 respostas

2

O código é executado na mesma velocidade, seja no kernel ou na extensão do usuário, mas há coisas que o código do kernel pode fazer diretamente, enquanto o código de usuário do usuário precisa saltar através de aros. Em particular, o código do kernel pode mapear a memória do aplicativo diretamente, para que possa copiar diretamente o conteúdo do arquivo entre a memória do aplicativo e os buffers internos de ou para os quais o hardware copia. O código do usuário tem que fazer uma cópia extra através de um pipe ou soquete, ou fazer uma operação de compartilhamento de memória mais complexa.

Além disso, cada operação de arquivo tem que passar pelo kernel - a única maneira de um processo interagir com qualquer coisa é através de uma chamada de sistema. Se a operação do arquivo for executada inteiramente dentro do kernel, haverá apenas uma transição de usuário / kernel e uma transição de kernel / usuário para executar, o que é bastante rápido. Se a operação do arquivo for executada por outro processo, deve haver uma alternância de contexto entre processos, o que requer uma operação muito mais cara na MMU .

O desempenho de velocidade ainda é insignificante em relação à maioria dos tempos de acesso ao hardware, mas pode ser observado quando o hardware não é o gargalo, especialmente porque muitas operações de hardware podem ser executadas de forma assíncrona enquanto o processador principal faz outra coisa; e cópias de dados entre processos mantêm a CPU ocupada.

    
por 20.12.2014 / 22:56
1

Muito simplificado:

Seu aplicativo deseja ler um arquivo

O aplicativo solicita ao kernel, o sistema de arquivos de acesso do kernel (no espaço do kernel) verifica as permissões, manipula o descritor de arquivo para o aplicativo.

Com os sistemas de arquivos do espaço do usuário, você tem muito mais interrupções relativamente lentas do kernel para o usuário:

O aplicativo pede ao kernel para abrir o arquivo, o kernel chama o sistema de arquivos userspace, o userspace fs chama o kernel para acesso ao disco, o userspace fs envia dados para o kernel, o kernel entrega dados para o aplicativo userspace.

Com sistemas de arquivos userspace, você tem muito mais opções de contexto.

    
por 20.12.2014 / 17:44