[Issue 18388] New: std.experimental.logger slow performance
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Wed Feb 7 08:16:58 UTC 2018
https://issues.dlang.org/show_bug.cgi?id=18388
Issue ID: 18388
Summary: std.experimental.logger slow performance
Product: D
Version: D2
Hardware: x86_64
OS: Linux
Status: NEW
Severity: normal
Priority: P1
Component: phobos
Assignee: nobody at puremagic.com
Reporter: aruncxy at gmail.com
std.experimental.logger is very slow when compared to some implementation in
C++ (spdlog)
>From my initial observations, the max CPU usage per thread doesn't exceed 30%
on average.
07-02-2018 00:09:00 vaalaham ~/code/cpp/spdlog/bench
$ make >/dev/null 2>&1 && time ./spdlog-bench-mt 8
real 0m0.562s
user 0m1.480s
sys 0m1.620s
07-02-2018 00:09:05 vaalaham ~/code/cpp/spdlog/bench
$
07-02-2018 00:09:26 vaalaham ~/code/d/std-log-benchmark
$ time ./std-log-benchmark 8 1000000
real 0m5.617s
user 0m4.048s
sys 0m3.674s
07-02-2018 00:09:34 vaalaham ~/code/d/std-log-benchmark
$
import core.atomic;
import core.thread;
import std.parallelism;
import std.experimental.logger;
import std.stdio;
import std.conv : to;
shared int msgCounter = 0;
shared int maxCount = 1_000_000;
__gshared FileLogger _logger;
void main(string[] args)
{
if (args.length != 3)
{
writefln("Usage: %s <thread-count> <loop-count>", args[0]);
return;
}
_logger = new FileLogger("/dev/null", LogLevel.trace);
const threadCount = to!int(args[1]);
maxCount = to!int(args[2]) - threadCount;
auto pool = new TaskPool(threadCount);
foreach (tid; 0 .. threadCount)
pool.put(task!logMe(tid + 1));
pool.finish;
}
void logMe(const int tid)
{
while (true)
{
_logger.tracef("From T-%s log message #%s: This is some text for your
pleasure", tid, atomicOp!"+="(msgCounter, 1));
if (atomicLoad(msgCounter) > maxCount)
break;
}
}
--
More information about the Digitalmars-d-bugs
mailing list