Skip to content

Commit 905c6b8

Browse files
Users/nmalkapuram/memtiercpubound (#302)
* bind memtier process to cpu cores * update unit tests * naming changes * naming changes --------- Co-authored-by: Yang Pan <[email protected]>
1 parent 2669156 commit 905c6b8

File tree

2 files changed

+20
-12
lines changed

2 files changed

+20
-12
lines changed

src/VirtualClient/VirtualClient.Actions.UnitTests/Memtier/MemtierBenchmarkClientExecutorTests.cs

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,8 @@ public async Task MemtierBenchmarkClientExecutorExecutesExpectedCommands()
116116
$"sudo chmod +x \"{this.mockPackage.Path}/memtier_benchmark\"",
117117

118118
// Run the Memtier benchmark. Values based on the default parameter values set at the top
119-
$"sudo {this.mockPackage.Path}/memtier_benchmark --server 1.2.3.5 --port 6379 {executor.CommandLine}"
119+
// $"sudo {this.mockPackage.Path}/memtier_benchmark --server 1.2.3.5 --port 6379 {executor.CommandLine}",
120+
$"sudo bash -c \"numactl -C 1 {this.mockPackage.Path}/memtier_benchmark --server 1.2.3.5 --port 6379 {executor.CommandLine}\""
120121
};
121122

122123
this.mockFixture.ProcessManager.OnCreateProcess = (exe, arguments, workingDirectory) =>
@@ -145,7 +146,7 @@ public async Task MemtierBenchmarkClientExecutorExecutesExpectedCommandsWhenAUse
145146
$"sudo chmod +x \"{this.mockPackage.Path}/memtier_benchmark\"",
146147

147148
// Run the Memtier benchmark. Values based on the default parameter values set at the top
148-
$"sudo {this.mockPackage.Path}/memtier_benchmark --server 1.2.3.5 --port 6379 {executor.CommandLine}"
149+
$"sudo bash -c \"numactl -C 1 {this.mockPackage.Path}/memtier_benchmark --server 1.2.3.5 --port 6379 {executor.CommandLine}\""
149150
};
150151

151152
this.mockFixture.ProcessManager.OnCreateProcess = (exe, arguments, workingDirectory) =>
@@ -175,10 +176,10 @@ public async Task MemtierBenchmarkClientExecutorExecutesExpectedCommands2ClientI
175176
$"sudo chmod +x \"{this.mockPackage.Path}/memtier_benchmark\"",
176177

177178
// Client instance #1
178-
$"sudo {this.mockPackage.Path}/memtier_benchmark --server 1.2.3.5 --port 6379 {executor.CommandLine}",
179+
$"sudo bash -c \"numactl -C 1 {this.mockPackage.Path}/memtier_benchmark --server 1.2.3.5 --port 6379 {executor.CommandLine}\"",
179180

180181
// Client instance #2
181-
$"sudo {this.mockPackage.Path}/memtier_benchmark --server 1.2.3.5 --port 6379 {executor.CommandLine}"
182+
$"sudo bash -c \"numactl -C 1 {this.mockPackage.Path}/memtier_benchmark --server 1.2.3.5 --port 6379 {executor.CommandLine}\""
182183
};
183184

184185
this.mockFixture.ProcessManager.OnCreateProcess = (exe, arguments, workingDirectory) =>
@@ -208,16 +209,16 @@ public async Task MemtierBenchmarkClientExecutorExecutesExpectedCommands4ClientI
208209
$"sudo chmod +x \"{this.mockPackage.Path}/memtier_benchmark\"",
209210

210211
// Client instance #1
211-
$"sudo {this.mockPackage.Path}/memtier_benchmark --server 1.2.3.5 --port 6379 {executor.CommandLine}",
212+
$"sudo bash -c \"numactl -C 1 {this.mockPackage.Path}/memtier_benchmark --server 1.2.3.5 --port 6379 {executor.CommandLine}\"",
212213

213214
// Client instance #2
214-
$"sudo {this.mockPackage.Path}/memtier_benchmark --server 1.2.3.5 --port 6379 {executor.CommandLine}",
215+
$"sudo bash -c \"numactl -C 1 {this.mockPackage.Path}/memtier_benchmark --server 1.2.3.5 --port 6379 {executor.CommandLine}\"",
215216

