Skip to content

Commit

Permalink
Added BDN for all hash commands (#879)
Browse files Browse the repository at this point in the history
* Added BDN for all hash commands

* Moved BDN of hash set to separate class
  • Loading branch information
Vijay-Nirmal authored Dec 13, 2024
1 parent ca02229 commit 3f679b0
Show file tree
Hide file tree
Showing 4 changed files with 195 additions and 16 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/ci-bdnbenchmark.yml
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ jobs:
os: [ ubuntu-latest, windows-latest ]
framework: [ 'net8.0' ]
configuration: [ 'Release' ]
test: [ 'Operations.BasicOperations', 'Operations.ObjectOperations', 'Cluster.ClusterMigrate', 'Cluster.ClusterOperations', 'Lua.LuaScripts' ]
test: [ 'Operations.BasicOperations', 'Operations.ObjectOperations', 'Operations.HashObjectOperations', 'Cluster.ClusterMigrate', 'Cluster.ClusterOperations', 'Lua.LuaScripts' ]
steps:
- name: Check out code
uses: actions/checkout@v4
Expand Down
189 changes: 189 additions & 0 deletions benchmark/BDN.benchmark/Operations/HashObjectOperations.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,189 @@
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT license.

using BenchmarkDotNet.Attributes;

namespace BDN.benchmark.Operations
{
/// <summary>
/// Benchmark for HashObjectOperations
/// </summary>
[MemoryDiagnoser]
public unsafe class HashObjectOperations : OperationsBase
{
static ReadOnlySpan<byte> HSETDEL => "*4\r\n$4\r\nHSET\r\n$1\r\nf\r\n$1\r\na\r\n$1\r\na\r\n*3\r\n$4\r\nHDEL\r\n$1\r\nf\r\n$1\r\na\r\n"u8;
byte[] hSetDelRequestBuffer;
byte* hSetDelRequestBufferPointer;

static ReadOnlySpan<byte> HEXISTS => "*3\r\n$7\r\nHEXISTS\r\n$1\r\nf\r\n$1\r\na\r\n"u8;
byte[] hExistsRequestBuffer;
byte* hExistsRequestBufferPointer;

static ReadOnlySpan<byte> HGET => "*3\r\n$4\r\nHGET\r\n$1\r\nf\r\n$1\r\na\r\n"u8;
byte[] hGetRequestBuffer;
byte* hGetRequestBufferPointer;

static ReadOnlySpan<byte> HGETALL => "*2\r\n$7\r\nHGETALL\r\n$1\r\nf\r\n"u8;
byte[] hGetAllRequestBuffer;
byte* hGetAllRequestBufferPointer;

static ReadOnlySpan<byte> HINCRBY => "*4\r\n$7\r\nHINCRBY\r\n$1\r\nf\r\n$1\r\nc\r\n$1\r\n1\r\n"u8;
byte[] hIncrbyRequestBuffer;
byte* hIncrbyRequestBufferPointer;

static ReadOnlySpan<byte> HINCRBYFLOAT => "*4\r\n$12\r\nHINCRBYFLOAT\r\n$1\r\nf\r\n$1\r\nd\r\n$3\r\n1.5\r\n"u8;
byte[] hIncrbyFloatRequestBuffer;
byte* hIncrbyFloatRequestBufferPointer;

static ReadOnlySpan<byte> HKEYS => "*2\r\n$5\r\nHKEYS\r\n$1\r\nf\r\n"u8;
byte[] hKeysRequestBuffer;
byte* hKeysRequestBufferPointer;

static ReadOnlySpan<byte> HLEN => "*2\r\n$4\r\nHLEN\r\n$1\r\nf\r\n"u8;
byte[] hLenRequestBuffer;
byte* hLenRequestBufferPointer;

static ReadOnlySpan<byte> HMGET => "*4\r\n$5\r\nHMGET\r\n$1\r\nf\r\n$1\r\na\r\n$1\r\nb\r\n"u8;
byte[] hMGetRequestBuffer;
byte* hMGetRequestBufferPointer;

static ReadOnlySpan<byte> HMSET => "*6\r\n$5\r\nHMSET\r\n$1\r\nf\r\n$1\r\na\r\n$1\r\n1\r\n$1\r\nb\r\n$1\r\n2\r\n"u8;
byte[] hMSetRequestBuffer;
byte* hMSetRequestBufferPointer;

static ReadOnlySpan<byte> HRANDFIELD => "*2\r\n$10\r\nHRANDFIELD\r\n$1\r\nf\r\n"u8;
byte[] hRandFieldRequestBuffer;
byte* hRandFieldRequestBufferPointer;

static ReadOnlySpan<byte> HSCAN => "*6\r\n$5\r\nHSCAN\r\n$1\r\nf\r\n$1\r\n0\r\n$5\r\nCOUNT\r\n$1\r\n5\r\n"u8;
byte[] hScanRequestBuffer;
byte* hScanRequestBufferPointer;

static ReadOnlySpan<byte> HSETNX => "*4\r\n$6\r\nHSETNX\r\n$1\r\nf\r\n$1\r\nx\r\n$1\r\n1\r\n"u8;
byte[] hSetNxRequestBuffer;
byte* hSetNxRequestBufferPointer;

static ReadOnlySpan<byte> HSTRLEN => "*3\r\n$7\r\nHSTRLEN\r\n$1\r\nf\r\n$1\r\na\r\n"u8;
byte[] hStrLenRequestBuffer;
byte* hStrLenRequestBufferPointer;

static ReadOnlySpan<byte> HVALS => "*2\r\n$5\r\nHVALS\r\n$1\r\nf\r\n"u8;
byte[] hValsRequestBuffer;
byte* hValsRequestBufferPointer;

public override void GlobalSetup()
{
base.GlobalSetup();
SetupOperation(ref hSetDelRequestBuffer, ref hSetDelRequestBufferPointer, HSETDEL);
SetupOperation(ref hExistsRequestBuffer, ref hExistsRequestBufferPointer, HEXISTS);
SetupOperation(ref hGetRequestBuffer, ref hGetRequestBufferPointer, HGET);
SetupOperation(ref hGetAllRequestBuffer, ref hGetAllRequestBufferPointer, HGETALL);
SetupOperation(ref hIncrbyRequestBuffer, ref hIncrbyRequestBufferPointer, HINCRBY);
SetupOperation(ref hIncrbyFloatRequestBuffer, ref hIncrbyFloatRequestBufferPointer, HINCRBYFLOAT);
SetupOperation(ref hKeysRequestBuffer, ref hKeysRequestBufferPointer, HKEYS);
SetupOperation(ref hLenRequestBuffer, ref hLenRequestBufferPointer, HLEN);
SetupOperation(ref hMGetRequestBuffer, ref hMGetRequestBufferPointer, HMGET);
SetupOperation(ref hMSetRequestBuffer, ref hMSetRequestBufferPointer, HMSET);
SetupOperation(ref hRandFieldRequestBuffer, ref hRandFieldRequestBufferPointer, HRANDFIELD);
SetupOperation(ref hScanRequestBuffer, ref hScanRequestBufferPointer, HSCAN);
SetupOperation(ref hSetNxRequestBuffer, ref hSetNxRequestBufferPointer, HSETNX);
SetupOperation(ref hStrLenRequestBuffer, ref hStrLenRequestBufferPointer, HSTRLEN);
SetupOperation(ref hValsRequestBuffer, ref hValsRequestBufferPointer, HVALS);

// Pre-populate data
SlowConsumeMessage("*3\r\n$4\r\nHSET\r\n$1\r\nf\r\n$1\r\nb\r\n$1\r\nb\r\n"u8);
SlowConsumeMessage("*4\r\n$4\r\nHSET\r\n$1\r\nf\r\n$1\r\nc\r\n$1\r\n5\r\n"u8);
SlowConsumeMessage("*4\r\n$4\r\nHSET\r\n$1\r\nf\r\n$1\r\nd\r\n$3\r\n5.5\r\n"u8);
}

[Benchmark]
public void HSetDel()
{
_ = session.TryConsumeMessages(hSetDelRequestBufferPointer, hSetDelRequestBuffer.Length);
}

[Benchmark]
public void HExists()
{
_ = session.TryConsumeMessages(hExistsRequestBufferPointer, hExistsRequestBuffer.Length);
}

[Benchmark]
public void HGet()
{
_ = session.TryConsumeMessages(hGetRequestBufferPointer, hGetRequestBuffer.Length);
}

[Benchmark]
public void HGetAll()
{
_ = session.TryConsumeMessages(hGetAllRequestBufferPointer, hGetAllRequestBuffer.Length);
}

[Benchmark]
public void HIncrby()
{
_ = session.TryConsumeMessages(hIncrbyRequestBufferPointer, hIncrbyRequestBuffer.Length);
}

[Benchmark]
public void HIncrbyFloat()
{
_ = session.TryConsumeMessages(hIncrbyFloatRequestBufferPointer, hIncrbyFloatRequestBuffer.Length);
}

[Benchmark]
public void HKeys()
{
_ = session.TryConsumeMessages(hKeysRequestBufferPointer, hKeysRequestBuffer.Length);
}

[Benchmark]
public void HLen()
{
_ = session.TryConsumeMessages(hLenRequestBufferPointer, hLenRequestBuffer.Length);
}

[Benchmark]
public void HMGet()
{
_ = session.TryConsumeMessages(hMGetRequestBufferPointer, hMGetRequestBuffer.Length);
}

[Benchmark]
public void HMSet()
{
_ = session.TryConsumeMessages(hMSetRequestBufferPointer, hMSetRequestBuffer.Length);
}

[Benchmark]
public void HRandField()
{
_ = session.TryConsumeMessages(hRandFieldRequestBufferPointer, hRandFieldRequestBuffer.Length);
}

[Benchmark]
public void HScan()
{
_ = session.TryConsumeMessages(hScanRequestBufferPointer, hScanRequestBuffer.Length);
}

[Benchmark]
public void HSetNx()
{
_ = session.TryConsumeMessages(hSetNxRequestBufferPointer, hSetNxRequestBuffer.Length);
}

[Benchmark]
public void HStrLen()
{
_ = session.TryConsumeMessages(hStrLenRequestBufferPointer, hStrLenRequestBuffer.Length);
}

[Benchmark]
public void HVals()
{
_ = session.TryConsumeMessages(hValsRequestBufferPointer, hValsRequestBuffer.Length);
}
}
}
12 changes: 0 additions & 12 deletions benchmark/BDN.benchmark/Operations/ObjectOperations.cs
Original file line number Diff line number Diff line change
Expand Up @@ -23,23 +23,17 @@ public unsafe class ObjectOperations : OperationsBase
byte[] sAddRemRequestBuffer;
byte* sAddRemRequestBufferPointer;

static ReadOnlySpan<byte> HSETDEL => "*4\r\n$4\r\nHSET\r\n$1\r\nf\r\n$1\r\na\r\n$1\r\na\r\n*3\r\n$4\r\nHDEL\r\n$1\r\nf\r\n$1\r\na\r\n"u8;
byte[] hSetDelRequestBuffer;
byte* hSetDelRequestBufferPointer;

public override void GlobalSetup()
{
base.GlobalSetup();
SetupOperation(ref zAddRemRequestBuffer, ref zAddRemRequestBufferPointer, ZADDREM);
SetupOperation(ref lPushPopRequestBuffer, ref lPushPopRequestBufferPointer, LPUSHPOP);
SetupOperation(ref sAddRemRequestBuffer, ref sAddRemRequestBufferPointer, SADDREM);
SetupOperation(ref hSetDelRequestBuffer, ref hSetDelRequestBufferPointer, HSETDEL);

// Pre-populate data
SlowConsumeMessage("*4\r\n$4\r\nZADD\r\n$1\r\nc\r\n$1\r\n1\r\n$1\r\nd\r\n"u8);
SlowConsumeMessage("*3\r\n$5\r\nLPUSH\r\n$1\r\nd\r\n$1\r\nf\r\n"u8);
SlowConsumeMessage("*3\r\n$4\r\nSADD\r\n$1\r\ne\r\n$1\r\nb\r\n"u8);
SlowConsumeMessage("*3\r\n$4\r\nHSET\r\n$1\r\nf\r\n$1\r\nb\r\n$1\r\nb\r\n"u8);
}

[Benchmark]
Expand All @@ -59,11 +53,5 @@ public void SAddRem()
{
_ = session.TryConsumeMessages(sAddRemRequestBufferPointer, sAddRemRequestBuffer.Length);
}

[Benchmark]
public void HSetDel()
{
_ = session.TryConsumeMessages(hSetDelRequestBufferPointer, hSetDelRequestBuffer.Length);
}
}
}
8 changes: 5 additions & 3 deletions test/BDNPerfTests/BDN_Benchmark_Config.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,14 +11,16 @@
"expected_ZAddRem_ACL": 17.97,
"expected_LPushPop_ACL": 14.06,
"expected_SAddRem_ACL": 12.5,
"expected_HSetDel_ACL": 42.19,
"expected_ZAddRem_AOF": 17.97,
"expected_LPushPop_AOF": 14.06,
"expected_SAddRem_AOF": 12.5,
"expected_HSetDel_AOF": 42.19,
"expected_ZAddRem_None": 17.97,
"expected_LPushPop_None": 14.06,
"expected_SAddRem_None": 12.5,
"expected_SAddRem_None": 12.5
},
"BDN.benchmark.Operations.HashObjectOperations.*": {
"expected_HSetDel_ACL": 42.19,
"expected_HSetDel_AOF": 42.19,
"expected_HSetDel_None": 42.19
},
"BDN.benchmark.Cluster.ClusterOperations.*": {
Expand Down

0 comments on commit 3f679b0

Please sign in to comment.