owned this note
owned this note
Published
Linked with GitHub
# Navigators Season 2: Growth Grants Proposal Template
## Title
Augmenting Mina O1JS with Performance Recording and Function-Level Profiling
## Project Background
Mina suffers from [memory leaks](https://github.com/o1-labs/o1js-bindings/issues/163), performance issues and lack of instrumentation and reporting on performance and testing of the codebase on multiple platforms.
The project aims to enhance the performance monitoring and testing infrastructure of mina o1js TypeScript application by integrating performance recording and function-level profiling into the standard build system. This will enable developers to identify performance bottlenecks and optimize their code more effectively with no setup costs. The current setup involves running tests using pnpm, but lacks detailed performance insights. This proposal seeks to address this gap by leveraging profiling tools like linux [perf](https://perf.wiki.kernel.org/index.php/Main_Page) for os level and clinicjs.org for javascript level profiling. There has been work in benchmarking [parts of the system](https://github.com/o1-labs/proof-systems/blob/master/kimchi/README.md?plain=1) but this proposal aims to target holistic improvement.
## Proposal Overview
This section should present a high-level overview and summary of the proposal. Each sub-section below should focus on the proposed change.
- **Problem:** Mina lacks detailed interactive performance insights, making it difficult to identify and address performance bottlenecks and understand the code execution.
- **Solution:** Integrate performance recording and function-level profiling using perf and clinic into the workflow and make it easy to use.
- **Impact:** This proposal will significantly enhance the Mina ecosystem by providing developers with improved tools for performance analysis, encouraging adoption, and attracting more users and developers. It will enable novel applications by facilitating better performance optimization.
- **Audience:** The target audience for this project includes developers and teams working on deploying Mina.
## Architecture & Design
The basic idea is to record and report on the execution of the mina o1js code during test and development time and also in production to improve resource usage.
- **Detailed Design/Architecture:**
* Detailed Design:
* Implement a lightweight perf recording mechanism around o1js without changing it using clinic and perf.
* Create workflow jobs to Publish and report and reprocess perf data in aggregate
* Share the work of performance profiling with users and have them share results
* Create recording of entire test runs and collect function information with stacktraces
* Using existing visualization tools like https://clinicjs.org and https://profiler.firefox.com/
* Publish Reports as static HTML on github pages and hugging face datasets
* Implement CI/CD integration for automated performance regression testing
* Documentation and Examples:
* Develop comprehensive documentation on using the new profiling features
* Create example projects demonstrating performance optimization techniques
- **Vision:** The long-term vision for this project is to create a robust testing framework that provides detailed performance insights, enabling developers to build highly optimized applications within the Mina ecosystem. It also will help extract knowledge from the o1js codebase for the following step, providing valuable intermediates, currently the performance of mina suffers from lack of key insights into where the performance is going. The introspective method of observing runtime and using this to drive attention to code changes is a forward thinking tactic. In the future we can reuse and or create plugins for popular IDEs (VS Code, Emacs, Vim) to visualize profiling data. We will upload and share the reports on huggging face and archive.org and ipfs etc.
- **Existing Work :**
* https://github.com/meta-introspector/o1js
* https://github.com/meta-introspector/mina-snarky-o1js-zkapp-introspector/
- **Production Timeline :** We will have versions in production continuously. We have first versions running and can demonstrate performance metrics being produced and delivered. We have identified issues to work on and improve. We will get users to adopt and test.
## Budget & milestones
This section should detail the deliverables at the end of the funding period, mid-point milestones, timeline and the budget requested. It should explain how the budget will be spent.
- **Deliverables**:
* O1JS Dockerfile/compose with profiling tools installed being delivered to github image repository ghcr
* Workflows with profiling commands, and reporting commands
* CI/CD integration
* Comprehensive documentation and examples
- **Mid-Point milestones:** What milestones would you aim to deliver half-way through.
- **Project Timeline :** 1M
- **Budget Requested :** 20,000 MINA
- **Budget Breakdown:**
* Development: 10,000 MINA
* Testing and QA: 10,000 MINA
* Reporting: 10,000 MINA
* Documentation: 6,000 MINA
* Contingency: 4,000 MINA
- **Wallet Address:** B62qqFdiPRuMuQQYYo131saW1fp4f72rKXLVy2KTQEtnJzg5Hz3SqEY
## Team Info
- **Proposer Github**: https://github.com/jmikedupont2
- **Proposer Experience**: The proposer has 30+ years experience with development, operations, configuration and deployment of large scale business and internet applications
- **Achievements**:
- https://github.com/Agent-Artificial/cellium-miner Created devops around petals p2p llm with github actions, terraform and aws infrastructure.
- https://github.com/jmikedupont2/ai-ticket/ Created github actions workflow to trigger calling autogpt and other agents in a github workflow in response to ticket events.
## Risks & Mitigations
- **Risks**:
* Integration issues with clincjs profiling and jest testing tools.
* Complexity of the typescript build system
* Getting debug symbols from remote machine
* Delivery of the results to user
- **Mitigations**:
* Usage of perf archive to pack up symbols
* Usage of accepted and standard tools for profiling nodejs