216217
// Client instance #3
217-
$"sudo {this.mockPackage.Path}/memtier_benchmark --server 1.2.3.5 --port 6379 {executor.CommandLine}",
218+
$"sudo bash -c \"numactl -C 1 {this.mockPackage.Path}/memtier_benchmark --server 1.2.3.5 --port 6379 {executor.CommandLine}\"",
218219

219220
// Client instance #4
220-
$"sudo {this.mockPackage.Path}/memtier_benchmark --server 1.2.3.5 --port 6379 {executor.CommandLine}"
221+
$"sudo bash -c \"numactl -C 1 {this.mockPackage.Path}/memtier_benchmark --server 1.2.3.5 --port 6379 {executor.CommandLine}\""
221222
};
222223

223224
this.mockFixture.ProcessManager.OnCreateProcess = (exe, arguments, workingDirectory) =>

src/VirtualClient/VirtualClient.Actions/Memtier/MemtierBenchmarkClientExecutor.cs

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -427,39 +427,46 @@ private Task ExecuteWorkloadsAsync(IPAddress serverIPAddress, ServerState server
427427
{
428428
using (BackgroundOperations profiling = BackgroundOperations.BeginProfiling(this, cancellationToken))
429429
{
430+
string precommand = "bash";
430431
string command = this.MemtierExecutablePath;
431432
string workingDirectory = this.MemtierPackagePath;
432433
string commandArguments = string.Empty;
433434
List<string> commands = new List<string>();
434435

435-
relatedContext.AddContext("command", command);
436+
relatedContext.AddContext("command", precommand);
436437
relatedContext.AddContext("commandArguments", commands);
437438
relatedContext.AddContext("workingDirectory", workingDirectory);
438439

439440
List<Task> workloadProcesses = new List<Task>();
440441
DateTime startTime = DateTime.UtcNow;
442+
int serverprocesscount = serverState.Ports.Count();
443+
CpuInfo cpuInfo = this.SystemManagement.GetCpuInfoAsync(CancellationToken.None).GetAwaiter().GetResult();
444+
int logicalProcessorCount = cpuInfo.LogicalProcessorCount;
441445

442446
for (int i = 0; i < serverState.Ports.Count(); i++)
443447
{
444448
PortDescription portDescription = serverState.Ports.ElementAt(i);
445449
int serverPort = portDescription.Port;
446450

451+
int memtiercpuaffinity = (serverprocesscount + i) % logicalProcessorCount;
447452
for (int instances = 0; instances < this.ClientInstances; instances++)
448453
{
449454
// memtier_benchmark Documentation:
450455
// https://github.com/RedisLabs/memtier_benchmark
451456

457+
commandArguments = $"-c \"numactl -C {memtiercpuaffinity} {command} --server {serverIPAddress} --port {serverPort}";
458+
452459
if (this.IsTLSEnabled)
453460
{
454-
commandArguments = $"--server {serverIPAddress} --port {serverPort} --tls --cert {this.PlatformSpecifics.Combine(this.RedisResourcesPath, "redis.crt")} --key {this.PlatformSpecifics.Combine(this.RedisResourcesPath, "redis.key")} --cacert {this.PlatformSpecifics.Combine(this.RedisResourcesPath, "ca.crt")} {this.CommandLine}";
461+
commandArguments += $" --tls --cert {this.PlatformSpecifics.Combine(this.RedisResourcesPath, "redis.crt")} --key {this.PlatformSpecifics.Combine(this.RedisResourcesPath, "redis.key")} --cacert {this.PlatformSpecifics.Combine(this.RedisResourcesPath, "ca.crt")} {this.CommandLine}\"";
455462
}
456463
else
457464
{
458-
commandArguments = $"--server {serverIPAddress} --port {serverPort} {this.CommandLine}";
465+
commandArguments += $" {this.CommandLine}\"";
459466
}
460467

461468
commands.Add(commandArguments);
462-
workloadProcesses.Add(this.ExecuteWorkloadAsync(portDescription, command, commandArguments, workingDirectory, relatedContext.Clone(), cancellationToken));
469+
workloadProcesses.Add(this.ExecuteWorkloadAsync(portDescription, precommand, commandArguments, workingDirectory, relatedContext.Clone(), cancellationToken));
463470

464471
if (this.WarmUp)
465472
{

0 commit comments

Comments
 (0)