Skip to content
cccskills
FreePublished on GitHubEnglish overview

agent-performance-benchmarker

Benchmark distributed consensus protocols, methods computers use to agree on shared results. Compare processing rates, response times, scaling behavior, and resource usage across Byzantine, Raft, and Gossip, then identify bottlenecks and potential tuning changes.

OriginalShow the original description

Agent skill for performance-benchmarker - invoke with $agent-performance-benchmarker

AI rating60/ 100See how to install

Good for

  • Comparing Byzantine, Raft, and Gossip performance
  • Measuring response times under increasing load
  • Finding CPU, memory, or network bottlenecks
  • Evaluating scaling and fault tolerance

Overview

What it does

agent-performance-benchmarker supports performance measurement and comparison of distributed consensus protocols: methods that let multiple computers agree on the same result. It covers Byzantine, Raft, and Gossip, evaluating processing rates, response times, performance as the number of computers increases, and tolerance of failures. It also records CPU, memory, network, and disk usage to inform improvement proposals and configuration changes based on the results.

When it helps

It is intended for developers comparing protocols before choosing one, and for people investigating delays as workloads grow. The implementation examples look beyond averages to examine particularly slow operations. They also analyze individual stages, from sending a request through reaching consensus and applying the result.

Example requests

  • “Compare processing rates and response times for Byzantine, Raft, and Gossip.”
  • “Increase the workload in stages and examine success rates and resource usage.”
  • “Identify performance bottlenecks and suggest configuration changes based on the measurements.”

Notes

Invoke it with $agent-performance-benchmarker. The material mainly consists of JavaScript implementation examples and assumes connections to the protocols being tested and to monitoring classes. Only part of the material is supplied, so later procedures and additional requirements cannot be verified.

This overview was written by AI (OpenAI Codex) from the public SKILL.md. Check the original below for the exact behavior.

Objective evaluation

AI rated this skill on four points using only the contents of its SKILL.md. Stars and popularity are not taken into account.

Clear instructionsIs it clear when to use it and what it does?
AGoodThe material names Byzantine, Raft, and Gossip as comparison targets and explicitly lists the performance metrics to measure.
Concrete stepsAre steps, inputs, outputs, and examples spelled out?
BPartly lackingLoad generation and result structures are concrete, but referenced class definitions and the later portion of the material are missing.
SafetyAre sending data, deleting files, and running commands disclosed?
BPartly lackingExamples generate load by submitting transactions and trigger automatic optimization, but do not specify operational boundaries or execution confirmation.
Easy setupDoes it need few tools or API keys, and are they documented?
CCheck firstThe examples reference numerous database, monitoring, and optimization classes without explaining how to obtain or configure them.

The total counts each point as A = 25, B = 15, C = 5. Rated by AI (OpenAI Codex) as of Oct 21, 2026. Treat it as a guide and read the original before installing.

Disagree? Request a re-evaluation

Tell us which point is wrong and why. No login needed. We will check it against the SKILL.md, redo the evaluation, and show the result here.

This form is protected by reCAPTCHA, and the Google Privacy Policy and Terms of Service apply.

Files included (1)

  • SKILL.md26.7 KB

SKILL.md (original)

Review the instructions the agent will receive before you install.


name: performance-benchmarker type: analyst color: "#607D8B" description: Implements comprehensive performance benchmarking for distributed consensus protocols capabilities:

  • throughput_measurement
  • latency_analysis
  • resource_monitoring
  • comparative_analysis
  • adaptive_tuning priority: medium hooks: pre: | echo "📊 Performance Benchmarker analyzing: $TASK"

    Initialize monitoring systems

    if [[ "$TASK" == "benchmark" ]]; then echo "⚡ Starting performance metric collection" fi post: | echo "📈 Performance analysis complete"

    Generate performance report

    echo "📋 Compiling benchmarking results and recommendations"

Performance Benchmarker

Implements comprehensive performance benchmarking and optimization analysis for distributed consensus protocols.

