Como posso fazer benchmark de repositórios de valores-chave concorrentes?

5

Eu tenho algumas implementações de armazenamento de valor-chave simultâneas que são implementadas com tabelas de hash e árvores de pesquisa que gostaria de comparar. Eu gostaria de compará-los com um aplicativo do mundo real onde vários segmentos enfatizam os armazenamentos de valores-chave.

Já tenho algum micro-benchmark que enfatiza os armazenamentos de valores-chave executando operações aleatórias nos armazenamentos de valores-chave em paralelo. O que eu estou interessando agora são aplicativos que fazem algum trabalho que pode ser útil no "mundo real" e onde um ou vários armazenamentos de valores-chave são importantes para escalabilidade e velocidade. Eu gostaria de ter uma referência que seja fácil de configurar e que possa ser executada em muitos sistemas diferentes. Eu preferiria que não envolvesse comunicação em rede, etc.

Um exemplo do tipo de aplicações que estou procurando é o algoritmo de PageRank paralelo. Ele é usado como uma referência de diferentes lojas de valores-chave no documento "Tenta Simultâneos com Instantâneos Não Bloqueados Eficientes" ( PPoPP'12) ".

As razões pelas quais não estou satisfeito com os benchmarks "artificiais" que fazem X% de inserções, Y% de exclusões e Z% de pesquisas são:

  1. Pode ser mais convincente com um benchmark que também resolve um problema do mundo real. O risco com um benchmark "artificial" é que eles podem não corresponder a nenhuma situação do mundo real.
  2. Alguns cenários de uso que ocorrem frequentemente em aplicativos do mundo real podem não ser cobertos pelo benchmark artificial.
por Kjell 14.05.2013 / 14:33
fonte

1 resposta

1

Por que não levar o seu teste de operação KVP (par de valores-chave) aleatório para o próximo nível?

Presumivelmente, seu conjunto atual de testes inclui uma lista de potenciais KVPs e, em seguida, realiza operações CRUD contra qualquer KVP selecionado. Com efeito, a lista de KVPs conduz os benchmarks contra o seu sistema. Um ator seleciona aleatoriamente o KVP e, em seguida, escolhe um CRUD op.

O próximo estágio lógico é criar conjuntos de operações que "substituam" sua lista de potenciais KVPs como o driver. Os conjuntos de operações refletirão o que você acha que uma carga de trabalho "real" será. Em alguns casos, ainda serão operações CRUD em KVPs. Em outros casos, como você mencionou, ele terá alterações adicionais (também conhecido como "trabalho real") e é o agregado dessas operações que fazem o conjunto.

Agora, seu Ator selecionará da lista de conjuntos em vez de KVPs. Pontos de bônus se você tornar seu Ator inteligente o suficiente para escolher cargas de trabalho relativas, portanto, uma porcentagem seria CRUD em KVP e outra porcentagem seria "trabalho real".

Essa abordagem não aborda totalmente suas preocupações com benchmarks "artificiais", mas não sei se alguma solução no resumo realmente pode resolver esse problema. Em teoria, você conhece melhor a carga de trabalho esperada para poder adaptar esses conjuntos de operações de acordo.

O benefício desta abordagem é que você agora pode afirmar "O sistema pode manipular ### transações de X% inserts, Y% deletes, Z% lookups e Q% 'operações do mundo real'". E você adicionará um comentário entre parênteses explicando o que "mundo real" significa para você.

    
por 08.07.2013 / 22:31
fonte