From c6ec6a7bdbbace3227e090741a98db934ab2e274 Mon Sep 17 00:00:00 2001 From: Tomas Fiedor Date: Tue, 7 Nov 2023 18:19:42 +0100 Subject: [PATCH 01/26] Fix links in readme --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 1f943a7f9..2ed530f60 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -5,7 +5,7 @@ build-backend = "setuptools.build_meta" [project] name = "perun-toolsuite" description = "Perun: Lightweight Performance Version System" -version = "0.21.6" +version = "0.21.7" requires-python = ">=3.9" readme = "README.md" license = { file = "LICENSE" } From 7ab8eed97fc541fd7be5555f30e9df081728f6d1 Mon Sep 17 00:00:00 2001 From: Tomas Fiedor Date: Wed, 8 Nov 2023 12:06:00 +0100 Subject: [PATCH 02/26] Fix the issue with autotagging version --- .github/workflows/release.yml | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 0ccd58cad..e2750a843 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -11,12 +11,25 @@ jobs: release: if: ${{ github.event.pull_request.merged == true && contains(github.head_ref, 'release') }} runs-on: ubuntu-latest + strategy: + matrix: + python-version: ["3.11"] steps: - name: Checkout latest version uses: actions/checkout@v3 with: ref: devel + - name: Setup Python, Ubuntu and Python environment + uses: ./.github/workflows/actions/setup + with: + python-version: ${{ matrix.python-version }} + + - name: Install Perun (to assure it is correctly installed) and try obtaining the version + run: | + make install + perun --version + - name: Set version id: manual-tagger run: echo "NEW_TAG=$(perun --version | cut -d' ' -f2)" >> "$GITHUB_OUTPUT" From c66a564f4ec27cceea1a989558b95f26e230f4e9 Mon Sep 17 00:00:00 2001 From: Tomas Fiedor Date: Wed, 8 Nov 2023 12:39:30 +0100 Subject: [PATCH 03/26] Fix minor issues in script helpers --- perun/utils/script_helpers.py | 28 +++++++++++----------------- 1 file changed, 11 insertions(+), 17 deletions(-) diff --git a/perun/utils/script_helpers.py b/perun/utils/script_helpers.py index a53a087fe..b7c9c4c88 100644 --- a/perun/utils/script_helpers.py +++ b/perun/utils/script_helpers.py @@ -64,7 +64,7 @@ def template_name_filter(template_name: str) -> bool: helpers.touch_dir(target_dir) else: target_dir = os.path.join(perun_dev_dir, template_type) - print(f"Initializing new {template_type} module in {target_dir}") + log.info(f"Initializing new {template_type} module in {target_dir}") # Iterate through all templates and create the new files with rendered templates successfully_created_files = [] @@ -75,35 +75,29 @@ def template_name_filter(template_name: str) -> bool: kwargs["unit_name"] if "." not in template_filename else template_filename.split(".")[1] ) template_filename += ".py" - successfully_created_files.append(template_filename) - print(f"> creating module '{template_filename}' from template", end="") + successfully_created_files.append(os.path.join(target_dir, template_filename)) + log.info(f"> creating module '{template_filename}' from template", end="") # Render and write the template into the resulting file with open(os.path.join(target_dir, template_filename), "w") as template_handle: template_handle.write(env.get_template(template_file).render(**kwargs)) - print(" [", end="") + log.info(" [", end="") log.done(ending="") - print("]") + log.info("]") # Add the registration point to the set of file - successfully_created_files.append( - os.path.join( - perun_dev_dir, - { - "check": os.path.join("check", "__init__.py"), - "postprocess": os.path.join("utils", "__init__.py"), - "collect": os.path.join("utils", "__init__.py"), - "view": os.path.join("utils", "__init__.py"), - }.get(template_type, "nowhere"), - ) + successfully_created_files.append(os.path.join(perun_dev_dir, template_type, "__init__.py")) + if template_type in ("postprocess", "collect", "view"): + successfully_created_files.append(os.path.join(perun_dev_dir, "utils", "__init__.py")) + log.info( + f"Please register your new module in '{template_type}/__init__.py' and/or 'utils/__init__.py'" ) - print(f"Please register your new module in {successfully_created_files[-1]}") # Unless specified in other way, open all of the files in the w.r.t the general.editor key if not no_edit: editor = config.lookup_key_recursively("general.editor") - print(f"Opening created files and registration point in {editor}") + log.info(f"Opening created files and registration point in {editor}") try: utils.run_external_command([editor] + successfully_created_files[::-1]) except Exception as inner_exception: From cda7629eddf78e7f1b2f8d2f4a494685a401a252 Mon Sep 17 00:00:00 2001 From: Tomas Fiedor Date: Thu, 9 Nov 2023 21:05:45 +0100 Subject: [PATCH 04/26] Polish readme and master make --- CHANGELOG.rst | 5 +++++ Makefile | 15 ++++++++------ README.md | 57 ++++++++++++++++++++++++++++++--------------------- 3 files changed, 48 insertions(+), 29 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index b7282f31c..03a8560ef 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -1,6 +1,11 @@ Changelog ========= +0.21.7 (2023-11-08) +------------------- + + - Fix minor issues in README, and various parts of Perun. + 0.21.6 (2023-11-06) ------------------- diff --git a/Makefile b/Makefile index 2e3740b8c..4e8444038 100644 --- a/Makefile +++ b/Makefile @@ -1,9 +1,3 @@ -test: - python3 -m pytest --durations=10 --cov=./ --cov-report term-missing:skip-covered tests/ - -check: - mypy perun/ - # Setuptools fails for nested requirements file when installed as `pip install .`, so sadly no # simple "dev" optional dependency dev: @@ -12,6 +6,15 @@ dev: install: pip3 install . +init-test: + pip3 install .[test] + +test: + python3 -m pytest --durations=10 --cov=./ --cov-report term-missing:skip-covered tests/ + +check: + mypy perun/ + docs: $(MAKE) -C docs html diff --git a/README.md b/README.md index 56aa137b9..7625fa86c 100644 --- a/README.md +++ b/README.md @@ -1,32 +1,32 @@ -Perun: Lightweight Performance Version System -============================================= +# Perun: Lightweight Performance Version System [![build status](https://github.com/Perfexionists/perun/actions/workflows/ubuntu.yml/badge.svg)](https://github.com/Perfexionists/perun/actions) [![codecov](https://codecov.io/gh/Perfexionists/perun/graph/badge.svg?token=3x4Luodr84)](https://codecov.io/gh/Perfexionists/perun) [![Codacy Badge](https://app.codacy.com/project/badge/Grade/a704486b4679442cb2a53173475f79ca)](https://app.codacy.com/gh/Perfexionists/perun/dashboard?utm_source=gh&utm_medium=referral&utm_content=&utm_campaign=Badge_grade) -[![Maintainability](https://api.codeclimate.com/v1/badges/1e47ad63527d8d2e14c3/maintainability)](https://codeclimate.com/github/Perfexionists/perun/maintainability) [![GitHub tag](https://img.shields.io/github/tag/Perfexionists/perun.svg)](https://github.com/Perfexionists/perun)

- +

Perun is an open source light-weight Performance Version System, which works as a wrapper over -existing Version Control Systems and in parallel manages performance profiles corresponding to -different versions of projects. Moreover, it offers a tool suite suitable for automation of the -performance regression test runs, postprocessing of existing profiles or effective interpretation of -the results. +projects in Version Control Systems (such as `git`) and (in parallel) tracks performance profiles +(i.e., collection of performance metrics) corresponding to different versions of underlying project. +Moreover, it offers a wide tool suite that can be used for automation of the performance regression +test runs, postprocessing of resulting profiles (e.g., by creating performance models) or +effective interpretation of the results.

- +

-In particular, Perun has the following advantages over using databases or sole Version Control +In particular, Perun has the following advantages over, e.g., using databases or sole Version Control Systems for the same purpose: 1. **Preserves Context**---each performance profile is assigned to a concrete - minor version adding the functional context (i.e. code changes) of profiles. + minor version adding the functional context (i.e., code changes) of profiles. + This way, one knows precisely for which code version, the profile was collected. 2. **Provides Automation**---Perun allows one to easily automate the process of profile collection, eventually reducing the whole process to a @@ -41,21 +41,25 @@ Systems for the same purpose: heavily inspired by the git systems aiming at natural use.

- +