Core Responsibilities

  1. Protocol Benchmarking: Measure throughput, latency, and scalability across consensus algorithms
  2. Resource Monitoring: Track CPU, memory, network, and storage utilization patterns
  3. Comparative Analysis: Compare Byzantine, Raft, and Gossip protocol performance
  4. Adaptive Tuning: Implement real-time parameter optimization and load balancing
  5. Performance Reporting: Generate actionable insights and optimization recommendations

Technical Implementation

Core Benchmarking Framework

class ConsensusPerformanceBenchmarker {
  constructor() {
    this.benchmarkSuites = new Map();
    this.performanceMetrics = new Map();
    this.historicalData = new TimeSeriesDatabase();
    this.currentBenchmarks = new Set();
    this.adaptiveOptimizer = new AdaptiveOptimizer();
    this.alertSystem = new PerformanceAlertSystem();
  }

  // Register benchmark suite for specific consensus protocol
  registerBenchmarkSuite(protocolName, benchmarkConfig) {
    const suite = new BenchmarkSuite(protocolName, benchmarkConfig);
    this.benchmarkSuites.set(protocolName, suite);
    
    return suite;
  }

  // Execute comprehensive performance benchmarks
  async runComprehensiveBenchmarks(protocols, scenarios) {
    const results = new Map();
    
    for (const protocol of protocols) {
      const protocolResults = new Map();
      
      for (const scenario of scenarios) {
        console.log(`Running ${scenario.name} benchmark for ${protocol}`);
        
        const benchmarkResult = await this.executeBenchmarkScenario(
          protocol, scenario
        );
        
        protocolResults.set(scenario.name, benchmarkResult);
        
        // Store in historical database
        await this.historicalData.store({
          protocol: protocol,
          scenario: scenario.name,
          timestamp: Date.now(),
          metrics: benchmarkResult
        });
      }
      
      results.set(protocol, protocolResults);
    }
    
    // Generate comparative analysis
    const analysis = await this.generateComparativeAnalysis(results);
    
    // Trigger adaptive optimizations
    await this.adaptiveOptimizer.optimizeBasedOnResults(results);
    
    return {
      benchmarkResults: results,
      comparativeAnalysis: analysis,
      recommendations: await this.generateOptimizationRecommendations(results)
    };
  }

  async executeBenchmarkScenario(protocol, scenario) {
    const benchmark = this.benchmarkSuites.get(protocol);
    if (!benchmark) {
      throw new Error(`No benchmark suite found for protocol: ${protocol}`);
    }

    // Initialize benchmark environment
    const environment = await this.setupBenchmarkEnvironment(scenario);
    
    try {
      // Pre-benchmark setup
      await benchmark.setup(environment);
      
      // Execute benchmark phases
      const results = {
        throughput: await this.measureThroughput(benchmark, scenario),
        latency: await this.measureLatency(benchmark, scenario),
        resourceUsage: await this.measureResourceUsage(benchmark, scenario),
        scalability: await this.measureScalability(benchmark, scenario),
        faultTolerance: await this.measureFaultTolerance(benchmark, scenario)
      };
      
      // Post-benchmark analysis
      results.analysis = await this.analyzeBenchmarkResults(results);
      
      return results;
      
    } finally {
      // Cleanup benchmark environment
      await this.cleanupBenchmarkEnvironment(environment);
    }
  }
}

Throughput Measurement System

class ThroughputBenchmark {
  constructor(protocol, configuration) {
    this.protocol = protocol;
    this.config = configuration;
    this.metrics = new MetricsCollector();
    this.loadGenerator = new LoadGenerator();
  }

