Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Introduce Event Timing Control Package with Throttling and Debouncing Mechanism #1166

Draft
wants to merge 12 commits into
base: main
Choose a base branch
from

Conversation

window9u
Copy link
Member

@window9u window9u commented Feb 22, 2025

This PR introduces a new rate-limiter component that implements both throttling and debouncing mechanisms. The key functionality of this component is to ensure that a provided callback function is executed at most once within a defined time window.

Key Behaviors:

  • Immediate Execution:
    The Execute() method attempts to run the provided callback immediately if the rate limiter allows it.

  • Delayed Execution:
    If immediate execution is not possible (i.e., if a token is not available), the function blocks until the next token is available, then executes the callback.

  • Debouncing:
    If there is already a pending callback, Execute() returns immediately without scheduling a new callback. This guarantees that after the final event, the callback will eventually be executed, ensuring eventual consistency.

For a visual explanation of how the component works, see the diagram below:
1.Execute(synchronous version)
image

Which issue(s) this PR fixes:
Addresses #1165

Special notes for your reviewer:

  • Intended Usage:

    • The Execute() method is ideal for scenarios like event-webhook where immediate execution is preferred.
    • The ExecuteOrSchedule() method is targeted for use in pubsub's DocChangedEvent.
    • But it could be changed as applying this.
  • Implementation Considerations:

    • When integrating this with event-webhook, a challenge arises in storing the rate limiter in memory.
    • While storing the limiter is straightforward, deciding when to delete it is more complex. Two options were considered:
      • Using an LRU cache (not strictly as a cache, but as a storage mechanism that ensures expiration).
      • Deleting it manually through a housekeeping job.
    • Due to the increasing complexity, these storage/expiration strategies are not included in this PR and will be addressed later.

Does this PR introduce a user-facing change?:

NONE

Additional documentation:


Checklist:

  • Added relevant tests or not required
  • Addressed and resolved all CodeRabbit review comments
  • Didn't break anything

Summary by CodeRabbit

  • New Features

    • Introduced a new throttling mechanism that smartly manages event execution by balancing immediate actions with scheduled calls. This enhancement improves performance under heavy loads and ensures controlled, consistent processing of rapid event bursts.
    • Added a new indirect dependency to enhance functionality.
  • Tests

    • Implemented a comprehensive test suite for the throttler, covering synchronous and asynchronous execution, error propagation, context cancellation, and rate limiting scenarios.

@window9u window9u requested a review from hackerwins February 22, 2025 09:50
@window9u window9u self-assigned this Feb 22, 2025
Copy link

coderabbitai bot commented Feb 22, 2025

Important

Review skipped

Draft detected.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Walkthrough

This update modifies the dependency management in the go.mod file by consolidating the required packages and adding a new indirect dependency. It also introduces a new throttling mechanism in the pkg/limit package through the addition of throttler.go, which implements a Throttler struct featuring methods for synchronous and asynchronous callback execution controlled by a rate limiter. A corresponding test suite in pkg/limit/throttler_test.go verifies the throttler's functionality under various conditions.

Changes

Files Change Summary
go.mod Updated dependency block: consolidated requirements by replacing the single-line entry for github.com/pierrec/lz4/v4 v4.1.15 with a block that now also includes the new indirect dependency golang.org/x/time v0.10.0.
pkg/limit/throttler.go, pkg/limit/throttler_test.go Added new throttler feature: introduced the Throttler struct with methods Execute and ExecuteOrSchedule for rate limiter–driven callback execution. Also added a comprehensive test suite covering synchronous execution, concurrent calls, error propagation, and context cancellation scenarios.

Sequence Diagram(s)

sequenceDiagram
    participant Client as Client
    participant Throttler as Throttler
    participant RateLimiter as RateLimiter
    participant Callback as Callback

    Client->>Throttler: Execute(callback)
    Throttler->>RateLimiter: Request token
    alt Token available immediately
        Throttler->>Callback: Execute callback
    else Token unavailable
        Throttler->>RateLimiter: Wait for token
        RateLimiter-->>Throttler: Token granted
        Throttler->>Callback: Execute callback after delay
    end
Loading
sequenceDiagram
    participant Client as Client
    participant Throttler as Throttler
    participant RateLimiter as RateLimiter
    participant Callback as Callback

    Client->>Throttler: ExecuteOrSchedule(callback)
    Throttler->>RateLimiter: Check token availability
    alt Immediate execution allowed
        Throttler->>Callback: Execute callback immediately
    else Immediate execution denied
        Throttler->>Throttler: Schedule callback for later
        Throttler->>RateLimiter: Wait for token
        RateLimiter-->>Throttler: Token granted
        Throttler->>Callback: Execute scheduled callback
    end
Loading

Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media?

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Generate unit testing code for this file.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai generate unit testing code for this file.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and generate unit testing code.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

Copy link

@hackerwins-yorkie hackerwins-yorkie left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Go Benchmark Analysis 📊

This is a comparison result between the previous(e687d61) and the current commit(d8cf598).

Significant Changes (≥20% difference)

Nothing

Key Observations 🔍

  • The following benchmark suites showed significant changes (≥20% difference) in their performance:
    • BenchmarkVersionVector for clients_1000 experienced a notable improvement with a decrease in the execution time by 1.18% and a reduction in memory allocation by 0.01%.
  • While there were no significant changes in other benchmark suites, several benchmarks showed slight improvements (🟢) or regressions (🔴) in performance, highlighting the ongoing optimization efforts in the codebase.
  • Overall, the benchmarks demonstrate consistent performance with minor fluctuations, indicating a stable and efficient implementation that can still benefit from occasional optimizations to maintain or enhance performance levels.

Detailed Test Results

BenchmarkDocument
Benchmark suite Previous Current Change
constructor_test/ (ns/op) 1439.00 ns 1440.00 ns 🔴 +0.07%
constructor_test/ (B/op) 1.39 KB 1.39 KB ⚪ 0%
constructor_test/ (allocs/op) 24 allocs 24 allocs ⚪ 0%
status_test/ (ns/op) 1028.00 ns 1020.00 ns 🟢 -0.78%
status_test/ (B/op) 1.35 KB 1.35 KB ⚪ 0%
status_test/ (allocs/op) 22 allocs 22 allocs ⚪ 0%
equals_test/ (ns/op) 7864.00 ns 7761.00 ns 🟢 -1.31%
equals_test/ (B/op) 7.56 KB 7.56 KB ⚪ 0%
equals_test/ (allocs/op) 129 allocs 129 allocs ⚪ 0%
nested_update_test/ (ns/op) 17079.00 ns 16805.00 ns 🟢 -1.60%
nested_update_test/ (B/op) 12.31 KB 12.31 KB ⚪ 0%
nested_update_test/ (allocs/op) 258 allocs 258 allocs ⚪ 0%
delete_test/ (ns/op) 27313.00 ns 26265.00 ns 🟢 -3.84%
delete_test/ (B/op) 15.79 KB 15.79 KB 🟢 -0.01%
delete_test/ (allocs/op) 339 allocs 339 allocs ⚪ 0%
object_test/ (ns/op) 8546.00 ns 8579.00 ns 🔴 +0.39%
object_test/ (B/op) 7.03 KB 7.03 KB 🔴 +0.01%
object_test/ (allocs/op) 118 allocs 118 allocs ⚪ 0%
array_test/ (ns/op) 28984.00 ns 28617.00 ns 🟢 -1.27%
array_test/ (B/op) 12.14 KB 12.14 KB ⚪ 0%
array_test/ (allocs/op) 273 allocs 273 allocs ⚪ 0%
text_test/ (ns/op) 32155.00 ns 31934.00 ns 🟢 -0.69%
text_test/ (B/op) 15.19 KB 15.19 KB ⚪ 0%
text_test/ (allocs/op) 484 allocs 484 allocs ⚪ 0%
text_composition_test/ (ns/op) 31674.00 ns 31689.00 ns 🔴 +0.05%
text_composition_test/ (B/op) 18.70 KB 18.70 KB ⚪ 0%
text_composition_test/ (allocs/op) 501 allocs 501 allocs ⚪ 0%
rich_text_test/ (ns/op) 87424.00 ns 86468.00 ns 🟢 -1.09%
rich_text_test/ (B/op) 39.36 KB 39.36 KB ⚪ 0%
rich_text_test/ (allocs/op) 1,146 allocs 1,146 allocs ⚪ 0%
counter_test/ (ns/op) 18201.00 ns 18087.00 ns 🟢 -0.63%
counter_test/ (B/op) 11.81 KB 11.81 KB ⚪ 0%
counter_test/ (allocs/op) 253 allocs 253 allocs ⚪ 0%
text_edit_gc_100/ (ns/op) 1.39 ms 1.38 ms 🟢 -0.43%
text_edit_gc_100/ (B/op) 864.90 KB 864.95 KB ⚪ 0%
text_edit_gc_100/ (allocs/op) 17,281 allocs 17,282 allocs ⚪ 0%
text_edit_gc_1000/ (ns/op) 53.39 ms 53.14 ms 🟢 -0.47%
text_edit_gc_1000/ (B/op) 46.84 MB 46.84 MB ⚪ 0%
text_edit_gc_1000/ (allocs/op) 185,598 allocs 185,591 allocs ⚪ 0%
text_split_gc_100/ (ns/op) 2.12 ms 2.11 ms 🟢 -0.50%
text_split_gc_100/ (B/op) 1.58 MB 1.58 MB ⚪ 0%
text_split_gc_100/ (allocs/op) 15,950 allocs 15,951 allocs ⚪ 0%
text_split_gc_1000/ (ns/op) 128.25 ms 127.50 ms 🟢 -0.58%
text_split_gc_1000/ (B/op) 137.79 MB 137.79 MB ⚪ 0%
text_split_gc_1000/ (allocs/op) 185,000 allocs 185,004 allocs ⚪ 0%
text_delete_all_10000/ (ns/op) 18.43 ms 16.35 ms 🟢 -11.29%
text_delete_all_10000/ (B/op) 10.58 MB 10.58 MB 🔴 +0.02%
text_delete_all_10000/ (allocs/op) 56,134 allocs 56,140 allocs 🔴 +0.01%
text_delete_all_100000/ (ns/op) 312.31 ms 276.68 ms 🟢 -11.41%
text_delete_all_100000/ (B/op) 105.54 MB 105.52 MB 🟢 -0.02%
text_delete_all_100000/ (allocs/op) 566,133 allocs 566,066 allocs 🟢 -0.01%
text_100/ (ns/op) 234634.00 ns 232480.00 ns 🟢 -0.92%
text_100/ (B/op) 120.94 KB 120.91 KB 🟢 -0.03%
text_100/ (allocs/op) 5,181 allocs 5,181 allocs ⚪ 0%
text_1000/ (ns/op) 2.46 ms 2.46 ms 🟢 -0.19%
text_1000/ (B/op) 1.16 MB 1.16 MB ⚪ 0%
text_1000/ (allocs/op) 51,084 allocs 51,084 allocs ⚪ 0%
array_1000/ (ns/op) 1.24 ms 1.23 ms 🟢 -0.56%
array_1000/ (B/op) 1.09 MB 1.09 MB ⚪ 0%
array_1000/ (allocs/op) 11,879 allocs 11,879 allocs ⚪ 0%
array_10000/ (ns/op) 13.33 ms 13.29 ms 🟢 -0.35%
array_10000/ (B/op) 9.89 MB 9.89 MB 🟢 -0.02%
array_10000/ (allocs/op) 120,735 allocs 120,729 allocs ⚪ 0%
array_gc_100/ (ns/op) 131750.00 ns 132133.00 ns 🔴 +0.29%
array_gc_100/ (B/op) 99.89 KB 99.88 KB 🟢 -0.02%
array_gc_100/ (allocs/op) 1,266 allocs 1,266 allocs ⚪ 0%
array_gc_1000/ (ns/op) 1.42 ms 1.42 ms 🟢 -0.30%
array_gc_1000/ (B/op) 1.14 MB 1.14 MB ⚪ 0%
array_gc_1000/ (allocs/op) 12,926 allocs 12,927 allocs ⚪ 0%
counter_1000/ (ns/op) 202098.00 ns 201524.00 ns 🟢 -0.28%
counter_1000/ (B/op) 178.13 KB 178.14 KB ⚪ 0%
counter_1000/ (allocs/op) 5,771 allocs 5,771 allocs ⚪ 0%
counter_10000/ (ns/op) 2.17 ms 2.16 ms 🟢 -0.50%
counter_10000/ (B/op) 2.07 MB 2.07 MB ⚪ 0%
counter_10000/ (allocs/op) 59,778 allocs 59,778 allocs ⚪ 0%
object_1000/ (ns/op) 1.39 ms 1.39 ms 🔴 +0.13%
object_1000/ (B/op) 1.44 MB 1.44 MB ⚪ 0%
object_1000/ (allocs/op) 9,925 allocs 9,924 allocs 🟢 -0.01%
object_10000/ (ns/op) 14.82 ms 14.57 ms 🟢 -1.69%
object_10000/ (B/op) 12.35 MB 12.35 MB ⚪ 0%
object_10000/ (allocs/op) 101,232 allocs 101,237 allocs ⚪ 0%
tree_100/ (ns/op) 1.02 ms 1.02 ms 🟢 -0.57%
tree_100/ (B/op) 951.02 KB 951.03 KB ⚪ 0%
tree_100/ (allocs/op) 6,102 allocs 6,102 allocs ⚪ 0%
tree_1000/ (ns/op) 74.23 ms 74.53 ms 🔴 +0.40%
tree_1000/ (B/op) 86.58 MB 86.58 MB ⚪ 0%
tree_1000/ (allocs/op) 60,111 allocs 60,112 allocs ⚪ 0%
tree_10000/ (ns/op) 9.68 s 9.37 s 🟢 -3.21%
tree_10000/ (B/op) 8.58 GB 8.58 GB ⚪ 0%
tree_10000/ (allocs/op) 600,173 allocs 600,200 allocs ⚪ 0%
tree_delete_all_1000/ (ns/op) 78.41 ms 79.33 ms 🔴 +1.17%
tree_delete_all_1000/ (B/op) 87.57 MB 87.57 MB ⚪ 0%
tree_delete_all_1000/ (allocs/op) 75,289 allocs 75,291 allocs ⚪ 0%
tree_edit_gc_100/ (ns/op) 3.96 ms 3.88 ms 🟢 -1.94%
tree_edit_gc_100/ (B/op) 4.15 MB 4.15 MB ⚪ 0%
tree_edit_gc_100/ (allocs/op) 15,147 allocs 15,146 allocs ⚪ 0%
tree_edit_gc_1000/ (ns/op) 332.75 ms 318.75 ms 🟢 -4.21%
tree_edit_gc_1000/ (B/op) 384.04 MB 384.04 MB ⚪ 0%
tree_edit_gc_1000/ (allocs/op) 154,952 allocs 154,947 allocs ⚪ 0%
tree_split_gc_100/ (ns/op) 2.67 ms 2.65 ms 🟢 -0.72%
tree_split_gc_100/ (B/op) 2.41 MB 2.41 MB ⚪ 0%
tree_split_gc_100/ (allocs/op) 11,131 allocs 11,131 allocs ⚪ 0%
tree_split_gc_1000/ (ns/op) 197.74 ms 197.46 ms 🟢 -0.14%
tree_split_gc_1000/ (B/op) 222.50 MB 222.50 MB ⚪ 0%
tree_split_gc_1000/ (allocs/op) 122,053 allocs 122,073 allocs 🔴 +0.02%
BenchmarkRPC
Benchmark suite Previous Current Change
client_to_server/ (ns/op) 431.85 ms 419.06 ms 🟢 -2.96%
client_to_server/ (B/op) 16.13 MB 16.13 MB 🔴 +0.01%
client_to_server/ (allocs/op) 223,674 allocs 223,558 allocs 🟢 -0.05%
client_to_client_via_server/ (ns/op) 788.62 ms 782.83 ms 🟢 -0.73%
client_to_client_via_server/ (B/op) 37.20 MB 39.02 MB 🔴 +4.90%
client_to_client_via_server/ (allocs/op) 478,656 allocs 477,760 allocs 🟢 -0.19%
attach_large_document/ (ns/op) 1.32 s 1.28 s 🟢 -2.98%
attach_large_document/ (B/op) 1.89 GB 1.90 GB 🔴 +0.56%
attach_large_document/ (allocs/op) 12,321 allocs 12,662 allocs 🔴 +2.77%
adminCli_to_server/ (ns/op) 542.08 ms 542.43 ms 🔴 +0.06%
adminCli_to_server/ (B/op) 21.76 MB 21.30 MB 🟢 -2.11%
adminCli_to_server/ (allocs/op) 291,952 allocs 316,690 allocs 🔴 +8.47%
BenchmarkLocker
Benchmark suite Previous Current Change
(ns/op) 82.86 ns 80.69 ns 🟢 -2.62%
(B/op) 32.00 B 32.00 B ⚪ 0%
(allocs/op) 1 allocs 1 allocs ⚪ 0%
BenchmarkLockerParallel
Benchmark suite Previous Current Change
(ns/op) 45.80 ns 44.64 ns 🟢 -2.53%
(B/op) 0.00 B 0.00 B ⚪ 0%
(allocs/op) 0 allocs 0 allocs ⚪ 0%
BenchmarkLockerMoreKeys
Benchmark suite Previous Current Change
(ns/op) 180.50 ns 179.40 ns 🟢 -0.61%
(B/op) 31.00 B 30.00 B 🟢 -3.23%
(allocs/op) 0 allocs 0 allocs ⚪ 0%
BenchmarkRWLocker
Benchmark suite Previous Current Change
RWLock_rate_2/ (ns/op) 50.25 ns 49.30 ns 🟢 -1.89%
RWLock_rate_2/ (B/op) 0.00 B 0.00 B ⚪ 0%
RWLock_rate_2/ (allocs/op) 0 allocs 0 allocs ⚪ 0%
RWLock_rate_10/ (ns/op) 44.88 ns 42.58 ns 🟢 -5.12%
RWLock_rate_10/ (B/op) 0.00 B 0.00 B ⚪ 0%
RWLock_rate_10/ (allocs/op) 0 allocs 0 allocs ⚪ 0%
RWLock_rate_100/ (ns/op) 63.08 ns 59.00 ns 🟢 -6.47%
RWLock_rate_100/ (B/op) 2.00 B 2.00 B ⚪ 0%
RWLock_rate_100/ (allocs/op) 0 allocs 0 allocs ⚪ 0%
RWLock_rate_1000/ (ns/op) 91.91 ns 87.07 ns 🟢 -5.27%
RWLock_rate_1000/ (B/op) 8.00 B 8.00 B ⚪ 0%
RWLock_rate_1000/ (allocs/op) 0 allocs 0 allocs ⚪ 0%
BenchmarkChange
Benchmark suite Previous Current Change
Push_10_Changes/ (ns/op) 4.54 ms 4.51 ms 🟢 -0.66%
Push_10_Changes/ (B/op) 150.42 KB 150.52 KB 🔴 +0.07%
Push_10_Changes/ (allocs/op) 1,623 allocs 1,623 allocs ⚪ 0%
Push_100_Changes/ (ns/op) 16.52 ms 16.49 ms 🟢 -0.18%
Push_100_Changes/ (B/op) 770.59 KB 779.02 KB 🔴 +1.09%
Push_100_Changes/ (allocs/op) 8,509 allocs 8,509 allocs ⚪ 0%
Push_1000_Changes/ (ns/op) 129.20 ms 131.66 ms 🔴 +1.91%
Push_1000_Changes/ (B/op) 7.22 MB 7.31 MB 🔴 +1.32%
Push_1000_Changes/ (allocs/op) 79,325 allocs 79,324 allocs ⚪ 0%
Pull_10_Changes/ (ns/op) 3.70 ms 3.69 ms 🟢 -0.42%
Pull_10_Changes/ (B/op) 124.59 KB 124.80 KB 🔴 +0.17%
Pull_10_Changes/ (allocs/op) 1,456 allocs 1,456 allocs ⚪ 0%
Pull_100_Changes/ (ns/op) 5.32 ms 5.25 ms 🟢 -1.49%
Pull_100_Changes/ (B/op) 354.61 KB 354.84 KB 🔴 +0.06%
Pull_100_Changes/ (allocs/op) 5,182 allocs 5,181 allocs 🟢 -0.02%
Pull_1000_Changes/ (ns/op) 10.88 ms 10.69 ms 🟢 -1.67%
Pull_1000_Changes/ (B/op) 2.20 MB 2.20 MB ⚪ 0%
Pull_1000_Changes/ (allocs/op) 44,681 allocs 44,683 allocs ⚪ 0%
BenchmarkSnapshot
Benchmark suite Previous Current Change
Push_3KB_snapshot/ (ns/op) 19.55 ms 18.99 ms 🟢 -2.88%
Push_3KB_snapshot/ (B/op) 905.58 KB 903.70 KB 🟢 -0.21%
Push_3KB_snapshot/ (allocs/op) 8,516 allocs 8,512 allocs 🟢 -0.05%
Push_30KB_snapshot/ (ns/op) 132.18 ms 137.19 ms 🔴 +3.79%
Push_30KB_snapshot/ (B/op) 8.24 MB 8.25 MB 🔴 +0.13%
Push_30KB_snapshot/ (allocs/op) 89,008 allocs 89,960 allocs 🔴 +1.07%
Pull_3KB_snapshot/ (ns/op) 7.80 ms 7.43 ms 🟢 -4.82%
Pull_3KB_snapshot/ (B/op) 1.12 MB 1.12 MB 🔴 +0.04%
Pull_3KB_snapshot/ (allocs/op) 20,064 allocs 20,066 allocs ⚪ 0%
Pull_30KB_snapshot/ (ns/op) 19.91 ms 19.65 ms 🟢 -1.33%
Pull_30KB_snapshot/ (B/op) 9.31 MB 9.31 MB 🔴 +0.02%
Pull_30KB_snapshot/ (allocs/op) 193,610 allocs 193,605 allocs ⚪ 0%
BenchmarkSplayTree
Benchmark suite Previous Current Change
stress_test_100000/ (ns/op) 0.19 ns 0.19 ns 🟢 -2.48%
stress_test_100000/ (B/op) 0.00 B 0.00 B ⚪ 0%
stress_test_100000/ (allocs/op) 0 allocs 0 allocs ⚪ 0%
stress_test_200000/ (ns/op) 0.40 ns 0.37 ns 🟢 -5.47%
stress_test_200000/ (B/op) 0.00 B 0.00 B ⚪ 0%
stress_test_200000/ (allocs/op) 0 allocs 0 allocs ⚪ 0%
stress_test_300000/ (ns/op) 0.57 ns 0.57 ns 🟢 -0.28%
stress_test_300000/ (B/op) 0.00 B 0.00 B ⚪ 0%
stress_test_300000/ (allocs/op) 0 allocs 0 allocs ⚪ 0%
random_access_100000/ (ns/op) 0.01 ns 0.01 ns 🟢 -1.65%
random_access_100000/ (B/op) 0.00 B 0.00 B ⚪ 0%
random_access_100000/ (allocs/op) 0 allocs 0 allocs ⚪ 0%
random_access_200000/ (ns/op) 0.03 ns 0.03 ns 🟢 -2.83%
random_access_200000/ (B/op) 0.00 B 0.00 B ⚪ 0%
random_access_200000/ (allocs/op) 0 allocs 0 allocs ⚪ 0%
random_access_300000/ (ns/op) 0.04 ns 0.04 ns 🟢 -4.57%
random_access_300000/ (B/op) 0.00 B 0.00 B ⚪ 0%
random_access_300000/ (allocs/op) 0 allocs 0 allocs ⚪ 0%
editing_trace_bench/ (ns/op) 0.00 ns 0.00 ns 🟢 -9.27%
editing_trace_bench/ (B/op) 0.00 B 0.00 B ⚪ 0%
editing_trace_bench/ (allocs/op) 0 allocs 0 allocs ⚪ 0%
BenchmarkSync
Benchmark suite Previous Current Change
memory_sync_10_test/ (ns/op) 7288.00 ns 7183.00 ns 🟢 -1.44%
memory_sync_10_test/ (B/op) 1.34 KB 1.34 KB 🔴 +0.07%
memory_sync_10_test/ (allocs/op) 35 allocs 35 allocs ⚪ 0%
memory_sync_100_test/ (ns/op) 55353.00 ns 55409.00 ns 🔴 +0.10%
memory_sync_100_test/ (B/op) 9.51 KB 9.51 KB 🔴 +0.03%
memory_sync_100_test/ (allocs/op) 268 allocs 268 allocs ⚪ 0%
memory_sync_1000_test/ (ns/op) 616285.00 ns 615204.00 ns 🟢 -0.18%
memory_sync_1000_test/ (B/op) 75.92 KB 75.73 KB 🟢 -0.25%
memory_sync_1000_test/ (allocs/op) 2,111 allocs 2,105 allocs 🟢 -0.28%
memory_sync_10000_test/ (ns/op) 7.47 ms 7.76 ms 🔴 +3.85%
memory_sync_10000_test/ (B/op) 761.49 KB 762.99 KB 🔴 +0.20%
memory_sync_10000_test/ (allocs/op) 20,475 allocs 20,512 allocs 🔴 +0.18%
BenchmarkTextEditing
Benchmark suite Previous Current Change
(ns/op) 5.18 s 5.11 s 🟢 -1.28%
(B/op) 3.92 GB 3.92 GB ⚪ 0%
(allocs/op) 20,619,777 allocs 20,619,802 allocs ⚪ 0%
BenchmarkTree
Benchmark suite Previous Current Change
10000_vertices_to_protobuf/ (ns/op) 4.17 ms 4.25 ms 🔴 +1.87%
10000_vertices_to_protobuf/ (B/op) 6.36 MB 6.36 MB ⚪ 0%
10000_vertices_to_protobuf/ (allocs/op) 70,025 allocs 70,025 allocs ⚪ 0%
10000_vertices_from_protobuf/ (ns/op) 217.30 ms 226.86 ms 🔴 +4.40%
10000_vertices_from_protobuf/ (B/op) 442.30 MB 442.30 MB ⚪ 0%
10000_vertices_from_protobuf/ (allocs/op) 290,038 allocs 290,039 allocs ⚪ 0%
20000_vertices_to_protobuf/ (ns/op) 8.84 ms 9.26 ms 🔴 +4.81%
20000_vertices_to_protobuf/ (B/op) 12.89 MB 12.89 MB ⚪ 0%
20000_vertices_to_protobuf/ (allocs/op) 140,028 allocs 140,028 allocs ⚪ 0%
20000_vertices_from_protobuf/ (ns/op) 884.61 ms 894.81 ms 🔴 +1.15%
20000_vertices_from_protobuf/ (B/op) 1.70 GB 1.70 GB ⚪ 0%
20000_vertices_from_protobuf/ (allocs/op) 580,043 allocs 580,045 allocs ⚪ 0%
30000_vertices_to_protobuf/ (ns/op) 14.26 ms 13.54 ms 🟢 -5.03%
30000_vertices_to_protobuf/ (B/op) 18.98 MB 18.98 MB ⚪ 0%
30000_vertices_to_protobuf/ (allocs/op) 210,029 allocs 210,029 allocs ⚪ 0%
30000_vertices_from_protobuf/ (ns/op) 2.00 s 2.03 s 🔴 +1.63%
30000_vertices_from_protobuf/ (B/op) 3.75 GB 3.75 GB ⚪ 0%
30000_vertices_from_protobuf/ (allocs/op) 870,147 allocs 870,142 allocs ⚪ 0%
BenchmarkVersionVector
Benchmark suite Previous Current Change
clients_10/ (ns/op) 160.21 ms 160.66 ms 🔴 +0.28%
clients_10/ (1_changepack(bytes)) 745.00 B 745.00 B ⚪ 0%
clients_10/ (2_snapshot(bytes)) 379.00 B 379.00 B ⚪ 0%
clients_10/ (3_pushpull(ms)) 8.00 ms 7.00 ms 🟢 -12.50%
clients_10/ (4_attach(ms)) 6.00 ms 6.00 ms ⚪ 0%
clients_10/ (5_changepack_after_detach(bytes)) 805.00 B 805.00 B ⚪ 0%
clients_10/ (6_snapshot_after_detach(bytes)) 136.00 B 136.00 B ⚪ 0%
clients_10/ (7_pushpull_after_detach(ms)) 8.00 ms 8.00 ms ⚪ 0%
clients_10/ (B/op) 19.93 MB 18.28 MB 🟢 -8.26%
clients_10/ (allocs/op) 83,762 allocs 83,724 allocs 🟢 -0.05%
clients_100/ (ns/op) 1.41 s 1.43 s 🔴 +1.30%
clients_100/ (1_changepack(bytes)) 6.14 KB 6.14 KB ⚪ 0%
clients_100/ (2_snapshot(bytes)) 3.08 KB 3.08 KB ⚪ 0%
clients_100/ (3_pushpull(ms)) 11.00 ms 11.00 ms ⚪ 0%
clients_100/ (4_attach(ms)) 11.00 ms 11.00 ms ⚪ 0%
clients_100/ (5_changepack_after_detach(bytes)) 6.21 KB 6.21 KB ⚪ 0%
clients_100/ (6_snapshot_after_detach(bytes)) 137.00 B 137.00 B ⚪ 0%
clients_100/ (7_pushpull_after_detach(ms)) 9.00 ms 9.00 ms ⚪ 0%
clients_100/ (B/op) 230.31 MB 231.20 MB 🔴 +0.39%
clients_100/ (allocs/op) 1,539,768 allocs 1,539,883 allocs ⚪ 0%
clients_1000/ (ns/op) 60.97 s 60.25 s 🟢 -1.18%
clients_1000/ (1_changepack(bytes)) 60.16 KB 60.16 KB ⚪ 0%
clients_1000/ (2_snapshot(bytes)) 30.08 KB 30.08 KB ⚪ 0%
clients_1000/ (3_pushpull(ms)) 95.00 ms 94.00 ms 🟢 -1.05%
clients_1000/ (4_attach(ms)) 249.00 ms 216.00 ms 🟢 -13.25%
clients_1000/ (5_changepack_after_detach(bytes)) 60.22 KB 60.22 KB ⚪ 0%
clients_1000/ (6_snapshot_after_detach(bytes)) 139.00 B 139.00 B ⚪ 0%
clients_1000/ (7_pushpull_after_detach(ms)) 26.00 ms 23.00 ms 🟢 -11.54%
clients_1000/ (B/op) 22.07 GB 22.07 GB ⚪ 0%
clients_1000/ (allocs/op) 111,762,106 allocs 111,757,974 allocs ⚪ 0%

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🧹 Nitpick comments (3)
pkg/throttle/throttler.go (2)