-Perun is intented to be used in two ways: (1) for a single developer (or a small team) as a complete +Perun is intended to be used in two ways: (1) for a single developer (or a small team) as a complete solution for automating, storing and interpreting performance of project or (2) as a dedicated store for a bigger projects and teams. Its git-like design aims at easy distribution and simple interface -makes it a good store of profiles along with the context. +makes it a good store of performance profiles along with the functional (or environmental) context. -Installation ------------- +## Installation + +Note that we are no longer maintaining support for Python 3.8, nor do we support Python 3.12 +(this is due to some of its dependencies). Perun may work, but we strongly advise to upgrade your +Python to one of the supported version between Python 3.9 and Python 3.11. -Note that we are no longer maintaining support for Python 3.8. Perun may work, but we strongly -advise to upgrade your Python to newer version. +You can install Perun from pip as follows: -You can install Perun as follows: + pip3 install perun-toolsuite + +Alternatively you can install Perun from the source code as follows: git clone https://github.com/Perfexionists/perun.git cd perun @@ -69,13 +73,20 @@ might require root permissions to install Perun. It is advised to verify that Perun is running correctly in your environment as follows: - pip install .[test] + # You can run this only once: it will initialize the requirements necessary for testing + make init-test + # Runs all tests using pytest make test -or alternatively using Tox (see the [developing section](#developing)). +or alternatively using Tox if you wish to test for more Python versions +(see the [developing section](#developing)). ### Installing Tracer Dependencies +Perun supports multiple collectors of performance metrics. +Our most advanced collector is Tracer (runnable by `perun collect trace`), +which has additional dependencies. + The standard Perun installation does not automatically install the instrumentation frameworks used by Tracer: SystemTap and eBPF. Installing these frameworks is optional when using Perun, although having at least one of them is required in order to run Tracer. Moreover, both frameworks @@ -410,10 +421,10 @@ This tool as well as the information provided on this web page reflects only the ECSEL JU is not responsible for any use that may be made of the information it contains.

- +

- +