  async measureThroughput(scenario) {
    const measurements = [];
    const duration = scenario.duration || 60000; // 1 minute default
    const startTime = Date.now();
    
    // Initialize load generator
    await this.loadGenerator.initialize({
      requestRate: scenario.initialRate || 10,
      rampUp: scenario.rampUp || false,
      pattern: scenario.pattern || 'constant'
    });
    
    // Start metrics collection
    this.metrics.startCollection(['transactions_per_second', 'success_rate']);
    
    let currentRate = scenario.initialRate || 10;
    const rateIncrement = scenario.rateIncrement || 5;
    const measurementInterval = 5000; // 5 seconds
    
    while (Date.now() - startTime < duration) {
      const intervalStart = Date.now();
      
      // Generate load for this interval
      const transactions = await this.generateTransactionLoad(
        currentRate, measurementInterval
      );
      
      // Measure throughput for this interval
      const intervalMetrics = await this.measureIntervalThroughput(
        transactions, measurementInterval
      );
      
      measurements.push({
        timestamp: intervalStart,
        requestRate: currentRate,
        actualThroughput: intervalMetrics.throughput,
        successRate: intervalMetrics.successRate,
        averageLatency: intervalMetrics.averageLatency,
        p95Latency: intervalMetrics.p95Latency,
        p99Latency: intervalMetrics.p99Latency
      });
      
      // Adaptive rate adjustment
      if (scenario.rampUp && intervalMetrics.successRate > 0.95) {
        currentRate += rateIncrement;
      } else if (intervalMetrics.successRate < 0.8) {
        currentRate = Math.max(1, currentRate - rateIncrement);
      }
      
      // Wait for next interval
      const elapsed = Date.now() - intervalStart;
      if (elapsed < measurementInterval) {
        await this.sleep(measurementInterval - elapsed);
      }
    }
    
    // Stop metrics collection
    this.metrics.stopCollection();
    
    // Analyze throughput results
    return this.analyzeThroughputMeasurements(measurements);
  }

  async generateTransactionLoad(rate, duration) {
    const transactions = [];
    const interval = 1000 / rate; // Interval between transactions in ms
    const endTime = Date.now() + duration;
    
    while (Date.now() < endTime) {
      const transactionStart = Date.now();
      
      const transaction = {
        id: `tx_${Date.now()}_${Math.random()}`,
        type: this.getRandomTransactionType(),
        data: this.generateTransactionData(),
        timestamp: transactionStart
      };
      
      // Submit transaction to consensus protocol
      const promise = this.protocol.submitTransaction(transaction)
        .then(result => ({
          ...transaction,
          result: result,
          latency: Date.now() - transactionStart,
          success: result.committed === true
        }))
        .catch(error => ({
          ...transaction,
          error: error,
          latency: Date.now() - transactionStart,
          success: false
        }));
      
      transactions.push(promise);
      
      // Wait for next transaction interval
      await this.sleep(interval);
    }
    
    // Wait for all transactions to complete
    return await Promise.all(transactions);
  }

  analyzeThroughputMeasurements(measurements) {
    const totalMeasurements = measurements.length;
    const avgThroughput = measurements.reduce((sum, m) => sum + m.actualThroughput, 0) / totalMeasurements;
    const maxThroughput = Math.max(...measurements.map(m => m.actualThroughput));
    const avgSuccessRate = measurements.reduce((sum, m) => sum + m.successRate, 0) / totalMeasurements;
    
    // Find optimal operating point (highest throughput with >95% success rate)
    const optimalPoints = measurements.filter(m => m.successRate >= 0.95);
    const optimalThroughput = optimalPoints.length > 0 ? 
      Math.max(...optimalPoints.map(m => m.actualThroughput)) : 0;
    
    return {
      averageThroughput: avgThroughput,
      maxThroughput: maxThroughput,
      optimalThroughput: optimalThroughput,
      averageSuccessRate: avgSuccessRate,
      measurements: measurements,
      sustainableThroughput: this.calculateSustainableThroughput(measurements),
      throughputVariability: this.calculateThroughputVariability(measurements)
    };
  }

  calculateSustainableThroughput(measurements) {
    // Find the highest throughput that can be sustained for >80% of the time
    const sortedThroughputs = measurements.map(m => m.actualThroughput).sort((a, b) => b - a);
    const p80Index = Math.floor(sortedThroughputs.length * 0.2);
    return sortedThroughputs[p80Index];
  }
}

Latency Analysis System

class LatencyBenchmark {
  constructor(protocol, configuration) {
    this.protocol = protocol;
    this.config = configuration;
    this.latencyHistogram = new LatencyHistogram();
    this.percentileCalculator = new PercentileCalculator();
  }

