Présentation d'une nouvelle suite de benchmarking pour les structures de données
Un nouvel outil pour évaluer les structures de données avec des charges de travail inspirées de la vie réelle.
― 8 min lire
Table des matières
Ces dernières années, la technologie a évolué rapidement, ce qui a créé le besoin de Structures de données efficaces, surtout celles qui peuvent gérer plusieurs requêtes en même temps. Ça a entraîné une demande pour des outils de benchmarking qui testent comment ces structures de données performent dans différentes conditions. Dans cet article, on va parler d'une nouvelle méthode de benchmarking qui teste des structures de données en utilisant des charges de travail inspirées de la vie réelle. On mettra aussi en avant quelques observations importantes sur la façon d'évaluer leur Performance de manière équitable.
Le besoin de benchmarking
Quand on parle de structures de données, on fait référence aux façons dont les données sont organisées et stockées dans les ordinateurs. Différents types de structures de données sont utilisés pour diverses applications, et chacune a ses forces et ses faiblesses. À mesure que la technologie avance, il est crucial de comprendre quelle structure de données fonctionne le mieux pour des tâches spécifiques. Le benchmarking nous aide à comparer différentes structures selon leur rapidité et leur efficacité à réaliser certaines opérations.
Les suites de benchmarking couramment utilisées ont quelques limitations. Elles offrent souvent un ensemble rigide de charges de travail qui ne permettent pas de flexibilité ou de personnalisation. Ça peut rendre difficile le test des structures de données dans diverses situations pratiques. Le besoin d'un meilleur outil de benchmarking est clair.
Suites de benchmarking communes
Parmi les suites de benchmarking les plus utilisées, on trouve Synchrobench, Setbench, YCSB et TPC. Chacune d'elles a des fonctionnalités et des limitations spécifiques :
Synchrobench est simple mais n'offre qu'une seule Charge de travail uniforme. Cela veut dire qu'elle ne représente pas la variété de requêtes que pourrait rencontrer une structure de données dans la vraie vie.
Setbench offre un peu plus de variété avec différents types de charges de travail mais reste limitée pour les applications réelles.
YCSB et TPC sont plus complexes et essaient de mieux modéliser des scénarios du monde réel. Cependant, elles peuvent être lourdes car elles ont des nombres d'opérations prédéfinis, ce qui complique la création de charges de travail adaptées aux besoins spécifiques des utilisateurs.
Ces limitations ont conduit au développement d'une nouvelle suite de benchmarking conçue pour résoudre ces problèmes.
Exigences pour une nouvelle suite de benchmarking
Pour créer une suite de benchmarking plus efficace, il était nécessaire de prendre en compte plusieurs exigences clés :
Flexibilité : Les utilisateurs devraient pouvoir ajouter facilement de nouvelles charges de travail à la suite.
Charges de travail infinies : La possibilité de faire tourner des charges de travail indéfiniment permettrait un test complet dans diverses conditions.
Cas d'utilisation réels : Les charges de travail devraient être basées sur des modèles d'utilisation réels et être biaisées, reflétant comment les structures de données gèrent des demandes plus fréquentes.
Ajustement simple des paramètres : Les utilisateurs devraient pouvoir modifier rapidement les paramètres selon leurs besoins de test.
Aucune des suites existantes ne répond complètement à ces exigences, d'où le développement d'une nouvelle approche modulaire.
Conception de la nouvelle suite
La nouvelle suite de benchmarking est conçue pour être hautement modulaire, permettant aux utilisateurs d'ajouter des charges de travail sans repartir de zéro. La suite comprend plusieurs composants pour faciliter différents scénarios de test.
Composants clés
Distribution : Ce composant génère des valeurs aléatoires pour les Tests. C'est crucial pour simuler diverses charges de travail.
KeyGeneratorData : Cela convertit les valeurs générées en clés utilisées dans les opérations.
KeyGenerator : Cela est responsable de la génération de clés pour chaque type d'opération, comme insérer, supprimer ou obtenir des données.
ThreadLoop : Cela gère comment les threads interagissent avec la structure de données pendant les tests, y compris comment exécuter des opérations et collecter des statistiques.
Chaque charge de travail dans la suite a des paramètres spécifiques qui définissent comment les tests sont réalisés, y compris la plage de clés, la taille de la structure de données et le nombre de threads utilisés.
Mise en œuvre des charges de travail
Pour que la suite de benchmarking soit efficace, il est important de mettre en œuvre une variété de charges de travail. Deux charges de travail notables incluses dans la nouvelle suite se concentrent sur des modèles de la vie réelle : les ensembles biaisés temporaires et Creakers et Wave.
Ensembles biaisés temporaires
Cette charge de travail varie selon l'heure de la journée. Les tâches courantes le matin, l'après-midi ou le soir sont simulées pour refléter comment les demandes de données changent avec le temps. Par exemple, un utilisateur pourrait chercher des données météo le matin, rechercher des infos liées au travail l'après-midi, et lire les nouvelles le soir.
Creakers et Wave
Cette charge de travail modélise comment les données récemment ajoutées sont accessibles plus fréquemment par rapport aux données plus anciennes. Par exemple, de nouvelles chansons peuvent être écoutées plus souvent lorsqu'elles sont d'abord sorties, tandis que les anciennes chansons le sont moins. Ce modèle aide à tester à quel point les structures de données peuvent s'ajuster à des demandes changeantes.
Observations sur le benchmarking
Après avoir réalisé divers tests avec la nouvelle suite, plusieurs observations importantes ont été faites concernant les processus de benchmarking :
La performance relative varie : La performance des structures de données dépend considérablement de la charge de travail spécifique utilisée. Ce qui peut bien fonctionner dans un ensemble de conditions peut ne pas être le cas pour un autre.
Biais de l'auteur : Souvent, lorsque des chercheurs publient des résultats, ils choisissent uniquement les charges de travail les mieux performantes pour leurs structures de données. Cela peut conduire à des conclusions trompeuses sur leur efficacité globale.
Précautions lors de l'évaluation : Étant donné la complexité des structures de données et de leur performance, il est essentiel d'évaluer les résultats de manière critique. La performance ne doit pas être prise à la légère ; elle doit être évaluée dans le contexte de diverses charges de travail.
Tests avec différentes structures de données
La nouvelle suite de benchmarking a été testée en utilisant trois implémentations bien connues des arbres de recherche binaire : l'arbre BCCO, l'arbre CF et l'arbre CO. L'objectif était de découvrir des différences de performance sous diverses charges de travail.
Test de performance
Lors des tests, il a été observé qu'en fonction de la charge de travail, n'importe laquelle des trois structures de données pouvait surperformer les autres. Cela indique qu'il n'y a pas de structure de données unique qui soit la meilleure ; au lieu de cela, leur performance dépend souvent du contexte.
Observations clés issues des tests
L'arbre BCCO, qui effectue des suppressions physiques et des rotations, a tendance à exceller dans les charges de travail où ces opérations sont prédominantes.
L'arbre Concurrency-Friendly, qui s'appuie sur un thread de démon pour les suppressions physiques, peut être à la traîne dans des arbres plus grands, surtout lors d'opérations de suppression lourdes.
L'arbre Concurrency-Optimal peut bien fonctionner dans des scénarios avec un mélange équilibré d'insertion et de suppression mais peine lorsque les opérations deviennent biaisées.
Conclusion
En résumé, la nouvelle suite de benchmarking développée présente une approche flexible et modulaire pour tester des structures de données. En permettant aux utilisateurs de créer des charges de travail inspirées des modèles d'utilisation réels et en rendant possible des tests infinis, elle vise à résoudre les limitations des suites de benchmarking existantes.
La performance des structures de données dépend fortement des charges de travail spécifiques utilisées pour les tests. Il est donc vital pour les chercheurs et les praticiens d'évaluer attentivement les résultats de performance, en tenant compte du contexte dans lequel les structures de données performent le mieux. Les travaux futurs se concentreront sur le raffinement de la suite Java et sur le développement d'une version similaire pour C++.
Titre: Benchmark Framework with Skewed Workloads
Résumé: In this work, we present a new benchmarking suite with new real-life inspired skewed workloads to test the performance of concurrent index data structures. We started this project to prepare workloads specifically for self-adjusting data structures, i.e., they handle more frequent requests faster, and, thus, should perform better than their standard counterparts. We looked over the commonly used suites to test performance of concurrent indices trying to find an inspiration: Synchrobench, Setbench, YCSB, and TPC - and we found several issues with them. The major problem is that they are not flexible: it is difficult to introduce new workloads, it is difficult to set the duration of the experiments, and it is difficult to change the parameters. We decided to solve this issue by presenting a new suite based on Synchrobench. Finally, we highlight the problem of measuring performance of data structures. We show that the relative performance of data structures highly depends on the workload: it is not clear which data structure is best. For that, we take three state-of-the-art concurrent binary search trees and run them on the workloads from our benchmarking suite. As a result, we get six experiments with all possible relative performance of the chosen data structures.
Auteurs: Vitaly Aksenov, Dmitry Ivanov, Ravil Galiev
Dernière mise à jour: 2023-05-18 00:00:00
Langue: English
Source URL: https://arxiv.org/abs/2305.10872
Source PDF: https://arxiv.org/pdf/2305.10872
Licence: https://creativecommons.org/licenses/by/4.0/
Changements: Ce résumé a été créé avec l'aide de l'IA et peut contenir des inexactitudes. Pour obtenir des informations précises, veuillez vous référer aux documents sources originaux dont les liens figurent ici.
Merci à arxiv pour l'utilisation de son interopérabilité en libre accès.