标签: benchmarking

查询基准测试

前言

我有一个关于使用本机 SQL 聚合函数和 SSIS 中提供的聚合之间的性能差异的假设(数据库会破坏 SSIS)。我想开发一个经验过程来测试它。

对于初始测试,我唯一关心的是执行速度。以后的迭代将涵盖 CPU 和内存成本。

为了实现这一点,我建立了一个小表(100M 行)并想要捕捉时间的差异。我计划通过比较 OnPreExecute 和 OnPostExecute 的时间在 SSIS 包中完成所有操作。

第一个数据流将采用以下形式,SELECT * FROM TABLE而后者将是SELECT Aggregate(col1) FROM TABLE

SSIS 聚合 对比 数据库聚合

类似的问题,但不是我想要的

tl;博士;

为了使评估尽可能均匀,我应该

  • 在步骤之间刷新缓存
  • 通过预先执行查询来预热缓存
  • 别的东西

如果决定是冲洗,就dbcc freeproccache足够了还是我需要冲洗dbcc dropcleanbuffers

sql-server benchmarking

3
推荐指数
1
解决办法
1175
查看次数

如何负载测试服务器发送的事件?

我有一个发送服务器发送事件的小应用程序。我想对我的应用程序进行负载测试,以便我可以对从推送消息到收到消息之间的延迟进行基准测试,以便我知道性能何时/何处出现故障。有哪些工具可以做到这一点?

benchmarking load-testing server-sent-events

3
推荐指数
1
解决办法
2598
查看次数

go benchmark and gc: B/op alloc/op

基准代码:

func BenchmarkSth(b *testing.B) {
    var x []int
    b.ResetTimer()
    for i := 0; i < b.N; i++ {
        x = append(x, i)
    }
}
Run Code Online (Sandbox Code Playgroud)

结果:

BenchmarkSth-4    50000000    20.7 ns/op    40 B/op    0 allocs/op 
Run Code Online (Sandbox Code Playgroud)

问题:

  • 40 B/op 从哪里来?(非常感谢任何跟踪+说明的方式)
  • 怎么可能有 40 个 B/op 而有 0 个分配?
  • 哪一个会影响 GC 以及如何影响?(B/op 或 allocs/op)
  • 真的有可能使用 append 获得 0 B/op 吗?

memory testing benchmarking garbage-collection go

3
推荐指数
1
解决办法
767
查看次数

在 golang 中运行没有“go test”的基准测试

我想在我的应用程序中运行基准测试。那可能吗?如果是这样,我该怎么办?我一直在环顾四周,但到目前为止还没有看到任何迹象。

testing benchmarking go

3
推荐指数
1
解决办法
820
查看次数

PgBouncer 和 PgPool II 的其他中间件替代品是什么?

我试图找到可用于 Postgres DB 的不同中间件。每个人都在推荐 PgBouncer 和 PgPool II。我可以使用的其他中间件列表是什么。

postgresql benchmarking connection-pooling pgpool pgbouncer

3
推荐指数
1
解决办法
3005
查看次数

从项目根目录运行子文件夹的基准测试

我有一个带有二进制文件的项目,入口点位于./cmd/<my-project>/main.go. 我在./cmd/<my-project>/main_test.go.

现在我想从存储库根目录执行这个基准测试。我试图以go test -bench=./cmd/<my-project>/main各种交替方式(例如go test -bench=./cmd/<my-project>/main_test.gogo test -bench=./cmd/<my-project>)执行类似的操作,但我无法让它工作。

我总是得到的错误是:

can't load package: package github.com/<username>/<my-project>: no Go files in /home/<user>/go/src/github.com/<username>/<my-project>

这是真的,*.go我的项目根目录中没有文件。