  async measureLatency(scenario) {
    const measurements = [];
    const sampleSize = scenario.sampleSize || 10000;
    const warmupSize = scenario.warmupSize || 1000;
    
    console.log(`Measuring latency with ${sampleSize} samples (${warmupSize} warmup)`);
    
    // Warmup phase
    await this.performWarmup(warmupSize);
    
    // Measurement phase
    for (let i = 0; i < sampleSize; i++) {
      const latencyMeasurement = await this.measureSingleTransactionLatency();
      measurements.push(latencyMeasurement);
      
      // Progress reporting
      if (i % 1000 === 0) {
        console.log(`Completed ${i}/${sampleSize} latency measurements`);
      }
    }
    
    // Analyze latency distribution
    return this.analyzeLatencyDistribution(measurements);
  }

  async measureSingleTransactionLatency() {
    const transaction = {
      id: `latency_tx_${Date.now()}_${Math.random()}`,
      type: 'benchmark',
      data: { value: Math.random() },
      phases: {}
    };
    
    // Phase 1: Submission
    const submissionStart = performance.now();
    const submissionPromise = this.protocol.submitTransaction(transaction);
    transaction.phases.submission = performance.now() - submissionStart;
    
    // Phase 2: Consensus
    const consensusStart = performance.now();
    const result = await submissionPromise;
    transaction.phases.consensus = performance.now() - consensusStart;
    
    // Phase 3: Application (if applicable)
    let applicationLatency = 0;
    if (result.applicationTime) {
      applicationLatency = result.applicationTime;
    }
    transaction.phases.application = applicationLatency;
    
    // Total end-to-end latency
    const totalLatency = transaction.phases.submission + 
                        transaction.phases.consensus + 
                        transaction.phases.application;
    
    return {
      transactionId: transaction.id,
      totalLatency: totalLatency,
      phases: transaction.phases,
      success: result.committed === true,
      timestamp: Date.now()
    };
  }

  analyzeLatencyDistribution(measurements) {
    const successfulMeasurements = measurements.filter(m => m.success);
    const latencies = successfulMeasurements.map(m => m.totalLatency);
    
    if (latencies.length === 0) {
      throw new Error('No successful latency measurements');
    }
    
    // Calculate percentiles
    const percentiles = this.percentileCalculator.calculate(latencies, [
      50, 75, 90, 95, 99, 99.9, 99.99
    ]);
    
    // Phase-specific analysis
    const phaseAnalysis = this.analyzePhaseLatencies(successfulMeasurements);
    
    // Latency distribution analysis
    const distribution = this.analyzeLatencyHistogram(latencies);
    
    return {
      sampleSize: successfulMeasurements.length,
      mean: latencies.reduce((sum, l) => sum + l, 0) / latencies.length,
      median: percentiles[50],
      standardDeviation: this.calculateStandardDeviation(latencies),
      percentiles: percentiles,
      phaseAnalysis: phaseAnalysis,
      distribution: distribution,
      outliers: this.identifyLatencyOutliers(latencies)
    };
  }

  analyzePhaseLatencies(measurements) {
    const phases = ['submission', 'consensus', 'application'];
    const phaseAnalysis = {};
    
    for (const phase of phases) {
      const phaseLatencies = measurements.map(m => m.phases[phase]);
      const validLatencies = phaseLatencies.filter(l => l > 0);
      
      if (validLatencies.length > 0) {
        phaseAnalysis[phase] = {
          mean: validLatencies.reduce((sum, l) => sum + l, 0) / validLatencies.length,
          p50: this.percentileCalculator.calculate(validLatencies, [50])[50],
          p95: this.percentileCalculator.calculate(validLatencies, [95])[95],
          p99: this.percentileCalculator.calculate(validLatencies, [99])[99],
          max: Math.max(...validLatencies),
          contributionPercent: (validLatencies.reduce((sum, l) => sum + l, 0) / 
                               measurements.reduce((sum, m) => sum + m.totalLatency, 0)) * 100
        };
      }
    }
    
    return phaseAnalysis;
  }
}

Resource Usage Monitor

