Palestra no Sesol: Acelerando Thread-Local Storage (TLS) com bibliotecas dinâmicas
Mais uma excelente palestra do Alexandre Oliva neste evento. As duas outras foram “Software Livre e a Matrix” e “Espelho mágico na internet. Qual a melhor licença até agora?”. Esta palestra trata da tese de doutorado do palestrante, que aborda técnicas para otimizar em vários níveis (nesse caso, a nível de compilação) o acesso a dados dinâmicos no escopo de threads. Os slides podem ser vistos aqui.
A palestra iniciou com uma breve explicação sobre conceitos básicos do uso de memória em arquitetura Intel x86 32 bits, como dados por thread, stack e acesso a variáveis interthread. Depois, começaram os slides em Assembly que permaneceriam até o fim da apresentação (o que foi avisado pelo palestrante e realmente foi cumprido). Notei que a maioria dos espectadores ficou um pouco, “tensa”, digamos assim. Acho que poucos ali tiveram alguma experiência real com uma liguagem de montagem.
Entretanto, como único representante da Engenharia de Teleinformática ali presente, e através dos conhecimentos obtidos com desenvolvimento de sistemas embarcados (bastante presentes na área e no curso, leia este artigo do César Lincoln para maiores informações) e pesquisas pessoais, consegui entender boa parte dessa complexa apresentação (que pretendo assistir mais uma vez em algum outro evento, p/ ver se entendi mesmo!).
Continuando. O próximo ponto da apresentação foi mostrar a proposta de otimização para a mecânica atualmente utilizada para carregar bibliotecas compartilhadas em tempo de execução, suportando Virtual Memory e paginação. Nesse caso, estamos falando de libs que são carregadas em tempo de execução mesmo, elas não foram carregadas junto à criação do processo. Durante o fluxo de execução de um programa com várias threads, uma nova lib foi carregada via dlopen(), por exemplo. Esse é a situação que o propósito da palestra é otimizar.
O Alexandre Oliva lançou mão da GOT (Global Offset Table) para conseguir criar uma indireção através de ponteiros que permitisse a alocação realmente dinâmica de regiões da memória para carregar as libs. Ele implementou ainda um TLS Descriptor-Table General Dynamic que é utilizada por um resolver que visa deixar transparente o uso de blocos estáticos ou carregados em runtime, delegando ao compilador a tarefa de escolher com eficiência que método será usado para acessar as variáveis, de acordo com sua localização.
Para finalizar, o palestrante mostrou testes de performance da implementação anterior e da sua, tanto para blocos estáticos quanto para dinâmicos, já que sua técnica também contempla as bibliotecas que foram carregadas no início da execução, através do resolver.
E assim foi uma das palestras de nível técnico mais elevado que já vi. Valeu realmente à pena ter assistido. Vale lembrar que o Alexandre Oliva faz parte da equipe que mantém o GCC, trabalhando como Engenheiro de Compiladores na Red Hat, e que seu algoritmo já está implementado na versão 4.1 desse grande compilador.
Artigos Relacionados:
Sobre este artigo
You’re currently reading “Palestra no Sesol: Acelerando Thread-Local Storage (TLS) com bibliotecas dinâmicas,” an entry on Hypercast
- Published:
- 07.08.07 / 9am
- Category:
- Desenvolvimento
6 Comments
Jump to comment form | comments rss [?] | trackback uri [?]