O documento apresenta a arquitetura e implementações internas do kernel Linux open source, discutindo sua história, estrutura, código fonte, kernel-space versus user-space, processos e threads, e o escalonador de processos CFS.
2. Agenda
■ Localizando
■ Um pouco de história
■ Arquitetura
■ Linux x Unix clássico
■ Código Fonte
■ Kernel-space e User-space
■ Processos e Threads
■ Escalonador (CFS)
2
4. Um pouco de história
■ Início em 1991, por Linus Torvalds
■ Inspirado no Minix, e não baseado nele
■ Implementação dos mais variados recursos,
encontrados nas variantes Unix e BSD
■ Preocupação com portabilidade e escalabilidade
4
16. Kernel-space e User-space
■ Detalhes de desenvolvimento no kernel-space:
Sem acesso à biblioteca C;
Codificar em C99 e GNU C, não em ANSI;
Sem proteção para acesso à memória;
Sem acesso a ponto flutuante;
Cuidado com sincronia e concorrência;
Nunca esquecer da portabilidade.
16
17. Processos e Threads
■ Implementação de processos a nível de kernel;
■ Nível básico da abstração gerenciável de
programas em execução;
■ Estrutura task_struct;
include/linux/sched.h, linha 994
■ Process ID máximo é um short int por default;
17
19. Criação de Processos
■ Criação em duas etapas: fork() e exec();
■ Otimização de realocação de recursos;
■ O Linux faz COW!
19
20. COW: Copy-On-Write
■ Aproveitamento de recursos já alocados;
■ Não escreve dados desnecessários ou
redundantes;
■ Menor overhead em sistemas orientados a
processos;
■ Estrutura thread_info e o slab allocator;
include/asm-x86_64/thread_info.h
■ Recurso disponibilizado pelo slab allocator.
20
21. Threads no Linux
■ Não existem como na forma conceitual;
■ O Linux implementa threads como processos
comuns;
■ LWP – Lightweight Processes;
■ Não existem mecanismos de escalonamento
especiais ou estruturas de dados específicas;
■ Contraste com outros sistemas;
■ KISS;
■ Assim como um processo, é criada partindo de
um fork(), que usa a função clone():
kernel/fork.c
■ As flags da função clone() estão definidas em:
include/linux/sched.h
21
22. CFS
■ “Completely Fair Schedule” ou Escalonador
Completamente Justo;
■ Foi implementado por Ingo Molnar e está na
árvore oficial desde a versão 2.6.23;
■ Foco em melhorar tempo de resposta das tarefas
interativas e dar flexibilidade no gerenciamento do
escalonamento em geral;
■ Não se baseia mais em runqueues ou timeslices;
■ Não requer mais análises heurísticas para definir
o grau de interatividade de uma tarefa;
■ Armazenamento de informações sobre os
processos em Red Black Trees.
22
23. RBT
■ O “Red Black Tree” é um algoritmo de
armazenamento e busca de informações
utilizando árvores;
■ Funcionamento parecido com B-Trees
convencionais, mas sendo alto-balanceadas e
mantendo a simetria;
23
24. CFS
■ A implementação do novo algoritmo de
escalonamento veio com uma reimplementação
completa do escalonador:
Agora é modular (em termos de código);
O novo “escalonador” na verdade é um novo algoritmo
de escalonamento é um módulo do escalonador, que
também é novo!
■ Qual é a idéia? Pelo próprio Ingo Molnar:
quot;This project is a complete rewrite of the Linux task
scheduler. My goal is to address various feature
requests and to fix deficiencies in the vanilla scheduler
that were suggested/found in the past few years, both
for desktop scheduling and for server scheduling
workloads.quot;
24
25. CFS
■ Como funciona?
quot;CFS's design is quite radical: it does not use
runqueues, it uses a time-ordered rbtree to build a
'timeline' of future task execution, and thus has no
'array switch' artifacts (by which both the vanilla
scheduler and RSDL/SD are affected). CFS uses
nanosecond granularity accounting and does not rely
on any jiffies or other HZ detail. Thus the CFS
scheduler has no notion of 'timeslices' and has no
heuristics whatsoever.”
■ Essa granularidade pode ser checada em:
/proc/sys/kernel/sched_min_granularity_ns
25
26. CFS
■ O CFS está implementado em:
kernel/sched_fair.c
■ Modificações na task_struct:
- struct prio_array *array;
+ struct sched_entity se;
26
27. CFS
■ CFS Group Scheduling
Redução do escopo do CFS para garantir e justiça de
distribuição de processamento entre processos de um
grupo;
Administração no user-space baseada em arquivos e
diretórios de um sistema de arquivos virtual;
Ainda sem suporte na versão estável do kernel para
gerenciamento de mais de um nível de grupo, como
no caso de usar grupos dentro de grupos.
27
28. E a Engenharia?
■ Vantagens das ferramentas open source em
geral;
■ Conhecimento aprofundado e reaproveitável;
■ Custo e fontes disponíveis;
■ Liberdade para escolher;
■ Liberdade para contribuir.
28
29. Kernel Linux
Fim
Contato
Página pessoal: http://hypercast.info/
E-mail: liusfc@gmail.com
29