class ResourceUsageMonitor {
  constructor() {
    this.monitoringActive = false;
    this.samplingInterval = 1000; // 1 second
    this.measurements = [];
    this.systemMonitor = new SystemMonitor();
  }

  async measureResourceUsage(protocol, scenario) {
    console.log('Starting resource usage monitoring');
    
    this.monitoringActive = true;
    this.measurements = [];
    
    // Start monitoring in background
    const monitoringPromise = this.startContinuousMonitoring();
    
    try {
      // Execute the benchmark scenario
      const benchmarkResult = await this.executeBenchmarkWithMonitoring(
        protocol, scenario
      );
      
      // Stop monitoring
      this.monitoringActive = false;
      await monitoringPromise;
      
      // Analyze resource usage
      const resourceAnalysis = this.analyzeResourceUsage();
      
      return {
        benchmarkResult: benchmarkResult,
        resourceUsage: resourceAnalysis
      };
      
    } catch (error) {
      this.monitoringActive = false;
      throw error;
    }
  }

  async startContinuousMonitoring() {
    while (this.monitoringActive) {
      const measurement = await this.collectResourceMeasurement();
      this.measurements.push(measurement);
      
      await this.sleep(this.samplingInterval);
    }
  }

  async collectResourceMeasurement() {
    const timestamp = Date.now();
    
    // CPU usage
    const cpuUsage = await this.systemMonitor.getCPUUsage();
    
    // Memory usage
    const memoryUsage = await this.systemMonitor.getMemoryUsage();
    
    // Network I/O
    const networkIO = await this.systemMonitor.getNetworkIO();
    
    // Disk I/O
    const diskIO = await this.systemMonitor.getDiskIO();
    
    // Process-specific metrics
    const processMetrics = await this.systemMonitor.getProcessMetrics();
    
    return {
      timestamp: timestamp,
      cpu: {
        totalUsage: cpuUsage.total,
        consensusUsage: cpuUsage.process,
        loadAverage: cpuUsage.loadAverage,
        coreUsage: cpuUsage.cores
      },
      memory: {
        totalUsed: memoryUsage.used,
        totalAvailable: memoryUsage.available,
        processRSS: memoryUsage.processRSS,
        processHeap: memoryUsage.processHeap,
        gcStats: memoryUsage.gcStats
      },
      network: {
        bytesIn: networkIO.bytesIn,
        bytesOut: networkIO.bytesOut,
        packetsIn: networkIO.packetsIn,
        packetsOut: networkIO.packetsOut,
        connectionsActive: networkIO.connectionsActive
      },
      disk: {
        bytesRead: diskIO.bytesRead,
        bytesWritten: diskIO.bytesWritten,
        operationsRead: diskIO.operationsRead,
        operationsWrite: diskIO.operationsWrite,
        queueLength: diskIO.queueLength
      },
      process: {
        consensusThreads: processMetrics.consensusThreads,
        fileDescriptors: processMetrics.fileDescriptors,
        uptime: processMetrics.uptime
      }
    };
  }

  analyzeResourceUsage() {
    if (this.measurements.length === 0) {
      return null;
    }
    
    const cpuAnalysis = this.analyzeCPUUsage();
    const memoryAnalysis = this.analyzeMemoryUsage();
    const networkAnalysis = this.analyzeNetworkUsage();
    const diskAnalysis = this.analyzeDiskUsage();
    
    return {
      duration: this.measurements[this.measurements.length - 1].timestamp - 
               this.measurements[0].timestamp,
      sampleCount: this.measurements.length,
      cpu: cpuAnalysis,
      memory: memoryAnalysis,
      network: networkAnalysis,
      disk: diskAnalysis,
      efficiency: this.calculateResourceEfficiency(),
      bottlenecks: this.identifyResourceBottlenecks()
    };
  }

  analyzeCPUUsage() {
    const cpuUsages = this.measurements.map(m => m.cpu.consensusUsage);
    
    return {
      average: cpuUsages.reduce((sum, usage) => sum + usage, 0) / cpuUsages.length,
      peak: Math.max(...cpuUsages),
      p95: this.calculatePercentile(cpuUsages, 95),
      variability: this.calculateStandardDeviation(cpuUsages),
      coreUtilization: this.analyzeCoreUtilization(),
      trends: this.analyzeCPUTrends()
    };
  }

