Skip to content

INTPYTHON-847 Add performance tests#366

Merged
timgraham merged 1 commit into
mongodb:mainfrom
NoahStapp:DRIVERS-2917
Mar 2, 2026
Merged

INTPYTHON-847 Add performance tests#366
timgraham merged 1 commit into
mongodb:mainfrom
NoahStapp:DRIVERS-2917

Conversation

@NoahStapp

@NoahStapp NoahStapp commented Aug 14, 2025

Copy link
Copy Markdown
Contributor

Purpose

This is the first draft of the Django implementation of the MongoDB ODM Benchmarking suite. It contains a small suite of benchmark tests designed to measure django-mongodb-backend performance across data sizes and structures for what we expect to be common user operations.

This is NOT intended to be a comprehensive test suite for every operation, only the most common and widely applicable. This is also not intended to be Django specific: each of these tests must be implementable across all of our ODMs, up to the features supported by each library.

Structure

The benchmarks are contained within a separate Django application within tests/performance/perftest. This application exists only to execute the benchmarking suite.

Running Locally

After starting a local MongoDB server, the tests can be run by running python manage.py test from the tests/performance directory. The full suite run locally is expected to take approximately 10 minutes. For faster benchmarks, pass FASTBENCH=1 as an environment variable totests/performance/perftest/tests.py.

Review Items

  • Do the Django operations being performed conform to our expectations of how django-mongodb-backend should be used?
  • Are any operations missing that we expect to be frequently performed by users?
  • Is the scope and breadth of the benchmarks sufficient for coverage without being cumbersome to implement across potentially dozens of libraries, first and third-party?
  • Are the data sizes and model structures being used representative of real-world situations?

@aclark4life

aclark4life commented Aug 18, 2025

Copy link
Copy Markdown
Collaborator

In general, awesome!

Re:

Structure

The benchmarks are contained within a separate Django application within tests/performance/perftest. This application exists only to execute the benchmarking suite.

Can this be integrated with existing tests such that some established testing conventions are followed? For example,

  • tests/<testsuite>_ - contains test suites for various features
  • performance - Django project for perf testing that contains perf testing app?

IOW If the performance directory "contained a test suite for testing performance" then we could follow the convention of adding the _ at the end so the Django tests could run the performance tests. Since performance appears to be a standalone Django project, I'm not sure what the best thing to do is (especially given the need to be able to run without the Django test runner.) I wonder if a top level perf_testing project that contains the perftest app may be better than including the perf tests in tests/. Or maybe a top level perftest/perftest, project and app respectively. Also not sure if it helps, but apps don't have to be in projects …

@NoahStapp

Copy link
Copy Markdown
Contributor Author

In general, awesome!

Re:

Structure

The benchmarks are contained within a separate Django application within tests/performance/perftest. This application exists only to execute the benchmarking suite.

Can this be integrated with existing tests such that some established testing conventions are followed? For example,

  • tests/<testsuite>_ - contains test suites for various features
  • performance - Django project for perf testing that contains perf testing app?

IOW If the performance directory "contained a test suite for testing performance" then we could follow the convention of adding the _ at the end so the Django tests could run the performance tests. Since performance appears to be a standalone Django project, I'm not sure what the best thing to do is (especially given the need to be able to run without the Django test runner.) I wonder if a top level perf_testing project that contains the perftest app may be better than including the perf tests in tests/. Or maybe a top level perftest/perftest, project and app respectively. Also not sure if it helps, but apps don't have to be in projects …

Running the performance tests alongside the Django tests would add too much runtime to be practical. Putting the perftest project somewhere not in the tests directory is fine with me, but having every test suite be within tests makes more sense from a consistency standpoint.

Is there a way to independently run tests on the perftest without a project? If we can do away with needing to have a full (if minimal) Django project at all here that would be ideal, but I couldn't find a way to do so with how the other tests here are set up.

@timgraham

Copy link
Copy Markdown
Collaborator

I'm inclined to agree that the performance tests should be in their own directory performance_tests or test_performance? There not meant to be run like the other tests, so to intermingle them seems confusing (and requires workarounds in the test runner, as you added).

