ESTUDO SOBRE MEMÓRIA TRANSACIONAL EM SOFTWARE.
José Gonçalves Dias Neto
Universidade Estadual de Mato Grosso do Sul (UEMS), Unidade de Nova Andradina
[email protected]
Irineu Sotoma
FACOM – Universidade Federal de Mato Grosso do Sul, Campus Campo Grande
[email protected]
Resumo: O crescente desenvolvimento da arquitetura multi-core, ampliou-se a possibilidade
de execução de rotinas paralelamente. O atual desenvolvimento multithreading permite
explorar este paralelismo, porém a utilização de programação baseada em locks dificulta a
tarefa do programador de tirar o máximo proveito desta arquitetura e facilita o aparecimento
de problemas como deadlock e starvation. Memória Transacional veio para tentar diminuir a
complexidade de programação paralela e tentar aproveitar ao máximo os núcleos disponíveis
aumentando a vazão (throughput) do sistema, utilizando basicamente gerentes de contenção
para tratar conflitos, sendo esta uma abordagem unicamente reativa. Abordagens mais
recentes utilizam formas pró-ativas que apenas trazem benefícios em cenários muito
específicos e utilizam um mecanismo até certo ponto simplista de adaptatividade para tentar
manter o mínimo de desempenho nos demais cenários. Através deste trabalho, objetivamos o
desenvolvimento de uma política pró-ativa de escalonamento de transações, que utilize-se de
heurísticas de baixa sobrecarga, para evitar conflitos em memória transacional em software e
que propicie uma melhor adaptatividade em cenários diversos.
Palavras-chave: Medidas Pró-ativas, Escalonamento Pró-ativo, Memória Transacional,
Memória Transacional em Software, STM, Software Transaction Memory.
Introdução
Com o advento de novas arquiteturas, em especial a multi-core, a qual disponibiliza
um sistema com mais de um núcleo de processamento, intensificou-se a busca pelo
desenvolvimento de programas que sejam capazes de executar instruções paralelamente,
permitindo maior vazão de instruções executadas no sistema. A programação multithreading
utiliza-se bem desta estrutura de múltiplos núcleos e permite que threads executem
concomitantemente em núcleos diferentes.
Para permitir que as diversas threads que encontram-se em execução não interfiram
em dados compartilhados, este modelo faz uso de bloqueios (locks) e variáveis condicionais.
Isto proporciona segurança ao acesso de dados compartilhados porém, acarreta uma série de
desvantagens. Devido a sua maior complexidade de programação, exige-se muito conheci-
2
mento e atenção por parte do programador, pois qualquer erro de sincronização pode levar a
situações de deadlock ou starvation (Tanenbaum, 2010).
Com o intuito de facilitar este tipo de programação surgiu o conceito de Memória
Transacional (Tansactional Memory - TM). Esta abordagem visa a criação de blocos
indivisíveis de comandos, denominados transações, que possuem a propriedade de execução
atômica, similarmente a operações realizadas em sistemas de banco de dados.
As transações podem gerar conflitos quando tentam efetuar alterações em áreas de
memória utilizadas por outra transação. Para evitar que esses conflitos gerem problemas
posteriores, é utilizado um módulo denominado Gerente de Contenção, o qual indica qual(ais)
transação(ões) deve(em) ser abortada(s), para que alguma seja confirmada (Herlihy, Shavit,
2008).
Surgiram então 3 (três) abordagens de memória transacional: Memória Transacional
em Hardware (Hardware Transactional Memory – HTM), Memória Transacional em Software
(Software Transactional Memory – STM) e Memória Transacional Híbrida (Hybrid
Transactional Memory – HyTM). O presente estudo restringe-se a Memória Transacional em
Software devido principalmente a maior simplicidade e baixo custo de desenvolvimento de
plataforma.
Benchmarks são utilizados para mensurar o desempenho de cada solução. Dentre os
mais utilizados estão o STAMP, STMBench7 e os Microbenchmarks de Árvores Rubronegras.
Nosso objetivo com este trabalho é propor uma abordagem pró-ativa de baixa
sobrecarga no sistema transacional, para aumentar o desempenho global em cenários de alta
contenção. Além disso pretendemos desenvolver uma técnica adaptativa multinível, para
melhor aproveitamento dos diversos cenários possíveis que o sistema possa vir a sofrer
alternância.
Objetivos
Estudar as diversas abordagens pró-ativas relevantes presentes na literatura e propor
um sistema de heurísticas que gere baixa sobrecarga (overhead) em STM.
Desenvolver uma solução que trabalhe pró-ativamente, utilizando um maior número
de informações referentes ao estado atual do sistema e possivelmente do catálogo de
3
transações correntes, que seja capaz de se adaptar a diversos cenários que possam ocorrer em
um sistema STM convencional.
Metodologia
O início do desenvolvimento do presente projeto deu-se a partir da realização da
revisão bibliográfica, o que nos permitiu estudar e comparar trabalhos relacionados em artigos
e periódicos, além de livros que melhor explanem conceitos básicos sobre a área escolhida. A
partir do levantamento e realização de estudos sobre diferenças, potencialidades de
deficiências de cada técnica contemplada, será possível a execução das próximas etapas a
seguir:
1.
Implementar algumas das técnicas estudadas a fim de compreender mais a
fundo a forma de atuação destas e na execução de testes comparativos, para no futuro
comprovar se a solução final do trabalho terá ou não benefícios em relação às abordagens
atuais. Como plataforma STM será utilizada a STM Builder desenvolvida por Duarte (2012)
que é uma derivação da SwissTM, esta última considerada por pesquisadores como uma
plataforma ainda em estado da arte.
2.
Estudar meios de tomar decisões diferentes no caso de conflitos escrita/escrita
(eager) e leitura/escrita (lazy) usando possivelmente informações diferentes: A partir da
premissa de que conjuntos de leitura e de escrita possuem características diferentes e que as
instruções de escrita podem distintos dentro de uma transação, o estudo dos momentos em que
os conflitos são identificados poderia gerar uma nova técnica que auxiliar a no ganho de
desempenho de nossa solução.
3.
Estudar como definir os momentos de adaptação das técnicas: Estudar os
diversos cenários específicos que podem ocorrer durante a execução de cargas de trabalho
STM, propondo e implementando uma solução de adaptação multinível. Confrontar
resultados obtidos em benchmarks a partir da forma atual de adaptação contra resultados
obtidos a partir da nova solução de adaptação multinível.
Resultados e Considerações Parciais
Notamos que os esforços para construção e melhorias em gerentes de contenção têm
incrementando o desempenho em sistemas de alta contenção, porém a abordagem pró-ativa,
4
que visa evitar que um conflito seja deflagrado, nos apresentou maior vantagem por utilizar
técnicas que tentam evitar o desperdício de recursos como o tempo de CPU.
Através do estudo de abordagens que utilizam formas de adaptação, foi identificado
que a maioria destas abordagens se restringe a alternância binária, ou seja, divide os possíveis
cenários que o sistema possa se encontrar em unicamente dois estágios (alta e baixa contenção
ou transações curtas e longas). Uma proposta que nos apresenta interessante é efetuar uma
maior divisão, objetivando o refinamento das possíveis situações do sistema em cenários mais
específicos.
O mecanismo de estabilização nos parece bastante vantajoso por economizar
alternâncias entre cenários em casos onde os limiares responsáveis pela verificação do estado
atual do sistema ficam por vezes muito próximos à fronteira entre dois cenários distintos,
além de aparentemente ser uma implementação leve e simples de ser efetuada. Assim a
proposta que nos parece ser adequada, seria a utilização deste mecanismo entre todos os
possíveis cenários que forem identificados e implementados.
Referências
DUARTE, Thales Farias. Uma Plataforma Para Desenvolvimento E Avaliação De Memória
Transacional Em Software. Dissertação de mestrado apresentada à Universidade Federal do
Mato Grosso do Sul - Faculdade de Computação, Agosto 2012.
HERLIHY, Maurice, SHAVIT, Nir. The Art of Multiprocessor Programming. Morgan
Kaufmann Publishers, 2008.
TANENBAUM, Andrew S. . Sistemas operacionais modernos 3a edição. Pearson Prentice
Hall, 2010.
Download

NETO, J. G. D. e SOTOMA, I. (50_2014-06-30_09-34-14)