Skip to content
Snippets Groups Projects
Unverified Commit 334bfdbc authored by Amber Brown's avatar Amber Brown Committed by GitHub
Browse files

Add some benchmarks for LruCache (#6446)

parent 07b88c54
No related branches found
No related tags found
No related merge requests found
Add benchmarks for LruCache.
...@@ -14,6 +14,7 @@ ...@@ -14,6 +14,7 @@
# limitations under the License. # limitations under the License.
import sys import sys
from argparse import REMAINDER
from contextlib import redirect_stderr from contextlib import redirect_stderr
from io import StringIO from io import StringIO
...@@ -21,7 +22,7 @@ import pyperf ...@@ -21,7 +22,7 @@ import pyperf
from synmark import make_reactor from synmark import make_reactor
from synmark.suites import SUITES from synmark.suites import SUITES
from twisted.internet.defer import ensureDeferred from twisted.internet.defer import Deferred, ensureDeferred
from twisted.logger import globalLogBeginner, textFileLogObserver from twisted.logger import globalLogBeginner, textFileLogObserver
from twisted.python.failure import Failure from twisted.python.failure import Failure
...@@ -40,7 +41,8 @@ def make_test(main): ...@@ -40,7 +41,8 @@ def make_test(main):
file_out = StringIO() file_out = StringIO()
with redirect_stderr(file_out): with redirect_stderr(file_out):
d = ensureDeferred(main(reactor, loops)) d = Deferred()
d.addCallback(lambda _: ensureDeferred(main(reactor, loops)))
def on_done(_): def on_done(_):
if isinstance(_, Failure): if isinstance(_, Failure):
...@@ -50,6 +52,7 @@ def make_test(main): ...@@ -50,6 +52,7 @@ def make_test(main):
return _ return _
d.addBoth(on_done) d.addBoth(on_done)
reactor.callWhenRunning(lambda: d.callback(True))
reactor.run() reactor.run()
return d.result return d.result
...@@ -62,11 +65,13 @@ if __name__ == "__main__": ...@@ -62,11 +65,13 @@ if __name__ == "__main__":
def add_cmdline_args(cmd, args): def add_cmdline_args(cmd, args):
if args.log: if args.log:
cmd.extend(["--log"]) cmd.extend(["--log"])
cmd.extend(args.tests)
runner = pyperf.Runner( runner = pyperf.Runner(
processes=3, min_time=2, show_name=True, add_cmdline_args=add_cmdline_args processes=3, min_time=1.5, show_name=True, add_cmdline_args=add_cmdline_args
) )
runner.argparser.add_argument("--log", action="store_true") runner.argparser.add_argument("--log", action="store_true")
runner.argparser.add_argument("tests", nargs=REMAINDER)
runner.parse_args() runner.parse_args()
orig_loops = runner.args.loops orig_loops = runner.args.loops
...@@ -79,6 +84,11 @@ if __name__ == "__main__": ...@@ -79,6 +84,11 @@ if __name__ == "__main__":
) )
setupdb() setupdb()
if runner.args.tests:
SUITES = list(
filter(lambda x: x[0].__name__.split(".")[-1] in runner.args.tests, SUITES)
)
for suite, loops in SUITES: for suite, loops in SUITES:
if loops: if loops:
runner.args.loops = loops runner.args.loops = loops
......
from . import logging from . import logging, lrucache, lrucache_evict
SUITES = [(logging, 1000), (logging, 10000), (logging, None)] SUITES = [
(logging, 1000),
(logging, 10000),
(logging, None),
(lrucache, None),
(lrucache_evict, None),
]
# -*- coding: utf-8 -*-
# Copyright 2019 The Matrix.org Foundation C.I.C.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
from pyperf import perf_counter
from synapse.util.caches.lrucache import LruCache
async def main(reactor, loops):
"""
Benchmark `loops` number of insertions into LruCache without eviction.
"""
cache = LruCache(loops)
start = perf_counter()
for i in range(loops):
cache[i] = True
end = perf_counter() - start
return end
# -*- coding: utf-8 -*-
# Copyright 2019 The Matrix.org Foundation C.I.C.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
from pyperf import perf_counter
from synapse.util.caches.lrucache import LruCache
async def main(reactor, loops):
"""
Benchmark `loops` number of insertions into LruCache where half of them are
evicted.
"""
cache = LruCache(loops // 2)
start = perf_counter()
for i in range(loops):
cache[i] = True
end = perf_counter() - start
return end
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment