Skip to content

Commit

Permalink
feat: add RSS memory benchmarks
Browse files Browse the repository at this point in the history
  • Loading branch information
jnoortheen committed Aug 5, 2024
1 parent eec943b commit c034dea
Show file tree
Hide file tree
Showing 4 changed files with 144 additions and 38 deletions.
112 changes: 92 additions & 20 deletions .asv/results/benchmarks.json
Original file line number Diff line number Diff line change
@@ -1,52 +1,124 @@
{
"benchmarks.PeakMemSuite.peakmem_parse_small": {
"code": "class PeakMemSuite:\n def peakmem_parse_small(self):\n parse(\"![ls -alh]\")",
"name": "benchmarks.PeakMemSuite.peakmem_parse_small",
"param_names": [],
"params": [],
"benchmarks.PeakMemSuite.peakmem_parser_large_string": {
"code": "class PeakMemSuite:\n def peakmem_parser_large_string(self, _):\n self.parser.parse_file(file)\n\n def setup(self, parser):\n self.parser = parser()",
"name": "benchmarks.PeakMemSuite.peakmem_parser_large_string",
"param_names": [
"param1"
],
"params": [
[
"<class 'tests.benchmarks.PegenParser'>",
"<class 'tests.benchmarks.RuffParser'>",
"<class 'tests.benchmarks.PlyParser'>",
"<class 'tests.benchmarks.TreeSitter'>"
]
],
"type": "peakmemory",
"unit": "bytes",
"version": "65abaa17b84b8e7f12233f9ab9d91f00fc2adb92b37cd7c09440e8f0c0d5c88b"
"version": "6907a2d7aa08e670708346cc46eac864cbba00881d887ab45c829f3dd5771e10"
},
"benchmarks.PeakMemSuite.peakmem_parser_large_file": {
"code": "class PeakMemSuite:\n def peakmem_parser_large_file(self):\n parse(file)",
"name": "benchmarks.PeakMemSuite.peakmem_parser_large_file",
"param_names": [],
"params": [],
"benchmarks.PeakMemSuite.peakmem_parser_small_string": {
"code": "class PeakMemSuite:\n def peakmem_parser_small_string(self, _):\n self.parser.parse_string(small_string)\n\n def setup(self, parser):\n self.parser = parser()",
"name": "benchmarks.PeakMemSuite.peakmem_parser_small_string",
"param_names": [
"param1"
],
"params": [
[
"<class 'tests.benchmarks.PegenParser'>",
"<class 'tests.benchmarks.RuffParser'>",
"<class 'tests.benchmarks.PlyParser'>",
"<class 'tests.benchmarks.TreeSitter'>"
]
],
"type": "peakmemory",
"unit": "bytes",
"version": "2e340a318725c374d320a613da113eb4a4f20928fe042dd305f113ebc8ef72aa"
"version": "7860a2ef10ef78d54df750537a5b057670a895ea0244f28d8cef2014ed592bae"
},
"benchmarks.TimeSuite.time_large_files": {
"code": "class TimeSuite:\n def time_large_files(self):\n parse(file)",
"code": "class TimeSuite:\n def time_large_files(self, _):\n self.parser.parse_file(file)\n\n def setup(self, parser):\n self.parser = parser()",
"min_run_count": 2,
"name": "benchmarks.TimeSuite.time_large_files",
"number": 0,
"param_names": [],
"params": [],
"param_names": [
"param1"
],
"params": [
[
"<class 'tests.benchmarks.PegenParser'>",
"<class 'tests.benchmarks.RuffParser'>",
"<class 'tests.benchmarks.PlyParser'>",
"<class 'tests.benchmarks.TreeSitter'>"
]
],
"repeat": 0,
"rounds": 2,
"sample_time": 0.01,
"type": "time",
"unit": "seconds",
"version": "8ff5636d4a0d1c39582d9ad629e6c1ec4041c4543378d5f03be4a0fc79b35043",
"version": "dcf913fc7d2a745c5e60af28dbfacceeae2f120d95e5db8a82486e3069edd6ba",
"warmup_time": -1
},
"benchmarks.TimeSuite.time_parse_small_string": {
"code": "class TimeSuite:\n def time_parse_small_string(self):\n parse(small_code)",
"code": "class TimeSuite:\n def time_parse_small_string(self, _):\n self.parser.parse_string(small_string)\n\n def setup(self, parser):\n self.parser = parser()",
"min_run_count": 2,
"name": "benchmarks.TimeSuite.time_parse_small_string",
"number": 0,
"param_names": [],
"params": [],
"param_names": [
"param1"
],
"params": [
[
"<class 'tests.benchmarks.PegenParser'>",
"<class 'tests.benchmarks.RuffParser'>",
"<class 'tests.benchmarks.PlyParser'>",
"<class 'tests.benchmarks.TreeSitter'>"
]
],
"repeat": 0,
"rounds": 2,
"sample_time": 0.01,
"type": "time",
"unit": "seconds",
"version": "dffdd003f5d676c9b9b82dce1e1bca08eb544cae17d3c02243f2dd09bb94393f",
"version": "8d97597a3e73b649aa9061f8f601dfa9b48f365b6d45940bb417d1687a2c9cec",
"warmup_time": -1
},
"benchmarks.TrackSuite.track_mem_large_file": {
"code": "class TrackSuite:\n def track_mem_large_file(self, _):\n self.parser.parse_file(file)\n return get_process_memory()\n\n def setup(self, parser):\n self.parser = parser()",
"name": "benchmarks.TrackSuite.track_mem_large_file",
"param_names": [
"param1"
],
"params": [
[
"<class 'tests.benchmarks.PegenParser'>",
"<class 'tests.benchmarks.RuffParser'>",
"<class 'tests.benchmarks.PlyParser'>",
"<class 'tests.benchmarks.TreeSitter'>"
]
],
"type": "track",
"unit": "unit",
"version": "f5f1c6523fa6b5523e8f2a1be5992075731eb3f03633a89fd1ca3dec21fc232d"
},
"benchmarks.TrackSuite.track_mem_small_string": {
"code": "class TrackSuite:\n def track_mem_small_string(self, _):\n self.parser.parse_string(small_string)\n return get_process_memory()\n\n def setup(self, parser):\n self.parser = parser()",
"name": "benchmarks.TrackSuite.track_mem_small_string",
"param_names": [
"param1"
],
"params": [
[
"<class 'tests.benchmarks.PegenParser'>",
"<class 'tests.benchmarks.RuffParser'>",
"<class 'tests.benchmarks.PlyParser'>",
"<class 'tests.benchmarks.TreeSitter'>"
]
],
"type": "track",
"unit": "unit",
"version": "919b2df97acdba0d2506cbec08330af092e23034a728dd74fded40c026cb3e6f"
},
"benchmarks.timeraw_import_parser": {
"code": "def timeraw_import_parser():\n return \"\"\"\n from peg_parser.parser import XonshParser\n \"\"\"",
"min_run_count": 2,
Expand Down
6 changes: 3 additions & 3 deletions Taskfile.yml
Original file line number Diff line number Diff line change
Expand Up @@ -38,12 +38,12 @@ tasks:
sh: echo ".local/logs/xonsh-parser-$(date "+%Y%m%d-%H%M%S").$(git rev-parse --short HEAD).log"

profile:
deps:
- profile-tasks
# deps:
# - profile-tasks
cmds:
- mkdir -p .local/logs
- asv run --python=same --show-stderr | tee -a {{.LOG_FILE}}
- asv profile --python=same benchmarks.PeakMemSuite.peakmem_parser_large_file | tee -a {{.LOG_FILE}}
# - asv profile --python=same benchmarks.PeakMemSuite.peakmem_parser_large_file | tee -a {{.LOG_FILE}}
vars:
LOG_FILE:
sh: echo ".local/logs/xonsh-parser-$(date "+%Y%m%d-%H%M%S").$(git rev-parse --short HEAD).log"
Expand Down
56 changes: 42 additions & 14 deletions benchmarks/benchmarks.py
Original file line number Diff line number Diff line change
@@ -1,33 +1,61 @@
# Write the benchmarking functions here.
# See "Writing benchmarks" in the asv docs for more information.

import sys
from pathlib import Path

small_code = "![ls -alh]"
sys.path.insert(0, str(Path(__file__).parent.parent))
from tests.benchmarks import BaseParser

small_string = "print(1)"
file = Path(__file__).parent.parent / "peg_parser" / "parser.py"

def parse(code: str | Path):
from peg_parser.parser import XonshParser
if isinstance(code, str):
return XonshParser.parse_string(code, mode="exec")
return XonshParser.parse_file(code)


class TimeSuite:
def time_parse_small_string(self):
parse(small_code)
params = BaseParser.parsers
def setup(self, parser):
self.parser = parser()

def time_parse_small_string(self, _):
self.parser.parse_string(small_string)

def time_large_files(self):
parse(file)
def time_large_files(self, _):
self.parser.parse_file(file)


class PeakMemSuite:
def peakmem_parse_small(self):
parse("![ls -alh]")
params = BaseParser.parsers
def setup(self, parser):
self.parser = parser()

def peakmem_parser_small_string(self, _):
self.parser.parse_string(small_string)

def peakmem_parser_large_string(self, _):
self.parser.parse_file(file)

def get_process_memory():
from psutil import Process

p = Process()
return p.memory_info().rss

class TrackSuite:
params = BaseParser.parsers
units = "bytes"

def setup(self, parser):
self.parser = parser()


def peakmem_parser_large_file(self):
parse(file)
def track_mem_small_string(self, _):
self.parser.parse_string(small_string)
return get_process_memory()

def track_mem_large_file(self, _):
self.parser.parse_file(file)
return get_process_memory()

def timeraw_import_parser():
return """
Expand Down
8 changes: 7 additions & 1 deletion tests/benchmarks.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,15 @@
from pathlib import Path
from typing import ClassVar

import pytest


class BaseParser:
parsers: ClassVar = []

def __init_subclass__(cls, **kwargs):
cls.parsers.append(cls)

def parse_string(self, src_txt: str):
raise NotImplementedError

Expand Down Expand Up @@ -71,7 +77,7 @@ def parse_file(self, file):
return self.parser.parse(file.read_bytes())


@pytest.fixture(params=[PegenParser, RuffParser, PlyParser, TreeSitter])
@pytest.fixture(params=BaseParser.parsers)
def parser(request) -> BaseParser:
return request.param()

Expand Down

0 comments on commit c034dea

Please sign in to comment.