This project is co-funded by the European Union From a3dbecde397c58ef8b2f17252c175c7e50e63b42 Mon Sep 17 00:00:00 2001 From: Tomas Fiedor Date: Sat, 11 Nov 2023 22:14:36 +0100 Subject: [PATCH 05/26] Polish readme --- README.md | 54 +++++++++++++++++++++++++++--------------------------- 1 file changed, 27 insertions(+), 27 deletions(-) diff --git a/README.md b/README.md index 7625fa86c..53639102a 100644 --- a/README.md +++ b/README.md @@ -92,14 +92,14 @@ used by Tracer: SystemTap and eBPF. Installing these frameworks is optional when although having at least one of them is required in order to run Tracer. Moreover, both frameworks rely on system-wide packages and thus should be installed directly by the user when needed. -#### SystemTap: Ubuntu +#### SystemTap (Ubuntu) -SystemTap can be installed using `apt-get`: +In Ubuntu, SystemTap can be installed using `apt-get` package manager: sudo apt-get install systemtap -Furthermore, kernel debug symbols package must be installed in order to use SystemTap. For Ubuntu -16.04 and higher: +Furthermore, kernel debug symbols package must be installed in order to use SystemTap. +For Ubuntu 16.04 and higher run the following: sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys C8CAB6595FDFF622 codename=$(lsb_release -c | awk '{print $2}') @@ -113,20 +113,19 @@ Furthermore, kernel debug symbols package must be installed in order to use Syst sudo apt-get update sudo apt-get install linux-image-$(uname -r)-dbgsym -To test that SystemTap works correctly, run the following command: +To test that SystemTap works correctly, you can run the following command: stap -v -e 'probe vfs.read {printf("read performed\n"); exit()}' For more information, see the [source](https://wiki.ubuntu.com/Kernel/Systemtap). -#### SystemTap: Fedora +#### SystemTap (Fedora) -SystemTap can be installed using `yum`: +In Fedora, SystemTap can be installed using `yum` package manager: sudo yum install systemtap systemtap-runtime -Similarly to the Ubuntu case, additional kernel packages must be installed to run -SystemTap properly: +Similarly to the Ubuntu, additional kernel packages must be installed to run SystemTap properly: kernel-debuginfo kernel-debuginfo-common @@ -135,10 +134,11 @@ SystemTap properly: Different Fedora versions use different methods for obtaining those packages. Please refer to the [SystemTap setup guide](https://www.sourceware.org/systemtap/SystemTap_Beginners_Guide/using-systemtap.html#using-setup) -#### BCC: Ubuntu +#### BCC (Ubuntu) -Perun uses the [BCC (BPF Compiler Collection)](https://github.com/iovisor/bcc) frontend for the eBPF technology. -We recommend obtaining the necessary packages from the IO Visor repository: +Tracer uses the [BCC (BPF Compiler Collection)](https://github.com/iovisor/bcc) frontend for the eBPF engine; +eBPF is a framework that allows us to instrument the profile programs. +We recommend to install the necessary packages from the IO Visor repository as follows: sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 4052245BD4284CDD echo "deb https://repo.iovisor.org/apt/$(lsb_release -cs) $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/iovisor.list @@ -150,13 +150,13 @@ Python 3. To install them, run the following command: sudo apt-get install python3-bcc -#### BCC: Fedora +#### BCC (Fedora) Installing BCC on Fedora is much easier. Simply run: sudo dnf install bcc python3-bcc -#### BCC: python virtualenv +#### BCC (python virtualenv) Note that when using Perun in a Python virtual environment, the above installation instructions are not enough. Since the Python `bcc` package is not available through `pip`, installing it @@ -168,15 +168,14 @@ To find the system python3 `bcc` package, run: python3 -c "import site; print(site.getsitepackages())" -which shows the potential global site-packages paths (not all of the paths must necessarily exist). +which shows the global site-packages paths (be warned that not all paths must necessarily exist). The package `bcc` should be located in at least one the listed path (otherwise the installation of `python3-bcc` must have failed in the previous step). The resulting path may look like e.g.: /usr/lib/python3/dist-packages -Run the same command with an activated virtualenv to get the list of site-packages paths local to -the virtualenv. As with the global site-packages path, not all of the listed paths must exist - usually -only one truly does. E.g.: +Now activate the virtual environment and run the same command to get the list of site-packages paths +local to the virtualenv and find one which does exists: /venv-3.8/lib/python3.8/site-packages @@ -184,17 +183,16 @@ Next, copy the `bcc` package from the global site-packages to the virtualenv loc cp -r /usr/lib/python3/dist-packages/bcc /venv-3.8/lib/python3.8/site-packages/ -Now the `bcc` package should be available in the virtualenv python. Test the following command -with activated virtualenv: +Now the `bcc` package should be available in the virtualenv python. +You can test it with the following command with activated virtualenv: python3 -c "import bcc" which should successfully finish (i.e. `ModuleNotFoundError` should not be raised). -Developing ----------- +## Developing -Alternatively you can install Perun in development mode: +In order to commit changes to the Perun, you have to install Perun in development mode: git clone https://github.com/Perfexionists/perun.git cd perun @@ -205,9 +203,12 @@ by the installation. Again, it is advised to verify that Perun is running correctly in your environment as follows: + # You can run this only once: it will initialize the requirements necessary for testing + make init-test + # Runs all tests using pytest make test -Alternatively, you can use [Tox](https://tox.wiki/en/latest/) to run tests for all the supported +Or you can use [Tox](https://tox.wiki/en/latest/) to run tests for all the supported Python versions, as well as run static type checking, code style linting and generating documentation: @@ -229,10 +230,9 @@ If you are interested in contributing to Perun project, please refer to PR](https://github.com/Perfexionists/perun/pull/new/develop), we will review the code and in case it is suitable for wider audience, we will include it in our [upstream](https://github.com/Perfexionists/perun). -But, please be understanding, we cannot fix and merge everything. +But, please be understanding, we cannot fix and merge everything immediately. -Getting Started ---------------- +## Getting Started with Perun In order to start managing performance of your project tracked by `git`, go to its directory and run the following: From 26879622af8598899b2cb2d103850c68d4c8f6a3 Mon Sep 17 00:00:00 2001 From: Tomas Fiedor Date: Mon, 13 Nov 2023 21:45:28 +0100 Subject: [PATCH 06/26] Polish getting started --- README.md | 45 +++++++++++++++++++++++++++------------------ 1 file changed, 27 insertions(+), 18 deletions(-) diff --git a/README.md b/README.md index 53639102a..8c4b61b36 100644 --- a/README.md +++ b/README.md @@ -234,39 +234,48 @@ But, please be understanding, we cannot fix and merge everything immediately. ## Getting Started with Perun -In order to start managing performance of your project tracked by `git`, go to its directory and run -the following: +In order to start managing performance of your project tracked by `git`, +go to your project directory and run the following: - perun init --vcs-type=git --configure + perun init --configure -This creates a parallel directory structure for Perun storage (stored in `.perun`), and runs the -initial configuration of the local project settings in text editor (by default `vim`). There you can -chose the set of collectors, postprocessors and specify which commands (and with which -configurations) should be profiled. See [configuration](https://perfexionists.github.io/perun/config.html) -for more details about perun's configuration. - -Now start collecting the profiles for current version of your project: +This creates a parallel directory structure for Perun storage (stored in `.perun`), +and creates initial configuration of the local project settings and opens it in the text editor +(by default `vim`). +The configuration is well commented and will help you with setting Perun up for your project. +You can specify, e.g., the set of collectors (such as `time` or `trace`), +or postprocessors and specify which commands (and with which arguments and workloads) should be profiled. +See [configuration](https://perfexionists.github.io/perun/config.html) for more details about Perun's configuration. + +If you only wish to briefly try Perun out and +assuming you have opened the configuration file from the previous step +(or you can open it from the path `.perun/local.yaml`), +then we recommend to uncomment keys called `cmds`, `workloads` and `collectors`. +This will suffice to demonstrate Perun's capabilities. + +If you set up the configuration properly you can +now start collecting the profiles for the current version of your project using single command: perun run matrix -This command collects set of profiles, according to the previously set configuration (see -[specification of job matrix](https://perfexionists.github.io/perun/jobs.html#job-matrix-format) for more -details). You can then view the list of collected and registered profiles, and visualize the -profiles (see [visualization overview](https://perfexionists.github.io/perun/views.html)), or check for +This command collects performance data (resulting into so called profiles), +according to the previously set configuration (see [specification of job matrix](https://perfexionists.github.io/perun/jobs.html#job-matrix-format) for more +details). You can then further manipulate with these profiles: view the list of collected and registered profiles, +and visualize the profiles (see [visualization overview](https://perfexionists.github.io/perun/views.html)), or check for possible performance changes (see [degradation documentation](https://perfexionists.github.io/perun/degradation.html)): # Show list of profiles perun status - # Show the first generated profile using scatter plot - perun show 0@p scatter -v + # Show the first generated profile using tabular view + perun show 0@p tableof --to-stdout resources # Register the first generated profile to current minor version perun add 0@p -Now anytime one can do code changes, commit them, rerun the collection phase, register new profiles -and check whether any change in performance can be detected: +Now anytime your codebase changes, rerun the collection phase, register new profiles +and you can check whether any change in performance can be detected: # Rerun the collection perun run matrix From d92d8b69f37b2920cc6399917175694d047640bd Mon Sep 17 00:00:00 2001 From: Tomas Fiedor Date: Wed, 20 Dec 2023 22:17:04 +0100 Subject: [PATCH 07/26] Polish features --- README.md | 98 ++++++++++++++++++++++++++++++------------------------- 1 file changed, 54 insertions(+), 44 deletions(-) diff --git a/README.md b/README.md index 8c4b61b36..7aa9e0fce 100644 --- a/README.md +++ b/README.md @@ -286,62 +286,72 @@ and you can check whether any change in performance can be detected: # Run the degradation check perun check head -Features --------- +## Selected Features of Perun -In the following, we list the foremost features and advantages of Perun: +In the following, we list the foremost features and advantages of using Perun: - - **Unified format**---we base our format of performance profiles on - [JSON](https://www.json.org/). - - - **Natural specification of Profiling Runs**---we base the specification of profiling jobs in - [Yaml](http://yaml.org/) format. - - - **Git-inspired Interface**---the cli is inspired by git version control systems and specifies - commands like e.g. `add`, `remove`, `status`, or `log`. - - - **Efficient storage**---performance profiles are stored compressed in the storage in parallel - to versions of the profiled project inspired by git. - - - **Multiplatform-support**---Perun is implemented in Python 3 and its implementation is - supported both by Windows and Unix-like platforms. - - - **Regression Analysis**---Perun's suite contains a postprocessing module for regression - analysis of profiles (see [regression analysis +- **Unified performance profile format**: our format of performance profiles is baed on + [JSON](https://www.json.org/); JSON is easily parsable by other programs and languages and provide + human-readable format. The downside is, however, its storage size and potentially slow processing. + +- **Natural specification of profiling runs**---we allow users to specify how to execute + regular or more complex profiling workflows (the so-called jobs) in [Yaml](http://yaml.org/) format; + YAML is widely used in CI/CD and other approaches, and is supported by many programs and languages. + +- **Git-inspired Interface**---we provide command line interface for our tool suite; the commands are inspired by git + version control systems e.g. `perun add`, `perun remove`, `perun status`, or `perun log`. This allows users to quickly + adapt to using Perun and its tool suite. + +- **Efficient storage**---performance profiles are stored compressed in the storage in parallel + to versions of the profiled project inspired by git. Note, that the resulting profiles can still be huge; we are + working on compressing and reducing the resulting profiles even further. + +- **Performance modeling**---Perun's suite contains a postprocessing module for regression + analysis of profiles that construct mathematical models of dependent variables (e.g. runtime) wrt given independent + variable (see [regression analysis documentation](https://perfexionists.github.io/perun/postprocessors.html#module-perun.postprocess.regression_analysis)), which supports several different strategies for finding the best predicting model for given data - (such as linear, quadratic, or constant model). - - - **Interactive Visualizations**---Perun's tool suite includes several visualization modules, - some of them based on [Bokeh](https://bokeh.pydata.org/en/latest/) visualization library, which - provides nice and interactive plots, in exchange of scalability. - - - **Useful API for profile manipulation**---helper modules are provided for working with our - profiles in external applications ---we have API for executing simple queries over the resources - or other parts of the profiles, or convert and transform the profiles to different representations - (e.g. pandas data frame). See [conversion + (such as linear, quadratic, or constant model). We also support more advanced modeling using, e.g. kernel regression + methods; these, however, require more domain specific knowledge. + +- **Interactive Visualizations**---Perun's tool suite includes support for visualization of the results, + some of them based on [holoviews](https://holoviews.org/) visualization library, which + provides nice and interactive plots. However, Perun also supports classical output to console as well. + +- **API for profile manipulation**---Perun provides modules for working with + profiles in external applications---ranging for executing simple queries over the resources + or other parts of the profiles, to converting or transforming the profiles to different representations + (e.g. pandas data frame). We particularly recommend using this API in the Python REPL. See [conversion api](https://perfexionists.github.io/perun/profile.html#module-perun.profile.convert) and [query api](https://perfexionists.github.io/perun/profile.html#module-perun.profile.query) for overview. - - - **Automatic Detection of Performance Degradation**---we are currently exploring effective + +- **Automatic Detection of Performance Degradation**---Perun offers several heuristics for automatic detection of performance degradation between two project versions (e.g. - between two commits). + between two commits). This can be used either in Continuous Integrations, in debugging sessions or as parts of some + precomming hooks. + +- **Performance Fuzz-testing**---Perun offers a performance oriented fuzz testing ---i.e. modifying inputs in + order to force error or, in our case, a performance change. This allows users to generate new time-consuming inputs + for theirs projects. As a sneak peek, we are currently working and exploring the following featurues in near future of the project: - - **Regular Expression Driven Collector**---collector based on parsing the standard text output - for a custom specified metrics, specified by regular expressions. - - - **Fuzzing Collector**---collector based on method of fuzz testing ---i.e. modifying inputs in - order to force error or, in our case, a performance change. - - - **Clustering Postprocessor**---we are exploring now how to make any profile usable for - regression analysis. - - - **Automatic Hooks**---the automatic hooks, that will allow to automate the runs of job matrix, +- **Automatic Hooks**---a range of automatic hooks, that will allow to automate the runs of job matrix, automatic detection of degradation and efficient storage. - + +- **Support for more languages**---we are currently working on support for profiling more programming languages. In + particular, we wish to explore profiling languages such as C#, Python, Go or TypeScript. Moreover, we wish to support + some well known profilers such as valgrind toolsuite or perf in our workflow. + +- **Optimization of profiling process**---in our ongoing work we are trying to optimize the runtime and the resulting + storage space of the profiling process while keeping the precision of the results. Some of our optimizations are + already merged in the upstream, however, we are currently enhancing our methods. + +- **Optimal selection of versions**---currently we automatically only support the comparison of two latest versions in + git history. Alternatively, one can select two particular profiles to compare. We currently, exploring differt ways + how to select version in history for comparison for some given version. + For more information about Perun's feature, please refer to our [extensive list of features](https://perfexionists.github.io/perun/overview.html#list-of-features)! From 92b35a1b2e4eb4458eef129d9769b843a3474c0b Mon Sep 17 00:00:00 2001 From: Tomas Fiedor Date: Sat, 23 Dec 2023 14:52:46 +0100 Subject: [PATCH 08/26] Polish rest of readme --- README.md | 49 +++++++++++++++++++++++++------------------------ 1 file changed, 25 insertions(+), 24 deletions(-) diff --git a/README.md b/README.md index 7aa9e0fce..427f68d46 100644 --- a/README.md +++ b/README.md @@ -358,18 +358,19 @@ features](https://perfexionists.github.io/perun/overview.html#list-of-features)! Contributing ------------ -If you'd like to contribute, please fork the repository and use a feature branch. Pull requests are -warmly welcome. +If you'd like to contribute, please first fork our repository and create a dedicated feature branch. Pull requests are +warmly welcome. We will review the contribution (possibly request some changes). -In case you run in some unexpected behaviour, error or anything suspicious, either contact us +In case you run into some unexpected behaviour, error or anything suspicious, either contact us directly through mail or [create a new Issue](https://github.com/Perfexionists/perun/issues/new). -The architecture of Perun allows easy extension. In case you are interested in extending our tool +We build Perun so it is easily extensible. In case you are interested in extending our tool suite with new kinds of collectors, postprocessors or visualization methods, please refer to appropriate sections in Perun's documentation (i.e. Create your own [collector](https://perfexionists.github.io/perun/collectors.html#creating-your-own-collector), [postprocessor](https://perfexionists.github.io/perun/postprocessors.html#creating-your-own-postprocessor) or [visualization](https://perfexionists.github.io/perun/views.html#creating-your-own-visualization)). +Do not hesitate to contact us, if you run into any problems. If you are interested in contributing to Perun project, please first refer to [contributing](Contributing.md) section. If you think your custom module could help others, please @@ -382,26 +383,24 @@ But, please be understanding, we cannot fix and merge everything. Links ----- - - Project repository : - - Issue tracker: - - In case of sensitive bugs like security vulnerabilities, please contact - : directly instead of using issue tracker. We - value your effort to improve the security and privacy of - this project! - - Project documentation: - - Online: - - Latest Typeset: - +- GitHub repository : [https://github.com/Perfexionists/perun](https://github.com/Perfexionists/perun) +- Issue tracker: [https://github.com/Perfexionists/perun/issues](https://github.com/Perfexionists/perun/issues) + - In case of sensitive bugs like security vulnerabilities, please + contact [Tomas Fiedor](mailto:TomasFiedor@gmail.com) or [Jirka Pavela](mailto:JirkaPavela@gmail.com) directly + instead of using issue tracker. We value your effort to improve the security and privacy of our project! +- Project documentation: + - Online: [https://perfexionists.github.io/perun/](https://perfexionists.github.io/perun/) + - Latest Typeset: [https://github.com/Perfexionists/perun/blob/devel/docs/pdf/perun.pdf](https://github.com/Perfexionists/perun/blob/devel/docs/pdf/perun.pdf) + Unrelated links: - - Check out our research group focusing on program analysis, static and dynamic analysis, - formal methods, verification and many more: - +- Check out our research group focusing on program analysis, static and dynamic analysis, formal methods, verification + and many more: [VeriFIT](http://www.fit.vutbr.cz/research/groups/verifit/index.php.en) Licensing --------- -The code in this project is licensed under GNU GPLv3 license. +The code in this project is licensed under [GNU GPLv3 license](https://github.com/Perfexionists/perun/blob/devel/LICENSE). Acknowledgements ---------------- @@ -416,19 +415,20 @@ contributions: - **Jan Fiedor** (Honeywell)---for feedback, and technical discussions; - - **Jirka Hladky** and his team (RedHat)---for technical discussions; - - **Martin Hruska** (BUT FIT)---for feedback, and technical + - **Jirka Hladký** and his team (RedHat)---for technical discussions and cooperation; + - **Martin Hruška** (BUT FIT)---for feedback, and technical discussions; + - **Viktor Malík** (RedHat)---for feedback and support; - **Petr Müller** (SAP)---for nice discussion about the project; - **Michal Kotoun** (BUT FIT)---for feedback, and having faith in this repo; - - **Hanka Pluhackova** (BUT FIT)---for awesome logo, theoretical + - **Hanka Pluháčková** (BUT FIT)---for awesome logo, theoretical discussions about statistics, feedback, and lots of ideas; - **Adam Rogalewicz** (BUT FIT)---for support, theoretical discussions, feedback; - - **Tomas Vojnar** (BUT FIT)---for support, theoretical discussions, + - **Tomáš Vojnar** (BUT FIT)---for support, theoretical discussions, feedback; - - **Jan Zeleny** (Red Hat)---for awesome support, and feedback. + - **Jan Zelený** (Red Hat)---for awesome support, and feedback. Development of this tool has been supported by AQUAS project (Aggregated Quality Assurance for Systems, https://aquas-project.eu/). This project has received funding from the Electronic Component @@ -446,4 +446,5 @@ ECSEL JU is not responsible for any use that may be made of the information it c

