On Sun, Jun 30, 2024 at 09:49:03PM -0700, Christoph Hellwig wrote: > On Mon, Jul 01, 2024 at 10:51:13AM +1000, Dave Chinner wrote: > > Here's the logic - the iovec array is largely "free" with the larger > > data allocation. > > What the patch does it to free the data allocation, that is the shadow > buffer earlier. Which would safe a quite a bit of memory indeed ... if > we didn't expect the shadow buffer to be needed again a little later > anyway, which AFAIK is the assumption under which the CIL code operates. Ah, ok, my bad. I missed that because the xfs_log_iovec is not the data buffer - it is specifically just the iovec array that indexes the data buffer. Everything in the commit message references the xfs_log_iovec, and makes no mention of the actual logged metadata that is being stored, and I didn't catch that the submitter was using xfs_log_iovec to mean something different to what I understand it to be from looking at the code. That's why I take the time to explain my reasoning - so that people aren't in any doubt about how I interpretted the changes and can easily point out where I've gone wrong. :) > So as asked previously and by you again here I'd love to see numbers > for workloads where this actually is a benefit. Yup, it doesn't change the basic premise that no allocations in the fast path is faster than doing even one allocation in the fast path. I made the explicit design choice to consume that memory as a necessary cost of going fast, and the memory is already being consumed while the objects are sitting and being relogged in the CIL before the CIL is formatted and checkpointed. Hence I'm not sure that freeing it before the checkpoint IO is submitted actually reduces the memory footprint significantly at all. Numbers and workloads are definitely needed. Cheers, Dave. -- Dave Chinner david@xxxxxxxxxxxxx