Probably integrating with Django's runtests.py isn't the way to go, but I'll think about it. At least the settings file you added could be minimized. I could do that without much effort. I have a few comments from a cursory glance and will dig in more later.

Comment thread tests/performance/perftest/tests.py Outdated
Comment on lines +191 to +199
class TestSmallFlatDocCreation(SmallFlatDocTest, TestCase):
def do_task(self):
for doc in self.documents:
model = SmallFlatModel(**doc)
model.save()

def after(self):
SmallFlatModel.objects.all().delete()

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

I'm a little uncertain how this whole thing fits together. On the hand, you inherit django.test.TestCase which has its own setUp/tearDown strategy, on the other hand, you seem to implement your scheme with an after() method. Some classes use after(), others tearDown()... is it intentional? (edit: perhaps answered by the benchmark spec.)

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

The ODM benchmark spec (draft PR here: mongodb/specifications#1828) is helpful here, but the short answer is yes, we need the ability to do setup or teardown both before and after every iteration of a test as well as the entire set of iterations.

Comment thread tests/performance/perftest/tests.py Outdated
Comment thread tests/performance/perftest/tests.py Outdated
Comment thread tests/performance/odm-data/flat_models/large_doc.json Outdated
Comment thread performance_tests/perftest/tests.py Outdated
Comment thread tests/performance/perftest/tests.py Outdated
Comment thread .evergreen/config.yml Outdated
Comment on lines +7 to +9
# Install django-mongodb-backend
/opt/python/3.10/bin/python3 -m venv venv
. venv/bin/activate

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

NIT:
Whilst I'd rather not have a new dependency on drivers-evergreen-tools, to future-proof the binary usage, you could add in the find_python function

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

This I copied over from the existing run-tests.sh script here. Let's update them both in a separate ticket.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

We're going to bring in drivers-evergreen-tools anyway for QE

Comment thread .evergreen/run_perf_test.py Outdated
Comment thread .github/workflows/runtests.py Outdated
Comment thread tests/performance/odm-data/flat_models/small_doc.json Outdated
Comment thread performance_tests/perftest/tests.py Outdated
Comment thread tests/performance/perftest/tests.py Outdated
Comment thread tests/performance/perftest/tests.py Outdated
@NoahStapp NoahStapp requested review from Jibola and timgraham August 20, 2025 13:51
@NoahStapp NoahStapp marked this pull request as ready for review October 7, 2025 12:34
@NoahStapp NoahStapp changed the title DRIVERS-2917 - Standardized Performance Testing of ODMs and Integrations INTPYTHON-847 - Standardize performance testing infrastructure Dec 10, 2025
Jibola
Jibola previously requested changes Dec 16, 2025
Comment thread .evergreen/config.yml Outdated
Comment thread .evergreen/config.yml Outdated


def handle_perf(start_time: datetime):
end_time = datetime.now()

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

For duration calculations, it's better practice to use time.monotonic(); any particular reason to use datetime?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

This is copied from how PyMongo handles it for consistency. I believe we use it there for ease of the different ways we use the timestamps.

Comment thread tests/performance/odm-data/flat_models/small_doc.json Outdated
Comment thread tests/performance/odm-data/nested_models/large_doc_nested.json Outdated
Comment thread tests/performance/perftest/models.py Outdated
Comment thread tests/performance/perftest/settings.py Outdated
Comment thread tests/performance/perftest/settings.py Outdated
Comment thread tests/performance/perftest/settings.py Outdated
Comment thread performance_tests/perftest/tests.py Outdated

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

I will give this file another look over -- only part remaining to be reviewed for me.

@NoahStapp NoahStapp requested a review from Jibola December 17, 2025 20:10
Comment thread .evergreen/config.yml
Comment thread .evergreen/perf-submission.sh Outdated
Comment thread .evergreen/run-perf-tests.sh Outdated
Comment thread .evergreen/perf-submission.sh Outdated
Comment thread .evergreen/run_perf_test.py Outdated
Comment thread performance_tests/perftest/tests.py Outdated
Comment thread tests/performance/perftest/tests.py Outdated
Comment thread performance_tests/perftest/tests.py Outdated
Comment on lines +61 to +70
result_data: list = []


def tearDownModule():
output = json.dumps(result_data, indent=4)
if OUTPUT_FILE:
with open(OUTPUT_FILE, "w") as opf: # noqa: PTH123
opf.write(output)
else:
print(output) # noqa: T201

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Uff... I wonder if this blocks splitting up the tests into multiple files? At least it may need to become "append aware."

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Yes, splitting into multiple files is complicated by our infrastructure expecting a single JSON output file for the entire suite.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

After I suggested a default for OUTPUT_FILE, I now see that would break this if/else. Maybe we just remove OUTPUT_FILE from the documentation on how to run the tests? And actually, perhaps it's appropriate to remove this print statement also as I imagine the test by test output would be more useful than the JSON version meant for machine consumption?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

The JSON version is a nice simple summary that's useful for local use as well. Setting a default in the run-perf-tests.sh script that CI/CD uses makes sense, but we shouldn't set a default in the actual test suite iteself.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

I'm not going to argue, but my feeling is that:
TestSmallFlatDocUpdate 0.007 MB/s, MEDIAN=4.282s, total time=8.648s, iterations=2
is much easier to read than:

    {
        "info": {
            "test_name": "SmallFlatDocUpdate"
        },
        "metrics": [
            {
                "name": "megabytes_per_sec",
                "type": "MEDIAN",
                "value": 0.007472334166114841,
                "metadata": {
                    "improvement_direction": "up",
                    "measurement_unit": "megabytes_per_second"
                }
            }
        ]
    }

and to get to the former, I have to scroll up past the huge JSON dump. (Of course, nothing is stopping someone from adding or removing that print statement while testing their changes.)

Incidentally, the JSON results don't include the elapsed time. Is it correct that we won't track that metric? The spec says, "In addition to latency data, ..."

Where can details about the metadata format (improvement_direction, etc.) be found?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

We don't report elapsed time in the JSON metrics, correct. The JSON metrics are tracked by Evergreen's charting, and we want a single metric easily comparable across ODMs there. We record elapsed time individually as part of each suite run as a secondary metric if needed for investigation.

The metadata format is for Evergreen chart tracking.

Comment thread .evergreen/config.yml Outdated
Comment thread .evergreen/config.yml Outdated
Comment on lines +184 to +185
tasks:
- name: perf-tests

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

In the PR description you wrote, "The full suite run locally is expected to take approximately 10 minutes." On the latest Evergreen build for this PR, it took 35 minutes... is it expected? That's a bit slower than the rest of our builds (~20 minutes). Is this going to run for every push to every PR? It's probably unnecessary. Perhaps it could be a very fast version with very low iterations just to ensure these tests don't break.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

That was for an earlier iteration that didn't fully implement the spec.

No, these tests are going to run once for each commit merged into master, not once per PR push.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

So they won't run at all on PRs? What do you think about my point about running with one/low iterations on PRs to ensure a PR doesn't break the suite?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Since the suite runs public APIs only, I don't think having an extra suite just to test that the suite itself doesn't break is worth it. Anything that breaks this suite should be caught by other tests failing.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

But the performance tests are running on this PR... Is there some change we need to make before merging this so that they don't run on PRs? What happens when we need to make a change to the performance tests? Do we temporarily modify some trigger to have them run on that PR, then revert the trigger before merging?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

We'll have to update the Evergreen project settings to exclude the benchmark tests on PRs. Changes to the perf tests would require scheduling Evergreen patches to confirm changes work as expected.

Comment thread tests/performance/perftest/tests.py Outdated
Comment thread tests/performance/perftest/tests.py Outdated
@NoahStapp NoahStapp requested a review from timgraham January 7, 2026 17:01
Comment thread performance_tests/perftest/tests.py Outdated
@NoahStapp NoahStapp requested a review from timgraham January 21, 2026 17:40
@timgraham timgraham changed the title INTPYTHON-847 - Standardize performance testing infrastructure INTPYTHON-847 Add performance tests Jan 27, 2026
Comment on lines +5 to +6
Django MongoDB Backend uses a benchmarking suite to catch performance regressions.
This suite is located in the top-level ``performance_tests`` directory of the Django MongoDB Backend repository.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

I'd also like to see a discussion (linking to the benchmark spec as appropriate) about what this is benchmarking (both Python code and MongoDB queries), how to interpret the results (Mb/sec??), where do we view the ongoing results, etc.

@NoahStapp NoahStapp Jan 27, 2026

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

I'm not sure what you mean here. We could add a link to the benchmark spec, which details the purpose and scope of the suite? There's already a link in the actual test file. Each run will have an evergreen chart attached to its run, there isn't a single place with all the results added dynamically.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Basically, how can I use this tool to catch performance regressions? Am I supposed to run it locally and compare before and after? Is there a histogram of results? Will regressions be automatically detected? How will we know if the results are statistically significant?

Django has https://github.com/django/django-asv/tree/main and results displayed at https://django.github.io/django-asv/ but it's not obvious how to interpret and use the results, so I have similar concerns here.

Is this supposed to catch performance regressions in Django MongoDB Backend, MongoDB, or both? How can we differentiate?

The spec answers some questions but it's a long document with a lot of unnecessary details. Maybe high-level "cheat sheet" would be useful or other ODMs as well.

I suppose not all questions need to be answered before merging this (perhaps some answers are unknown), but this is what I've been thinking about.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Short answer: https://jira.mongodb.org/browse/INTPYTHON-530 will set up automated alerting to be identical to our current PyMongo automated regression alerts. Here's a link to what the charting looks like for that, it'll look similar for Django: https://spruce.mongodb.com/task/mongo_python_driver_performance_benchmarks_perf_8.0_standalone_a89c5e3a89fa7e621f03fc9173067256a5fdc300_26_01_26_19_36_51/trend-charts?execution=0.

The expectation is that the benchmark suite will run up to once per day on commit merge and automatically alert us in Slack if any regressions are detected. No local runs are expected generally.

Comment thread .evergreen/run_perf_test.py Outdated
Comment thread docs/internals/contributing/performance-tests.rst Outdated
Comment thread performance_tests/perftest/tests.py Outdated
Comment thread performance_tests/perftest/tests.py Outdated
@NoahStapp NoahStapp requested a review from timgraham January 28, 2026 15:14
@timgraham timgraham force-pushed the DRIVERS-2917 branch 3 times, most recently from 1fffd97 to d26a8f2 Compare February 3, 2026 01:39

OUTPUT_FILE = os.environ.get("OUTPUT_FILE")

if os.environ.get("FASTBENCH"):

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Nit: It seems it would be more convenient for developers if "FASTBENCH" were the default and FULLBENCH were set by CI. Any objection to changing the default? Probably I should have put FASTBENCH=1 in my .bashrc by now because I keep forgetting to prefix test invokations with it, but why force devs to do that for the common case?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

We don't expect devs to regularly run these locally, so the default case is the CI run of the full benchmarks.

self.document = json_util.loads(data.read())

self.data_size = len(encode(self.document)) * self.num_docs
self.documents = [self.document.copy() for _ in range(self.num_docs)]

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

I notice this pattern of initializing self.documents but it seems wasteful of CPU/RAM to create all those identical documents.

Any reason not to refactor patterns like this:

for doc in self.documents:
    LargeFlatModel.objects.create(**doc)

to:

for _ in self.num_docs:
    LargeFlatModel.objects.create(**self.document)

?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Good catch! Since we're creating Model instances with the documents, we don't actually need more than the single document.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Here's some interesting data from making this change to the TestLargeFlatDocCreation benchmark:
before: 83.173 MB/s, MEDIAN=29.102s, total time=307.418s, iterations=10
after: 111.719 MB/s, MEDIAN=21.666s, total time=222.919s, iterations=10

It seems that iterating through a list is much costlier than iterating through a range.

I'm not a benchmarking guru, but to me, this perhaps highlights the importance of making benchmarks minimal so that we're benchmarking the backend and the database and not the efficiency of the benchmark task itself. In other words, it may be better to have many iterations of the same task rather than few iterations of a long task that has a loop within it. This is the approach taken for the benchmarks in Django's djangobench tool.

I offer this as food for thought, and I don't insist on revising the benchmarks prior to merging this.

Comment on lines +59 to +71
class TestLargeFlatDocFilterPkByIn(LargeFlatDocTest, TestCase):
"""Benchmark for filtering large flat documents using the __in operator for primary keys."""

def setUp(self):
super().setUp()
models = []
for doc in self.documents:
models.append(LargeFlatModel(**doc))
LargeFlatModel.objects.bulk_create(models)
self.ids = [model.id for model in models]

def do_task(self):
list(LargeFlatModel.objects.filter(id__in=self.ids))

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

I see 10 benchmaks in the spec and 12 benchmarks implemented. I think this is the extra one. Did I miss it? I ask especially because this seems like a very inefficient operation that perhaps should be avoided. At least in SQL, huge "in" clauses are often naive solutions by inexperienced devs. The better solution is to to instead include the filter criteria that generated the huge list of ids in the subsequent query.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

If this is a likely operation for devs new to Django or MongoDB + Django, it's valuable to benchmark despite the inefficiency. Do we explicitly call out that this is a poor pattern in our docs?

The spec explicitly allows for extra benchmarks specific to each ODM, such as this one.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Django MongoDB Backend doesen't have any query optimization docs like Django's. I thought maybe that Django docs mentions it, but I don't see anything.

Unless my intuition is incorrect, it seems that a lookup with a list of 10,000 ids (num docs) would be slow.

I'm just giving feedback based on the review item you wrote, "Do the Django operations being performed conform to our expectations of how django-mongodb-backend should be used?" I would say, "No, this is stupid code."

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

If this operation is objectively inefficient for both SQL and MongoDB and we expect users to be aware of that, I'm fine removing it.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

I modified the __in benchmarks to query with a subset of ids which is more realistic.

Comment thread performance_tests/perf/test_large_nested_doc.py Outdated
Comment on lines +22 to +25
class Meta:
indexes = [
models.Index(fields=["field1"], name="field1_idx"),
]

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Does the spec say anything about indexing (searching "index" didn't give any results)? I couldn't spot a reason why this field (and only this field) is indexed.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

This is the field used for the update operation tests. We expect ODMs to index fields if doing so is the typical use-case for their library.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

But the filter criteria for the update is the document's id. Naively, I wouldn't think an index on the value being updated would affect its performance (other than the the fact that the server needs to be incorporate the new value in the index, so the performance might be a bit worse, right?).

Is it important for the spec to dictate which fields should be indexed so that results can be fairly compared across ODMs?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

A future revision of the spec will likely specify which fields must be indexed. This first version is largely about catching regressions within an ODM, not comparing across ODMs.



class StringEmbeddedModel(EmbeddedModel):
unique_field = models.CharField(max_length=100)

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Should it have a unique constraint?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

I don't think it's relevant in this case, as this field always contains a stringified ObjectId.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

I ask because unique constraints may affect the query planner.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

I'd rather leave it as without a unique constraint to catch a wider spread of user scenarios.

Comment thread performance_tests/perf/base.py Outdated
Comment thread .evergreen/config.yml Outdated
Comment on lines +246 to +247
- name: performance-benchmarks
display_name: Performance Benchmarks

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

I noticed "benchmark" and "performance test" used interchangeably. I doubt it will cause much confusion, but it creates some ambiguity and a need to search for both terms to find related things.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

I'd say prefer "performance test" over "benchmark" …

Comment thread .evergreen/perf/runtests.py Outdated
Co-authored-by: Tim Graham <timograham@gmail.com>
@timgraham timgraham dismissed Jibola’s stale review March 2, 2026 14:50

changes addressed

@timgraham timgraham merged commit bcbb896 into mongodb:main Mar 2, 2026
21 checks passed
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.

4 participants