17-18: Enhance package documentation.

The package documentation is minimal. Consider adding more details about the package's purpose, usage examples, and common use cases.

Apply this diff to improve the documentation:

-// Package throttle provide event timing control components
+// Package throttle provides event timing control components for managing callback execution rates.
+// It implements throttling and debouncing mechanisms to ensure that callbacks are executed
+// at most once within a specified time window, while maintaining eventual consistency.
+//
+// Example usage:
+//
+//	th := throttle.New(time.Second)
+//	
+//	// For synchronous execution with blocking
+//	err := th.Execute(ctx, func() error {
+//	    // your callback logic here
+//	    return nil
+//	})
+//	
+//	// For asynchronous execution without blocking
+//	th.ExecuteOrSchedule(func() {
+//	    // your callback logic here
+//	})

32-35: Consider adding methods to check throttler state.

The Throttler struct could benefit from methods to check its current state, such as whether it's currently throttled or has pending callbacks.

Consider adding these methods:

// IsPending returns true if there is a pending callback.
func (t *Throttler) IsPending() bool {
    return atomic.LoadInt32(&t.pending) == 1
}

// IsThrottled returns true if the rate limiter would not allow an immediate execution.
func (t *Throttler) IsThrottled() bool {
    return !t.lim.Allow()
}
pkg/throttle/throttler_test.go (1)

32-62: Add edge case tests for window duration.

The test suite should include tests for edge cases like zero or negative window durations.

Add these test cases:

func TestNewWithInvalidWindow(t *testing.T) {
    t.Run("zero window duration", func(t *testing.T) {
        th := New(0)
        assert.NotNil(t, th)
        assert.NotNil(t, th.lim)
    })

    t.Run("negative window duration", func(t *testing.T) {
        th := New(-time.Second)
        assert.NotNil(t, th)
        assert.NotNil(t, th.lim)
    })
}
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 5299469 and 7386170.

