1858 transactions (1850 requested), each up to 262144 blocks
average:
0ms waiting for transaction
0ms request delay
4988ms running transaction
8ms transaction was being locked
0ms flushing data (in ordered mode)
32ms logging transaction
43059us average transaction commit time
392638 handles per transaction
49 blocks per transaction
50 logged blocks per transaction
thanks a lot! and, if possible, the same with LU-14688 applied if you have few spare cycles. thanks in advance!
I think this confirms the theory that basically "deregistiring" is CPU bound and produces a lot of tiny transaction which aren't checkpointed (I guess there is no need to do so - no memory pressure as number of modified blocks is tiny). given they aren't checkpointed by the crash, JBD has to replay them all and need to skip revoked blocks so fill/lookup big revoke table.
the situation changes with LU-14688 as the process is less CPU-bound and generates bigger transactions and (somehow) transactions get checkpointed more frequently leaving less to replay.
the important question here is whether we still need to fix JBD.. I tend to think so as there are another use cases when external processes (like llsom_sync) may consume and clear changelog at high rate and this would result in tiny transactions as before LU-14688 patch.
An equivalent patch to resolve the revoke block scalability issue during journal replay was landed to the upstream ext4 code:
https://patchwork.ozlabs.org/project/linux-ext4/patch/20250121140925.17231-2-jack@suse.cz/