  analyzeMemoryUsage() {
    const memoryUsages = this.measurements.map(m => m.memory.processRSS);
    const heapUsages = this.measurements.map(m => m.memory.processHeap);
    
    return {
      averageRSS: memoryUsages.reduce((sum, usage) => sum + usage, 0) / memoryUsages.length,
      peakRSS: Math.max(...memoryUsages),
      averageHeap: heapUsages.reduce((sum, usage) => sum + usage, 0) / heapUsages.length,
      peakHeap: Math.max(...heapUsages),
      memoryLeaks: this.detectMemoryLeaks(),
      gcImpact: this.analyzeGCImpact(),
      growth: this.calculateMemoryGrowth()
    };
  }

  identifyResourceBottlenecks() {
    const bottlenecks = [];
    
    // CPU bottleneck detection
    const avgCPU = this.measurements.reduce((sum, m) => sum + m.cpu.consensusUsage, 0) / 
                   this.measurements.length;
    if (avgCPU > 80) {
      bottlenecks.push({
        type: 'CPU',
        severity: 'HIGH',
        description: `High CPU usage (${avgCPU.toFixed(1)}%)`
      });
    }
    
    // Memory bottleneck detection
    const memoryGrowth = this.calculateMemoryGrowth();
    if (memoryGrowth.rate > 1024 * 1024) { // 1MB$s growth
      bottlenecks.push({
        type: 'MEMORY',
        severity: 'MEDIUM',
        description: `High memory growth rate (${(memoryGrowth.rate / 1024 / 1024).toFixed(2)} MB$s)`
      });
    }
    
    // Network bottleneck detection
    const avgNetworkOut = this.measurements.reduce((sum, m) => sum + m.network.bytesOut, 0) / 
                          this.measurements.length;
    if (avgNetworkOut > 100 * 1024 * 1024) { // 100 MB$s
      bottlenecks.push({
        type: 'NETWORK',
        severity: 'MEDIUM',
        description: `High network output (${(avgNetworkOut / 1024 / 1024).toFixed(2)} MB$s)`
      });
    }
    
    return bottlenecks;
  }
}

Adaptive Performance Optimizer

class AdaptiveOptimizer {
  constructor() {
    this.optimizationHistory = new Map();
    this.performanceModel = new PerformanceModel();
    this.parameterTuner = new ParameterTuner();
    this.currentOptimizations = new Map();
  }

  async optimizeBasedOnResults(benchmarkResults) {
    const optimizations = [];
    
    for (const [protocol, results] of benchmarkResults) {
      const protocolOptimizations = await this.optimizeProtocol(protocol, results);
      optimizations.push(...protocolOptimizations);
    }
    
    // Apply optimizations gradually
    await this.applyOptimizations(optimizations);
    
    return optimizations;
  }

  async optimizeProtocol(protocol, results) {
    const optimizations = [];
    
    // Analyze performance bottlenecks
    const bottlenecks = this.identifyPerformanceBottlenecks(results);
    
    for (const bottleneck of bottlenecks) {
      const optimization = await this.generateOptimization(protocol, bottleneck);
      if (optimization) {
        optimizations.push(optimization);
      }
    }
    
    // Parameter tuning based on performance characteristics
    const parameterOptimizations = await this.tuneParameters(protocol, results);
    optimizations.push(...parameterOptimizations);
    
    return optimizations;
  }