⛔ Files ignored due to path filters (1)
  • go.sum is excluded by !**/*.sum
📒 Files selected for processing (3)
  • go.mod (1 hunks)
  • pkg/throttle/throttler.go (1 hunks)
  • pkg/throttle/throttler_test.go (1 hunks)
⏰ Context from checks skipped due to timeout of 90000ms (2)
  • GitHub Check: build
  • GitHub Check: bench
🔇 Additional comments (1)
go.mod (1)

3-3:

✅ Verification successful

Verify Go version compatibility.

The module requires Go 1.23, which is not yet released. The latest stable version is Go 1.22.


🌐 Web query:

What is the latest stable version of Go?

💡 Result:

The latest stable version of Go is 1.24.0, released on February 11, 2025[3][8]. This release follows the standard six-month cadence for major Go updates[6][8].

Key details about current Go versions:

  • Go 1.24 (released Feb 11, 2025)
    Actively supported with security and bug fixes[3][4]
  • Go 1.23 (released Aug 13, 2024)
    Still supported with latest patch version 1.23.6 (Feb 4, 2025)[3][4]
  • Go 1.22 (released Feb 6, 2024)
    Support ended Feb 11, 2025[3]

The Go team maintains a policy where each major release receives official support until two subsequent major releases appear[3][4]. Users are encouraged to upgrade to supported versions to receive security updates and critical bug fixes automatically through Go's toolchain management system introduced in Go 1.21[2][6].

Citations:


Action: Validate the Go version requirement in go.mod

The go.mod file now specifies:

go 1.23

Based on the latest release information, Go 1.23 was released on August 13, 2024 and is still supported (with patch version 1.23.6 released in February 2025). Although the most recent stable version is now Go 1.24.0, using Go 1.23 remains valid. You may consider upgrading to 1.24 to benefit from the latest features and improvements, but there is no immediate compatibility issue with retaining Go 1.23.

- wait goroutine done in test
- use const
- use wait group
Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

🧹 Nitpick comments (3)
pkg/limit/throttler.go (2)

29-44: Add input validation and consider using constants for atomic values.

The implementation looks good, but consider these improvements:

  1. Add validation for non-negative window duration
  2. Use constants for atomic values to improve readability
+const (
+    notPending int32 = 0
+    pending    int32 = 1
+)

 func New(window time.Duration) *Throttler {
+    if window <= 0 {
+        panic("window duration must be positive")
+    }
     dt := &Throttler{
         lim:     rate.NewLimiter(rate.Every(window), 1),
-        pending: 0,
+        pending: notPending,
     }
     return dt
 }

46-66: Improve error handling in Execute method.

The error handling looks good, but consider wrapping the callback error for better error context:

 func (t *Throttler) Execute(ctx context.Context, callback func() error) error {
     if t.lim.Allow() {
-        return callback()
+        if err := callback(); err != nil {
+            return fmt.Errorf("execute immediate callback: %w", err)
+        }
+        return nil
     }

     if !atomic.CompareAndSwapInt32(&t.pending, 0, 1) {
         return nil
     }

     if err := t.lim.Wait(ctx); err != nil {
         return fmt.Errorf("wait for limiter: %w", err)
     }

     atomic.StoreInt32(&t.pending, 0)
-    return callback()
+    if err := callback(); err != nil {
+        return fmt.Errorf("execute delayed callback: %w", err)
+    }
+    return nil
 }
pkg/limit/throttler_test.go (1)

31-63: Add edge cases to TestSynchronousExecute.

Consider adding these test cases:

  1. Zero duration window
  2. Negative duration window
  3. Nil callback function
 func TestSynchronousExecute(t *testing.T) {
+    t.Run("Zero duration window panics", func(t *testing.T) {
+        assert.Panics(t, func() {
+            New(0)
+        })
+    })
+
+    t.Run("Negative duration window panics", func(t *testing.T) {
+        assert.Panics(t, func() {
+            New(-time.Millisecond)
+        })
+    })
+
+    t.Run("Nil callback panics", func(t *testing.T) {
+        th := New(throttleWindow)
+        assert.Panics(t, func() {
+            th.Execute(context.Background(), nil)
+        })
+    })
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 7386170 and f7b9d6d.

📒 Files selected for processing (2)
  • pkg/limit/throttler.go (1 hunks)
  • pkg/limit/throttler_test.go (1 hunks)
⏰ Context from checks skipped due to timeout of 90000ms (2)
  • GitHub Check: bench
  • GitHub Check: build

Copy link

@hackerwins-yorkie hackerwins-yorkie left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Go Benchmark Analysis 📊

This is a comparison result between the previous(e687d61) and the current commit(71e15d1).

Significant Changes (≥20% difference)

Benchmark suite Previous Current Change
BenchmarkRWLocker/RWLock_rate_100/ (B/op) 2.00 B 1.00 B 🟢 -50.00%

Key Observations 🔍

  • The benchmark suite BenchmarkRWLocker/RWLock_rate_100/ showed a significant decrease of -50.00% in the number of bytes processed per operation, indicating an improvement in efficiency.
  • Across different benchmark suites, there are generally minor fluctuations in performance, with some benchmarks showing slight improvements while others exhibit minimal declines. No major outliers or consistent trends are evident from the data provided.

Detailed Test Results

BenchmarkDocument
Benchmark suite Previous Current Change
constructor_test/ (ns/op) 1439.00 ns 1423.00 ns 🟢 -1.11%
constructor_test/ (B/op) 1.39 KB 1.39 KB ⚪ 0%
constructor_test/ (allocs/op) 24 allocs 24 allocs ⚪ 0%
status_test/ (ns/op) 1028.00 ns 1019.00 ns 🟢 -0.88%
status_test/ (B/op) 1.35 KB 1.35 KB ⚪ 0%
status_test/ (allocs/op) 22 allocs 22 allocs ⚪ 0%
equals_test/ (ns/op) 7864.00 ns 7737.00 ns 🟢 -1.61%
equals_test/ (B/op) 7.56 KB 7.56 KB ⚪ 0%
equals_test/ (allocs/op) 129 allocs 129 allocs ⚪ 0%
nested_update_test/ (ns/op) 17079.00 ns 16812.00 ns 🟢 -1.56%
nested_update_test/ (B/op) 12.31 KB 12.31 KB ⚪ 0%
nested_update_test/ (allocs/op) 258 allocs 258 allocs ⚪ 0%
delete_test/ (ns/op) 27313.00 ns 26808.00 ns 🟢 -1.85%
delete_test/ (B/op) 15.79 KB 15.79 KB ⚪ 0%
delete_test/ (allocs/op) 339 allocs 339 allocs ⚪ 0%
object_test/ (ns/op) 8546.00 ns 8489.00 ns 🟢 -0.67%
object_test/ (B/op) 7.03 KB 7.03 KB ⚪ 0%
object_test/ (allocs/op) 118 allocs 118 allocs ⚪ 0%
array_test/ (ns/op) 28984.00 ns 28425.00 ns 🟢 -1.93%
array_test/ (B/op) 12.14 KB 12.14 KB ⚪ 0%
array_test/ (allocs/op) 273 allocs 273 allocs ⚪ 0%
text_test/ (ns/op) 32155.00 ns 31758.00 ns 🟢 -1.23%
text_test/ (B/op) 15.19 KB 15.19 KB ⚪ 0%
text_test/ (allocs/op) 484 allocs 484 allocs ⚪ 0%
text_composition_test/ (ns/op) 31674.00 ns 31438.00 ns 🟢 -0.75%
text_composition_test/ (B/op) 18.70 KB 18.70 KB ⚪ 0%
text_composition_test/ (allocs/op) 501 allocs 501 allocs ⚪ 0%
rich_text_test/ (ns/op) 87424.00 ns 85834.00 ns 🟢 -1.82%
rich_text_test/ (B/op) 39.36 KB 39.36 KB ⚪ 0%
rich_text_test/ (allocs/op) 1,146 allocs 1,146 allocs ⚪ 0%
counter_test/ (ns/op) 18201.00 ns 18089.00 ns 🟢 -0.62%
counter_test/ (B/op) 11.81 KB 11.81 KB ⚪ 0%
counter_test/ (allocs/op) 253 allocs 253 allocs ⚪ 0%
text_edit_gc_100/ (ns/op) 1.39 ms 1.39 ms 🔴 +0.32%
text_edit_gc_100/ (B/op) 864.90 KB 864.86 KB ⚪ 0%
text_edit_gc_100/ (allocs/op) 17,281 allocs 17,282 allocs ⚪ 0%
text_edit_gc_1000/ (ns/op) 53.39 ms 52.83 ms 🟢 -1.04%
text_edit_gc_1000/ (B/op) 46.84 MB 46.84 MB ⚪ 0%
text_edit_gc_1000/ (allocs/op) 185,598 allocs 185,590 allocs ⚪ 0%
text_split_gc_100/ (ns/op) 2.12 ms 2.11 ms 🟢 -0.65%
text_split_gc_100/ (B/op) 1.58 MB 1.58 MB ⚪ 0%
text_split_gc_100/ (allocs/op) 15,950 allocs 15,951 allocs ⚪ 0%
text_split_gc_1000/ (ns/op) 128.25 ms 127.47 ms 🟢 -0.60%
text_split_gc_1000/ (B/op) 137.79 MB 137.79 MB ⚪ 0%
text_split_gc_1000/ (allocs/op) 185,000 allocs 184,998 allocs ⚪ 0%
text_delete_all_10000/ (ns/op) 18.43 ms 16.82 ms 🟢 -8.75%
text_delete_all_10000/ (B/op) 10.58 MB 10.58 MB ⚪ 0%
text_delete_all_10000/ (allocs/op) 56,134 allocs 56,134 allocs ⚪ 0%
text_delete_all_100000/ (ns/op) 312.31 ms 282.78 ms 🟢 -9.45%
text_delete_all_100000/ (B/op) 105.54 MB 105.51 MB 🟢 -0.03%
text_delete_all_100000/ (allocs/op) 566,133 allocs 566,061 allocs 🟢 -0.01%
text_100/ (ns/op) 234634.00 ns 242903.00 ns 🔴 +3.52%
text_100/ (B/op) 120.94 KB 120.91 KB 🟢 -0.03%
text_100/ (allocs/op) 5,181 allocs 5,181 allocs ⚪ 0%
text_1000/ (ns/op) 2.46 ms 2.53 ms 🔴 +2.85%
text_1000/ (B/op) 1.16 MB 1.16 MB 🔴 +0.03%
text_1000/ (allocs/op) 51,084 allocs 51,084 allocs ⚪ 0%
array_1000/ (ns/op) 1.24 ms 1.30 ms 🔴 +5.05%
array_1000/ (B/op) 1.09 MB 1.09 MB ⚪ 0%
array_1000/ (allocs/op) 11,879 allocs 11,879 allocs ⚪ 0%
array_10000/ (ns/op) 13.33 ms 13.38 ms 🔴 +0.37%
array_10000/ (B/op) 9.89 MB 9.89 MB ⚪ 0%
array_10000/ (allocs/op) 120,735 allocs 120,734 allocs ⚪ 0%
array_gc_100/ (ns/op) 131750.00 ns 137737.00 ns 🔴 +4.54%
array_gc_100/ (B/op) 99.89 KB 99.88 KB 🟢 -0.01%
array_gc_100/ (allocs/op) 1,266 allocs 1,266 allocs ⚪ 0%
array_gc_1000/ (ns/op) 1.42 ms 1.47 ms 🔴 +3.84%
array_gc_1000/ (B/op) 1.14 MB 1.14 MB ⚪ 0%
array_gc_1000/ (allocs/op) 12,926 allocs 12,926 allocs ⚪ 0%
counter_1000/ (ns/op) 202098.00 ns 210307.00 ns 🔴 +4.06%
counter_1000/ (B/op) 178.13 KB 178.13 KB ⚪ 0%
counter_1000/ (allocs/op) 5,771 allocs 5,771 allocs ⚪ 0%
counter_10000/ (ns/op) 2.17 ms 2.20 ms 🔴 +1.29%
counter_10000/ (B/op) 2.07 MB 2.07 MB ⚪ 0%
counter_10000/ (allocs/op) 59,778 allocs 59,778 allocs ⚪ 0%
object_1000/ (ns/op) 1.39 ms 1.46 ms 🔴 +5.22%
object_1000/ (B/op) 1.44 MB 1.44 MB 🔴 +0.01%
object_1000/ (allocs/op) 9,925 allocs 9,925 allocs ⚪ 0%
object_10000/ (ns/op) 14.82 ms 14.54 ms 🟢 -1.89%
object_10000/ (B/op) 12.35 MB 12.35 MB 🟢 -0.02%
object_10000/ (allocs/op) 101,232 allocs 101,224 allocs ⚪ 0%
tree_100/ (ns/op) 1.02 ms 1.07 ms 🔴 +5.14%
tree_100/ (B/op) 951.02 KB 951.03 KB ⚪ 0%
tree_100/ (allocs/op) 6,102 allocs 6,102 allocs ⚪ 0%
tree_1000/ (ns/op) 74.23 ms 79.31 ms 🔴 +6.84%
tree_1000/ (B/op) 86.58 MB 86.58 MB ⚪ 0%
tree_1000/ (allocs/op) 60,111 allocs 60,112 allocs ⚪ 0%
tree_10000/ (ns/op) 9.68 s 9.57 s 🟢 -1.13%
tree_10000/ (B/op) 8.58 GB 8.58 GB ⚪ 0%
tree_10000/ (allocs/op) 600,173 allocs 600,198 allocs ⚪ 0%
tree_delete_all_1000/ (ns/op) 78.41 ms 80.79 ms 🔴 +3.04%
tree_delete_all_1000/ (B/op) 87.57 MB 87.57 MB ⚪ 0%
tree_delete_all_1000/ (allocs/op) 75,289 allocs 75,289 allocs ⚪ 0%
tree_edit_gc_100/ (ns/op) 3.96 ms 3.99 ms 🔴 +0.67%
tree_edit_gc_100/ (B/op) 4.15 MB 4.15 MB ⚪ 0%
tree_edit_gc_100/ (allocs/op) 15,147 allocs 15,146 allocs ⚪ 0%
tree_edit_gc_1000/ (ns/op) 332.75 ms 334.66 ms 🔴 +0.58%
tree_edit_gc_1000/ (B/op) 384.04 MB 384.04 MB ⚪ 0%
tree_edit_gc_1000/ (allocs/op) 154,952 allocs 154,940 allocs ⚪ 0%
tree_split_gc_100/ (ns/op) 2.67 ms 2.74 ms 🔴 +2.54%
tree_split_gc_100/ (B/op) 2.41 MB 2.41 MB ⚪ 0%
tree_split_gc_100/ (allocs/op) 11,131 allocs 11,131 allocs ⚪ 0%
tree_split_gc_1000/ (ns/op) 197.74 ms 204.38 ms 🔴 +3.36%
tree_split_gc_1000/ (B/op) 222.50 MB 222.50 MB ⚪ 0%
tree_split_gc_1000/ (allocs/op) 122,053 allocs 122,077 allocs 🔴 +0.02%
BenchmarkRPC
Benchmark suite Previous Current Change
client_to_server/ (ns/op) 431.85 ms 417.28 ms 🟢 -3.37%
client_to_server/ (B/op) 16.13 MB 16.13 MB ⚪ 0%
client_to_server/ (allocs/op) 223,674 allocs 223,644 allocs 🟢 -0.01%
client_to_client_via_server/ (ns/op) 788.62 ms 771.45 ms 🟢 -2.18%
client_to_client_via_server/ (B/op) 37.20 MB 36.70 MB 🟢 -1.34%
client_to_client_via_server/ (allocs/op) 478,656 allocs 475,803 allocs 🟢 -0.60%
attach_large_document/ (ns/op) 1.32 s 1.29 s 🟢 -2.86%
attach_large_document/ (B/op) 1.89 GB 1.92 GB 🔴 +1.81%
attach_large_document/ (allocs/op) 12,321 allocs 12,393 allocs 🔴 +0.58%
adminCli_to_server/ (ns/op) 542.08 ms 543.37 ms 🔴 +0.24%
adminCli_to_server/ (B/op) 21.76 MB 22.51 MB 🔴 +3.48%
adminCli_to_server/ (allocs/op) 291,952 allocs 316,700 allocs 🔴 +8.48%
BenchmarkLocker
Benchmark suite Previous Current Change
(ns/op) 82.86 ns 82.10 ns 🟢 -0.92%
(B/op) 32.00 B 32.00 B ⚪ 0%
(allocs/op) 1 allocs 1 allocs ⚪ 0%
BenchmarkLockerParallel
Benchmark suite Previous Current Change
(ns/op) 45.80 ns 45.19 ns 🟢 -1.33%
(B/op) 0.00 B 0.00 B ⚪ 0%
(allocs/op) 0 allocs 0 allocs ⚪ 0%
BenchmarkLockerMoreKeys
Benchmark suite Previous Current Change
(ns/op) 180.50 ns 165.60 ns 🟢 -8.25%
(B/op) 31.00 B 31.00 B ⚪ 0%
(allocs/op) 0 allocs 0 allocs ⚪ 0%
BenchmarkRWLocker
Benchmark suite Previous Current Change
RWLock_rate_2/ (ns/op) 50.25 ns 49.09 ns 🟢 -2.31%
RWLock_rate_2/ (B/op) 0.00 B 0.00 B ⚪ 0%
RWLock_rate_2/ (allocs/op) 0 allocs 0 allocs ⚪ 0%
RWLock_rate_10/ (ns/op) 44.88 ns 43.31 ns 🟢 -3.50%
RWLock_rate_10/ (B/op) 0.00 B 0.00 B ⚪ 0%
RWLock_rate_10/ (allocs/op) 0 allocs 0 allocs ⚪ 0%
RWLock_rate_100/ (ns/op) 63.08 ns 58.54 ns 🟢 -7.20%
RWLock_rate_100/ (B/op) 2.00 B 1.00 B 🟢 -50.00%
RWLock_rate_100/ (allocs/op) 0 allocs 0 allocs ⚪ 0%
RWLock_rate_1000/ (ns/op) 91.91 ns 86.82 ns 🟢 -5.54%
RWLock_rate_1000/ (B/op) 8.00 B 8.00 B ⚪ 0%
RWLock_rate_1000/ (allocs/op) 0 allocs 0 allocs ⚪ 0%
BenchmarkChange
Benchmark suite Previous Current Change
Push_10_Changes/ (ns/op) 4.54 ms 4.43 ms 🟢 -2.43%
Push_10_Changes/ (B/op) 150.42 KB 151.00 KB 🔴 +0.39%
Push_10_Changes/ (allocs/op) 1,623 allocs 1,624 allocs 🔴 +0.06%
Push_100_Changes/ (ns/op) 16.52 ms 15.80 ms 🟢 -4.36%
Push_100_Changes/ (B/op) 770.59 KB 775.07 KB 🔴 +0.58%
Push_100_Changes/ (allocs/op) 8,509 allocs 8,510 allocs 🔴 +0.01%
Push_1000_Changes/ (ns/op) 129.20 ms 126.66 ms 🟢 -1.97%
Push_1000_Changes/ (B/op) 7.22 MB 7.23 MB 🔴 +0.11%
Push_1000_Changes/ (allocs/op) 79,325 allocs 79,322 allocs ⚪ 0%
Pull_10_Changes/ (ns/op) 3.70 ms 3.65 ms 🟢 -1.45%
Pull_10_Changes/ (B/op) 124.59 KB 125.01 KB 🔴 +0.34%
Pull_10_Changes/ (allocs/op) 1,456 allocs 1,456 allocs ⚪ 0%
Pull_100_Changes/ (ns/op) 5.32 ms 5.22 ms 🟢 -1.99%
Pull_100_Changes/ (B/op) 354.61 KB 355.30 KB 🔴 +0.19%
Pull_100_Changes/ (allocs/op) 5,182 allocs 5,182 allocs ⚪ 0%
Pull_1000_Changes/ (ns/op) 10.88 ms 10.65 ms 🟢 -2.05%
Pull_1000_Changes/ (B/op) 2.20 MB 2.20 MB ⚪ 0%
Pull_1000_Changes/ (allocs/op) 44,681 allocs 44,681 allocs ⚪ 0%
BenchmarkSnapshot
Benchmark suite Previous Current Change
Push_3KB_snapshot/ (ns/op) 19.55 ms 18.18 ms 🟢 -7.02%
Push_3KB_snapshot/ (B/op) 905.58 KB 919.83 KB 🔴 +1.57%
Push_3KB_snapshot/ (allocs/op) 8,516 allocs 8,514 allocs 🟢 -0.02%
Push_30KB_snapshot/ (ns/op) 132.18 ms 129.86 ms 🟢 -1.75%
Push_30KB_snapshot/ (B/op) 8.24 MB 8.25 MB 🔴 +0.12%
Push_30KB_snapshot/ (allocs/op) 89,008 allocs 89,057 allocs 🔴 +0.06%
Pull_3KB_snapshot/ (ns/op) 7.80 ms 7.43 ms 🟢 -4.76%
Pull_3KB_snapshot/ (B/op) 1.12 MB 1.12 MB 🔴 +0.13%
Pull_3KB_snapshot/ (allocs/op) 20,064 allocs 20,065 allocs ⚪ 0%
Pull_30KB_snapshot/ (ns/op) 19.91 ms 19.41 ms 🟢 -2.53%
Pull_30KB_snapshot/ (B/op) 9.31 MB 9.31 MB ⚪ 0%
Pull_30KB_snapshot/ (allocs/op) 193,610 allocs 193,605 allocs ⚪ 0%
BenchmarkSplayTree
Benchmark suite Previous Current Change
stress_test_100000/ (ns/op) 0.19 ns 0.19 ns 🟢 -2.53%
stress_test_100000/ (B/op) 0.00 B 0.00 B ⚪ 0%
stress_test_100000/ (allocs/op) 0 allocs 0 allocs ⚪ 0%
stress_test_200000/ (ns/op) 0.40 ns 0.38 ns 🟢 -2.61%
stress_test_200000/ (B/op) 0.00 B 0.00 B ⚪ 0%
stress_test_200000/ (allocs/op) 0 allocs 0 allocs ⚪ 0%
stress_test_300000/ (ns/op) 0.57 ns 0.57 ns 🔴 +1.11%
stress_test_300000/ (B/op) 0.00 B 0.00 B ⚪ 0%
stress_test_300000/ (allocs/op) 0 allocs 0 allocs ⚪ 0%
random_access_100000/ (ns/op) 0.01 ns 0.01 ns 🟢 -1.18%
random_access_100000/ (B/op) 0.00 B 0.00 B ⚪ 0%
random_access_100000/ (allocs/op) 0 allocs 0 allocs ⚪ 0%
random_access_200000/ (ns/op) 0.03 ns 0.03 ns 🟢 -6.79%
random_access_200000/ (B/op) 0.00 B 0.00 B ⚪ 0%
random_access_200000/ (allocs/op) 0 allocs 0 allocs ⚪ 0%
random_access_300000/ (ns/op) 0.04 ns 0.05 ns 🔴 +5.36%
random_access_300000/ (B/op) 0.00 B 0.00 B ⚪ 0%
random_access_300000/ (allocs/op) 0 allocs 0 allocs ⚪ 0%
editing_trace_bench/ (ns/op) 0.00 ns 0.00 ns 🔴 +2.02%
editing_trace_bench/ (B/op) 0.00 B 0.00 B ⚪ 0%
editing_trace_bench/ (allocs/op) 0 allocs 0 allocs ⚪ 0%
BenchmarkSync
Benchmark suite Previous Current Change
memory_sync_10_test/ (ns/op) 7288.00 ns 7109.00 ns 🟢 -2.46%
memory_sync_10_test/ (B/op) 1.34 KB 1.34 KB 🔴 +0.07%
memory_sync_10_test/ (allocs/op) 35 allocs 35 allocs ⚪ 0%
memory_sync_100_test/ (ns/op) 55353.00 ns 54894.00 ns 🟢 -0.83%
memory_sync_100_test/ (B/op) 9.51 KB 9.52 KB 🔴 +0.14%
memory_sync_100_test/ (allocs/op) 268 allocs 268 allocs ⚪ 0%
memory_sync_1000_test/ (ns/op) 616285.00 ns 609643.00 ns 🟢 -1.08%
memory_sync_1000_test/ (B/op) 75.92 KB 75.88 KB 🟢 -0.05%
memory_sync_1000_test/ (allocs/op) 2,111 allocs 2,111 allocs ⚪ 0%
memory_sync_10000_test/ (ns/op) 7.47 ms 7.62 ms 🔴 +1.94%
memory_sync_10000_test/ (B/op) 761.49 KB 766.27 KB 🔴 +0.63%
memory_sync_10000_test/ (allocs/op) 20,475 allocs 20,520 allocs 🔴 +0.22%
BenchmarkTextEditing
Benchmark suite Previous Current Change
(ns/op) 5.18 s 5.13 s 🟢 -0.89%
(B/op) 3.92 GB 3.92 GB ⚪ 0%
(allocs/op) 20,619,777 allocs 20,619,808 allocs ⚪ 0%
BenchmarkTree
Benchmark suite Previous Current Change
10000_vertices_to_protobuf/ (ns/op) 4.17 ms 4.28 ms 🔴 +2.68%
10000_vertices_to_protobuf/ (B/op) 6.36 MB 6.36 MB ⚪ 0%
10000_vertices_to_protobuf/ (allocs/op) 70,025 allocs 70,025 allocs ⚪ 0%
10000_vertices_from_protobuf/ (ns/op) 217.30 ms 224.11 ms 🔴 +3.13%
10000_vertices_from_protobuf/ (B/op) 442.30 MB 442.31 MB ⚪ 0%
10000_vertices_from_protobuf/ (allocs/op) 290,038 allocs 290,049 allocs ⚪ 0%
20000_vertices_to_protobuf/ (ns/op) 8.84 ms 9.06 ms 🔴 +2.49%
20000_vertices_to_protobuf/ (B/op) 12.89 MB 12.89 MB ⚪ 0%
20000_vertices_to_protobuf/ (allocs/op) 140,028 allocs 140,028 allocs ⚪ 0%
20000_vertices_from_protobuf/ (ns/op) 884.61 ms 879.94 ms 🟢 -0.53%
20000_vertices_from_protobuf/ (B/op) 1.70 GB 1.70 GB ⚪ 0%
20000_vertices_from_protobuf/ (allocs/op) 580,043 allocs 580,090 allocs ⚪ 0%
30000_vertices_to_protobuf/ (ns/op) 14.26 ms 13.83 ms 🟢 -3.04%
30000_vertices_to_protobuf/ (B/op) 18.98 MB 18.98 MB ⚪ 0%
30000_vertices_to_protobuf/ (allocs/op) 210,029 allocs 210,029 allocs ⚪ 0%
30000_vertices_from_protobuf/ (ns/op) 2.00 s 1.99 s 🟢 -0.35%
30000_vertices_from_protobuf/ (B/op) 3.75 GB 3.75 GB ⚪ 0%
30000_vertices_from_protobuf/ (allocs/op) 870,147 allocs 870,054 allocs 🟢 -0.01%
BenchmarkVersionVector
Benchmark suite Previous Current Change
clients_10/ (ns/op) 160.21 ms 157.36 ms 🟢 -1.78%
clients_10/ (1_changepack(bytes)) 745.00 B 745.00 B ⚪ 0%
clients_10/ (2_snapshot(bytes)) 379.00 B 379.00 B ⚪ 0%
clients_10/ (3_pushpull(ms)) 8.00 ms 7.00 ms 🟢 -12.50%
clients_10/ (4_attach(ms)) 6.00 ms 6.00 ms ⚪ 0%
clients_10/ (5_changepack_after_detach(bytes)) 805.00 B 805.00 B ⚪ 0%
clients_10/ (6_snapshot_after_detach(bytes)) 136.00 B 136.00 B ⚪ 0%
clients_10/ (7_pushpull_after_detach(ms)) 8.00 ms 8.00 ms ⚪ 0%
clients_10/ (B/op) 19.93 MB 20.65 MB 🔴 +3.60%
clients_10/ (allocs/op) 83,762 allocs 83,779 allocs 🔴 +0.02%
clients_100/ (ns/op) 1.41 s 1.44 s 🔴 +1.75%
clients_100/ (1_changepack(bytes)) 6.14 KB 6.14 KB ⚪ 0%
clients_100/ (2_snapshot(bytes)) 3.08 KB 3.08 KB ⚪ 0%
clients_100/ (3_pushpull(ms)) 11.00 ms 11.00 ms ⚪ 0%
clients_100/ (4_attach(ms)) 11.00 ms 10.00 ms 🟢 -9.09%
clients_100/ (5_changepack_after_detach(bytes)) 6.21 KB 6.21 KB ⚪ 0%
clients_100/ (6_snapshot_after_detach(bytes)) 137.00 B 137.00 B ⚪ 0%
clients_100/ (7_pushpull_after_detach(ms)) 9.00 ms 9.00 ms ⚪ 0%
clients_100/ (B/op) 230.31 MB 229.51 MB 🟢 -0.35%
clients_100/ (allocs/op) 1,539,768 allocs 1,539,234 allocs 🟢 -0.03%
clients_1000/ (ns/op) 60.97 s 60.23 s 🟢 -1.21%
clients_1000/ (1_changepack(bytes)) 60.16 KB 60.16 KB ⚪ 0%
clients_1000/ (2_snapshot(bytes)) 30.08 KB 30.08 KB ⚪ 0%
clients_1000/ (3_pushpull(ms)) 95.00 ms 94.00 ms 🟢 -1.05%
clients_1000/ (4_attach(ms)) 249.00 ms 222.00 ms 🟢 -10.84%
clients_1000/ (5_changepack_after_detach(bytes)) 60.22 KB 60.22 KB ⚪ 0%
clients_1000/ (6_snapshot_after_detach(bytes)) 139.00 B 139.00 B ⚪ 0%
clients_1000/ (7_pushpull_after_detach(ms)) 26.00 ms 23.00 ms 🟢 -11.54%
clients_1000/ (B/op) 22.07 GB 22.07 GB 🔴 +0.03%
clients_1000/ (allocs/op) 111,762,106 allocs 111,758,327 allocs ⚪ 0%

Copy link

codecov bot commented Feb 24, 2025

Codecov Report

All modified and coverable lines are covered by tests ✅

Project coverage is 38.45%. Comparing base (5299469) to head (3782427).

Additional details and impacted files
@@            Coverage Diff             @@
##             main    #1166      +/-   ##
==========================================
+ Coverage   38.37%   38.45%   +0.07%     
==========================================
  Files         172      173       +1     
  Lines       25796    25827      +31     
==========================================
+ Hits         9900     9931      +31     
  Misses      15063    15063              
  Partials      833      833              

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

- previous commit only changes directory name
Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

♻️ Duplicate comments (1)
pkg/limit/throttler_test.go (1)

218-247: ⚠️ Potential issue

Update error handling in TestExecuteOrSchedule.

The test needs to be updated to include error handling as suggested in the previous review.

Please refer to the previous review comment for the implementation details.

🧹 Nitpick comments (2)
pkg/limit/throttler_test.go (2)

17-18: Enhance package documentation.

The current package documentation is minimal. Consider expanding it to include:

  • The purpose of the package
  • Key components and their responsibilities
  • Usage examples or common use cases
-// Package limit provide event timing control components
+// Package limit provides event timing control components for managing callback execution rates.
+// It includes throttling and debouncing mechanisms to control the frequency of operations,
+// making it useful for rate-limiting API calls, event handling, and other scenarios where
+// execution timing needs to be controlled.

143-158: Add test coverage for trailing callback errors.

While the current test covers immediate callback errors, consider adding test cases for:

  • Error propagation in trailing callbacks
  • Error handling during concurrent executions
t.Run("Trailing callback error is propagated", func(t *testing.T) {
    th := New(throttleWindow)
    var firstCallExecuted bool
    
    callback := func() error {
        if firstCallExecuted {
            return expectedErr
        }
        firstCallExecuted = true
        return nil
    }
    
    // First call succeeds
    assert.NoError(t, th.Execute(ctx, callback))
    // Second call should fail with expectedErr
    err := th.Execute(ctx, callback)
    assert.ErrorIs(t, err, expectedErr)
})
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between f7b9d6d and 3782427.

📒 Files selected for processing (2)
  • pkg/limit/throttler.go (1 hunks)
  • pkg/limit/throttler_test.go (1 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
  • pkg/limit/throttler.go
⏰ Context from checks skipped due to timeout of 90000ms (2)
  • GitHub Check: build
  • GitHub Check: bench
🔇 Additional comments (3)
pkg/limit/throttler_test.go (3)

31-63: Well-structured test cases!

The test function effectively validates synchronous execution behavior with good coverage of single and multiple call scenarios. The use of atomic operations ensures thread safety.


65-141: Excellent concurrent testing implementation!

The test function provides comprehensive coverage of concurrent scenarios with:

  • Clear documentation of test objectives
  • Proper synchronization using WaitGroup
  • Thorough validation of throttling behavior under continuous load

160-216: Great context cancellation test coverage!

The test function effectively validates both context deadline and cancellation scenarios with proper verification of execution counts.

Copy link

@hackerwins-yorkie hackerwins-yorkie left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Go Benchmark Analysis 📊

This is a comparison result between the previous(e687d61) and the current commit(b298ecc).

Significant Changes (≥20% difference)

Benchmark suite Previous Current Change
BenchmarkRWLocker/RWLock_rate_100/ (B/op) 2.00 B 1.00 B 🟢 -50.00%

Key Observations 🔍

  1. In the BenchmarkRWLocker suite, the RWLock_rate_100/ benchmark showed a significant improvement with a decrease of 50.00% in bytes per operation (B/op) from 2.00 B to 1.00 B.

  2. Across various benchmarks, there were several cases of slight improvements (🟢) in performance:

    • BenchmarkLockerParallel suite showed a decrease of 1.42% in ns/op.
    • BenchmarkSync suite exhibited reductions ranging from 0.55% to 4.68% in ns/op.
    • BenchmarkSnapshot suite showed improvements in ns/op ranging from 1.68% to 6.09%.
  3. Some benchmarks experienced minor increases in performance (🔴):

    • Under BenchmarkRPC, attach_large_document/ showed an increase of 0.60% in B/op.
    • In the BenchmarkChange suite, Push_100_Changes/ and Push_1000_Changes/ exhibited increases in ns/op by 1.02% and 1.78% respectively.
    • BenchmarkTree suite showed increases from 2.85% to 7.06% in ns/op for different benchmarks.

Overall, the data reflects a mixture of improvements and minor deteriorations, with the majority of benchmarks showing positive trends in performance.

Detailed Test Results

BenchmarkDocument
Benchmark suite Previous Current Change
constructor_test/ (ns/op) 1439.00 ns 1480.00 ns 🔴 +2.85%
constructor_test/ (B/op) 1.39 KB 1.39 KB ⚪ 0%
constructor_test/ (allocs/op) 24 allocs 24 allocs ⚪ 0%
status_test/ (ns/op) 1028.00 ns 1019.00 ns 🟢 -0.88%
status_test/ (B/op) 1.35 KB 1.35 KB ⚪ 0%
status_test/ (allocs/op) 22 allocs 22 allocs ⚪ 0%
equals_test/ (ns/op) 7864.00 ns 8464.00 ns 🔴 +7.63%
equals_test/ (B/op) 7.56 KB 7.56 KB ⚪ 0%
equals_test/ (allocs/op) 129 allocs 129 allocs ⚪ 0%
nested_update_test/ (ns/op) 17079.00 ns 17791.00 ns 🔴 +4.17%
nested_update_test/ (B/op) 12.31 KB 12.31 KB ⚪ 0%
nested_update_test/ (allocs/op) 258 allocs 258 allocs ⚪ 0%
delete_test/ (ns/op) 27313.00 ns 23107.00 ns 🟢 -15.40%
delete_test/ (B/op) 15.79 KB 15.79 KB ⚪ 0%
delete_test/ (allocs/op) 339 allocs 339 allocs ⚪ 0%
object_test/ (ns/op) 8546.00 ns 8542.00 ns 🟢 -0.05%
object_test/ (B/op) 7.03 KB 7.03 KB 🔴 +0.01%
object_test/ (allocs/op) 118 allocs 118 allocs ⚪ 0%
array_test/ (ns/op) 28984.00 ns 28313.00 ns 🟢 -2.32%
array_test/ (B/op) 12.14 KB 12.14 KB ⚪ 0%
array_test/ (allocs/op) 273 allocs 273 allocs ⚪ 0%
text_test/ (ns/op) 32155.00 ns 32211.00 ns 🔴 +0.17%
text_test/ (B/op) 15.19 KB 15.19 KB ⚪ 0%
text_test/ (allocs/op) 484 allocs 484 allocs ⚪ 0%
text_composition_test/ (ns/op) 31674.00 ns 31450.00 ns 🟢 -0.71%
text_composition_test/ (B/op) 18.70 KB 18.70 KB ⚪ 0%
text_composition_test/ (allocs/op) 501 allocs 501 allocs ⚪ 0%
rich_text_test/ (ns/op) 87424.00 ns 85471.00 ns 🟢 -2.23%
rich_text_test/ (B/op) 39.36 KB 39.36 KB ⚪ 0%
rich_text_test/ (allocs/op) 1,146 allocs 1,146 allocs ⚪ 0%
counter_test/ (ns/op) 18201.00 ns 17965.00 ns 🟢 -1.30%
counter_test/ (B/op) 11.81 KB 11.81 KB ⚪ 0%
counter_test/ (allocs/op) 253 allocs 253 allocs ⚪ 0%
text_edit_gc_100/ (ns/op) 1.39 ms 1.39 ms 🟢 -0.16%
text_edit_gc_100/ (B/op) 864.90 KB 864.92 KB ⚪ 0%
text_edit_gc_100/ (allocs/op) 17,281 allocs 17,282 allocs ⚪ 0%
text_edit_gc_1000/ (ns/op) 53.39 ms 52.16 ms 🟢 -2.30%
text_edit_gc_1000/ (B/op) 46.84 MB 46.84 MB ⚪ 0%
text_edit_gc_1000/ (allocs/op) 185,598 allocs 185,590 allocs ⚪ 0%
text_split_gc_100/ (ns/op) 2.12 ms 2.10 ms 🟢 -1.09%
text_split_gc_100/ (B/op) 1.58 MB 1.58 MB ⚪ 0%
text_split_gc_100/ (allocs/op) 15,950 allocs 15,951 allocs ⚪ 0%
text_split_gc_1000/ (ns/op) 128.25 ms 126.29 ms 🟢 -1.53%
text_split_gc_1000/ (B/op) 137.79 MB 137.79 MB ⚪ 0%
text_split_gc_1000/ (allocs/op) 185,000 allocs 184,990 allocs ⚪ 0%
text_delete_all_10000/ (ns/op) 18.43 ms 16.46 ms 🟢 -10.70%
text_delete_all_10000/ (B/op) 10.58 MB 10.58 MB ⚪ 0%
text_delete_all_10000/ (allocs/op) 56,134 allocs 56,132 allocs ⚪ 0%
text_delete_all_100000/ (ns/op) 312.31 ms 287.17 ms 🟢 -8.05%
text_delete_all_100000/ (B/op) 105.54 MB 105.50 MB 🟢 -0.04%
text_delete_all_100000/ (allocs/op) 566,133 allocs 565,990 allocs 🟢 -0.03%
text_100/ (ns/op) 234634.00 ns 230544.00 ns 🟢 -1.74%
text_100/ (B/op) 120.94 KB 120.94 KB ⚪ 0%
text_100/ (allocs/op) 5,181 allocs 5,181 allocs ⚪ 0%
text_1000/ (ns/op) 2.46 ms 2.46 ms 🟢 -0.08%
text_1000/ (B/op) 1.16 MB 1.16 MB ⚪ 0%
text_1000/ (allocs/op) 51,084 allocs 51,084 allocs ⚪ 0%
array_1000/ (ns/op) 1.24 ms 1.25 ms 🔴 +0.70%
array_1000/ (B/op) 1.09 MB 1.09 MB ⚪ 0%
array_1000/ (allocs/op) 11,879 allocs 11,879 allocs ⚪ 0%
array_10000/ (ns/op) 13.33 ms 13.40 ms 🔴 +0.50%
array_10000/ (B/op) 9.89 MB 9.89 MB ⚪ 0%
array_10000/ (allocs/op) 120,735 allocs 120,732 allocs ⚪ 0%
array_gc_100/ (ns/op) 131750.00 ns 134574.00 ns 🔴 +2.14%
array_gc_100/ (B/op) 99.89 KB 99.87 KB 🟢 -0.02%
array_gc_100/ (allocs/op) 1,266 allocs 1,266 allocs ⚪ 0%
array_gc_1000/ (ns/op) 1.42 ms 1.45 ms 🔴 +2.07%
array_gc_1000/ (B/op) 1.14 MB 1.14 MB ⚪ 0%
array_gc_1000/ (allocs/op) 12,926 allocs 12,926 allocs ⚪ 0%
counter_1000/ (ns/op) 202098.00 ns 207534.00 ns 🔴 +2.69%
counter_1000/ (B/op) 178.13 KB 178.13 KB ⚪ 0%
counter_1000/ (allocs/op) 5,771 allocs 5,771 allocs ⚪ 0%
counter_10000/ (ns/op) 2.17 ms 2.16 ms 🟢 -0.49%
counter_10000/ (B/op) 2.07 MB 2.07 MB ⚪ 0%
counter_10000/ (allocs/op) 59,778 allocs 59,778 allocs ⚪ 0%
object_1000/ (ns/op) 1.39 ms 1.42 ms 🔴 +2.10%
object_1000/ (B/op) 1.44 MB 1.44 MB 🔴 +0.01%
object_1000/ (allocs/op) 9,925 allocs 9,925 allocs ⚪ 0%
object_10000/ (ns/op) 14.82 ms 14.79 ms 🟢 -0.20%
object_10000/ (B/op) 12.35 MB 12.35 MB ⚪ 0%
object_10000/ (allocs/op) 101,232 allocs 101,231 allocs ⚪ 0%
tree_100/ (ns/op) 1.02 ms 1.03 ms 🔴 +1.26%
tree_100/ (B/op) 951.02 KB 951.03 KB ⚪ 0%
tree_100/ (allocs/op) 6,102 allocs 6,102 allocs ⚪ 0%
tree_1000/ (ns/op) 74.23 ms 74.49 ms 🔴 +0.35%
tree_1000/ (B/op) 86.58 MB 86.58 MB ⚪ 0%
tree_1000/ (allocs/op) 60,111 allocs 60,112 allocs ⚪ 0%
tree_10000/ (ns/op) 9.68 s 9.50 s 🟢 -1.89%
tree_10000/ (B/op) 8.58 GB 8.58 GB ⚪ 0%
tree_10000/ (allocs/op) 600,173 allocs 600,181 allocs ⚪ 0%
tree_delete_all_1000/ (ns/op) 78.41 ms 76.14 ms 🟢 -2.89%
tree_delete_all_1000/ (B/op) 87.57 MB 87.57 MB ⚪ 0%
tree_delete_all_1000/ (allocs/op) 75,289 allocs 75,289 allocs ⚪ 0%
tree_edit_gc_100/ (ns/op) 3.96 ms 3.91 ms 🟢 -1.18%
tree_edit_gc_100/ (B/op) 4.15 MB 4.15 MB ⚪ 0%
tree_edit_gc_100/ (allocs/op) 15,147 allocs 15,146 allocs ⚪ 0%
tree_edit_gc_1000/ (ns/op) 332.75 ms 313.84 ms 🟢 -5.68%
tree_edit_gc_1000/ (B/op) 384.04 MB 384.04 MB ⚪ 0%
tree_edit_gc_1000/ (allocs/op) 154,952 allocs 154,941 allocs ⚪ 0%
tree_split_gc_100/ (ns/op) 2.67 ms 2.61 ms 🟢 -2.16%
tree_split_gc_100/ (B/op) 2.41 MB 2.41 MB ⚪ 0%
tree_split_gc_100/ (allocs/op) 11,131 allocs 11,131 allocs ⚪ 0%
tree_split_gc_1000/ (ns/op) 197.74 ms 190.84 ms 🟢 -3.49%
tree_split_gc_1000/ (B/op) 222.50 MB 222.50 MB ⚪ 0%
tree_split_gc_1000/ (allocs/op) 122,053 allocs 122,070 allocs 🔴 +0.01%
BenchmarkRPC
Benchmark suite Previous Current Change
client_to_server/ (ns/op) 431.85 ms 415.81 ms 🟢 -3.71%
client_to_server/ (B/op) 16.13 MB 16.13 MB 🔴 +0.01%
client_to_server/ (allocs/op) 223,674 allocs 223,566 allocs 🟢 -0.05%
client_to_client_via_server/ (ns/op) 788.62 ms 770.96 ms 🟢 -2.24%
client_to_client_via_server/ (B/op) 37.20 MB 34.25 MB 🟢 -7.93%
client_to_client_via_server/ (allocs/op) 478,656 allocs 476,728 allocs 🟢 -0.40%
attach_large_document/ (ns/op) 1.32 s 1.29 s 🟢 -2.69%
attach_large_document/ (B/op) 1.89 GB 1.90 GB 🔴 +0.60%
attach_large_document/ (allocs/op) 12,321 allocs 12,510 allocs 🔴 +1.53%
adminCli_to_server/ (ns/op) 542.08 ms 537.25 ms 🟢 -0.89%
adminCli_to_server/ (B/op) 21.76 MB 21.47 MB 🟢 -1.31%
adminCli_to_server/ (allocs/op) 291,952 allocs 316,700 allocs 🔴 +8.48%
BenchmarkLocker
Benchmark suite Previous Current Change
(ns/op) 82.86 ns 82.29 ns 🟢 -0.69%
(B/op) 32.00 B 32.00 B ⚪ 0%
(allocs/op) 1 allocs 1 allocs ⚪ 0%
BenchmarkLockerParallel
Benchmark suite Previous Current Change
(ns/op) 45.80 ns 45.15 ns 🟢 -1.42%
(B/op) 0.00 B 0.00 B ⚪ 0%
(allocs/op) 0 allocs 0 allocs ⚪ 0%
BenchmarkLockerMoreKeys
Benchmark suite Previous Current Change
(ns/op) 180.50 ns 171.20 ns 🟢 -5.15%
(B/op) 31.00 B 31.00 B ⚪ 0%
(allocs/op) 0 allocs 0 allocs ⚪ 0%
BenchmarkRWLocker
Benchmark suite Previous Current Change
RWLock_rate_2/ (ns/op) 50.25 ns 49.20 ns 🟢 -2.09%
RWLock_rate_2/ (B/op) 0.00 B 0.00 B ⚪ 0%
RWLock_rate_2/ (allocs/op) 0 allocs 0 allocs ⚪ 0%
RWLock_rate_10/ (ns/op) 44.88 ns 43.78 ns 🟢 -2.45%
RWLock_rate_10/ (B/op) 0.00 B 0.00 B ⚪ 0%
RWLock_rate_10/ (allocs/op) 0 allocs 0 allocs ⚪ 0%
RWLock_rate_100/ (ns/op) 63.08 ns 57.85 ns 🟢 -8.29%
RWLock_rate_100/ (B/op) 2.00 B 1.00 B 🟢 -50.00%
RWLock_rate_100/ (allocs/op) 0 allocs 0 allocs ⚪ 0%
RWLock_rate_1000/ (ns/op) 91.91 ns 86.53 ns 🟢 -5.85%
RWLock_rate_1000/ (B/op) 8.00 B 8.00 B ⚪ 0%
RWLock_rate_1000/ (allocs/op) 0 allocs 0 allocs ⚪ 0%
BenchmarkChange
Benchmark suite Previous Current Change
Push_10_Changes/ (ns/op) 4.54 ms 4.48 ms 🟢 -1.20%
Push_10_Changes/ (B/op) 150.42 KB 150.32 KB 🟢 -0.06%
Push_10_Changes/ (allocs/op) 1,623 allocs 1,622 allocs 🟢 -0.06%
Push_100_Changes/ (ns/op) 16.52 ms 16.68 ms 🔴 +1.02%
Push_100_Changes/ (B/op) 770.59 KB 771.00 KB 🔴 +0.05%
Push_100_Changes/ (allocs/op) 8,509 allocs 8,508 allocs 🟢 -0.01%
Push_1000_Changes/ (ns/op) 129.20 ms 131.50 ms 🔴 +1.78%
Push_1000_Changes/ (B/op) 7.22 MB 7.16 MB 🟢 -0.85%
Push_1000_Changes/ (allocs/op) 79,325 allocs 79,324 allocs ⚪ 0%
Pull_10_Changes/ (ns/op) 3.70 ms 3.65 ms 🟢 -1.39%
Pull_10_Changes/ (B/op) 124.59 KB 125.05 KB 🔴 +0.37%
Pull_10_Changes/ (allocs/op) 1,456 allocs 1,456 allocs ⚪ 0%
Pull_100_Changes/ (ns/op) 5.32 ms 5.24 ms 🟢 -1.57%
Pull_100_Changes/ (B/op) 354.61 KB 355.33 KB 🔴 +0.20%
Pull_100_Changes/ (allocs/op) 5,182 allocs 5,183 allocs 🔴 +0.02%
Pull_1000_Changes/ (ns/op) 10.88 ms 10.62 ms 🟢 -2.33%
Pull_1000_Changes/ (B/op) 2.20 MB 2.20 MB ⚪ 0%
Pull_1000_Changes/ (allocs/op) 44,681 allocs 44,683 allocs ⚪ 0%
BenchmarkSnapshot
Benchmark suite Previous Current Change
Push_3KB_snapshot/ (ns/op) 19.55 ms 18.71 ms 🟢 -4.31%
Push_3KB_snapshot/ (B/op) 905.58 KB 895.97 KB 🟢 -1.06%
Push_3KB_snapshot/ (allocs/op) 8,516 allocs 8,513 allocs 🟢 -0.04%
Push_30KB_snapshot/ (ns/op) 132.18 ms 135.94 ms 🔴 +2.85%
Push_30KB_snapshot/ (B/op) 8.24 MB 8.39 MB 🔴 +1.78%
Push_30KB_snapshot/ (allocs/op) 89,008 allocs 90,491 allocs 🔴 +1.67%
Pull_3KB_snapshot/ (ns/op) 7.80 ms 7.33 ms 🟢 -6.09%
Pull_3KB_snapshot/ (B/op) 1.12 MB 1.12 MB 🔴 +0.06%
Pull_3KB_snapshot/ (allocs/op) 20,064 allocs 20,065 allocs ⚪ 0%
Pull_30KB_snapshot/ (ns/op) 19.91 ms 19.10 ms 🟢 -4.07%
Pull_30KB_snapshot/ (B/op) 9.31 MB 9.31 MB 🔴 +0.02%
Pull_30KB_snapshot/ (allocs/op) 193,610 allocs 193,607 allocs ⚪ 0%
BenchmarkSplayTree
Benchmark suite Previous Current Change
stress_test_100000/ (ns/op) 0.19 ns 0.19 ns 🟢 -3.41%
stress_test_100000/ (B/op) 0.00 B 0.00 B ⚪ 0%
stress_test_100000/ (allocs/op) 0 allocs 0 allocs ⚪ 0%
stress_test_200000/ (ns/op) 0.40 ns 0.40 ns 🔴 +0.56%
stress_test_200000/ (B/op) 0.00 B 0.00 B ⚪ 0%
stress_test_200000/ (allocs/op) 0 allocs 0 allocs ⚪ 0%
stress_test_300000/ (ns/op) 0.57 ns 0.59 ns 🔴 +3.17%
stress_test_300000/ (B/op) 0.00 B 0.00 B ⚪ 0%
stress_test_300000/ (allocs/op) 0 allocs 0 allocs ⚪ 0%
random_access_100000/ (ns/op) 0.01 ns 0.01 ns 🟢 -2.05%
random_access_100000/ (B/op) 0.00 B 0.00 B ⚪ 0%
random_access_100000/ (allocs/op) 0 allocs 0 allocs ⚪ 0%
random_access_200000/ (ns/op) 0.03 ns 0.03 ns 🔴 +4.53%
random_access_200000/ (B/op) 0.00 B 0.00 B ⚪ 0%
random_access_200000/ (allocs/op) 0 allocs 0 allocs ⚪ 0%
random_access_300000/ (ns/op) 0.04 ns 0.05 ns 🔴 +2.17%
random_access_300000/ (B/op) 0.00 B 0.00 B ⚪ 0%
random_access_300000/ (allocs/op) 0 allocs 0 allocs ⚪ 0%
editing_trace_bench/ (ns/op) 0.00 ns 0.00 ns 🟢 -3.40%
editing_trace_bench/ (B/op) 0.00 B 0.00 B ⚪ 0%
editing_trace_bench/ (allocs/op) 0 allocs 0 allocs ⚪ 0%
BenchmarkSync
Benchmark suite Previous Current Change
memory_sync_10_test/ (ns/op) 7288.00 ns 7248.00 ns 🟢 -0.55%
memory_sync_10_test/ (B/op) 1.34 KB 1.34 KB ⚪ 0%
memory_sync_10_test/ (allocs/op) 35 allocs 35 allocs ⚪ 0%
memory_sync_100_test/ (ns/op) 55353.00 ns 54288.00 ns 🟢 -1.92%
memory_sync_100_test/ (B/op) 9.51 KB 9.52 KB 🔴 +0.18%
memory_sync_100_test/ (allocs/op) 268 allocs 268 allocs ⚪ 0%
memory_sync_1000_test/ (ns/op) 616285.00 ns 621608.00 ns 🔴 +0.86%
memory_sync_1000_test/ (B/op) 75.92 KB 75.36 KB 🟢 -0.74%
memory_sync_1000_test/ (allocs/op) 2,111 allocs 2,095 allocs 🟢 -0.76%
memory_sync_10000_test/ (ns/op) 7.47 ms 7.82 ms 🔴 +4.68%
memory_sync_10000_test/ (B/op) 761.49 KB 756.11 KB 🟢 -0.71%
memory_sync_10000_test/ (allocs/op) 20,475 allocs 20,459 allocs 🟢 -0.08%
BenchmarkTextEditing
Benchmark suite Previous Current Change
(ns/op) 5.18 s 5.28 s 🔴 +2.00%
(B/op) 3.92 GB 3.92 GB ⚪ 0%
(allocs/op) 20,619,777 allocs 20,619,653 allocs ⚪ 0%
BenchmarkTree
Benchmark suite Previous Current Change
10000_vertices_to_protobuf/ (ns/op) 4.17 ms 4.31 ms 🔴 +3.35%
10000_vertices_to_protobuf/ (B/op) 6.36 MB 6.36 MB ⚪ 0%
10000_vertices_to_protobuf/ (allocs/op) 70,025 allocs 70,025 allocs ⚪ 0%
10000_vertices_from_protobuf/ (ns/op) 217.30 ms 224.15 ms 🔴 +3.15%
10000_vertices_from_protobuf/ (B/op) 442.30 MB 442.30 MB ⚪ 0%
10000_vertices_from_protobuf/ (allocs/op) 290,038 allocs 290,039 allocs ⚪ 0%
20000_vertices_to_protobuf/ (ns/op) 8.84 ms 9.46 ms 🔴 +7.06%
20000_vertices_to_protobuf/ (B/op) 12.89 MB 12.89 MB ⚪ 0%
20000_vertices_to_protobuf/ (allocs/op) 140,028 allocs 140,028 allocs ⚪ 0%
20000_vertices_from_protobuf/ (ns/op) 884.61 ms 878.60 ms 🟢 -0.68%
20000_vertices_from_protobuf/ (B/op) 1.70 GB 1.70 GB ⚪ 0%
20000_vertices_from_protobuf/ (allocs/op) 580,043 allocs 580,044 allocs ⚪ 0%
30000_vertices_to_protobuf/ (ns/op) 14.26 ms 14.02 ms 🟢 -1.68%
30000_vertices_to_protobuf/ (B/op) 18.98 MB 18.98 MB ⚪ 0%
30000_vertices_to_protobuf/ (allocs/op) 210,029 allocs 210,029 allocs ⚪ 0%
30000_vertices_from_protobuf/ (ns/op) 2.00 s 2.02 s 🔴 +1.07%
30000_vertices_from_protobuf/ (B/op) 3.75 GB 3.75 GB ⚪ 0%
30000_vertices_from_protobuf/ (allocs/op) 870,147 allocs 870,141 allocs ⚪ 0%
BenchmarkVersionVector
Benchmark suite Previous Current Change
clients_10/ (ns/op) 160.21 ms 157.63 ms 🟢 -1.61%
clients_10/ (1_changepack(bytes)) 745.00 B 745.00 B ⚪ 0%
clients_10/ (2_snapshot(bytes)) 379.00 B 379.00 B ⚪ 0%
clients_10/ (3_pushpull(ms)) 8.00 ms 8.00 ms ⚪ 0%
clients_10/ (4_attach(ms)) 6.00 ms 6.00 ms ⚪ 0%
clients_10/ (5_changepack_after_detach(bytes)) 805.00 B 805.00 B ⚪ 0%
clients_10/ (6_snapshot_after_detach(bytes)) 136.00 B 136.00 B ⚪ 0%
clients_10/ (7_pushpull_after_detach(ms)) 8.00 ms 8.00 ms ⚪ 0%
clients_10/ (B/op) 19.93 MB 19.62 MB 🟢 -1.57%
clients_10/ (allocs/op) 83,762 allocs 83,765 allocs ⚪ 0%
clients_100/ (ns/op) 1.41 s 1.40 s 🟢 -0.55%
clients_100/ (1_changepack(bytes)) 6.14 KB 6.14 KB ⚪ 0%
clients_100/ (2_snapshot(bytes)) 3.08 KB 3.08 KB ⚪ 0%
clients_100/ (3_pushpull(ms)) 11.00 ms 10.00 ms 🟢 -9.09%
clients_100/ (4_attach(ms)) 11.00 ms 11.00 ms ⚪ 0%
clients_100/ (5_changepack_after_detach(bytes)) 6.21 KB 6.21 KB ⚪ 0%
clients_100/ (6_snapshot_after_detach(bytes)) 137.00 B 137.00 B ⚪ 0%
clients_100/ (7_pushpull_after_detach(ms)) 9.00 ms 9.00 ms ⚪ 0%
clients_100/ (B/op) 230.31 MB 230.31 MB ⚪ 0%
clients_100/ (allocs/op) 1,539,768 allocs 1,539,776 allocs ⚪ 0%
clients_1000/ (ns/op) 60.97 s 60.53 s 🟢 -0.72%
clients_1000/ (1_changepack(bytes)) 60.16 KB 60.16 KB ⚪ 0%
clients_1000/ (2_snapshot(bytes)) 30.08 KB 30.08 KB ⚪ 0%
clients_1000/ (3_pushpull(ms)) 95.00 ms 94.00 ms 🟢 -1.05%
clients_1000/ (4_attach(ms)) 249.00 ms 239.00 ms 🟢 -4.02%
clients_1000/ (5_changepack_after_detach(bytes)) 60.22 KB 60.22 KB ⚪ 0%
clients_1000/ (6_snapshot_after_detach(bytes)) 139.00 B 139.00 B ⚪ 0%
clients_1000/ (7_pushpull_after_detach(ms)) 26.00 ms 24.00 ms 🟢 -7.69%
clients_1000/ (B/op) 22.07 GB 22.06 GB 🟢 -0.03%
clients_1000/ (allocs/op) 111,762,106 allocs 111,758,279 allocs ⚪ 0%

@window9u window9u marked this pull request as draft February 25, 2025 04:53
Copy link

@hackerwins-yorkie hackerwins-yorkie left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Go Benchmark Analysis 📊

This is a comparison result between the previous(e687d61) and the current commit(e0b2922).

Significant Changes (≥20% difference)

Benchmark suite Previous Current Change
BenchmarkVersionVector/clients_1000/ (B/op) 22.07 GB 6.43 GB 🟢 -70.86%
BenchmarkVersionVector/clients_1000/ (4_attach(ms)) 249.00 ms 100.00 ms 🟢 -59.84%
BenchmarkRPC/client_to_client_via_server/ (allocs/op) 478,656 allocs 297,639 allocs 🟢 -37.82%
BenchmarkRPC/client_to_client_via_server/ (B/op) 37.20 MB 24.03 MB 🟢 -35.39%
BenchmarkRPC/client_to_client_via_server/ (ns/op) 788.62 ms 560.24 ms 🟢 -28.96%
BenchmarkVersionVector/clients_1000/ (ns/op) 60.97 s 45.07 s 🟢 -26.08%
BenchmarkVersionVector/clients_10/ (7_pushpull_after_detach(ms)) 8.00 ms 10.00 ms 🔴 +25.00%

Key Observations 🔍

  • The most significant change observed is in the BenchmarkVersionVector/clients_1000/ suite, showing a remarkable decrease across various metrics:

    • Bytes operated decreased from 22.07 GB to 6.43 GB, a reduction of 70.86%.
    • Attach time went down from 249.00 ms to 100.00 ms, marking a 59.84% decrease.
    • The number of allocations per operation dropped by 16.47%.
  • The BenchmarkRPC/client_to_client_via_server/ suite also exhibited notable improvements:

    • Allocations per operation decreased by 37.82%.
    • Bytes operated dropped from 37.20 MB to 24.03 MB, marking a 35.39% reduction.
    • Nanoseconds per operation decreased by 28.96%.
  • Overall, several benchmarks showed varying degrees of improvement (🟢) or degradation (🔴) in performance metrics. Notably, some tests saw marginal changes or remained relatively constant (⚪).

  • Specific attention should be paid to the BenchmarkTree suite, where noticeable increases in time for converting vertices to protobuf were observed, ranging from 2.87% to 6.77%.

  • It is important to highlight the BenchmarkSync suite, where memory synchronization tests displayed decreases in time, with noteworthy reductions in operations involving 1000 and 10000 units.

  • The data from different suites showcases a mix of positive and negative trends, emphasizing the importance of detailed analysis to understand performance changes accurately.

Clock Analysis

Lamport (v0.5.2)

Metric 10 clients 100 clients 1000 clients
Total Operation Time 84.96 ms 793.94 ms 34.79 s
Memory Allocations 35.11 MB 219.92 MB 4.91 GB
Number of Allocations (allocs/op) 69,271 1,246,728 81,485,288
ChangePack Size 138.0 B 137.0 B 141.0 B
Snapshot Size 379.0 B 3.08 KB 30.08 KB
Push-Pull Time 2.0 ms 1.5 ms 4.0 ms
Attach Time 4.5 ms 11.0 ms 31.0 ms
ChangePack After Detach 138.0 B 140.0 B 141.0 B
Snapshot After Detach 136.0 B 137.0 B 139.0 B
Push-Pull After Detach 2.5 ms 5.0 ms 9.5 ms

VV (current)

Metric 10 clients 100 clients 1000 clients
Total Operation Time 158.60 ms 1.41 s 45.07 s
Memory Allocations 20.03 MB 223.58 MB 6.43 GB
Number of Allocations (allocs/op) 83,230 1,481,585 93,354,307
ChangePack Size 745.00 B 6.14 KB 60.16 KB
Snapshot Size 379.00 B 3.08 KB 30.08 KB
Push-Pull Time 7.00 ms 1.5 ms 91.00 ms
Attach Time 6.00 ms 9.0 ms 100.00 ms
ChangePack After Detach 805.00 B 6.21 KB 60.22 KB
Snapshot After Detach 136.00 B 137.00 B 139.00 B
Push-Pull After Detach 10.00 ms 9.00 ms 21.00 ms

Summary

  • Total operation time is generally faster with Version Vector for all client counts.
  • Memory allocations are higher for Version Vector compared to Lamport for all client counts.
  • Lamport clock has a significantly higher number of allocations per operation compared to Version Vector.
  • ChangePack and Snapshot sizes are relatively similar between the two clock types.
  • Push-Pull and Attach times vary between the clocks, with Version Vector performing better for some metrics.
  • Version Vector shows improved performance in terms of changepack after detach, except for 100 clients.
  • Version Vector has higher push-pull time after detach compared to Lamport.

Detailed Test Results

BenchmarkDocument
Benchmark suite Previous Current Change
constructor_test/ (ns/op) 1439.00 ns 1493.00 ns 🔴 +3.75%
constructor_test/ (B/op) 1.39 KB 1.43 KB 🔴 +3.47%
constructor_test/ (allocs/op) 24 allocs 25 allocs 🔴 +4.17%
status_test/ (ns/op) 1028.00 ns 1065.00 ns 🔴 +3.60%
status_test/ (B/op) 1.35 KB 1.40 KB 🔴 +3.55%
status_test/ (allocs/op) 22 allocs 23 allocs 🔴 +4.55%
equals_test/ (ns/op) 7864.00 ns 7914.00 ns 🔴 +0.64%
equals_test/ (B/op) 7.56 KB 7.71 KB 🔴 +1.90%
equals_test/ (allocs/op) 129 allocs 132 allocs 🔴 +2.33%
nested_update_test/ (ns/op) 17079.00 ns 16901.00 ns 🟢 -1.04%
nested_update_test/ (B/op) 12.31 KB 12.36 KB 🔴 +0.39%
nested_update_test/ (allocs/op) 258 allocs 259 allocs 🔴 +0.39%
delete_test/ (ns/op) 27313.00 ns 27058.00 ns 🟢 -0.93%
delete_test/ (B/op) 15.79 KB 15.84 KB 🔴 +0.30%
delete_test/ (allocs/op) 339 allocs 340 allocs 🔴 +0.29%
object_test/ (ns/op) 8546.00 ns 8569.00 ns 🔴 +0.27%
object_test/ (B/op) 7.03 KB 7.08 KB 🔴 +0.68%
object_test/ (allocs/op) 118 allocs 119 allocs 🔴 +0.85%
array_test/ (ns/op) 28984.00 ns 28242.00 ns 🟢 -2.56%
array_test/ (B/op) 12.14 KB 12.19 KB 🔴 +0.40%
array_test/ (allocs/op) 273 allocs 274 allocs 🔴 +0.37%
text_test/ (ns/op) 32155.00 ns 32360.00 ns 🔴 +0.64%
text_test/ (B/op) 15.19 KB 15.24 KB 🔴 +0.32%
text_test/ (allocs/op) 484 allocs 485 allocs 🔴 +0.21%
text_composition_test/ (ns/op) 31674.00 ns 31684.00 ns 🔴 +0.03%
text_composition_test/ (B/op) 18.70 KB 18.75 KB 🔴 +0.26%
text_composition_test/ (allocs/op) 501 allocs 502 allocs 🔴 +0.20%
rich_text_test/ (ns/op) 87424.00 ns 85742.00 ns 🟢 -1.92%
rich_text_test/ (B/op) 39.36 KB 39.41 KB 🔴 +0.12%
rich_text_test/ (allocs/op) 1,146 allocs 1,147 allocs 🔴 +0.09%
counter_test/ (ns/op) 18201.00 ns 18429.00 ns 🔴 +1.25%
counter_test/ (B/op) 11.81 KB 11.86 KB 🔴 +0.41%
counter_test/ (allocs/op) 253 allocs 254 allocs 🔴 +0.40%
text_edit_gc_100/ (ns/op) 1.39 ms 1.39 ms 🟢 -0.14%
text_edit_gc_100/ (B/op) 864.90 KB 864.94 KB ⚪ 0%
text_edit_gc_100/ (allocs/op) 17,281 allocs 17,282 allocs ⚪ 0%
text_edit_gc_1000/ (ns/op) 53.39 ms 53.16 ms 🟢 -0.43%
text_edit_gc_1000/ (B/op) 46.84 MB 46.84 MB ⚪ 0%
text_edit_gc_1000/ (allocs/op) 185,598 allocs 185,595 allocs ⚪ 0%
text_split_gc_100/ (ns/op) 2.12 ms 2.11 ms 🟢 -0.49%
text_split_gc_100/ (B/op) 1.58 MB 1.58 MB ⚪ 0%
text_split_gc_100/ (allocs/op) 15,950 allocs 15,952 allocs 🔴 +0.01%
text_split_gc_1000/ (ns/op) 128.25 ms 128.42 ms 🔴 +0.14%
text_split_gc_1000/ (B/op) 137.79 MB 137.79 MB ⚪ 0%
text_split_gc_1000/ (allocs/op) 185,000 allocs 185,002 allocs ⚪ 0%
text_delete_all_10000/ (ns/op) 18.43 ms 16.31 ms 🟢 -11.54%
text_delete_all_10000/ (B/op) 10.58 MB 10.58 MB ⚪ 0%
text_delete_all_10000/ (allocs/op) 56,134 allocs 56,135 allocs ⚪ 0%
text_delete_all_100000/ (ns/op) 312.31 ms 295.13 ms 🟢 -5.50%
text_delete_all_100000/ (B/op) 105.54 MB 105.52 MB 🟢 -0.02%
text_delete_all_100000/ (allocs/op) 566,133 allocs 566,072 allocs 🟢 -0.01%
text_100/ (ns/op) 234634.00 ns 236405.00 ns 🔴 +0.75%
text_100/ (B/op) 120.94 KB 120.95 KB 🔴 +0.01%
text_100/ (allocs/op) 5,181 allocs 5,182 allocs 🔴 +0.02%
text_1000/ (ns/op) 2.46 ms 2.49 ms 🔴 +1.16%
text_1000/ (B/op) 1.16 MB 1.16 MB 🔴 +0.03%
text_1000/ (allocs/op) 51,084 allocs 51,085 allocs ⚪ 0%
array_1000/ (ns/op) 1.24 ms 1.43 ms 🔴 +15.26%
array_1000/ (B/op) 1.09 MB 1.09 MB 🔴 +0.01%
array_1000/ (allocs/op) 11,879 allocs 11,881 allocs 🔴 +0.02%
array_10000/ (ns/op) 13.33 ms 13.37 ms 🔴 +0.24%
array_10000/ (B/op) 9.89 MB 9.89 MB ⚪ 0%
array_10000/ (allocs/op) 120,735 allocs 120,736 allocs ⚪ 0%
array_gc_100/ (ns/op) 131750.00 ns 134808.00 ns 🔴 +2.32%
array_gc_100/ (B/op) 99.89 KB 99.93 KB 🔴 +0.03%
array_gc_100/ (allocs/op) 1,266 allocs 1,267 allocs 🔴 +0.08%
array_gc_1000/ (ns/op) 1.42 ms 1.45 ms 🔴 +1.81%
array_gc_1000/ (B/op) 1.14 MB 1.14 MB ⚪ 0%
array_gc_1000/ (allocs/op) 12,926 allocs 12,927 allocs ⚪ 0%
counter_1000/ (ns/op) 202098.00 ns 207303.00 ns 🔴 +2.58%
counter_1000/ (B/op) 178.13 KB 178.18 KB 🔴 +0.03%
counter_1000/ (allocs/op) 5,771 allocs 5,772 allocs 🔴 +0.02%
counter_10000/ (ns/op) 2.17 ms 2.24 ms 🔴 +3.31%
counter_10000/ (B/op) 2.07 MB 2.07 MB ⚪ 0%
counter_10000/ (allocs/op) 59,778 allocs 59,779 allocs ⚪ 0%
object_1000/ (ns/op) 1.39 ms 1.44 ms 🔴 +3.72%
object_1000/ (B/op) 1.44 MB 1.44 MB ⚪ 0%
object_1000/ (allocs/op) 9,925 allocs 9,926 allocs 🔴 +0.01%
object_10000/ (ns/op) 14.82 ms 14.79 ms 🟢 -0.17%
object_10000/ (B/op) 12.35 MB 12.35 MB ⚪ 0%
object_10000/ (allocs/op) 101,232 allocs 101,231 allocs ⚪ 0%
tree_100/ (ns/op) 1.02 ms 1.08 ms 🔴 +5.80%
tree_100/ (B/op) 951.02 KB 951.08 KB ⚪ 0%
tree_100/ (allocs/op) 6,102 allocs 6,103 allocs 🔴 +0.02%
tree_1000/ (ns/op) 74.23 ms 79.26 ms 🔴 +6.77%
tree_1000/ (B/op) 86.58 MB 86.58 MB ⚪ 0%
tree_1000/ (allocs/op) 60,111 allocs 60,113 allocs ⚪ 0%
tree_10000/ (ns/op) 9.68 s 9.48 s 🟢 -2.08%
tree_10000/ (B/op) 8.58 GB 8.58 GB ⚪ 0%
tree_10000/ (allocs/op) 600,173 allocs 600,193 allocs ⚪ 0%
tree_delete_all_1000/ (ns/op) 78.41 ms 78.64 ms 🔴 +0.30%
tree_delete_all_1000/ (B/op) 87.57 MB 87.57 MB ⚪ 0%
tree_delete_all_1000/ (allocs/op) 75,289 allocs 75,291 allocs ⚪ 0%
tree_edit_gc_100/ (ns/op) 3.96 ms 3.88 ms 🟢 -2.14%
tree_edit_gc_100/ (B/op) 4.15 MB 4.15 MB ⚪ 0%
tree_edit_gc_100/ (allocs/op) 15,147 allocs 15,147 allocs ⚪ 0%
tree_edit_gc_1000/ (ns/op) 332.75 ms 318.99 ms 🟢 -4.13%
tree_edit_gc_1000/ (B/op) 384.04 MB 384.05 MB ⚪ 0%
tree_edit_gc_1000/ (allocs/op) 154,952 allocs 154,943 allocs ⚪ 0%
tree_split_gc_100/ (ns/op) 2.67 ms 2.66 ms 🟢 -0.41%
tree_split_gc_100/ (B/op) 2.41 MB 2.41 MB ⚪ 0%
tree_split_gc_100/ (allocs/op) 11,131 allocs 11,132 allocs ⚪ 0%
tree_split_gc_1000/ (ns/op) 197.74 ms 198.10 ms 🔴 +0.18%
tree_split_gc_1000/ (B/op) 222.50 MB 222.50 MB ⚪ 0%
tree_split_gc_1000/ (allocs/op) 122,053 allocs 122,075 allocs 🔴 +0.02%
BenchmarkRPC
Benchmark suite Previous Current Change
client_to_server/ (ns/op) 431.85 ms 418.93 ms 🟢 -2.99%
client_to_server/ (B/op) 16.13 MB 16.15 MB 🔴 +0.11%
client_to_server/ (allocs/op) 223,674 allocs 223,148 allocs 🟢 -0.24%
client_to_client_via_server/ (ns/op) 788.62 ms 560.24 ms 🟢 -28.96%
client_to_client_via_server/ (B/op) 37.20 MB 24.03 MB 🟢 -35.39%
client_to_client_via_server/ (allocs/op) 478,656 allocs 297,639 allocs 🟢 -37.82%
attach_large_document/ (ns/op) 1.32 s 1.23 s 🟢 -6.99%
attach_large_document/ (B/op) 1.89 GB 1.89 GB 🔴 +0.04%
attach_large_document/ (allocs/op) 12,321 allocs 12,401 allocs 🔴 +0.65%
adminCli_to_server/ (ns/op) 542.08 ms 543.70 ms 🔴 +0.30%
adminCli_to_server/ (B/op) 21.76 MB 21.33 MB 🟢 -1.97%
adminCli_to_server/ (allocs/op) 291,952 allocs 316,691 allocs 🔴 +8.47%
BenchmarkLocker
Benchmark suite Previous Current Change
(ns/op) 82.86 ns 94.46 ns 🔴 +14.00%
(B/op) 32.00 B 32.00 B ⚪ 0%
(allocs/op) 1 allocs 1 allocs ⚪ 0%
BenchmarkLockerParallel
Benchmark suite Previous Current Change
(ns/op) 45.80 ns 44.56 ns 🟢 -2.71%
(B/op) 0.00 B 0.00 B ⚪ 0%
(allocs/op) 0 allocs 0 allocs ⚪ 0%
BenchmarkLockerMoreKeys
Benchmark suite Previous Current Change
(ns/op) 180.50 ns 179.60 ns 🟢 -0.50%
(B/op) 31.00 B 31.00 B ⚪ 0%
(allocs/op) 0 allocs 0 allocs ⚪ 0%
BenchmarkRWLocker
Benchmark suite Previous Current Change
RWLock_rate_2/ (ns/op) 50.25 ns 49.90 ns 🟢 -0.70%
RWLock_rate_2/ (B/op) 0.00 B 0.00 B ⚪ 0%
RWLock_rate_2/ (allocs/op) 0 allocs 0 allocs ⚪ 0%
RWLock_rate_10/ (ns/op) 44.88 ns 44.72 ns 🟢 -0.36%
RWLock_rate_10/ (B/op) 0.00 B 0.00 B ⚪ 0%
RWLock_rate_10/ (allocs/op) 0 allocs 0 allocs ⚪ 0%
RWLock_rate_100/ (ns/op) 63.08 ns 60.76 ns 🟢 -3.68%
RWLock_rate_100/ (B/op) 2.00 B 2.00 B ⚪ 0%
RWLock_rate_100/ (allocs/op) 0 allocs 0 allocs ⚪ 0%
RWLock_rate_1000/ (ns/op) 91.91 ns 89.97 ns 🟢 -2.11%
RWLock_rate_1000/ (B/op) 8.00 B 8.00 B ⚪ 0%
RWLock_rate_1000/ (allocs/op) 0 allocs 0 allocs ⚪ 0%
BenchmarkChange
Benchmark suite Previous Current Change
Push_10_Changes/ (ns/op) 4.54 ms 4.52 ms 🟢 -0.50%
Push_10_Changes/ (B/op) 150.42 KB 150.87 KB 🔴 +0.30%
Push_10_Changes/ (allocs/op) 1,623 allocs 1,624 allocs 🔴 +0.06%
Push_100_Changes/ (ns/op) 16.52 ms 16.06 ms 🟢 -2.73%
Push_100_Changes/ (B/op) 770.59 KB 771.55 KB 🔴 +0.13%
Push_100_Changes/ (allocs/op) 8,509 allocs 8,509 allocs ⚪ 0%
Push_1000_Changes/ (ns/op) 129.20 ms 129.04 ms 🟢 -0.12%
Push_1000_Changes/ (B/op) 7.22 MB 7.38 MB 🔴 +2.23%
Push_1000_Changes/ (allocs/op) 79,325 allocs 79,328 allocs ⚪ 0%
Pull_10_Changes/ (ns/op) 3.70 ms 3.66 ms 🟢 -1.12%
Pull_10_Changes/ (B/op) 124.59 KB 124.40 KB 🟢 -0.15%
Pull_10_Changes/ (allocs/op) 1,456 allocs 1,454 allocs 🟢 -0.14%
Pull_100_Changes/ (ns/op) 5.32 ms 5.24 ms 🟢 -1.57%
Pull_100_Changes/ (B/op) 354.61 KB 354.98 KB 🔴 +0.11%
Pull_100_Changes/ (allocs/op) 5,182 allocs 5,182 allocs ⚪ 0%
Pull_1000_Changes/ (ns/op) 10.88 ms 10.46 ms 🟢 -3.82%
Pull_1000_Changes/ (B/op) 2.20 MB 2.20 MB 🟢 -0.02%
Pull_1000_Changes/ (allocs/op) 44,681 allocs 44,680 allocs ⚪ 0%
BenchmarkSnapshot
Benchmark suite Previous Current Change
Push_3KB_snapshot/ (ns/op) 19.55 ms 18.61 ms 🟢 -4.85%
Push_3KB_snapshot/ (B/op) 905.58 KB 905.98 KB 🔴 +0.04%
Push_3KB_snapshot/ (allocs/op) 8,516 allocs 8,512 allocs 🟢 -0.05%
Push_30KB_snapshot/ (ns/op) 132.18 ms 132.66 ms 🔴 +0.37%
Push_30KB_snapshot/ (B/op) 8.24 MB 8.13 MB 🟢 -1.35%
Push_30KB_snapshot/ (allocs/op) 89,008 allocs 86,442 allocs 🟢 -2.88%
Pull_3KB_snapshot/ (ns/op) 7.80 ms 7.39 ms 🟢 -5.33%
Pull_3KB_snapshot/ (B/op) 1.12 MB 1.06 MB 🟢 -4.81%
Pull_3KB_snapshot/ (allocs/op) 20,064 allocs 19,260 allocs 🟢 -4.01%
Pull_30KB_snapshot/ (ns/op) 19.91 ms 19.53 ms 🟢 -1.93%
Pull_30KB_snapshot/ (B/op) 9.31 MB 8.77 MB 🟢 -5.81%
Pull_30KB_snapshot/ (allocs/op) 193,610 allocs 185,672 allocs 🟢 -4.10%
BenchmarkSplayTree
Benchmark suite Previous Current Change
stress_test_100000/ (ns/op) 0.19 ns 0.19 ns ⚪ 0%
stress_test_100000/ (B/op) 0.00 B 0.00 B ⚪ 0%
stress_test_100000/ (allocs/op) 0 allocs 0 allocs ⚪ 0%
stress_test_200000/ (ns/op) 0.40 ns 0.38 ns 🟢 -4.30%
stress_test_200000/ (B/op) 0.00 B 0.00 B ⚪ 0%
stress_test_200000/ (allocs/op) 0 allocs 0 allocs ⚪ 0%
stress_test_300000/ (ns/op) 0.57 ns 0.59 ns 🔴 +4.01%
stress_test_300000/ (B/op) 0.00 B 0.00 B ⚪ 0%
stress_test_300000/ (allocs/op) 0 allocs 0 allocs ⚪ 0%
random_access_100000/ (ns/op) 0.01 ns 0.01 ns 🟢 -0.31%
random_access_100000/ (B/op) 0.00 B 0.00 B ⚪ 0%
random_access_100000/ (allocs/op) 0 allocs 0 allocs ⚪ 0%
random_access_200000/ (ns/op) 0.03 ns 0.03 ns 🟢 -0.25%
random_access_200000/ (B/op) 0.00 B 0.00 B ⚪ 0%
random_access_200000/ (allocs/op) 0 allocs 0 allocs ⚪ 0%
random_access_300000/ (ns/op) 0.04 ns 0.05 ns 🔴 +3.28%
random_access_300000/ (B/op) 0.00 B 0.00 B ⚪ 0%
random_access_300000/ (allocs/op) 0 allocs 0 allocs ⚪ 0%
editing_trace_bench/ (ns/op) 0.00 ns 0.00 ns 🟢 -12.62%
editing_trace_bench/ (B/op) 0.00 B 0.00 B ⚪ 0%
editing_trace_bench/ (allocs/op) 0 allocs 0 allocs ⚪ 0%
BenchmarkSync
Benchmark suite Previous Current Change
memory_sync_10_test/ (ns/op) 7288.00 ns 7191.00 ns 🟢 -1.33%
memory_sync_10_test/ (B/op) 1.34 KB 1.34 KB ⚪ 0%
memory_sync_10_test/ (allocs/op) 35 allocs 35 allocs ⚪ 0%
memory_sync_100_test/ (ns/op) 55353.00 ns 55208.00 ns 🟢 -0.26%
memory_sync_100_test/ (B/op) 9.51 KB 9.50 KB 🟢 -0.02%
memory_sync_100_test/ (allocs/op) 268 allocs 268 allocs ⚪ 0%
memory_sync_1000_test/ (ns/op) 616285.00 ns 611942.00 ns 🟢 -0.70%
memory_sync_1000_test/ (B/op) 75.92 KB 76.20 KB 🔴 +0.37%
memory_sync_1000_test/ (allocs/op) 2,111 allocs 2,120 allocs 🔴 +0.43%
memory_sync_10000_test/ (ns/op) 7.47 ms 7.85 ms 🔴 +4.99%
memory_sync_10000_test/ (B/op) 761.49 KB 762.83 KB 🔴 +0.18%
memory_sync_10000_test/ (allocs/op) 20,475 allocs 20,493 allocs 🔴 +0.09%
BenchmarkTextEditing
Benchmark suite Previous Current Change
(ns/op) 5.18 s 5.19 s 🔴 +0.20%
(B/op) 3.92 GB 3.92 GB ⚪ 0%
(allocs/op) 20,619,777 allocs 20,619,738 allocs ⚪ 0%
BenchmarkTree
Benchmark suite Previous Current Change
10000_vertices_to_protobuf/ (ns/op) 4.17 ms 4.29 ms 🔴 +2.94%
10000_vertices_to_protobuf/ (B/op) 6.36 MB 6.36 MB ⚪ 0%
10000_vertices_to_protobuf/ (allocs/op) 70,025 allocs 70,025 allocs ⚪ 0%
10000_vertices_from_protobuf/ (ns/op) 217.30 ms 223.55 ms 🔴 +2.87%
10000_vertices_from_protobuf/ (B/op) 442.30 MB 442.30 MB ⚪ 0%
10000_vertices_from_protobuf/ (allocs/op) 290,038 allocs 290,039 allocs ⚪ 0%
20000_vertices_to_protobuf/ (ns/op) 8.84 ms 9.33 ms 🔴 +5.55%
20000_vertices_to_protobuf/ (B/op) 12.89 MB 12.89 MB ⚪ 0%
20000_vertices_to_protobuf/ (allocs/op) 140,028 allocs 140,028 allocs ⚪ 0%
20000_vertices_from_protobuf/ (ns/op) 884.61 ms 866.04 ms 🟢 -2.10%
20000_vertices_from_protobuf/ (B/op) 1.70 GB 1.70 GB ⚪ 0%
20000_vertices_from_protobuf/ (allocs/op) 580,043 allocs 580,088 allocs ⚪ 0%
30000_vertices_to_protobuf/ (ns/op) 14.26 ms 13.28 ms 🟢 -6.89%
30000_vertices_to_protobuf/ (B/op) 18.98 MB 18.98 MB ⚪ 0%
30000_vertices_to_protobuf/ (allocs/op) 210,029 allocs 210,029 allocs ⚪ 0%
30000_vertices_from_protobuf/ (ns/op) 2.00 s 2.01 s 🔴 +0.42%
30000_vertices_from_protobuf/ (B/op) 3.75 GB 3.75 GB ⚪ 0%
30000_vertices_from_protobuf/ (allocs/op) 870,147 allocs 870,142 allocs ⚪ 0%
BenchmarkVersionVector
Benchmark suite Previous Current Change
clients_10/ (ns/op) 160.21 ms 158.60 ms 🟢 -1.00%
clients_10/ (1_changepack(bytes)) 745.00 B 745.00 B ⚪ 0%
clients_10/ (2_snapshot(bytes)) 379.00 B 379.00 B ⚪ 0%
clients_10/ (3_pushpull(ms)) 8.00 ms 7.00 ms 🟢 -12.50%
clients_10/ (4_attach(ms)) 6.00 ms 6.00 ms ⚪ 0%
clients_10/ (5_changepack_after_detach(bytes)) 805.00 B 805.00 B ⚪ 0%
clients_10/ (6_snapshot_after_detach(bytes)) 136.00 B 136.00 B ⚪ 0%
clients_10/ (7_pushpull_after_detach(ms)) 8.00 ms 10.00 ms 🔴 +25.00%
clients_10/ (B/op) 19.93 MB 20.03 MB 🔴 +0.49%
clients_10/ (allocs/op) 83,762 allocs 83,230 allocs 🟢 -0.64%
clients_100/ (ns/op) 1.41 s 1.41 s 🟢 -0.41%
clients_100/ (1_changepack(bytes)) 6.14 KB 6.14 KB ⚪ 0%
clients_100/ (2_snapshot(bytes)) 3.08 KB 3.08 KB ⚪ 0%
clients_100/ (3_pushpull(ms)) 11.00 ms 11.00 ms ⚪ 0%
clients_100/ (4_attach(ms)) 11.00 ms 9.00 ms 🟢 -18.18%
clients_100/ (5_changepack_after_detach(bytes)) 6.21 KB 6.21 KB ⚪ 0%
clients_100/ (6_snapshot_after_detach(bytes)) 137.00 B 137.00 B ⚪ 0%
clients_100/ (7_pushpull_after_detach(ms)) 9.00 ms 9.00 ms ⚪ 0%
clients_100/ (B/op) 230.31 MB 223.58 MB 🟢 -2.92%
clients_100/ (allocs/op) 1,539,768 allocs 1,481,585 allocs 🟢 -3.78%
clients_1000/ (ns/op) 60.97 s 45.07 s 🟢 -26.08%
clients_1000/ (1_changepack(bytes)) 60.16 KB 60.16 KB ⚪ 0%
clients_1000/ (2_snapshot(bytes)) 30.08 KB 30.08 KB ⚪ 0%
clients_1000/ (3_pushpull(ms)) 95.00 ms 91.00 ms 🟢 -4.21%
clients_1000/ (4_attach(ms)) 249.00 ms 100.00 ms 🟢 -59.84%
clients_1000/ (5_changepack_after_detach(bytes)) 60.22 KB 60.22 KB ⚪ 0%
clients_1000/ (6_snapshot_after_detach(bytes)) 139.00 B 139.00 B ⚪ 0%
clients_1000/ (7_pushpull_after_detach(ms)) 26.00 ms 21.00 ms 🟢 -19.23%
clients_1000/ (B/op) 22.07 GB 6.43 GB 🟢 -70.86%
clients_1000/ (allocs/op) 111,762,106 allocs 93,354,307 allocs 🟢 -16.47%

Copy link

@hackerwins-yorkie hackerwins-yorkie left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Go Benchmark Analysis 📊

This is a comparison result between the previous(c7797cf) and the current commit(ebc525a).

Significant Changes (≥20% difference)

Benchmark suite Previous Current Change
BenchmarkRPC/client_to_client_via_server/ (B/op) 39.09 MB 24.58 MB 🟢 -37.13%
BenchmarkRPC/client_to_client_via_server/ (allocs/op) 470,568 allocs 300,624 allocs 🟢 -36.11%
BenchmarkRPC/client_to_client_via_server/ (ns/op) 771.40 ms 569.97 ms 🟢 -26.11%
BenchmarkSplayTree/random_access_200000/ (ns/op) 0.03 ns 0.03 ns 🔴 +20.81%

Key Observations 🔍

  • BenchmarkRPC:

    • BenchmarkRPC client_to_client_via_server demonstrated significant improvements across different metrics:
      • Bytes per operation reduced by 37.13%.
      • Allocations per operation decreased by 36.11%.
      • Nanoseconds per operation improved by 26.11%.
    • In contrast, a slight increase of 1.46% was observed in the client_to_server operation in terms of nanoseconds per operation.
  • BenchmarkTextEditing:

    • The benchmark suite for text editing showed a notable increase of 1.79% in nanoseconds per operation, indicating a slight performance degradation.
  • BenchmarkTree:

    • The 10000_vertices_to_protobuf operation experienced a 4.47% increase in nanoseconds per operation, while the 20000_vertices_from_protobuf operation showed a 2.95% increase in the same metric.
    • Conversely, the 30000_vertices_from_protobuf operation saw a minimal improvement of 0.36% in nanoseconds per operation.
  • Overall Trend:

    • Several benchmarks displayed minor fluctuations, with some operations showcasing improvements and others having slight deteriorations.
    • Across the various benchmark suites, improvements were more prevalent than deteriorations, indicating overall positive performance trends.

In this analysis, noticeable optimizations were observed in certain benchmark suites, contributing to enhanced performance metrics.

Detailed Test Results

BenchmarkDocument
Benchmark suite Previous Current Change
constructor_test/ (ns/op) 1472.00 ns 1487.00 ns 🔴 +1.02%
constructor_test/ (B/op) 1.43 KB 1.43 KB ⚪ 0%
constructor_test/ (allocs/op) 25 allocs 25 allocs ⚪ 0%
status_test/ (ns/op) 1334.00 ns 1068.00 ns 🟢 -19.94%
status_test/ (B/op) 1.40 KB 1.40 KB ⚪ 0%
status_test/ (allocs/op) 23 allocs 23 allocs ⚪ 0%
equals_test/ (ns/op) 7938.00 ns 7953.00 ns 🔴 +0.19%
equals_test/ (B/op) 7.71 KB 7.71 KB ⚪ 0%
equals_test/ (allocs/op) 132 allocs 132 allocs ⚪ 0%
nested_update_test/ (ns/op) 17081.00 ns 16958.00 ns 🟢 -0.72%
nested_update_test/ (B/op) 12.36 KB 12.36 KB ⚪ 0%
nested_update_test/ (allocs/op) 259 allocs 259 allocs ⚪ 0%
delete_test/ (ns/op) 22790.00 ns 22875.00 ns 🔴 +0.37%
delete_test/ (B/op) 15.84 KB 15.84 KB ⚪ 0%
delete_test/ (allocs/op) 340 allocs 340 allocs ⚪ 0%
object_test/ (ns/op) 8539.00 ns 8553.00 ns 🔴 +0.16%
object_test/ (B/op) 7.08 KB 7.08 KB 🔴 +0.01%
object_test/ (allocs/op) 119 allocs 119 allocs ⚪ 0%
array_test/ (ns/op) 28405.00 ns 28866.00 ns 🔴 +1.62%
array_test/ (B/op) 12.19 KB 12.19 KB ⚪ 0%
array_test/ (allocs/op) 274 allocs 274 allocs ⚪ 0%
text_test/ (ns/op) 31656.00 ns 33568.00 ns 🔴 +6.04%
text_test/ (B/op) 15.24 KB 15.24 KB ⚪ 0%
text_test/ (allocs/op) 485 allocs 485 allocs ⚪ 0%
text_composition_test/ (ns/op) 31389.00 ns 31614.00 ns 🔴 +0.72%
text_composition_test/ (B/op) 18.75 KB 18.75 KB ⚪ 0%
text_composition_test/ (allocs/op) 502 allocs 502 allocs ⚪ 0%
rich_text_test/ (ns/op) 86962.00 ns 85130.00 ns 🟢 -2.11%
rich_text_test/ (B/op) 39.41 KB 39.40 KB 🟢 -0.02%
rich_text_test/ (allocs/op) 1,147 allocs 1,147 allocs ⚪ 0%
counter_test/ (ns/op) 18075.00 ns 18613.00 ns 🔴 +2.98%
counter_test/ (B/op) 11.86 KB 11.86 KB ⚪ 0%
counter_test/ (allocs/op) 254 allocs 254 allocs ⚪ 0%
text_edit_gc_100/ (ns/op) 1.38 ms 1.39 ms 🔴 +0.70%
text_edit_gc_100/ (B/op) 864.90 KB 864.90 KB ⚪ 0%
text_edit_gc_100/ (allocs/op) 17,282 allocs 17,282 allocs ⚪ 0%
text_edit_gc_1000/ (ns/op) 52.51 ms 53.03 ms 🔴 +1.00%
text_edit_gc_1000/ (B/op) 46.84 MB 46.84 MB ⚪ 0%
text_edit_gc_1000/ (allocs/op) 185,593 allocs 185,590 allocs ⚪ 0%
text_split_gc_100/ (ns/op) 2.09 ms 2.10 ms 🔴 +0.54%
text_split_gc_100/ (B/op) 1.58 MB 1.58 MB ⚪ 0%
text_split_gc_100/ (allocs/op) 15,952 allocs 15,951 allocs ⚪ 0%
text_split_gc_1000/ (ns/op) 127.97 ms 129.64 ms 🔴 +1.31%
text_split_gc_1000/ (B/op) 137.79 MB 137.79 MB ⚪ 0%
text_split_gc_1000/ (allocs/op) 184,998 allocs 184,991 allocs ⚪ 0%
text_delete_all_10000/ (ns/op) 16.81 ms 17.41 ms 🔴 +3.54%
text_delete_all_10000/ (B/op) 10.58 MB 10.58 MB ⚪ 0%
text_delete_all_10000/ (allocs/op) 56,138 allocs 56,138 allocs ⚪ 0%
text_delete_all_100000/ (ns/op) 290.19 ms 293.08 ms 🔴 +1.00%
text_delete_all_100000/ (B/op) 105.54 MB 105.53 MB ⚪ 0%
text_delete_all_100000/ (allocs/op) 566,122 allocs 566,115 allocs ⚪ 0%
text_100/ (ns/op) 228221.00 ns 239975.00 ns 🔴 +5.15%
text_100/ (B/op) 120.95 KB 120.99 KB 🔴 +0.03%
text_100/ (allocs/op) 5,182 allocs 5,182 allocs ⚪ 0%
text_1000/ (ns/op) 2.43 ms 2.50 ms 🔴 +2.73%
text_1000/ (B/op) 1.16 MB 1.16 MB ⚪ 0%
text_1000/ (allocs/op) 51,085 allocs 51,085 allocs ⚪ 0%
array_1000/ (ns/op) 1.24 ms 1.27 ms 🔴 +2.66%
array_1000/ (B/op) 1.09 MB 1.09 MB 🔴 +0.02%
array_1000/ (allocs/op) 11,880 allocs 11,880 allocs ⚪ 0%
array_10000/ (ns/op) 13.36 ms 13.43 ms 🔴 +0.59%
array_10000/ (B/op) 9.89 MB 9.89 MB ⚪ 0%
array_10000/ (allocs/op) 120,736 allocs 120,735 allocs ⚪ 0%
array_gc_100/ (ns/op) 131033.00 ns 137279.00 ns 🔴 +4.77%
array_gc_100/ (B/op) 99.93 KB 99.93 KB ⚪ 0%
array_gc_100/ (allocs/op) 1,267 allocs 1,267 allocs ⚪ 0%
array_gc_1000/ (ns/op) 1.41 ms 1.45 ms 🔴 +3.25%
array_gc_1000/ (B/op) 1.14 MB 1.14 MB ⚪ 0%
array_gc_1000/ (allocs/op) 12,927 allocs 12,928 allocs ⚪ 0%
counter_1000/ (ns/op) 199973.00 ns 207772.00 ns 🔴 +3.90%
counter_1000/ (B/op) 178.18 KB 178.19 KB ⚪ 0%
counter_1000/ (allocs/op) 5,772 allocs 5,772 allocs ⚪ 0%
counter_10000/ (ns/op) 2.14 ms 2.18 ms 🔴 +1.68%
counter_10000/ (B/op) 2.07 MB 2.07 MB ⚪ 0%
counter_10000/ (allocs/op) 59,779 allocs 59,779 allocs ⚪ 0%
object_1000/ (ns/op) 1.41 ms 1.46 ms 🔴 +3.56%
object_1000/ (B/op) 1.44 MB 1.44 MB ⚪ 0%
object_1000/ (allocs/op) 9,926 allocs 9,926 allocs ⚪ 0%
object_10000/ (ns/op) 14.97 ms 15.18 ms 🔴 +1.38%
object_10000/ (B/op) 12.35 MB 12.35 MB ⚪ 0%
object_10000/ (allocs/op) 101,232 allocs 101,230 allocs ⚪ 0%
tree_100/ (ns/op) 1.04 ms 1.08 ms 🔴 +4.09%
tree_100/ (B/op) 951.08 KB 951.08 KB ⚪ 0%
tree_100/ (allocs/op) 6,103 allocs 6,103 allocs ⚪ 0%
tree_1000/ (ns/op) 74.45 ms 79.89 ms 🔴 +7.31%
tree_1000/ (B/op) 86.58 MB 86.58 MB ⚪ 0%
tree_1000/ (allocs/op) 60,113 allocs 60,113 allocs ⚪ 0%
tree_10000/ (ns/op) 9.39 s 9.61 s 🔴 +2.35%
tree_10000/ (B/op) 8.58 GB 8.58 GB ⚪ 0%
tree_10000/ (allocs/op) 600,205 allocs 600,187 allocs ⚪ 0%
tree_delete_all_1000/ (ns/op) 77.01 ms 79.83 ms 🔴 +3.66%
tree_delete_all_1000/ (B/op) 87.57 MB 87.57 MB ⚪ 0%
tree_delete_all_1000/ (allocs/op) 75,291 allocs 75,291 allocs ⚪ 0%
tree_edit_gc_100/ (ns/op) 3.83 ms 3.96 ms 🔴 +3.27%
tree_edit_gc_100/ (B/op) 4.15 MB 4.15 MB ⚪ 0%
tree_edit_gc_100/ (allocs/op) 15,147 allocs 15,147 allocs ⚪ 0%
tree_edit_gc_1000/ (ns/op) 314.96 ms 328.08 ms 🔴 +4.16%
tree_edit_gc_1000/ (B/op) 384.04 MB 384.04 MB ⚪ 0%
tree_edit_gc_1000/ (allocs/op) 154,937 allocs 154,932 allocs ⚪ 0%
tree_split_gc_100/ (ns/op) 2.59 ms 2.71 ms 🔴 +4.26%
tree_split_gc_100/ (B/op) 2.41 MB 2.41 MB ⚪ 0%
tree_split_gc_100/ (allocs/op) 11,132 allocs 11,132 allocs ⚪ 0%
tree_split_gc_1000/ (ns/op) 189.14 ms 204.39 ms 🔴 +8.06%
tree_split_gc_1000/ (B/op) 222.50 MB 222.50 MB ⚪ 0%
tree_split_gc_1000/ (allocs/op) 122,064 allocs 122,068 allocs ⚪ 0%
BenchmarkRPC
Benchmark suite Previous Current Change
client_to_server/ (ns/op) 420.53 ms 426.69 ms 🔴 +1.46%
client_to_server/ (B/op) 17.87 MB 16.14 MB 🟢 -9.69%
client_to_server/ (allocs/op) 223,725 allocs 223,812 allocs 🔴 +0.04%
client_to_client_via_server/ (ns/op) 771.40 ms 569.97 ms 🟢 -26.11%
client_to_client_via_server/ (B/op) 39.09 MB 24.58 MB 🟢 -37.13%
client_to_client_via_server/ (allocs/op) 470,568 allocs 300,624 allocs 🟢 -36.11%
attach_large_document/ (ns/op) 1.26 s 1.23 s 🟢 -2.06%
attach_large_document/ (B/op) 1.90 GB 1.90 GB 🟢 -0.02%
attach_large_document/ (allocs/op) 12,439 allocs 12,451 allocs 🔴 +0.10%
adminCli_to_server/ (ns/op) 543.02 ms 553.35 ms 🔴 +1.90%
adminCli_to_server/ (B/op) 21.30 MB 21.33 MB 🔴 +0.11%
adminCli_to_server/ (allocs/op) 316,652 allocs 316,721 allocs 🔴 +0.02%
BenchmarkLocker
Benchmark suite Previous Current Change
(ns/op) 85.81 ns 84.27 ns 🟢 -1.79%
(B/op) 32.00 B 32.00 B ⚪ 0%
(allocs/op) 1 allocs 1 allocs ⚪ 0%
BenchmarkLockerParallel
Benchmark suite Previous Current Change
(ns/op) 45.89 ns 45.67 ns 🟢 -0.48%
(B/op) 0.00 B 0.00 B ⚪ 0%
(allocs/op) 0 allocs 0 allocs ⚪ 0%
BenchmarkLockerMoreKeys
Benchmark suite Previous Current Change
(ns/op) 187.90 ns 175.20 ns 🟢 -6.76%
(B/op) 30.00 B 31.00 B 🔴 +3.33%
(allocs/op) 0 allocs 0 allocs ⚪ 0%
BenchmarkRWLocker
Benchmark suite Previous Current Change
RWLock_rate_2/ (ns/op) 50.93 ns 50.59 ns 🟢 -0.67%
RWLock_rate_2/ (B/op) 0.00 B 0.00 B ⚪ 0%
RWLock_rate_2/ (allocs/op) 0 allocs 0 allocs ⚪ 0%
RWLock_rate_10/ (ns/op) 45.77 ns 43.76 ns 🟢 -4.39%
RWLock_rate_10/ (B/op) 0.00 B 0.00 B ⚪ 0%
RWLock_rate_10/ (allocs/op) 0 allocs 0 allocs ⚪ 0%
RWLock_rate_100/ (ns/op) 61.23 ns 58.79 ns 🟢 -3.98%
RWLock_rate_100/ (B/op) 2.00 B 2.00 B ⚪ 0%
RWLock_rate_100/ (allocs/op) 0 allocs 0 allocs ⚪ 0%
RWLock_rate_1000/ (ns/op) 89.26 ns 86.90 ns 🟢 -2.64%
RWLock_rate_1000/ (B/op) 8.00 B 8.00 B ⚪ 0%
RWLock_rate_1000/ (allocs/op) 0 allocs 0 allocs ⚪ 0%
BenchmarkChange
Benchmark suite Previous Current Change
Push_10_Changes/ (ns/op) 4.49 ms 4.52 ms 🔴 +0.81%
Push_10_Changes/ (B/op) 150.94 KB 150.40 KB 🟢 -0.36%
Push_10_Changes/ (allocs/op) 1,625 allocs 1,624 allocs 🟢 -0.06%
Push_100_Changes/ (ns/op) 16.40 ms 16.81 ms 🔴 +2.49%
Push_100_Changes/ (B/op) 776.10 KB 773.33 KB 🟢 -0.36%
Push_100_Changes/ (allocs/op) 8,511 allocs 8,514 allocs 🔴 +0.04%
Push_1000_Changes/ (ns/op) 131.30 ms 133.03 ms 🔴 +1.32%
Push_1000_Changes/ (B/op) 7.18 MB 7.17 MB 🟢 -0.11%
Push_1000_Changes/ (allocs/op) 79,325 allocs 79,326 allocs ⚪ 0%
Pull_10_Changes/ (ns/op) 3.69 ms 3.69 ms 🟢 -0.08%
Pull_10_Changes/ (B/op) 124.60 KB 124.36 KB 🟢 -0.19%
Pull_10_Changes/ (allocs/op) 1,454 allocs 1,454 allocs ⚪ 0%
Pull_100_Changes/ (ns/op) 5.26 ms 5.25 ms 🟢 -0.13%
Pull_100_Changes/ (B/op) 354.65 KB 354.35 KB 🟢 -0.09%
Pull_100_Changes/ (allocs/op) 5,180 allocs 5,180 allocs ⚪ 0%
Pull_1000_Changes/ (ns/op) 10.49 ms 10.80 ms 🔴 +2.94%
Pull_1000_Changes/ (B/op) 2.20 MB 2.20 MB 🔴 +0.01%
Pull_1000_Changes/ (allocs/op) 44,680 allocs 44,681 allocs ⚪ 0%
BenchmarkSnapshot
Benchmark suite Previous Current Change
Push_3KB_snapshot/ (ns/op) 18.53 ms 18.89 ms 🔴 +1.96%
Push_3KB_snapshot/ (B/op) 902.00 KB 906.62 KB 🔴 +0.51%
Push_3KB_snapshot/ (allocs/op) 8,514 allocs 8,515 allocs 🔴 +0.01%
Push_30KB_snapshot/ (ns/op) 132.49 ms 134.84 ms 🔴 +1.77%
Push_30KB_snapshot/ (B/op) 8.01 MB 8.13 MB 🔴 +1.49%
Push_30KB_snapshot/ (allocs/op) 86,458 allocs 87,783 allocs 🔴 +1.53%
Pull_3KB_snapshot/ (ns/op) 7.36 ms 7.42 ms 🔴 +0.82%
Pull_3KB_snapshot/ (B/op) 1.06 MB 1.06 MB ⚪ 0%
Pull_3KB_snapshot/ (allocs/op) 19,256 allocs 19,261 allocs 🔴 +0.03%
Pull_30KB_snapshot/ (ns/op) 19.29 ms 19.33 ms 🔴 +0.18%
Pull_30KB_snapshot/ (B/op) 8.77 MB 8.77 MB 🔴 +0.03%
Pull_30KB_snapshot/ (allocs/op) 185,629 allocs 185,674 allocs 🔴 +0.02%
BenchmarkSplayTree
Benchmark suite Previous Current Change
stress_test_100000/ (ns/op) 0.20 ns 0.20 ns 🔴 +0.05%
stress_test_100000/ (B/op) 0.00 B 0.00 B ⚪ 0%
stress_test_100000/ (allocs/op) 0 allocs 0 allocs ⚪ 0%
stress_test_200000/ (ns/op) 0.38 ns 0.39 ns 🔴 +2.65%
stress_test_200000/ (B/op) 0.00 B 0.00 B ⚪ 0%
stress_test_200000/ (allocs/op) 0 allocs 0 allocs ⚪ 0%
stress_test_300000/ (ns/op) 0.60 ns 0.57 ns 🟢 -5.47%
stress_test_300000/ (B/op) 0.00 B 0.00 B ⚪ 0%
stress_test_300000/ (allocs/op) 0 allocs 0 allocs ⚪ 0%
random_access_100000/ (ns/op) 0.01 ns 0.01 ns 🟢 -1.82%
random_access_100000/ (B/op) 0.00 B 0.00 B ⚪ 0%
random_access_100000/ (allocs/op) 0 allocs 0 allocs ⚪ 0%
random_access_200000/ (ns/op) 0.03 ns 0.03 ns 🔴 +20.81%
random_access_200000/ (B/op) 0.00 B 0.00 B ⚪ 0%
random_access_200000/ (allocs/op) 0 allocs 0 allocs ⚪ 0%
random_access_300000/ (ns/op) 0.04 ns 0.04 ns 🔴 +1.67%
random_access_300000/ (B/op) 0.00 B 0.00 B ⚪ 0%
random_access_300000/ (allocs/op) 0 allocs 0 allocs ⚪ 0%
editing_trace_bench/ (ns/op) 0.00 ns 0.00 ns 🔴 +5.54%
editing_trace_bench/ (B/op) 0.00 B 0.00 B ⚪ 0%
editing_trace_bench/ (allocs/op) 0 allocs 0 allocs ⚪ 0%
BenchmarkSync
Benchmark suite Previous Current Change
memory_sync_10_test/ (ns/op) 7057.00 ns 7372.00 ns 🔴 +4.46%
memory_sync_10_test/ (B/op) 1.34 KB 1.34 KB ⚪ 0%
memory_sync_10_test/ (allocs/op) 35 allocs 35 allocs ⚪ 0%
memory_sync_100_test/ (ns/op) 54760.00 ns 55597.00 ns 🔴 +1.53%
memory_sync_100_test/ (B/op) 9.53 KB 9.51 KB 🟢 -0.28%
memory_sync_100_test/ (allocs/op) 269 allocs 268 allocs 🟢 -0.37%
memory_sync_1000_test/ (ns/op) 617621.00 ns 605178.00 ns 🟢 -2.01%
memory_sync_1000_test/ (B/op) 75.63 KB 76.69 KB 🔴 +1.40%
memory_sync_1000_test/ (allocs/op) 2,103 allocs 2,135 allocs 🔴 +1.52%
memory_sync_10000_test/ (ns/op) 7.83 ms 7.77 ms 🟢 -0.75%
memory_sync_10000_test/ (B/op) 752.23 KB 763.57 KB 🔴 +1.51%
memory_sync_10000_test/ (allocs/op) 20,417 allocs 20,501 allocs 🔴 +0.41%
BenchmarkTextEditing
Benchmark suite Previous Current Change
(ns/op) 5.20 s 5.29 s 🔴 +1.79%
(B/op) 3.92 GB 3.92 GB ⚪ 0%
(allocs/op) 20,619,784 allocs 20,619,755 allocs ⚪ 0%
BenchmarkTree
Benchmark suite Previous Current Change
10000_vertices_to_protobuf/ (ns/op) 4.29 ms 4.48 ms 🔴 +4.47%
10000_vertices_to_protobuf/ (B/op) 6.36 MB 6.36 MB ⚪ 0%
10000_vertices_to_protobuf/ (allocs/op) 70,025 allocs 70,025 allocs ⚪ 0%
10000_vertices_from_protobuf/ (ns/op) 222.46 ms 229.02 ms 🔴 +2.95%
10000_vertices_from_protobuf/ (B/op) 442.31 MB 442.30 MB ⚪ 0%
10000_vertices_from_protobuf/ (allocs/op) 290,039 allocs 290,039 allocs ⚪ 0%
20000_vertices_to_protobuf/ (ns/op) 9.14 ms 9.34 ms 🔴 +2.19%
20000_vertices_to_protobuf/ (B/op) 12.89 MB 12.89 MB ⚪ 0%
20000_vertices_to_protobuf/ (allocs/op) 140,028 allocs 140,028 allocs ⚪ 0%
20000_vertices_from_protobuf/ (ns/op) 877.37 ms 877.92 ms 🔴 +0.06%
20000_vertices_from_protobuf/ (B/op) 1.70 GB 1.70 GB ⚪ 0%
20000_vertices_from_protobuf/ (allocs/op) 580,090 allocs 580,044 allocs ⚪ 0%
30000_vertices_to_protobuf/ (ns/op) 13.15 ms 14.20 ms 🔴 +7.98%
30000_vertices_to_protobuf/ (B/op) 18.98 MB 18.98 MB ⚪ 0%
30000_vertices_to_protobuf/ (allocs/op) 210,029 allocs 210,029 allocs ⚪ 0%
30000_vertices_from_protobuf/ (ns/op) 2.02 s 2.01 s 🟢 -0.36%
30000_vertices_from_protobuf/ (B/op) 3.75 GB 3.75 GB ⚪ 0%
30000_vertices_from_protobuf/ (allocs/op) 870,086 allocs 870,142 allocs ⚪ 0%
BenchmarkVersionVector
Benchmark suite Previous Current Change
clients_10/ (ns/op) 157.85 ms 160.23 ms 🔴 +1.51%
clients_10/ (1_changepack(bytes)) 745.00 B 745.00 B ⚪ 0%
clients_10/ (2_snapshot(bytes)) 379.00 B 379.00 B ⚪ 0%
clients_10/ (3_pushpull(ms)) 7.00 ms 8.00 ms 🔴 +14.29%
clients_10/ (4_attach(ms)) 6.00 ms 6.00 ms ⚪ 0%
clients_10/ (5_changepack_after_detach(bytes)) 805.00 B 805.00 B ⚪ 0%
clients_10/ (6_snapshot_after_detach(bytes)) 136.00 B 136.00 B ⚪ 0%
clients_10/ (7_pushpull_after_detach(ms)) 8.00 ms 8.00 ms ⚪ 0%
clients_10/ (B/op) 20.71 MB 18.86 MB 🟢 -8.93%
clients_10/ (allocs/op) 83,248 allocs 83,206 allocs 🟢 -0.05%
clients_100/ (ns/op) 1.39 s 1.43 s 🔴 +2.98%
clients_100/ (1_changepack(bytes)) 6.14 KB 6.14 KB ⚪ 0%
clients_100/ (2_snapshot(bytes)) 3.08 KB 3.08 KB ⚪ 0%
clients_100/ (3_pushpull(ms)) 11.00 ms 12.00 ms 🔴 +9.09%
clients_100/ (4_attach(ms)) 9.00 ms 10.00 ms 🔴 +11.11%
clients_100/ (5_changepack_after_detach(bytes)) 6.21 KB 6.21 KB ⚪ 0%
clients_100/ (6_snapshot_after_detach(bytes)) 137.00 B 137.00 B ⚪ 0%
clients_100/ (7_pushpull_after_detach(ms)) 9.00 ms 10.00 ms 🔴 +11.11%
clients_100/ (B/op) 213.58 MB 215.21 MB 🔴 +0.76%
clients_100/ (allocs/op) 1,481,342 allocs 1,481,377 allocs ⚪ 0%
clients_1000/ (ns/op) 42.35 s 43.72 s 🔴 +3.23%
clients_1000/ (1_changepack(bytes)) 60.16 KB 60.16 KB ⚪ 0%
clients_1000/ (2_snapshot(bytes)) 30.08 KB 30.08 KB ⚪ 0%
clients_1000/ (3_pushpull(ms)) 116.00 ms 113.00 ms 🟢 -2.59%
clients_1000/ (4_attach(ms)) 72.00 ms 73.00 ms 🔴 +1.39%
clients_1000/ (5_changepack_after_detach(bytes)) 60.22 KB 60.22 KB ⚪ 0%
clients_1000/ (6_snapshot_after_detach(bytes)) 139.00 B 139.00 B ⚪ 0%
clients_1000/ (7_pushpull_after_detach(ms)) 27.00 ms 23.00 ms 🟢 -14.81%
clients_1000/ (B/op) 6.43 GB 6.43 GB ⚪ 0%
clients_1000/ (allocs/op) 93,354,528 allocs 93,355,099 allocs ⚪ 0%

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants