Escalonamento de transações em memória a nível de usuário em Haskell

Detalhes bibliográficos
Ano de defesa: 2020
Autor(a) principal: Duarte, Rodrigo Medeiros
Orientador(a): Du Bois, André Rauber
Banca de defesa: Não Informado pela instituição
Tipo de documento: Dissertação
Tipo de acesso: Acesso aberto
Idioma: por
Instituição de defesa: Universidade Federal de Pelotas
Programa de Pós-Graduação: Programa de Pós-Graduação em Computação
Departamento: Centro de Desenvolvimento Tecnológico
País: Brasil
Palavras-chave em Português:
Área do conhecimento CNPq:
Link de acesso: http://guaiaca.ufpel.edu.br/handle/prefix/6656
Resumo: Memória Transacional é um modelo de sincronização entre threads que utiliza um conceito de transações parecido com o de bancos de dados. Este modelo de sincronização apresenta uma elevada abstração, pois nele o programador somente define os dados que deve ser sincronizados, ficando a tarefa da correta sincronização a cargo do sistema transacional. Apesar de sua elevada abstração, memórias transacionais tendem a perder desempenho em sistemas de alta contenção de memória devido à alta taxa de conflitos entre as transações. Essa alta taxa de conflitos conduz a uma degradação do desempenho por não explorar de forma eficiente os recursos disponíveis (cores). Neste contexto, o escalonamento transacional emerge como uma alternativa para reduzir a alta taxa de cancelamentos. Nesta estratégia, as transações são gerenciadas com o objetivo de evitar que novos conflitos venham a ocorrer, distribuindo as transações na tentativa de explorar de forma mais eficiente os recursos computacionais disponíveis (cores). Este trabalho apresenta o desenvolvimento de três diferentes escalonadores transacionais em Haskell, explorando a praticidade de implementar escalonadores, os quais são estruturas complexas, dentro de uma linguagem de alto nível de abstração. O objetivo é a comparação do comportamento de diferentes técnicas de escalonamento sobre diferentes algoritmos transacionais, como o TL2, TINY e o SWISS, que apresentam versionamento de dados tardio, adiantado e misto, respectivamente. Os resultados obtidos demonstraram que, o uso dos escalonadores reduziu a quantidade de conflitos na maioria das aplicações, impactando em uma redução no tempo de execução. Também observou-se que, quando os escalonadores foram utilizados em aplicações de contenção máxima de memória, esses evitaram que o sistema tivesse maior degradação, apresentando um tempo de execução quase constante independente da quantidade de threads usadas. Por fim, observou-se que a eficiência em um escalonador tem em reduzir os conflitos também está associado ao tipo de algoritmo de memória transacional que este usa e não somente em sua capacidade de lidar com conflitos.