  identifyPerformanceBottlenecks(results) {
    const bottlenecks = [];
    
    // Throughput bottlenecks
    for (const [scenario, result] of results) {
      if (result.throughput && result.throughput.optimalThroughput < result.throughput.maxThroughput * 0.8) {
        bottlenecks.push({
          type: 'THROUGHPUT_DEGRADATION',
          scenario: scenario,
          severity: 'HIGH',
          impact: (result.throughput.maxThroughput - result.throughput.optimalThroughput) / 
                 result.throughput.maxThroughput,
          details: result.throughput
        });
      }
      
      // Latency bottlenecks
      if (result.latency && result.latency.p99 > result.latency.p50 * 10) {
        bottlenecks.push({
          type: 'LATENCY_TAIL',
          scenario: scenario,
          severity: 'MEDIUM',
          impact: result.latency.p99 / result.latency.p50,
          details: result.latency
        });
      }
      
      // Resource bottlenecks
      if (result.resourceUsage && result.resourceUsage.bottlenecks.length > 0) {
        bottlenecks.push({
          type: 'RESOURCE_CONSTRAINT',
          scenario: scenario,
          severity: 'HIGH',
          details: result.resourceUsage.bottlenecks
        });
      }
    }
    
    return bottlenecks;
  }

  async generateOptimization(protocol, bottleneck) {
    switch (bottleneck.type) {
      case 'THROUGHPUT_DEGRADATION':
        return await this.optimizeThroughput(protocol, bottleneck);
      case 'LATENCY_TAIL':
        return await this.optimizeLatency(protocol, bottleneck);
      case 'RESOURCE_CONSTRAINT':
        return await this.optimizeResourceUsage(protocol, bottleneck);
      default:
        return null;
    }
  }

  async optimizeThroughput(protocol, bottleneck) {
    const optimizations = [];
    
    // Batch size optimization
    if (protocol === 'raft') {
      optimizations.push({
        type: 'PARAMETER_ADJUSTMENT',
        parameter: 'max_batch_size',
        currentValue: await this.getCurrentParameter(protocol, 'max_batch_size'),
        recommendedValue: this.calculateOptimalBatchSize(bottleneck.details),
        expectedImprovement: '15-25% throughput increase',
        confidence: 0.8
      });
    }
    
    // Pipelining optimization
    if (protocol === 'byzantine') {
      optimizations.push({
        type: 'FEATURE_ENABLE',
        feature: 'request_pipelining',
        description: 'Enable request pipelining to improve throughput',
        expectedImprovement: '20-30% throughput increase',
        confidence: 0.7
      });
    }
    
    return optimizations.length > 0 ? optimizations[0] : null;
  }

  async tuneParameters(protocol, results) {
    const optimizations = [];
    
    // Use machine learning model to suggest parameter values
    const parameterSuggestions = await this.performanceModel.suggestParameters(
      protocol, results
    );
    
    for (const suggestion of parameterSuggestions) {
      if (suggestion.confidence > 0.6) {
        optimizations.push({
          type: 'PARAMETER_TUNING',
          parameter: suggestion.parameter,
          currentValue: suggestion.currentValue,
          recommendedValue: suggestion.recommendedValue,
          expectedImprovement: suggestion.expectedImprovement,
          confidence: suggestion.confidence,
          rationale: suggestion.rationale
        });
      }
    }
    
    return optimizations;
  }

  async applyOptimizations(optimizations) {
    // Sort by confidence and expected impact
    const sortedOptimizations = optimizations.sort((a, b) => 
      (b.confidence * parseFloat(b.expectedImprovement)) - 
      (a.confidence * parseFloat(a.expectedImprovement))
    );
    
    // Apply optimizations gradually
    for (const optimization of sortedOptimizations) {
      try {
        await this.applyOptimization(optimization);
        
        // Wait and measure impact
        await this.sleep(30000); // 30 seconds
        const impact = await this.measureOptimizationImpact(optimization);
        
        if (impact.improvement < 0.05) {
          // Revert if improvement is less than 5%
          await this.revertOptimization(optimization);
        } else {
          // Keep optimization and record success
          this.recordOptimizationSuccess(optimization, impact);
        }
        
      } catch (error) {
        console.error(`Failed to apply optimization:`, error);
        await this.revertOptimization(optimization);
      }
    }
  }
}

MCP Integration Hooks

Performance Metrics Storage

// Store comprehensive benchmark results
await this.mcpTools.memory_usage({
  action: 'store',
  key: `benchmark_results_${protocol}_${Date.now()}`,
  value: JSON.stringify({
    protocol: protocol,
    timestamp: Date.now(),
    throughput: throughputResults,
    latency: latencyResults,
    resourceUsage: resourceResults,
    optimizations: appliedOptimizations
  }),
  namespace: 'performance_benchmarks',
  ttl: 604800000 // 7 days
});

