Re: [REGRESSION] io_uring/futex: scalar wait/wake slowdown after 079afb081c42
Jens Axboe <[email protected]> Thu, 30 Jul 2026 09:49:54 -0600
| Newsgroups | dev.linux.lists.regressions,org.kernel.vger.io-uring,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <[email protected]> |
This is a multi-part message in MIME format. --------------dWaau59nsj0xtshHvNqcT01N Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit On 7/30/26 8:34 AM, Jens Axboe wrote: > On 7/30/26 4:42 AM, Chengfeng Lin wrote: >> Hi Jens, >> >> I tested 079afb081c42 against its direct parent on bare metal. In a narrow >> scalar io_uring futex wait/wake workload, the child was 9.27% slower. A >> separate 338-line standalone reproduced the result at 10.02%. All compared >> kernels actually ran with preempt=full. >> >> #regzbot introduced: 079afb081c4288e94d5e4223d3eb6306d853c68b >> #regzbot title: io_uring scalar futex wait/wake slowdown >> >> This is a focused synthetic microbenchmark, not an application benchmark. It >> uses one raw-UAPI ring and 32 cacheline-separated private futex words on one >> pinned P-core. Each timed cycle submits 32 scalar IORING_OP_FUTEX_WAIT >> requests, then 32 scalar IORING_OP_FUTEX_WAKE requests, and drains exactly 64 >> CQEs. Every wait must return 0 and every wake must return 1. >> >> I used a fresh boot for each point: >> >> 6a8118a77eec parent A -> 079afb081c42 child -> 6a8118a77eec parent B >> >> Each point had 3 warm-up rounds and 15 measured rounds. Every measured round >> ran 512 cycles, or 16,384 wait/wake pairs. The results in ns/pair were: >> >> implementation parent A child parent B child vs midpoint >> formal 180.079 196.647 179.856 +9.268% >> standalone 180.171 197.856 179.502 +10.020% >> >> For the formal source, dropping the first measured round gave +9.269%. Parent >> drift was -0.124%, and the maximum CV was 0.169%. The standalone drop-first >> result was +9.996%, with -0.371% parent drift. All 90 scalar timing rows >> passed the CQE, result, timeout, overflow, outstanding-request, and CPU >> checks. >> >> An untimed child trace also hit io_futex_prep(), io_futex_wait(), >> io_futex_wake(), and io_futex_complete() with the expected request counts. >> >> A matched WAITV -> WAKE profile changed by only +1.385%, below my preregistered >> 5% signal gate, so my claim is limited to scalar wait/wake. >> >> I understand that 079afb fixes the exit-time use-after-free by keeping pending >> private futex waits visible to cancellation before their mm state disappears. >> Scalar WAIT and WAKE both use io_futex_prep(), so in the child both sides of >> each measured pair execute the added tracking call. I am not suggesting a >> revert. >> >> Is this per-request cost an expected trade-off for the lifetime fix, or could >> the same exit/mm-lifetime guarantee be retained with cheaper tracking? >> >> Evidence bundle: >> >> https://github.com/lcf0399/linux-regression-evidence/tree/65c8cbf86f40cbe759e3f7db1d29d152ba03a8f2/io-uring-futex-inflight-wait-wake >> >> Standalone reproducer: >> >> https://github.com/lcf0399/linux-regression-evidence/tree/65c8cbf86f40cbe759e3f7db1d29d152ba03a8f2/io-uring-futex-inflight-wait-wake/reproducer > > Great report, thanks for that! I'll take a look at this. The inflight > tracking is a bit of a big hammer for sure for this, and it isn't even > needed on the wake side. Can you tell me what parameters you're using > for the reproducers? Try with these two patches. -- Jens Axboe --------------dWaau59nsj0xtshHvNqcT01N Content-Type: text/x-patch; charset=UTF-8; name="0002-io_uring-futex-only-mark-private-futex-waits-as-infl.patch" Content-Disposition: attachment; filename*0="0002-io_uring-futex-only-mark-private-futex-waits-as-infl.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSBiNDdmMTRmMzAyNWY5MDhkYzcxOTMyYTJhZTRiODJmZmNhZDJjZDM3IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBKZW5zIEF4Ym9lIDxheGJvZUBrZXJuZWwuZGs+CkRh dGU6IFRodSwgMzAgSnVsIDIwMjYgMDY6NTA6NDcgLTA2MDAKU3ViamVjdDogW1BBVENIIDIv Ml0gaW9fdXJpbmcvZnV0ZXg6IG9ubHkgbWFyayBwcml2YXRlIGZ1dGV4IHdhaXRzIGFzIGlu ZmxpZ2h0CgpJbmZsaWdodCB0cmFja2luZyBvZiBmdXRleCB3YWl0IHJlcXVlc3RzIGV4aXN0 cyB0byBlbnN1cmUgdGhhdCBkb19leGl0KCkKLT4gaW9fdXJpbmdfZmlsZXNfY2FuY2VsKCkg Y2FuY2VscyB0aGVtIGJlZm9yZSB0aGUgbW0gZ29lcyBhd2F5LCBhcyBhCnByaXZhdGUgZnV0 ZXggd2FpdCBkZXBlbmRzIG9uIHRoZSBtbSBwcml2YXRlIGZ1dGV4IGhhc2ggc3RheWluZyBh bGl2ZQpmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSByZXF1ZXN0LgoKU2hhcmVkIGZ1dGV4ZXMg aGF2ZSBubyBzdWNoIGRlcGVuZGVuY3kuIEEgRkxBR1NfU0hBUkVEIHJlcXVlc3QgYWx3YXlz CnJlc29sdmVzIHRvIGVpdGhlciBhbiBpbm9kZSBiYXNlZCBrZXkgb3IgYW4gbW0tc2hhcmVk IGtleSwgYm90aCBvZiB3aGljaApmYWlsIGZ1dGV4X2tleV9pc19wcml2YXRlKCkgYW5kIGhl bmNlIGFsd2F5cyBoYXNoIGludG8gdGhlIGdsb2JhbCBmdXRleApoYXNoLCB3aG9zZSBsaWZl dGltZSBpc24ndCB0aWVkIHRvIHRoZSBtbS4KCk9ubHkgbWFyayB2ZWN0b3JlZCBmdXRleCB3 YWl0cyBhcyBpbmZsaWdodCBpZiB0aGUgZnV0ZXggaXMgcHJpdmF0ZS4KCkNjOiBzdGFibGVA dmdlci5rZXJuZWwub3JnCkZpeGVzOiAwNzlhZmIwODFjNDIgKCJpb191cmluZy9mdXRleDog bWFyayB3YWl0IHJlcXVlc3RzIGFzIGluZmxpZ2h0IikKTGluazogaHR0cHM6Ly9sb3JlLmtl cm5lbC5vcmcvaW8tdXJpbmcvQ0FOR2pnZG49Ul9xeVVkRT1qOXphK3ZrbXFjeGFjYlAtODRP SFhGNG5aNGhvOXFSeVZnQG1haWwuZ21haWwuY29tLwpTaWduZWQtb2ZmLWJ5OiBKZW5zIEF4 Ym9lIDxheGJvZUBrZXJuZWwuZGs+Ci0tLQogaW9fdXJpbmcvZnV0ZXguYyB8IDE3ICsrKysr KysrKysrKystLS0tCiAxIGZpbGUgY2hhbmdlZCwgMTMgaW5zZXJ0aW9ucygrKSwgNCBkZWxl dGlvbnMoLSkKCmRpZmYgLS1naXQgYS9pb191cmluZy9mdXRleC5jIGIvaW9fdXJpbmcvZnV0 ZXguYwppbmRleCBlZWEwNDI1ZjJiY2IuLmYwZDgwYTQ0NGY0NSAxMDA2NDQKLS0tIGEvaW9f dXJpbmcvZnV0ZXguYworKysgYi9pb191cmluZy9mdXRleC5jCkBAIC0xNTQsMTQgKzE1NCwx NiBAQCBpbnQgaW9fZnV0ZXhfcHJlcChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgY29uc3Qgc3Ry dWN0IGlvX3VyaW5nX3NxZSAqc3FlKQogCiBpbnQgaW9fZnV0ZXhfd2FpdF9wcmVwKHN0cnVj dCBpb19raW9jYiAqcmVxLCBjb25zdCBzdHJ1Y3QgaW9fdXJpbmdfc3FlICpzcWUpCiB7CisJ c3RydWN0IGlvX2Z1dGV4ICppb2YgPSBpb19raW9jYl90b19jbWQocmVxLCBzdHJ1Y3QgaW9f ZnV0ZXgpOwogCWludCByZXQ7CiAKIAlyZXQgPSBpb19mdXRleF9wcmVwKHJlcSwgc3FlKTsK IAlpZiAodW5saWtlbHkocmV0KSkKIAkJcmV0dXJuIHJldDsKIAotCS8qIE1hcmsgYXMgaW5m bGlnaHQsIHNvIGZpbGUgZXhpdCBjYW5jZWxhdGlvbiB3aWxsIGZpbmQgaXQgKi8KLQlpb19y ZXFfdHJhY2tfaW5mbGlnaHQocmVxKTsKKwkvKiBpbmZsaWdodCB0cmFja2luZyBvbmx5IG5l ZWRlZCBmb3IgbW0gcHJpdmF0ZSBoYXNoICovCisJaWYgKCEoaW9mLT5mdXRleF9mbGFncyAm IEZMQUdTX1NIQVJFRCkpCisJCWlvX3JlcV90cmFja19pbmZsaWdodChyZXEpOwogCXJldHVy biAwOwogfQogCkBAIC0xODYsNiArMTg4LDcgQEAgaW50IGlvX2Z1dGV4dl9wcmVwKHN0cnVj dCBpb19raW9jYiAqcmVxLCBjb25zdCBzdHJ1Y3QgaW9fdXJpbmdfc3FlICpzcWUpCiB7CiAJ c3RydWN0IGlvX2Z1dGV4ICppb2YgPSBpb19raW9jYl90b19jbWQocmVxLCBzdHJ1Y3QgaW9f ZnV0ZXgpOwogCXN0cnVjdCBpb19mdXRleHZfZGF0YSAqaWZkOworCXVuc2lnbmVkIGludCBp OwogCWludCByZXQ7CiAKIAkvKiBObyBmbGFncyBvciBtYXNrIHN1cHBvcnRlZCBmb3Igd2Fp dHYgKi8KQEAgLTIxMCw4ICsyMTMsMTQgQEAgaW50IGlvX2Z1dGV4dl9wcmVwKHN0cnVjdCBp b19raW9jYiAqcmVxLCBjb25zdCBzdHJ1Y3QgaW9fdXJpbmdfc3FlICpzcWUpCiAJCXJldHVy biByZXQ7CiAJfQogCi0JLyogTWFyayBhcyBpbmZsaWdodCwgc28gZmlsZSBleGl0IGNhbmNl bGF0aW9uIHdpbGwgZmluZCBpdCAqLwotCWlvX3JlcV90cmFja19pbmZsaWdodChyZXEpOwor CS8qIGluZmxpZ2h0IHRyYWNraW5nIG9ubHkgbmVlZGVkIGZvciBtbSBwcml2YXRlIGhhc2gg Ki8KKwlmb3IgKGkgPSAwOyBpIDwgaW9mLT5mdXRleF9ucjsgaSsrKSB7CisJCWlmICghKGlm ZC0+ZnV0ZXh2W2ldLncuZmxhZ3MgJiBGTEFHU19TSEFSRUQpKSB7CisJCQlpb19yZXFfdHJh Y2tfaW5mbGlnaHQocmVxKTsKKwkJCWJyZWFrOworCQl9CisJfQorCiAJaW9mLT5mdXRleHZf dW5xdWV1ZWQgPSAwOwogCXJlcS0+ZmxhZ3MgfD0gUkVRX0ZfQVNZTkNfREFUQTsKIAlyZXEt PmFzeW5jX2RhdGEgPSBpZmQ7Ci0tIAoyLjUzLjAKCg== --------------dWaau59nsj0xtshHvNqcT01N Content-Type: text/x-patch; charset=UTF-8; name="0001-io_uring-futex-don-t-mark-futex-wake-requests-as-inf.patch" Content-Disposition: attachment; filename*0="0001-io_uring-futex-don-t-mark-futex-wake-requests-as-inf.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSBhYmQwODZhMzhlYTg0NDJkODdiYmVkYzBlZDk0NGZlY2JhOTY0YmU4IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBKZW5zIEF4Ym9lIDxheGJvZUBrZXJuZWwuZGs+CkRh dGU6IFRodSwgMzAgSnVsIDIwMjYgMDY6NTA6MTMgLTA2MDAKU3ViamVjdDogW1BBVENIIDEv Ml0gaW9fdXJpbmcvZnV0ZXg6IGRvbid0IG1hcmsgZnV0ZXggd2FrZSByZXF1ZXN0cyBhcwog aW5mbGlnaHQKCkNvbW1pdCAwNzlhZmIwODFjNDIgKCJpb191cmluZy9mdXRleDogbWFyayB3 YWl0IHJlcXVlc3RzIGFzIGluZmxpZ2h0IikKYWRkZWQgaW5mbGlnaHQgdHJhY2tpbmcgdG8g ZW5zdXJlIHRoYXQgZG9fZXhpdCgpIC0+CmlvX3VyaW5nX2ZpbGVzX2NhbmNlbCgpIGZpbmRz IGFuZCBjYW5jZWxzIHBlbmRpbmcgZnV0ZXggd2FpdHMgYmVmb3JlIHRoZQptbSBnb2VzIGF3 YXksIGFzIGEgcHJpdmF0ZSBmdXRleCB3YWl0IGRlcGVuZHMgb24gdGhlIG1tIHByaXZhdGUg ZnV0ZXgKaGFzaCBzdGF5aW5nIGFsaXZlIGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIHJlcXVl c3QuIEhvd2V2ZXIsIGFzCmlvX2Z1dGV4X3ByZXAoKSBpcyBzaGFyZWQgYmV0d2VlbiBGVVRF WF9XQUlUIGFuZCBGVVRFWF9XQUtFLCB3YWtlCnJlcXVlc3RzIGdvdCBtYXJrZWQgYXMgaW5m bGlnaHQgYXMgd2VsbC4KCkEgZnV0ZXggd2FrZSBleGVjdXRlcyBmdWxseSBpbmxpbmUgYXQg aXNzdWUgdGltZSBhbmQgbmV2ZXIgZGVwZW5kcyBvbgp0aGUgbW0gc3RheWluZyBhbGl2ZSBh ZnRlciBjb21wbGV0aW9uLCBoZW5jZSB0aGVyZSdzIG5vIG5lZWQgdG8gdHJhY2sKaXQuIEtp bGwgaXQuCgpDYzogc3RhYmxlQHZnZXIua2VybmVsLm9yZwpGaXhlczogMDc5YWZiMDgxYzQy ICgiaW9fdXJpbmcvZnV0ZXg6IG1hcmsgd2FpdCByZXF1ZXN0cyBhcyBpbmZsaWdodCIpClJl cG9ydGVkLWJ5OiBDaGVuZ2ZlbmcgTGluIDxsaW4yNTMwNjMyMTIzQGdtYWlsLmNvbT4KTGlu azogaHR0cHM6Ly9sb3JlLmtlcm5lbC5vcmcvaW8tdXJpbmcvQ0FOR2pnZG49Ul9xeVVkRT1q OXphK3ZrbXFjeGFjYlAtODRPSFhGNG5aNGhvOXFSeVZnQG1haWwuZ21haWwuY29tLwpTaWdu ZWQtb2ZmLWJ5OiBKZW5zIEF4Ym9lIDxheGJvZUBrZXJuZWwuZGs+Ci0tLQogaW9fdXJpbmcv ZnV0ZXguYyB8IDExICsrKysrKysrKysrCiBpb191cmluZy9mdXRleC5oIHwgIDEgKwogaW9f dXJpbmcvb3BkZWYuYyB8ICAyICstCiAzIGZpbGVzIGNoYW5nZWQsIDEzIGluc2VydGlvbnMo KyksIDEgZGVsZXRpb24oLSkKCmRpZmYgLS1naXQgYS9pb191cmluZy9mdXRleC5jIGIvaW9f dXJpbmcvZnV0ZXguYwppbmRleCA5MDY3MDFiM2M1YzYuLmVlYTA0MjVmMmJjYiAxMDA2NDQK LS0tIGEvaW9fdXJpbmcvZnV0ZXguYworKysgYi9pb191cmluZy9mdXRleC5jCkBAIC0xNDks NiArMTQ5LDE3IEBAIGludCBpb19mdXRleF9wcmVwKHN0cnVjdCBpb19raW9jYiAqcmVxLCBj b25zdCBzdHJ1Y3QgaW9fdXJpbmdfc3FlICpzcWUpCiAJICAgICFmdXRleF92YWxpZGF0ZV9p bnB1dChpb2YtPmZ1dGV4X2ZsYWdzLCBpb2YtPmZ1dGV4X21hc2spKQogCQlyZXR1cm4gLUVJ TlZBTDsKIAorCXJldHVybiAwOworfQorCitpbnQgaW9fZnV0ZXhfd2FpdF9wcmVwKHN0cnVj dCBpb19raW9jYiAqcmVxLCBjb25zdCBzdHJ1Y3QgaW9fdXJpbmdfc3FlICpzcWUpCit7CisJ aW50IHJldDsKKworCXJldCA9IGlvX2Z1dGV4X3ByZXAocmVxLCBzcWUpOworCWlmICh1bmxp a2VseShyZXQpKQorCQlyZXR1cm4gcmV0OworCiAJLyogTWFyayBhcyBpbmZsaWdodCwgc28g ZmlsZSBleGl0IGNhbmNlbGF0aW9uIHdpbGwgZmluZCBpdCAqLwogCWlvX3JlcV90cmFja19p bmZsaWdodChyZXEpOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvaW9fdXJpbmcvZnV0ZXgu aCBiL2lvX3VyaW5nL2Z1dGV4LmgKaW5kZXggZDc4OWZjZjcxNWUzLi45ODdkYjNmMmM2ZDkg MTAwNjQ0Ci0tLSBhL2lvX3VyaW5nL2Z1dGV4LmgKKysrIGIvaW9fdXJpbmcvZnV0ZXguaApA QCAtMyw2ICszLDcgQEAKICNpbmNsdWRlICJjYW5jZWwuaCIKIAogaW50IGlvX2Z1dGV4X3By ZXAoc3RydWN0IGlvX2tpb2NiICpyZXEsIGNvbnN0IHN0cnVjdCBpb191cmluZ19zcWUgKnNx ZSk7CitpbnQgaW9fZnV0ZXhfd2FpdF9wcmVwKHN0cnVjdCBpb19raW9jYiAqcmVxLCBjb25z dCBzdHJ1Y3QgaW9fdXJpbmdfc3FlICpzcWUpOwogaW50IGlvX2Z1dGV4dl9wcmVwKHN0cnVj dCBpb19raW9jYiAqcmVxLCBjb25zdCBzdHJ1Y3QgaW9fdXJpbmdfc3FlICpzcWUpOwogaW50 IGlvX2Z1dGV4X3dhaXQoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1 ZV9mbGFncyk7CiBpbnQgaW9fZnV0ZXh2X3dhaXQoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVu c2lnbmVkIGludCBpc3N1ZV9mbGFncyk7CmRpZmYgLS1naXQgYS9pb191cmluZy9vcGRlZi5j IGIvaW9fdXJpbmcvb3BkZWYuYwppbmRleCA0ZTU4ZWIxMzQ0ZWEuLmNmM2FhMjI0MmNkNyAx MDA2NDQKLS0tIGEvaW9fdXJpbmcvb3BkZWYuYworKysgYi9pb191cmluZy9vcGRlZi5jCkBA IC00NjcsNyArNDY3LDcgQEAgY29uc3Qgc3RydWN0IGlvX2lzc3VlX2RlZiBpb19pc3N1ZV9k ZWZzW10gPSB7CiAJfSwKIAlbSU9SSU5HX09QX0ZVVEVYX1dBSVRdID0gewogI2lmIGRlZmlu ZWQoQ09ORklHX0ZVVEVYKQotCQkucHJlcAkJCT0gaW9fZnV0ZXhfcHJlcCwKKwkJLnByZXAJ CQk9IGlvX2Z1dGV4X3dhaXRfcHJlcCwKIAkJLmlzc3VlCQkJPSBpb19mdXRleF93YWl0LAog I2Vsc2UKIAkJLnByZXAJCQk9IGlvX2VvcG5vdHN1cHBfcHJlcCwKLS0gCjIuNTMuMAoK --------------dWaau59nsj0xtshHvNqcT01N--