Skip to content

Commit

Permalink
benchmark impact of high performance mode
Browse files Browse the repository at this point in the history
  • Loading branch information
mgravell committed Jun 20, 2024
1 parent 3a9d8c9 commit 906093f
Showing 1 changed file with 67 additions and 11 deletions.
78 changes: 67 additions & 11 deletions tests/ConsoleTest/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,16 @@
Stopwatch stopwatch = new Stopwatch();
stopwatch.Start();

var options = ConfigurationOptions.Parse("localhost");
var options = ConfigurationOptions.Parse("127.0.0.1");
#if !SEREDIS_BASELINE
options.HighIntegrity = false; // as needed
Console.WriteLine($"{nameof(options.HighIntegrity)}: {options.HighIntegrity}");
#endif

//options.SocketManager = SocketManager.ThreadPool;
Console.WriteLine("Connecting...");
var connection = ConnectionMultiplexer.Connect(options);
Console.WriteLine("Connected");
connection.ConnectionFailed += Connection_ConnectionFailed;

void Connection_ConnectionFailed(object? sender, ConnectionFailedEventArgs e)
Expand All @@ -23,7 +25,7 @@ void Connection_ConnectionFailed(object? sender, ConnectionFailedEventArgs e)
var startTime = DateTime.UtcNow;
var startCpuUsage = Process.GetCurrentProcess().TotalProcessorTime;

var scenario = args?.Length > 0 ? args[0] : "mass-insert";
var scenario = args?.Length > 0 ? args[0] : "mass-insert-async";

switch (scenario)
{
Expand All @@ -35,6 +37,10 @@ void Connection_ConnectionFailed(object? sender, ConnectionFailedEventArgs e)
Console.WriteLine("Mass insert test...");
MassInsert(connection);
break;
case "mass-insert-async":
Console.WriteLine("Mass insert (async/pipelined) test...");
await MassInsertAsync(connection);
break;
case "mass-publish":
Console.WriteLine("Mass publish test...");
MassPublish(connection);
Expand All @@ -59,7 +65,8 @@ void Connection_ConnectionFailed(object? sender, ConnectionFailedEventArgs e)

static void MassInsert(ConnectionMultiplexer connection)
{
const int NUM_INSERTIONS = 100000;
const int NUM_INSERTIONS = 100_000;
const int BATCH = 5000;
int matchErrors = 0;

var database = connection.GetDatabase(0);
Expand All @@ -72,20 +79,69 @@ static void MassInsert(ConnectionMultiplexer connection)
database.StringSet(key, value);
var retrievedValue = database.StringGet(key);

if (retrievedValue != value)
{
matchErrors++;
}
if (retrievedValue != value)
{
matchErrors++;
}

if (i > 0 && i % BATCH == 0)
{
Console.WriteLine(i);
}
}

Console.WriteLine($"Match errors: {matchErrors}");
}

static async Task MassInsertAsync(ConnectionMultiplexer connection)
{
const int NUM_INSERTIONS = 100_000;
const int BATCH = 5000;
int matchErrors = 0;

var database = connection.GetDatabase(0);

var outstanding = new List<(Task, Task<RedisValue>, string)>(BATCH);

for (int i = 0; i < NUM_INSERTIONS; i++)
{
var key = $"StackExchange.Redis.Test.{i}";
var value = i.ToString();

var set = database.StringSetAsync(key, value);
var get = database.StringGetAsync(key);

outstanding.Add((set, get, value));

if (i > 0 && i % BATCH == 0)
{
matchErrors += await ValidateAsync(outstanding);
Console.WriteLine(i);
}

if (i > 0 && i % 5000 == 0)
{
Console.WriteLine(i);
}
}
matchErrors += await ValidateAsync(outstanding);

Console.WriteLine($"Match errors: {matchErrors}");

static async Task<int> ValidateAsync(List<(Task, Task<RedisValue>, string)> outstanding)
{
int matchErrors = 0;
foreach (var row in outstanding)
{
var s = await row.Item2;
await row.Item1;
if (s != row.Item3)
{
matchErrors++;
}
}
outstanding.Clear();
return matchErrors;
}
}


static void ParallelTasks(ConnectionMultiplexer connection)
{
static void ParallelRun(int taskId, ConnectionMultiplexer connection)
Expand Down

0 comments on commit 906093f

Please sign in to comment.