-
Notifications
You must be signed in to change notification settings - Fork 604
branch details with gix
: 2.6x faster!
#4670
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
Conversation
@Byron is attempting to deploy a commit to the GitButler Team on Vercel. A member of the Team first needs to authorize it. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@krlvi Maybe you could help answer a couple of probably minor questions - they will probably resolves themselves as well once tests are added.
735e76d
to
e70d7bb
Compare
crates/gitbutler-branch-actions/tests/virtual_branches/list_details.rs
Outdated
Show resolved
Hide resolved
1a49eda
to
728960e
Compare
b19bf43
to
9520bdb
Compare
The latest updates on your projects. Learn more about Vercel for Git ↗︎
|
the tree to tree diffing being 11 times faster is really impressive! looking forward to using that in other hot paths of the app :) |
Unfortunately it's really only like that in the given microbenchmark, which just diffs a single-line changes of the same two blobs, 10k times. As In practice, on a real GitLab repo it still clocks in at 1.6x faster, which is something I can feel when using the UI. |
This is useful to get simple performance metrics.
This lists all branches that the user would see (and get details for).
Alternatively, correct the assumption that there is a difference.
This is very relevant for tree-diffing performance, and more could be tuned here like pack-cache sizes and object cache sizes.
This way, only the first branch has to wait, all further branches will likely have their merge-base already computed then.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
awesome! cant wait to try it
This PR is the first step towards providing branch details with
gitoxide
.Tasks
git2
performance optimizations for 'apples-to-apples' comparison.gix
for commit-walk - more than twice as fast.gix
for tree-tree diffgitlab
it's just about1.6x1,85x ofgit2
(thanks to moderate multi-threading).origin/478475-model-registry-markdown-support-for-version-description
has 2 commit (itself) above the merge-base, but listscommit in the
gix`git2
for some reason counts the first parent, even though it's 'underneath' the mergebase.gix
is faster at merge-bases, it will probably only make a difference in memory consumption, but not in performance.CC
basedzlibng
toflate2
Follow-Ups
Notes for the Reviewer
git2
for performance, which also levels the playing field as certain validations cost time, but aren't performed (yet) bygix
.gix
is able to be 1.6x ofgit2
when it comes to tree-diffing, and it's noticeable. however, for now it's more like 1.5x as stock zlib has to be used untilcmake
is either available orflate2
can be configured to not usecmake
at all.Notes
main
it becomes 'entangled' withrefs/heads/main
. However, whenrefs/heads/main
receives a new commit,main
(the vbranch) knows nothing about it and also won't offer to rebase on top of it. It's still tied toorigin/main
. It's probably OK, even though I would have expected to be able to incorporate the changes somehow.max-performance
work on CI - shouldn't be too hard and would already work if docker wasn't used.git branch
sorts like that (but using the full ref name. In the end, the UI should probably sort and group like it wants, then the backend doesn't have to do that anymore. Then I realized the UI is already sorting by last-modified date.gitbutler-cli branch details 478475-model-registry-markdown-support-for-version-description "pedropombeiro/454313/3-deprecate-fields" "mc/overwrite-jobs-instead-of-uniqueness-enforcement" "backfill-multiple-desired-sharding-key-small-table-compliance_framework_security_policies" "jay_mccure-master-patch-68663" "work-items-widgets-migration" "ah-dedup-records-migration" "455903-limits" "477889-implement-additional-telemetry-for-added-context-code-completion" "psi-ff-summduo" "450705-policies-mvp-combined-mode" "ia-arkose-token-verification-consitent-return" "hustewart-add-build-snippet-service" "bw-add-subscribed-filter" "adjust-new-user-signup-caps-validation" "bk/473748-backfill-owasp-top-10-null" "cwoolley-gitlab-master-patch-150b" "application-settings-pattern-poc-haml" "470051-document-backup-of-object-storage-data" "j_lar/add_redis_keys_to_monitor" "477306-glql-table-of-issues" "rlehmann1-fix-lint-issues-policies" "ban-ai-duo-settings-admin-group-form" "handle-empty-ff-merge-in-from-train-ref-strategy" "bw-run-markdown-benchmark-on-tag" "477813-follow-up-from-refactor-ai-ga-policies" "gitaly-ci-jobs-52550" "443369-update-self-managed-billing" "433082-iteration-rest-api-does-not-properly-filter-out-iterations-from-groups-with-no-access" "jkhabie-add-reachability-column-sbom" "jreporter-master-patch-d091" "vmairet-add-token-associations" "vij-remove-member-default-value" "autoflow/refactor-naming" "thutterer-danger-demo-settings" "443369-update-billed-shared-group-users" "fix_audit_event_flow" "16-11-stable-ee" "477712-health-check-repeated-click" "470701-branch-rule-editing-minimum-required-approvals-per-target-branch" "ensure_prepared_worker_automation" "janis-add-pages-to-usage-quotas" "quarantine-flaky-tests-spec-lib-gitlab-import_export-project-relation_factory_spec-rb-81" "440857-glql-integration" "472352-transition-dast-site-profiles-builds" "tachyons-pat-sharding-key-full" "368542-container-registry-metadata" "design-management-widget-migration" "ag/477091-seat-controls-fe-validation" "458831-remove-required_instance_ci_template-column" "455903-placeholder-limit" "gmh-add-approver-to-mr-graphql" "quarantine-flaky-tests-spec-lib-banzai-pipeline-plain_markdown_pipeline_spec-rb-106" "463258-create-common-solution-on-how-to-count-and-track-feature-flag-enabled-value" "mk/fix-empty-replication-details-view" "rodrigo/integrate-improved-user-mapping-in-direct-transfer" "16-9-stable-ee" "jmc-16.9-backport-shm-qa" "mattkasa/refactor-query-analyzers" "application-settings-pattern-poc" "464587-support-merge-requests-as-context-for-duo-chat-responses" "449139-fe-update-the-list-and-the-counter-after-inline-role-change-2" "jivanvl-update-permissions-container-expiration-policy" "hustewart-snippets-refactor" "477547_nullify_organization_id_migration" "slashmanov/add-release-filter-to-mr-list-app" "dagron1-vulnerability-resolution-supported-scanners" "464132-work-items-prevent-adding-more-than-10-items-to-hierarchy-widget-in-one-batch" "md-add-feature-flag-headers" "form-issue-jira-setting" "ph/mrDashboardNavCount" "mc_rocha-poc-ingest-license-sbom-security-policy""462398-refactor-pb-fe" "bk/473748-modify-finder" "471726-ignore-invalid-project-CI-with-pep-override-strategy" "autoflow/issue-created-event" "466718-add-api-endpoint-for-bulk-usage_data-sending" "vi-display-closed-status-for-branches" "docs/bprescott/20240618-dbmisc" "eduardosanz-master-patch-19280" "461761-refactor-clean-widgets-to-only-use-id-iid-and-fullpath-to-fetch-work-item-in-individual" "andrey-move-gdk-build" "reintroduce-create-jira-issue-form" "seed-placeholder-users-task" "ck3g-test-xray-job-do-not-merge" "463822-create-service-to-generate-metadata-for-group-instance-level"
stderr with
cache-efficiency-debug
enabled, showing decent object cache performance, but bad pack-cache performance. The object cache is the most important.