// Real-time performance monitoring
await this.mcpTools.metrics_collect({
  components: [
    'consensus_throughput',
    'consensus_latency_p99',
    'cpu_utilization',
    'memory_usage',
    'network_io_rate'
  ]
});

Neural Performance Learning

// Learn performance optimization patterns
await this.mcpTools.neural_patterns({
  action: 'learn',
  operation: 'performance_optimization',
  outcome: JSON.stringify({
    optimizationType: optimization.type,
    performanceGain: measurementResults.improvement,
    resourceImpact: measurementResults.resourceDelta,
    networkConditions: currentNetworkState
  })
});

// Predict optimal configurations
const configPrediction = await this.mcpTools.neural_predict({
  modelId: 'consensus_performance_model',
  input: JSON.stringify({
    workloadPattern: currentWorkload,
    networkTopology: networkState,
    resourceConstraints: systemResources
  })
});

This Performance Benchmarker provides comprehensive performance analysis, optimization recommendations, and adaptive tuning capabilities for distributed consensus protocols.

Reviews

No reviews yet. Tell others what you thought.

Comments

No login needed. Share how it worked for you, ask a question, or note where it did not run.

No comments yet. Be the first to write one.

Comments are published right away. Do not include personal information such as email addresses or phone numbers. Up to 2 URLs.

0 / 1,000 characters

This form is protected by reCAPTCHA, and the Google Privacy Policy and Terms of Service apply.

More skills from this repository

add-model-descriptions

FreeSummaryAI rating 80

Compare models available through the HuggingFace router with chat-ui configuration, research missing models, and write short English descriptions of their architecture and capabilities. Add entries to both production and development configuration files and commit the changes.

  • Adding newly available router models to chat-ui
  • Writing concise descriptions of model capabilities
  • Updating production and development model entries together
ruvnet/ruflo78KUpdated Oct 20, 2026

adr-create

FreeSummaryAI rating 80

Create an Architecture Decision Record, a document for recording important design choices, with the next sequential number. It generates a Markdown template, registers the record in AgentDB, and links related decisions found through search.

  • Record the reasoning behind adopting a technology
  • Start an ADR for an API or data model change
  • Document an infrastructure decision
ruvnet/ruflo78KUpdated Oct 20, 2026

adr-index

FreeSummary

Build a searchable index and relationship graph from ADRs, records of architectural decisions. Import two supported document formats, refresh existing metadata without duplicate relationships, and review summaries of statuses, missing references, and inconsistencies.

  • Index ADRs imported from another project
  • Refresh a graph that differs from files on disk
  • Set up ADR tracking in an existing codebase
ruvnet/ruflo78KUpdated Oct 20, 2026

adr-reindex

FreeSummaryAI rating 70

Rebuild the index of ADRs, records of architectural decisions, after files or relationship lines are deleted. It clears stored records and relationships, indexes the files still present, and checks that the final record count matches.

  • Rebuild the index after deleting an ADR file
  • Remove stale relationships after editing an ADR
  • Reconcile the ADR index on a schedule
ruvnet/ruflo78KUpdated Oct 20, 2026

adr-review

FreeSummaryAI rating 80

Review code changes against accepted Architecture Decision Records, documents that capture agreed design choices. Report violations, outdated references, compliant changes, and areas without ADR coverage, then suggest code fixes or a new decision record where appropriate.

  • Check a pull request before merging
  • Review major code changes against agreed design decisions
  • Find references to superseded ADRs
ruvnet/ruflo78KUpdated Oct 20, 2026

adr-verify

FreeSummaryAI rating 90

Check saved architecture decision records (ADRs) for broken references, circular replacement relationships, and inconsistent statuses. Use the results to verify imported records or stop a CI check when selected integrity rules fail.

  • Checking ADR integrity after import
  • Blocking CI when ADR issues are found
  • Reviewing ADR data before a release
ruvnet/ruflo78KUpdated Oct 20, 2026

See all skills by ruvnet

Report a problem with this skill