bench: add cpu correction (#2572)

* feat: add cpu correction

* feat: add more bench

* fix: cpu correction

* chore: add comment

* fix: add unstable to tranform

* fix: comment message

* deno fmt
This commit is contained in:
Jonathan Ho
2022-11-06 00:17:43 +08:00
committed by GitHub
parent dc186589cb
commit a385176d8a
4 changed files with 126 additions and 7 deletions

View File

@@ -17,10 +17,12 @@ jobs:
# this is the performance benchmark
- name: Cache deps
run: deno cache performance/mod.ts
- name: Download sysbench
run: sudo apt-get install -y sysbench
- name: Run Benchmark
run: NO_COLOR=true deno bench --unstable -A performance/mod.ts | tee output.txt
- name: Format Benchmark Output
run: deno run -A performance/tranformOutput.ts
run: deno run --unstable -A performance/tranformOutput.ts
# this is the memory benchmark
- name: Download db from benchmark repo

View File

@@ -70,7 +70,7 @@ for (const benchmark of latestHeadBenchmarks.benches) {
compareWithHead[benchmark.name] = {
//@ts-ignore
previous: {},
...compareWithBase[benchmark.name],
...compareWithHead[benchmark.name],
current: benchmark,
};
}

View File

@@ -14,6 +14,16 @@ const discordGuild = JSON.parse(
const currentGuild = bot.transformers.guild(bot, { guild: discordGuild, shardId: 0 });
const previousGuild = oldBot.transformers.guild(oldBot, { guild: discordGuild, shardId: 0 });
Deno.bench("[Transformer] Discord Guild to a Guild", () => {
bot.transformers.guild(bot, { guild: discordGuild, shardId: 0 });
});
Deno.bench("[Transformer - Previous] Discord Guild to a Guild", {
ignore: Deno.env.get("CI") === "true",
}, () => {
oldBot.transformers.guild(oldBot, { guild: discordGuild, shardId: 0 });
});
Deno.bench("[Guild.toggles.features] Get the features of a guild", () => {
currentGuild.toggles.features;
});
@@ -68,7 +78,8 @@ for (
`https://raw.githubusercontent.com/discordeno/discordeno/benchies/cache/cachedObject/${channelType}.json`,
)).text(),
);
const formattedChannelType = channelType.split("-").map((word) => word[0].toUpperCase() + word.slice(1)).join(" ");
let formattedChannelType = channelType.split("-").map((word) => word[0].toUpperCase() + word.slice(1)).join(" ");
if (formattedChannelType === "Rules") formattedChannelType = "Rules Channel";
Deno.bench(`[Transformer] Discord ${formattedChannelType} to a ${formattedChannelType}`, () => {
bot.transformers.channel(bot, { channel: discordChannel });
@@ -95,3 +106,96 @@ for (
});
*/
}
// Fetch the cached member
const discordMember = JSON.parse(
await (await fetch("https://raw.githubusercontent.com/discordeno/discordeno/benchies/cache/cachedObject/member.json"))
.text(),
);
const newMember = bot.transformers.member(bot, discordMember, 0n, 0n);
const oldMember = oldBot.transformers.member(oldBot, discordMember, 0n, 0n);
Deno.bench("[Transformer] Discord Member to a Member", () => {
bot.transformers.member(bot, discordMember, 0n, 0n);
});
Deno.bench("[Transformer - Previous] Discord Member to a Member", {
ignore: Deno.env.get("CI") === "true",
}, () => {
oldBot.transformers.member(oldBot, discordMember, 0n, 0n);
});
Deno.bench("[Transformer] Member to a Discord Member", () => {
bot.transformers.reverse.member(bot, newMember);
});
Deno.bench("[Transformer - Previous] Member to a Discord Member", {
ignore: Deno.env.get("CI") === "true",
}, () => {
oldBot.transformers.reverse.member(oldBot, oldMember);
});
// Fetch the cached role
const discordRole = JSON.parse(
await (await fetch("https://raw.githubusercontent.com/discordeno/discordeno/benchies/cache/cachedObject/role.json"))
.text(),
);
const newRole = bot.transformers.role(bot, { role: discordRole, guildId: 0n });
const oldRole = oldBot.transformers.role(oldBot, { role: discordRole, guildId: 0n });
Deno.bench("[Transformer] Discord Role to a Role", () => {
bot.transformers.role(bot, { role: discordRole, guildId: 0n });
});
Deno.bench("[Transformer - Previous] Discord Role to a Role", {
ignore: Deno.env.get("CI") === "true",
}, () => {
oldBot.transformers.role(oldBot, { role: discordRole, guildId: 0n });
});
/* Not implemented
Deno.bench("[Transformer] Role to a Discord Role", () => {
bot.transformers.reverse.role(bot, newRole);
});
Deno.bench("[Transformer - Previous] Role to a Discord Role", {
ignore: Deno.env.get("CI") === "true",
}, () => {
oldBot.transformers.reverse.role(oldBot, oldRole);
});
*/
// Fetch the cached message
const discordMessage = JSON.parse(
await (await fetch(
"https://raw.githubusercontent.com/discordeno/discordeno/benchies/cache/cachedObject/message.json",
))
.text(),
);
const newMessage = bot.transformers.message(bot, discordMessage);
const oldMessage = oldBot.transformers.message(oldBot, discordMessage);
Deno.bench("[Transformer] Discord Message to a Message", () => {
bot.transformers.message(bot, discordMessage);
});
Deno.bench("[Transformer - Previous] Discord Message to a Message", {
ignore: Deno.env.get("CI") === "true",
}, () => {
oldBot.transformers.message(oldBot, discordMessage);
});
/* Not implemented
Deno.bench("[Transformer] User to a Discord User", () => {
bot.transformers.reverse.message(bot, newUser);
});
Deno.bench("[Transformer - Previous] User to a Discord User", {
ignore: Deno.env.get("CI") === "true",
}, () => {
oldBot.transformers.reverse.message(oldBot, oldUser);
});
*/

View File

@@ -1,13 +1,26 @@
// Just a constant sysbench sorce to compare against
const baselineSysbenchScore = 2000;
let sysbenchScore = 2000;
try {
const { stdout } = await Deno.spawn("sysbench", { args: ["cpu", "run"] });
const textout = new TextDecoder().decode(stdout);
sysbenchScore = parseFloat(textout.match(/\s+events per second:\s+(.+)/)![1]);
} catch {
//
}
const output = await Deno.readTextFile("output.txt");
const lines = output.split(/\r?\n/g);
const ret = [];
const unitMultiplier = {
"s": 1000 * 1000 * 1000,
"ms": 1000 * 1000,
"µs": 1000,
"ns": 1,
"s": 1000 * 1000 * 1000 * (sysbenchScore / baselineSysbenchScore),
"ms": 1000 * 1000 * (sysbenchScore / baselineSysbenchScore),
"µs": 1000 * (sysbenchScore / baselineSysbenchScore),
"ns": 1 * (sysbenchScore / baselineSysbenchScore),
"ps": 0.1 * (sysbenchScore / baselineSysbenchScore),
};
for (const line of lines) {