- This project is co-funded by the European Union + +This project is co-funded by the European Union From 7fd20f056c0b686cf78bb7b7b1eda733f1331fe1 Mon Sep 17 00:00:00 2001 From: Tomas Fiedor Date: Sat, 23 Dec 2023 16:26:55 +0100 Subject: [PATCH 09/26] Extract installation of tracer --- INSTALL-tracer.md | 108 ++++++++++++++++++++++++++++++++++++++++++++++ README.md | 108 +--------------------------------------------- 2 files changed, 110 insertions(+), 106 deletions(-) create mode 100644 INSTALL-tracer.md diff --git a/INSTALL-tracer.md b/INSTALL-tracer.md new file mode 100644 index 000000000..a638dc41b --- /dev/null +++ b/INSTALL-tracer.md @@ -0,0 +1,108 @@ +### Installing dependencies for tracer + +Perun supports multiple collectors of performance metrics. +Our most advanced collector is Tracer (runnable by `perun collect trace`), +which has additional dependencies. + +The standard Perun installation does not automatically install the instrumentation frameworks +used by Tracer: SystemTap and eBPF. Installing these frameworks is optional when using Perun, +although having at least one of them is required in order to run Tracer. Moreover, both frameworks +rely on system-wide packages and thus should be installed directly by the user when needed. + +#### SystemTap (Ubuntu) + +In Ubuntu, SystemTap can be installed using `apt-get` package manager: + + sudo apt-get install systemtap + +Furthermore, kernel debug symbols package must be installed in order to use SystemTap. +For Ubuntu 16.04 and higher run the following: + + sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys C8CAB6595FDFF622 + codename=$(lsb_release -c | awk '{print $2}') + sudo tee /etc/apt/sources.list.d/ddebs.list << EOF + deb http://ddebs.ubuntu.com/ ${codename} main restricted universe multiverse + deb http://ddebs.ubuntu.com/ ${codename}-security main restricted universe multiverse + deb http://ddebs.ubuntu.com/ ${codename}-updates main restricted universe multiverse + deb http://ddebs.ubuntu.com/ ${codename}-proposed main restricted universe multiverse + EOF + + sudo apt-get update + sudo apt-get install linux-image-$(uname -r)-dbgsym + +To test that SystemTap works correctly, you can run the following command: + + stap -v -e 'probe vfs.read {printf("read performed\n"); exit()}' + +For more information, see the [source](https://wiki.ubuntu.com/Kernel/Systemtap). + +#### SystemTap (Fedora) + +In Fedora, SystemTap can be installed using `yum` package manager: + + sudo yum install systemtap systemtap-runtime + +Similarly to the Ubuntu, additional kernel packages must be installed to run SystemTap properly: + + kernel-debuginfo + kernel-debuginfo-common + kernel-devel + +Different Fedora versions use different methods for obtaining those packages. Please refer to +the [SystemTap setup guide](https://www.sourceware.org/systemtap/SystemTap_Beginners_Guide/using-systemtap.html#using-setup) + +#### BCC (Ubuntu) + +Tracer uses the [BCC (BPF Compiler Collection)](https://github.com/iovisor/bcc) frontend for the eBPF engine; +eBPF is a framework that allows us to instrument the profile programs. +We recommend to install the necessary packages from the IO Visor repository as follows: + + sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 4052245BD4284CDD + echo "deb https://repo.iovisor.org/apt/$(lsb_release -cs) $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/iovisor.list + sudo apt-get update + sudo apt-get install bcc-tools libbcc-examples linux-headers-$(uname -r) + +The default BCC installation uses bindings for Python 2, however, Perun requires bindings for +Python 3. To install them, run the following command: + + sudo apt-get install python3-bcc + +#### BCC (Fedora) + +Installing BCC on Fedora is much easier. Simply run: + + sudo dnf install bcc python3-bcc + +#### BCC (python virtualenv) + +Note that when using Perun in a Python virtual environment, the above installation instructions +are not enough. Since the Python `bcc` package is not available through `pip`, installing it +directly in a virtualenv using pip requirements list is not an option. A common workaround is +to copy the system-wide python `bcc` package installed in the previous step (`python3-bcc`) +into the virtualenv packages. + +To find the system python3 `bcc` package, run: + + python3 -c "import site; print(site.getsitepackages())" + +which shows the global site-packages paths (be warned that not all paths must necessarily exist). +The package `bcc` should be located in at least one the listed path (otherwise the installation of +`python3-bcc` must have failed in the previous step). The resulting path may look like e.g.: + + /usr/lib/python3/dist-packages + +Now activate the virtual environment and run the same command to get the list of site-packages paths +local to the virtualenv and find one which does exists: + + /venv-3.8/lib/python3.8/site-packages + +Next, copy the `bcc` package from the global site-packages to the virtualenv local site-packages: + + cp -r /usr/lib/python3/dist-packages/bcc /venv-3.8/lib/python3.8/site-packages/ + +Now the `bcc` package should be available in the virtualenv python. +You can test it with the following command with activated virtualenv: + + python3 -c "import bcc" + +which should successfully finish (i.e. `ModuleNotFoundError` should not be raised). diff --git a/README.md b/README.md index 427f68d46..375a6d2a0 100644 --- a/README.md +++ b/README.md @@ -83,112 +83,8 @@ or alternatively using Tox if you wish to test for more Python versions ### Installing Tracer Dependencies -Perun supports multiple collectors of performance metrics. -Our most advanced collector is Tracer (runnable by `perun collect trace`), -which has additional dependencies. - -The standard Perun installation does not automatically install the instrumentation frameworks -used by Tracer: SystemTap and eBPF. Installing these frameworks is optional when using Perun, -although having at least one of them is required in order to run Tracer. Moreover, both frameworks -rely on system-wide packages and thus should be installed directly by the user when needed. - -#### SystemTap (Ubuntu) - -In Ubuntu, SystemTap can be installed using `apt-get` package manager: - - sudo apt-get install systemtap - -Furthermore, kernel debug symbols package must be installed in order to use SystemTap. -For Ubuntu 16.04 and higher run the following: - - sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys C8CAB6595FDFF622 - codename=$(lsb_release -c | awk '{print $2}') - sudo tee /etc/apt/sources.list.d/ddebs.list << EOF - deb http://ddebs.ubuntu.com/ ${codename} main restricted universe multiverse - deb http://ddebs.ubuntu.com/ ${codename}-security main restricted universe multiverse - deb http://ddebs.ubuntu.com/ ${codename}-updates main restricted universe multiverse - deb http://ddebs.ubuntu.com/ ${codename}-proposed main restricted universe multiverse - EOF - - sudo apt-get update - sudo apt-get install linux-image-$(uname -r)-dbgsym - -To test that SystemTap works correctly, you can run the following command: - - stap -v -e 'probe vfs.read {printf("read performed\n"); exit()}' - -For more information, see the [source](https://wiki.ubuntu.com/Kernel/Systemtap). - -#### SystemTap (Fedora) - -In Fedora, SystemTap can be installed using `yum` package manager: - - sudo yum install systemtap systemtap-runtime - -Similarly to the Ubuntu, additional kernel packages must be installed to run SystemTap properly: - - kernel-debuginfo - kernel-debuginfo-common - kernel-devel - -Different Fedora versions use different methods for obtaining those packages. Please refer to -the [SystemTap setup guide](https://www.sourceware.org/systemtap/SystemTap_Beginners_Guide/using-systemtap.html#using-setup) - -#### BCC (Ubuntu) - -Tracer uses the [BCC (BPF Compiler Collection)](https://github.com/iovisor/bcc) frontend for the eBPF engine; -eBPF is a framework that allows us to instrument the profile programs. -We recommend to install the necessary packages from the IO Visor repository as follows: - - sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 4052245BD4284CDD - echo "deb https://repo.iovisor.org/apt/$(lsb_release -cs) $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/iovisor.list - sudo apt-get update - sudo apt-get install bcc-tools libbcc-examples linux-headers-$(uname -r) - -The default BCC installation uses bindings for Python 2, however, Perun requires bindings for -Python 3. To install them, run the following command: - - sudo apt-get install python3-bcc - -#### BCC (Fedora) - -Installing BCC on Fedora is much easier. Simply run: - - sudo dnf install bcc python3-bcc - -#### BCC (python virtualenv) - -Note that when using Perun in a Python virtual environment, the above installation instructions -are not enough. Since the Python `bcc` package is not available through `pip`, installing it -directly in a virtualenv using pip requirements list is not an option. A common workaround is -to copy the system-wide python `bcc` package installed in the previous step (`python3-bcc`) -into the virtualenv packages. - -To find the system python3 `bcc` package, run: - - python3 -c "import site; print(site.getsitepackages())" - -which shows the global site-packages paths (be warned that not all paths must necessarily exist). -The package `bcc` should be located in at least one the listed path (otherwise the installation of -`python3-bcc` must have failed in the previous step). The resulting path may look like e.g.: - - /usr/lib/python3/dist-packages - -Now activate the virtual environment and run the same command to get the list of site-packages paths -local to the virtualenv and find one which does exists: - - /venv-3.8/lib/python3.8/site-packages - -Next, copy the `bcc` package from the global site-packages to the virtualenv local site-packages: - - cp -r /usr/lib/python3/dist-packages/bcc /venv-3.8/lib/python3.8/site-packages/ - -Now the `bcc` package should be available in the virtualenv python. -You can test it with the following command with activated virtualenv: - - python3 -c "import bcc" - -which should successfully finish (i.e. `ModuleNotFoundError` should not be raised). +If you wish to use our `tracer` profiler, you have to install its dependencies first. Please refer +to [INSTALL-tracer.md](https://github.com/Perfexionists/perun/blob/devel/INSTALL-tracer). ## Developing From bd48d89291fec441374c11eb83da447a663ed3fa Mon Sep 17 00:00:00 2001 From: Tomas Fiedor Date: Sat, 23 Dec 2023 20:46:44 +0100 Subject: [PATCH 10/26] Update gitignore --- .gitignore | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index 73cf61076..b9b1fd211 100644 --- a/.gitignore +++ b/.gitignore @@ -1,13 +1,19 @@ -# Perun +# Perun / Perun specific .perun/ +tests/sources/fuzz_examples/hang-init/hang +tests/sources/fuzz_examples/hang-test/hang +tests/sources/fuzz_examples/sigabrt-init/sigabrt +tests/sources/fuzz_examples/sigabrt-test/sigabrt +tests/sources/fuzz_examples/tail/tail # Byte-compiled / optimized / DLL files __pycache__/ -*.py[cod] +*.py[cod~] *$py.class -# C extensions +# C/C++ extensions *.so +*.o # Distribution / packaging .Python @@ -53,6 +59,9 @@ coverage.xml .hypothesis/ .pytest_cache/ cover/ +*.gcda +*.gcno +*.gcov # Translations *.mo @@ -181,3 +190,6 @@ com_crashlytics_export_strings.xml crashlytics.properties crashlytics-build.properties fabric.properties + +# Profiling +prof/ From 192c195afe7b3527db68a5fd4aadeaba56fd33c2 Mon Sep 17 00:00:00 2001 From: Tomas Fiedor Date: Sun, 24 Dec 2023 10:53:05 +0100 Subject: [PATCH 11/26] Experiment with authors --- AUTHORS.rst | 10 ++++++++-- figs/icon-github.svg | 1 + 2 files changed, 9 insertions(+), 2 deletions(-) create mode 100644 figs/icon-github.svg diff --git a/AUTHORS.rst b/AUTHORS.rst index 93780465f..9b7a04069 100644 --- a/AUTHORS.rst +++ b/AUTHORS.rst @@ -1,10 +1,16 @@ + =============== Main Developers =============== The following lists the authors (active ones are bold) - * **Tomas Fiedor** (founder) + * **Tomas Fiedor** `|tfiedor-github|`_ (founder) * **Jiri Pavela** * Radim Podola - * **Simon Stupinsky** + * Simon Stupinsky + * Matus Liscinsky + +.. |tfiedor-github| image:: ./figs/icon-github.svg +.. _tfiedor-github: https://github.com/tfiedor + diff --git a/figs/icon-github.svg b/figs/icon-github.svg new file mode 100644 index 000000000..f3241f9ee --- /dev/null +++ b/figs/icon-github.svg @@ -0,0 +1 @@ + \ No newline at end of file From 6caf0715faae68fc3f5e2262f6da403c9f7d6d5d Mon Sep 17 00:00:00 2001 From: Tomas Fiedor Date: Sun, 24 Dec 2023 11:10:00 +0100 Subject: [PATCH 12/26] Fix link in authors --- AUTHORS.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AUTHORS.rst b/AUTHORS.rst index 9b7a04069..8ae970bfd 100644 --- a/AUTHORS.rst +++ b/AUTHORS.rst @@ -5,7 +5,7 @@ Main Developers The following lists the authors (active ones are bold) - * **Tomas Fiedor** `|tfiedor-github|`_ (founder) + * **Tomas Fiedor** |tfiedor-github|_ (founder) * **Jiri Pavela** * Radim Podola * Simon Stupinsky From 5f4f40932b2d0531520b113fe041094592f7adcf Mon Sep 17 00:00:00 2001 From: Tomas Fiedor Date: Mon, 25 Dec 2023 14:07:48 +0100 Subject: [PATCH 13/26] Experiment with link --- AUTHORS.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AUTHORS.rst b/AUTHORS.rst index 8ae970bfd..9f27b8506 100644 --- a/AUTHORS.rst +++ b/AUTHORS.rst @@ -5,7 +5,7 @@ Main Developers The following lists the authors (active ones are bold) - * **Tomas Fiedor** |tfiedor-github|_ (founder) + * **Tomas Fiedor** |tfiedor-github| (founder) * **Jiri Pavela** * Radim Podola * Simon Stupinsky From b0dfefd483bd6cf3095ab833facd11396fe3eb0c Mon Sep 17 00:00:00 2001 From: Tomas Fiedor Date: Mon, 25 Dec 2023 15:55:36 +0100 Subject: [PATCH 14/26] Experiment with link --- AUTHORS.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AUTHORS.rst b/AUTHORS.rst index 9f27b8506..9b7a04069 100644 --- a/AUTHORS.rst +++ b/AUTHORS.rst @@ -5,7 +5,7 @@ Main Developers The following lists the authors (active ones are bold) - * **Tomas Fiedor** |tfiedor-github| (founder) + * **Tomas Fiedor** `|tfiedor-github|`_ (founder) * **Jiri Pavela** * Radim Podola * Simon Stupinsky From f3b04e10e3657a4a874cabca8f1ed72d735b7b0a Mon Sep 17 00:00:00 2001 From: Tomas Fiedor Date: Tue, 26 Dec 2023 11:00:50 +0100 Subject: [PATCH 15/26] Experiment with links --- AUTHORS.rst | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/AUTHORS.rst b/AUTHORS.rst index 9b7a04069..878dee36f 100644 --- a/AUTHORS.rst +++ b/AUTHORS.rst @@ -5,12 +5,11 @@ Main Developers The following lists the authors (active ones are bold) - * **Tomas Fiedor** `|tfiedor-github|`_ (founder) + * **Tomas Fiedor** `|github| tfiedor `_ (founder) * **Jiri Pavela** * Radim Podola * Simon Stupinsky * Matus Liscinsky -.. |tfiedor-github| image:: ./figs/icon-github.svg -.. _tfiedor-github: https://github.com/tfiedor +.. |github| image:: ./figs/icon-github.svg From f9fc9298b84d0eba1858500f0f3bd6661d07f2fb Mon Sep 17 00:00:00 2001 From: Tomas Fiedor Date: Tue, 26 Dec 2023 11:06:24 +0100 Subject: [PATCH 16/26] Fix link --- AUTHORS.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AUTHORS.rst b/AUTHORS.rst index 878dee36f..7a65a9b39 100644 --- a/AUTHORS.rst +++ b/AUTHORS.rst @@ -5,7 +5,7 @@ Main Developers The following lists the authors (active ones are bold) - * **Tomas Fiedor** `|github| tfiedor `_ (founder) + * **Tomas Fiedor** |github| `tfiedor `_ (founder) * **Jiri Pavela** * Radim Podola * Simon Stupinsky From ce4eeb55fc324a6b16285fad30492e2067532cd7 Mon Sep 17 00:00:00 2001 From: Tomas Fiedor Date: Tue, 26 Dec 2023 12:27:39 +0100 Subject: [PATCH 17/26] Experiment with links --- AUTHORS.rst | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/AUTHORS.rst b/AUTHORS.rst index 7a65a9b39..71eed1c2a 100644 --- a/AUTHORS.rst +++ b/AUTHORS.rst @@ -5,11 +5,12 @@ Main Developers The following lists the authors (active ones are bold) - * **Tomas Fiedor** |github| `tfiedor `_ (founder) + * **Tomas Fiedor** |tfiedor-github| (founder) * **Jiri Pavela** * Radim Podola * Simon Stupinsky * Matus Liscinsky -.. |github| image:: ./figs/icon-github.svg +.. |tfiedor-github| image:: ./figs/icon-github.svg + :target: https://github.com/tfiedor From 58265250010ab180db13e21a2418f400cb384e40 Mon Sep 17 00:00:00 2001 From: Tomas Fiedor Date: Tue, 26 Dec 2023 22:32:41 +0100 Subject: [PATCH 18/26] Update authors --- AUTHORS.rst | 30 ++++++++++++++++++++++++------ figs/icon-email.svg | 1 + figs/icon-github.svg | 2 +- 3 files changed, 26 insertions(+), 7 deletions(-) create mode 100644 figs/icon-email.svg diff --git a/AUTHORS.rst b/AUTHORS.rst index 71eed1c2a..448bfd87f 100644 --- a/AUTHORS.rst +++ b/AUTHORS.rst @@ -3,14 +3,32 @@ Main Developers =============== -The following lists the authors (active ones are bold) +The following lists the authors (active ones are bold) that contributed to upstream (or to some fork) of Perun: - * **Tomas Fiedor** |tfiedor-github| (founder) - * **Jiri Pavela** - * Radim Podola - * Simon Stupinsky - * Matus Liscinsky + * **Tomas Fiedor**: |tfiedor-github| |tfiedor-email| (founder), core + * **Jiri Pavela**: |jpavela-github| |jpavela-email| tracer, core + * **Ondrej Michal**: |omichal-github| energy profiler + * **Peter Mocary**: |pmocary-github| tracer + * Martina Grzybowska: GUI + * Vojtech Hajek: C# profiler + * Matus Liscinsky: fuzzing, perfblowing + * Radim Podola: |rpodola-email| memory + * Simon Stupinsky: |sstupinsky-email| models .. |tfiedor-github| image:: ./figs/icon-github.svg :target: https://github.com/tfiedor +.. |jpavela-github| image:: ./figs/icon-github.svg + :target: https://github.com/JiriPavela +.. |pmocary-github| image:: ./figs/icon-github.svg + :target: https://github.com/PeterMocary +.. |omichal-github| image:: ./figs/icon-github.svg + :target: https://github.com/HarryMichal +.. |sstupinsky-email| image:: ./figs/icon-email.svg + :target: mailto:simondestupinsky@gmail.com +.. |tfiedor-email| image:: ./figs/icon-email.svg + :target: mailto:TomasFiedor@gmail.com +.. |jpavela-email| image:: ./figs/icon-email.svg + :target: mailto:JirkaPavela@gmail.com +.. |rpodola-email| image:: ./figs/icon-email.svg + :target: mailto:rpodola@gmail.com diff --git a/figs/icon-email.svg b/figs/icon-email.svg new file mode 100644 index 000000000..f64c99dd2 --- /dev/null +++ b/figs/icon-email.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/figs/icon-github.svg b/figs/icon-github.svg index f3241f9ee..1c564a8a9 100644 --- a/figs/icon-github.svg +++ b/figs/icon-github.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file From 804c6a2f318419059ab7e105c2345aa0a7bc64de Mon Sep 17 00:00:00 2001 From: Tomas Fiedor Date: Wed, 27 Dec 2023 15:29:05 +0100 Subject: [PATCH 19/26] Reword authors --- AUTHORS.rst | 31 ++++++++----------------------- 1 file changed, 8 insertions(+), 23 deletions(-) diff --git a/AUTHORS.rst b/AUTHORS.rst index 448bfd87f..42641b984 100644 --- a/AUTHORS.rst +++ b/AUTHORS.rst @@ -5,30 +5,15 @@ Main Developers The following lists the authors (active ones are bold) that contributed to upstream (or to some fork) of Perun: - * **Tomas Fiedor**: |tfiedor-github| |tfiedor-email| (founder), core - * **Jiri Pavela**: |jpavela-github| |jpavela-email| tracer, core - * **Ondrej Michal**: |omichal-github| energy profiler - * **Peter Mocary**: |pmocary-github| tracer + * **Tomas Fiedor**: |github| `tfiedor ` |email| `TomasFiedor@gmail.com ` (founder), core + * **Jiri Pavela**: |github| `JiriPavela ` |email| `JirkaPavela@gmail.com ` tracer, core + * **Ondrej Michal**: |github| `HarryMichal ` energy profiler + * **Peter Mocary**: |github| `PeterMocary ` tracer * Martina Grzybowska: GUI * Vojtech Hajek: C# profiler * Matus Liscinsky: fuzzing, perfblowing - * Radim Podola: |rpodola-email| memory - * Simon Stupinsky: |sstupinsky-email| models - -.. |tfiedor-github| image:: ./figs/icon-github.svg - :target: https://github.com/tfiedor -.. |jpavela-github| image:: ./figs/icon-github.svg - :target: https://github.com/JiriPavela -.. |pmocary-github| image:: ./figs/icon-github.svg - :target: https://github.com/PeterMocary -.. |omichal-github| image:: ./figs/icon-github.svg - :target: https://github.com/HarryMichal -.. |sstupinsky-email| image:: ./figs/icon-email.svg - :target: mailto:simondestupinsky@gmail.com -.. |tfiedor-email| image:: ./figs/icon-email.svg - :target: mailto:TomasFiedor@gmail.com -.. |jpavela-email| image:: ./figs/icon-email.svg - :target: mailto:JirkaPavela@gmail.com -.. |rpodola-email| image:: ./figs/icon-email.svg - :target: mailto:rpodola@gmail.com + * Radim Podola: |email| `rpodola@gmail.com ` memory + * Simon Stupinsky: |email| `simondestupinsky@gmail.com ` models +.. |github| image:: ./figs/icon-github.svg +.. |email| image:: ./figs/icon-email.svg From 64ec4e16c9c0a3b291bb3a7115132a0e1ebb94b0 Mon Sep 17 00:00:00 2001 From: Tomas Fiedor Date: Wed, 27 Dec 2023 15:52:52 +0100 Subject: [PATCH 20/26] Fix links --- AUTHORS.rst | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/AUTHORS.rst b/AUTHORS.rst index 42641b984..e89321e47 100644 --- a/AUTHORS.rst +++ b/AUTHORS.rst @@ -5,15 +5,15 @@ Main Developers The following lists the authors (active ones are bold) that contributed to upstream (or to some fork) of Perun: - * **Tomas Fiedor**: |github| `tfiedor ` |email| `TomasFiedor@gmail.com ` (founder), core - * **Jiri Pavela**: |github| `JiriPavela ` |email| `JirkaPavela@gmail.com ` tracer, core - * **Ondrej Michal**: |github| `HarryMichal ` energy profiler - * **Peter Mocary**: |github| `PeterMocary ` tracer + * **Tomas Fiedor**: |github| `tfiedor `_ |email| `TomasFiedor@gmail.com `_ (founder), core + * **Jiri Pavela**: |github| `JiriPavela `_ |email| `JirkaPavela@gmail.com `_ tracer, core + * **Ondrej Michal**: |github| `HarryMichal `_ energy profiler + * **Peter Mocary**: |github| `PeterMocary `_ tracer * Martina Grzybowska: GUI * Vojtech Hajek: C# profiler * Matus Liscinsky: fuzzing, perfblowing - * Radim Podola: |email| `rpodola@gmail.com ` memory - * Simon Stupinsky: |email| `simondestupinsky@gmail.com ` models + * Radim Podola: |email| `rpodola@gmail.com `_ memory + * Simon Stupinsky: |email| `simondestupinsky@gmail.com `_ models .. |github| image:: ./figs/icon-github.svg .. |email| image:: ./figs/icon-email.svg From f4b1e602f20167b5a008996344e97c7ffe55f212 Mon Sep 17 00:00:00 2001 From: Tomas Fiedor Date: Fri, 29 Dec 2023 22:26:08 +0100 Subject: [PATCH 21/26] Polish contributions --- CONTRIBUTING | 32 ++++++++++++++++++++------------ 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/CONTRIBUTING b/CONTRIBUTING index 423d29f1e..a3d5aa92f 100644 --- a/CONTRIBUTING +++ b/CONTRIBUTING @@ -1,12 +1,20 @@ Contributing ============ -In case you run in some unexpected behaviour, error or anything suspicious, either contact us +In case you run into some unexpected behaviour, error or anything suspicious, either contact us directly through mail or [create a new Issue](https://github.com/Perfexionists/perun/issues/new). -If you'd like to contribute, please fork the repository and use a new feature branch starting from -the `develop` the develop branch. Pull requests are warmly welcome! However, please follow these -guidelines: +We build Perun so it is easily extensible. In case you are interested in extending our tool +suite with new kinds of collectors, postprocessors or visualization methods, please refer to +appropriate sections in Perun's documentation (i.e. Create your own +[collector](https://perfexionists.github.io/perun/collectors.html#creating-your-own-collector), +[postprocessor](https://perfexionists.github.io/perun/postprocessors.html#creating-your-own-postprocessor) +or [visualization](https://perfexionists.github.io/perun/views.html#creating-your-own-visualization)). +Do not hesitate to contact us, if you run into any problems. + +If you'd like to contribute, please first fork our repository and create a new dedicated feature branch starting from +the `develop` branch. Pull requests are warmly welcome! We will surely review the contribution (possibly request +some changes). However, please follow these guidelines: 1. **Document your code properly**---refer to [sphinx documentation](http://www.sphinx-doc.org/en/stable/domains.html#the-python-domain) @@ -16,21 +24,21 @@ guidelines: directory and should achieve a suitable amount of codecov coverage. - 3. **Follow the project formatting** by utilising [Black](https://github.com/psf/black). + 3. **Follow the project formatting**; we recommend using the [black](https://github.com/psf/black) formatter. - 4. **Commit properly**, write meaningful commit messages, with first short line being short + 4. **Commit properly**: write meaningful commit messages; we recommend to write first short line as a short description that can be included into the following template: "This commit will ___". Before considering a merge of pull requests we want the feature branch to fulfill the following: - 1. The branch must be compilable (i.e. Travis checks are passing) - 2. The tests cover reasonable proportion of code (i.e. codecov checks are passing) - 3. The code has no issues checked by codacy and codeclimate (however, some checks may require - manual confirmation---e.g. the levels of cyclomatic complexity) + 1. The branch must be compilable (i.e. Github Action checks are passing); + 2. The tests cover reasonable proportion of code (i.e. codecov checks are passing); + 3. The code has no issues checked by codacy; + 4. At least one of the major maintainers has reviewed the code. If you think your extension could help others, please [send us -PR](https://github.com/Perfexionists/perun/pull/new/develop), we will review the code and in case it is -indeed suitable for wider audience and maintainable, we will include it in our +PR](https://github.com/Perfexionists/perun/pull/new/develop), we will review the code and in case it is, +indeed, suitable for wider audience and maintainable, we will include it in our [upstream](https://github.com/Perfexionists/perun). *But, please be understanding; we cannot fix and merge everything.* From 50531ef7d7856af4b4a979b035034c05dae4b478 Mon Sep 17 00:00:00 2001 From: Tomas Fiedor Date: Sat, 30 Dec 2023 10:24:40 +0100 Subject: [PATCH 22/26] Fix minor issues in readme --- README.md | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index 375a6d2a0..89254f07c 100644 --- a/README.md +++ b/README.md @@ -309,22 +309,22 @@ Further we would like to thank the following individuals (in the alphabetic order) for their (sometimes even just a little) contributions: - - **Jan Fiedor** (Honeywell)---for feedback, and technical - discussions; - - **Jirka Hladký** and his team (RedHat)---for technical discussions and cooperation; - - **Martin Hruška** (BUT FIT)---for feedback, and technical - discussions; - - **Viktor Malík** (RedHat)---for feedback and support; - - **Petr Müller** (SAP)---for nice discussion about the project; - - **Michal Kotoun** (BUT FIT)---for feedback, and having faith in - this repo; - - **Hanka Pluháčková** (BUT FIT)---for awesome logo, theoretical - discussions about statistics, feedback, and lots of ideas; - - **Adam Rogalewicz** (BUT FIT)---for support, theoretical - discussions, feedback; - - **Tomáš Vojnar** (BUT FIT)---for support, theoretical discussions, - feedback; - - **Jan Zelený** (Red Hat)---for awesome support, and feedback. +- **Jan Fiedor** (Honeywell)---for feedback, and technical + discussions; +- **Jirka Hladký** and his team (RedHat)---for technical discussions and cooperation; +- **Martin Hruška** (BUT FIT)---for feedback, and technical + discussions; +- **Viktor Malík** (RedHat)---for feedback and support; +- **Petr Müller** (SAP)---for nice discussion about the project; +- **Michal Kotoun** (BUT FIT)---for feedback, and having faith in + this repo; +- **Hanka Pluháčková** (BUT FIT)---for awesome logo, theoretical + discussions about statistics, feedback, and lots of ideas; +- **Adam Rogalewicz** (BUT FIT)---for support, theoretical + discussions, feedback; +- **Tomáš Vojnar** (BUT FIT)---for support, theoretical discussions, + feedback; +- **Jan Zelený** (Red Hat)---for awesome support, and feedback. Development of this tool has been supported by AQUAS project (Aggregated Quality Assurance for Systems, https://aquas-project.eu/). This project has received funding from the Electronic Component From d7eff95665b85fd1acf6ae7859d4b12aea3e5e9d Mon Sep 17 00:00:00 2001 From: Tomas Fiedor Date: Sat, 30 Dec 2023 10:33:12 +0100 Subject: [PATCH 23/26] Fix more issues in readme --- README.md | 107 +++++++++++++++++++++++++++--------------------------- 1 file changed, 53 insertions(+), 54 deletions(-) diff --git a/README.md b/README.md index 89254f07c..35d4f5fda 100644 --- a/README.md +++ b/README.md @@ -186,67 +186,66 @@ and you can check whether any change in performance can be detected: In the following, we list the foremost features and advantages of using Perun: -- **Unified performance profile format**: our format of performance profiles is baed on - [JSON](https://www.json.org/); JSON is easily parsable by other programs and languages and provide - human-readable format. The downside is, however, its storage size and potentially slow processing. - -- **Natural specification of profiling runs**---we allow users to specify how to execute - regular or more complex profiling workflows (the so-called jobs) in [Yaml](http://yaml.org/) format; - YAML is widely used in CI/CD and other approaches, and is supported by many programs and languages. - -- **Git-inspired Interface**---we provide command line interface for our tool suite; the commands are inspired by git - version control systems e.g. `perun add`, `perun remove`, `perun status`, or `perun log`. This allows users to quickly - adapt to using Perun and its tool suite. - -- **Efficient storage**---performance profiles are stored compressed in the storage in parallel - to versions of the profiled project inspired by git. Note, that the resulting profiles can still be huge; we are - working on compressing and reducing the resulting profiles even further. - -- **Performance modeling**---Perun's suite contains a postprocessing module for regression - analysis of profiles that construct mathematical models of dependent variables (e.g. runtime) wrt given independent - variable (see [regression analysis - documentation](https://perfexionists.github.io/perun/postprocessors.html#module-perun.postprocess.regression_analysis)), - which supports several different strategies for finding the best predicting model for given data - (such as linear, quadratic, or constant model). We also support more advanced modeling using, e.g. kernel regression - methods; these, however, require more domain specific knowledge. - -- **Interactive Visualizations**---Perun's tool suite includes support for visualization of the results, - some of them based on [holoviews](https://holoviews.org/) visualization library, which - provides nice and interactive plots. However, Perun also supports classical output to console as well. - -- **API for profile manipulation**---Perun provides modules for working with - profiles in external applications---ranging for executing simple queries over the resources - or other parts of the profiles, to converting or transforming the profiles to different representations - (e.g. pandas data frame). We particularly recommend using this API in the Python REPL. See [conversion - api](https://perfexionists.github.io/perun/profile.html#module-perun.profile.convert) and [query - api](https://perfexionists.github.io/perun/profile.html#module-perun.profile.query) for overview. - -- **Automatic Detection of Performance Degradation**---Perun offers several - heuristics for automatic detection of performance degradation between two project versions (e.g. - between two commits). This can be used either in Continuous Integrations, in debugging sessions or as parts of some - precomming hooks. - -- **Performance Fuzz-testing**---Perun offers a performance oriented fuzz testing ---i.e. modifying inputs in - order to force error or, in our case, a performance change. This allows users to generate new time-consuming inputs - for theirs projects. +- **Unified performance profile format**: our format of performance profiles is baed on + [JSON](https://www.json.org/); JSON is easily parsable by other programs and languages and provide + human-readable format. The downside is, however, its storage size and potentially slow processing. + +- **Natural specification of profiling runs**---we allow users to specify how to execute + regular or more complex profiling workflows (the so-called jobs) in [Yaml](http://yaml.org/) format; + YAML is widely used in CI/CD and other approaches, and is supported by many programs and languages. + +- **Git-inspired Interface**---we provide command line interface for our tool suite; the commands are inspired by git + version control systems e.g. `perun add`, `perun remove`, `perun status`, or `perun log`. This allows users to + quickly adapt to using Perun and its tool suite. + +- **Efficient storage**---performance profiles are stored compressed in the storage in parallel + to versions of the profiled project inspired by git. Note, that the resulting profiles can still be huge; we are + working on compressing and reducing the resulting profiles even further. + +- **Performance modeling**---Perun's suite contains a postprocessing module for regression + analysis of profiles that construct mathematical models of dependent variables (e.g. runtime) wrt given independent + variable (see [regression analysis documentation](https://perfexionists.github.io/perun/postprocessors.html#module-perun.postprocess.regression_analysis)), + which supports several different strategies for finding the best predicting model for given data + (such as linear, quadratic, or constant model). We also support more advanced modeling using, e.g. kernel regression + methods; these, however, require more domain specific knowledge. + +- **Interactive Visualizations**---Perun's tool suite includes support for visualization of the results, + some of them based on [holoviews](https://holoviews.org/) visualization library, which + provides nice and interactive plots. However, Perun also supports classical output to console as well. + +- **API for profile manipulation**---Perun provides modules for working with + profiles in external applications---ranging for executing simple queries over the resources + or other parts of the profiles, to converting or transforming the profiles to different representations + (e.g. pandas data frame). We particularly recommend using this API in the Python REPL. + See [conversion api](https://perfexionists.github.io/perun/profile.html#module-perun.profile.convert) + and [query api](https://perfexionists.github.io/perun/profile.html#module-perun.profile.query) for overview. + +- **Automatic Detection of Performance Degradation**---Perun offers several + heuristics for automatic detection of performance degradation between two project versions (e.g. + between two commits). This can be used either in Continuous Integrations, in debugging sessions or as parts of some + precomming hooks. + +- **Performance Fuzz-testing**---Perun offers a performance oriented fuzz testing ---i.e. modifying inputs in + order to force error or, in our case, a performance change. This allows users to generate new time-consuming inputs + for theirs projects. As a sneak peek, we are currently working and exploring the following featurues in near future of the project: -- **Automatic Hooks**---a range of automatic hooks, that will allow to automate the runs of job matrix, - automatic detection of degradation and efficient storage. +- **Automatic Hooks**---a range of automatic hooks, that will allow to automate the runs of job matrix, + automatic detection of degradation and efficient storage. -- **Support for more languages**---we are currently working on support for profiling more programming languages. In - particular, we wish to explore profiling languages such as C#, Python, Go or TypeScript. Moreover, we wish to support - some well known profilers such as valgrind toolsuite or perf in our workflow. +- **Support for more languages**---we are currently working on support for profiling more programming languages. In + particular, we wish to explore profiling languages such as C#, Python, Go or TypeScript. Moreover, we wish to support + some well known profilers such as valgrind toolsuite or perf in our workflow. -- **Optimization of profiling process**---in our ongoing work we are trying to optimize the runtime and the resulting - storage space of the profiling process while keeping the precision of the results. Some of our optimizations are - already merged in the upstream, however, we are currently enhancing our methods. +- **Optimization of profiling process**---in our ongoing work we are trying to optimize the runtime and the resulting + storage space of the profiling process while keeping the precision of the results. Some of our optimizations are + already merged in the upstream, however, we are currently enhancing our methods. -- **Optimal selection of versions**---currently we automatically only support the comparison of two latest versions in - git history. Alternatively, one can select two particular profiles to compare. We currently, exploring differt ways - how to select version in history for comparison for some given version. +- **Optimal selection of versions**---currently we automatically only support the comparison of two latest versions in + git history. Alternatively, one can select two particular profiles to compare. We currently, exploring differt ways + how to select version in history for comparison for some given version. For more information about Perun's feature, please refer to our [extensive list of features](https://perfexionists.github.io/perun/overview.html#list-of-features)! From 56a04afe3539b2e9ffe650b8056975dcc73388c6 Mon Sep 17 00:00:00 2001 From: Tomas Fiedor Date: Sat, 30 Dec 2023 10:57:49 +0100 Subject: [PATCH 24/26] Fix rest of issues in README --- README.md | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index 35d4f5fda..c6d20aa81 100644 --- a/README.md +++ b/README.md @@ -278,19 +278,19 @@ But, please be understanding, we cannot fix and merge everything. Links ----- -- GitHub repository : [https://github.com/Perfexionists/perun](https://github.com/Perfexionists/perun) -- Issue tracker: [https://github.com/Perfexionists/perun/issues](https://github.com/Perfexionists/perun/issues) - - In case of sensitive bugs like security vulnerabilities, please - contact [Tomas Fiedor](mailto:TomasFiedor@gmail.com) or [Jirka Pavela](mailto:JirkaPavela@gmail.com) directly - instead of using issue tracker. We value your effort to improve the security and privacy of our project! -- Project documentation: - - Online: [https://perfexionists.github.io/perun/](https://perfexionists.github.io/perun/) - - Latest Typeset: [https://github.com/Perfexionists/perun/blob/devel/docs/pdf/perun.pdf](https://github.com/Perfexionists/perun/blob/devel/docs/pdf/perun.pdf) +- GitHub repository : [https://github.com/Perfexionists/perun](https://github.com/Perfexionists/perun) +- Issue tracker: [https://github.com/Perfexionists/perun/issues](https://github.com/Perfexionists/perun/issues) + - In case of sensitive bugs like security vulnerabilities, please + contact [Tomas Fiedor](mailto:TomasFiedor@gmail.com) or [Jirka Pavela](mailto:JirkaPavela@gmail.com) directly + instead of using issue tracker. We value your effort to improve the security and privacy of our project! +- Project documentation: + - Online: [https://perfexionists.github.io/perun/](https://perfexionists.github.io/perun/) + - Latest Typeset: [https://github.com/Perfexionists/perun/blob/devel/docs/pdf/perun.pdf](https://github.com/Perfexionists/perun/blob/devel/docs/pdf/perun.pdf) Unrelated links: -- Check out our research group focusing on program analysis, static and dynamic analysis, formal methods, verification - and many more: [VeriFIT](http://www.fit.vutbr.cz/research/groups/verifit/index.php.en) +- Check out our research group focusing on program analysis, static and dynamic analysis, formal methods, verification + and many more: [VeriFIT](http://www.fit.vutbr.cz/research/groups/verifit/index.php.en) Licensing --------- From 95af24710bb05eb69042635f468aab8410e0249a Mon Sep 17 00:00:00 2001 From: Tomas Fiedor Date: Sat, 30 Dec 2023 14:49:50 +0100 Subject: [PATCH 25/26] Update changelog --- CHANGELOG.rst | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 03a8560ef..3d488ddab 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -4,7 +4,9 @@ Changelog 0.21.7 (2023-11-08) ------------------- + - Update README, licensing, authors and contributions. - Fix minor issues in README, and various parts of Perun. + - Fix minor issue in helper scripts. 0.21.6 (2023-11-06) ------------------- From 8a64974e28e33a698304193290dc79d3505a4ce2 Mon Sep 17 00:00:00 2001 From: Tomas Fiedor Date: Tue, 2 Jan 2024 20:48:12 +0100 Subject: [PATCH 26/26] Update AUTHORS.rst MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Ondřej Míchal --- AUTHORS.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AUTHORS.rst b/AUTHORS.rst index e89321e47..7fb586d46 100644 --- a/AUTHORS.rst +++ b/AUTHORS.rst @@ -7,7 +7,7 @@ The following lists the authors (active ones are bold) that contributed to upstr * **Tomas Fiedor**: |github| `tfiedor `_ |email| `TomasFiedor@gmail.com `_ (founder), core * **Jiri Pavela**: |github| `JiriPavela `_ |email| `JirkaPavela@gmail.com `_ tracer, core - * **Ondrej Michal**: |github| `HarryMichal `_ energy profiler + * **Ondrej Michal**: |github| `HarryMichal `_ [energy profiler](https://gitlab.com/martymichal/sysrapl) * **Peter Mocary**: |github| `PeterMocary `_ tracer * Martina Grzybowska: GUI * Vojtech Hajek: C# profiler