我想出的只是首先切换到目录并使用`go test -bench= 运行基准测试。

然而,由于我的程序依赖于当前的工作目录,结果在很大程度上取决于能够在另一个目录而不是目录中执行它会很棒cmd/<my-project>。(如果这好不好不是问题的一部分:))

第一条评论后更新:

我让它运行,go test -bench=. /cmd/<my-project>但基准测试被执行,就好像它会在./cmd/<my-project>目录中运行一样。我注意到“正常测试”中的类似行为 - 但这对我来说在任何时候都不是问题。

因此,我的程序确实会根据当前工作目录扫描当前目录中的文件目录,这会导致仅找到两个文件 (main.gomain_test.go),其中基准测试并没有真正的帮助。

benchmarking go

3
推荐指数
1
解决办法
1052
查看次数

使用 pytest.hookimpl 将 pytest 测试函数返回值写入文件

我正在寻找一种方法来访问测试函数的返回值,以便将该值包含在测试报告文件中(类似于http://doc.pytest.org/en/latest/example/simple.html#post -process-test-reports-failures)。

我想使用的代码示例:

# modified example code from http://doc.pytest.org/en/latest/example/simple.html#post-process-test-reports-failures

import pytest
import os.path

@pytest.hookimpl(tryfirst=True, hookwrapper=True)
def pytest_runtest_makereport(item, call):
    # execute all other hooks to obtain the report object
    outcome = yield
    rep = outcome.get_result()

    if rep.when == "call" and rep.passed:
        mode = "a" if os.path.exists("return_values") else "w"
        with open("return_values.txt", mode) as f:
            # THE FOLLOWING LINE IS THE ONE I CANNOT FIGURE OUT
            # HOW DO I ACCESS THE TEST FUNCTION RETURN VALUE?
            return_value = item.return_value
            f.write(rep.nodeid + …
Run Code Online (Sandbox Code Playgroud)

python benchmarking return return-value pytest

3
推荐指数
2
解决办法
3125
查看次数

Julia - CartesianIndices 的表现

我正在挖掘源代码,Base.IteratorsMD我确信Base.nextindfor CartesianIndex(in julia/base/multidimensional.jl,请参见此处https://github.com/JuliaLang/julia/blob/55e36cc308b66d3472990a06b2797f9f9154ea0a/base/multidimensional.jl#L142-L150 ) 的实现效率极低:

function Base.nextind(a::AbstractArray{<:Any,N}, i::CartesianIndex{N}) where {N}
    iter = CartesianIndices(axes(a))
    return CartesianIndex(inc(i.I, first(iter).I, last(iter).I))
end
Run Code Online (Sandbox Code Playgroud)

我认为CartesianIndices(...)在每次调用中创建一个新实例必须非常昂贵,因为在我的机器上CartesianIndices(...)通过 REPL调用似乎创建了所有索引。因此,我为替代实现编写了以下基准脚本mynextind

using Base.IteratorsMD

function mynextind(a::AbstractArray{<:Any,N}, i::CartesianIndex{N}) where {N}
    dims = (x.stop for x in axes(a))
    return CartesianIndex(Base.IteratorsMD.inc(i.I, CartesianIndex(ones(Int64, length(dims))...).I, CartesianIndex(dims...).I))
end

function f(func, M)
    c = CartesianIndex(1,1)
    while true
        (c = func(M, c)) == CartesianIndex(size(M)...) && break
    end
end

A = rand(100,100)

@btime f(Base.nextind, A)
@btime f(mynextind, A) …
Run Code Online (Sandbox Code Playgroud)

performance benchmarking julia

3
推荐指数
1
解决办法
271
查看次数

如何从多次运行 Haskell 基准测试中获得更有意义的统计数据

我正在使用该benchpress库运行一些相当简单的基准测试。我一直在使用bench :: Int -> IO a -> IO ()界面。但是,似乎如果我运行给定的函数n次数,第一个之后的所有运行都非常快。

作为一个简单的例子,bench 1 (seq (sum [1..100000]) (return ()))可能需要 10 秒左右。但是,bench 5 (seq (sum [1..100000]) (return ()))会产生这样的报告:

Times (ms)
   min    mean    +/-sd  median    max 
  0.001   2.657   5.937   0.001  13.277

Percentiles (ms)
  50%  0.001
  66%  0.002
  75%  0.002
  80%  0.002
  90%  13.277
  95%  13.277
  98%  13.277
  99%  13.277
 100%  13.277
Run Code Online (Sandbox Code Playgroud)

由于平均值是 2.6,我可以推断出第一次运行需要 13 秒,其他 4 秒非常快。

为什么会发生这种情况?如何确保基准测试的所有运行都具有代表性?该库还具有更细粒度的界面:benchmark :: Int -> IO a -> …

benchmarking haskell

3
推荐指数
1
解决办法
61
查看次数

Benchmark 函数名称后的“-6”是什么意思?

我有一个 go test 文件,我在其中编写了一个基准函数,如下所示:

func BenchmarkStuff(b *testing.B) {
    for i := 0; i < b.N; i++ {
        stuff()
    }
}
Run Code Online (Sandbox Code Playgroud)

当我用 运行它时go test -benchtime 1x,我得到了这个:

BenchmarkStuff-6               1     847751900 ns/op
Run Code Online (Sandbox Code Playgroud)

这是什么-6意思?这似乎不必要地神秘。

benchmarking go

3
推荐指数
1
解决办法
85
查看次数