Skip to content
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

CI tests for combined #16722 and #16040 #16744

Closed
wants to merge 2 commits into from

Commits on Nov 12, 2024

  1. L2ARC: Move different stats updates earlier

    ..., before we make the header or the log block visible to others.
    It should fix assertion on allocated space going negative if the
    header is freed once the lock is dropped, while the write is still
    going.
    
    Signed-off-by:	Alexander Motin <[email protected]>
    Sponsored by:	iXsystems, Inc.
    Fixes openzfs#16040
    amotin authored and behlendorf committed Nov 12, 2024
    Configuration menu
    Copy the full SHA
    3bc2bea View commit details
    Browse the repository at this point in the history
  2. dsl_dataset: put IO-inducing frees on the pool deadlist

    dsl_free() calls zio_free() to free the block. For most blocks, this
    simply calls metaslab_free() without doing any IO or putting anything on
    the IO pipeline.
    
    Some blocks however require additional IO to free. This at least
    includes gang, dedup and cloned blocks. For those, zio_free() will issue
    a ZIO_TYPE_FREE IO and return.
    
    If a huge number of blocks are being freed all at once, it's possible
    for dsl_dataset_block_kill() to be called millions of time on a single
    transaction (eg a 2T object of 128K blocks is 16M blocks). If those are
    all IO-inducing frees, that then becomes 16M FREE IOs placed on the
    pipeline. At time of writing, a zio_t is 1280 bytes, so for just one 2T
    object that requires a 20G allocation of resident memory from the
    zio_cache. If that can't be satisfied by the kernel, an out-of-memory
    condition is raised.
    
    This would be better handled by improving the cases that the
    dmu_tx_assign() throttle will handle, or by reducing the overheads
    required by the IO pipeline, or with a better central facility for
    freeing blocks.
    
    For now, we simply check for the cases that would cause zio_free() to
    create a FREE IO, and instead put the block on the pool's freelist. This
    is the same place that blocks from destroyed datasets go, and the async
    destroy machinery will automatically see them and trickle them out as
    normal.
    
    Sponsored-by: Klara, Inc.
    Sponsored-by: Wasabi Technology, Inc.
    Signed-off-by: Rob Norris <[email protected]>
    robn authored and behlendorf committed Nov 12, 2024
    Configuration menu
    Copy the full SHA
    a824df7 View commit details
    Browse the repository at this point in the history