From nobody Sat Sep 26 20:50:57 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1788184403; cv=none; d=zohomail.com; s=zohoarc; b=QsQvoAaIfVwnK2cj/hZcS8Y2o+cD9rUBfieMripzQe7wviPiD7rN1tSFL1w3MaydmxfBDROk0UjzIgpMlfFMM67AgylzTOh9Hy+SB4QFwReMjKDBkRKU8pU708fd4W+n6xHjq6lFQ5sc9o///iKDk44cVD0l9fvUx/BZ6r0Y7To= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1788184403; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=sWNljSdOe9ZST1zA+pC3GmPfahj6oMI13NjXy9D13Fc=; b=Q4UUNQ9fFRolauFXaGScOd0bSCzeKaOizPi0f55tvSV2XuEjftJPx1ZguHYDCuzHo4e6jGnz1XbBorGPdPbb0Ws7iy1hr4ahi+Ag8CLPA4Kr+5JGa/5JhJPLGqbY0a2FiN9YsoOCmJv66jE5YPqXa+XWiO7LZOBH3r7ZCV54zqU= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1788184403736537.5800189440596; Mon, 31 Aug 2026 06:53:23 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1x12R5-0004Bj-KF; Mon, 31 Aug 2026 09:52:31 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1x12R3-0004BB-Vt for qemu-devel@nongnu.org; Mon, 31 Aug 2026 09:52:30 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1x12Qy-0003wj-Ax for qemu-devel@nongnu.org; Mon, 31 Aug 2026 09:52:29 -0400 Received: from mail-wr1-f72.google.com (mail-wr1-f72.google.com [209.85.221.72]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-110-04uRDO8QO8yu87Q3_AjUVQ-1; Mon, 31 Aug 2026 09:52:21 -0400 Received: by mail-wr1-f72.google.com with SMTP id ffacd0b85a97d-47f6d70223dso2506554f8f.1 for ; Mon, 31 Aug 2026 06:52:21 -0700 (PDT) Received: from localhost (p200300cfd72080187472d8ceb75e67b1.dip0.t-ipconnect.de. [2003:cf:d720:8018:7472:d8ce:b75e:67b1]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-4843ce8b015sm5882777f8f.13.2026.08.31.06.52.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 31 Aug 2026 06:52:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1788184343; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=sWNljSdOe9ZST1zA+pC3GmPfahj6oMI13NjXy9D13Fc=; b=RzqoRqJbi1eyXR+TMSKD4N5Bve/BdmkHF6EhM98xlBmFqQcJZy+5wFvfrBHCkVkuUASAZS mrd/GaCryG556BvtKrDea228mdAx8xBjOuwT2QcS0DGOIoAXEKteJEhM1qzLVxV3mGc3/Q IXSoaWz7BThzMYbP+5tMV8eQWzH0BKE= X-MC-Unique: 04uRDO8QO8yu87Q3_AjUVQ-1 X-Mimecast-MFC-AGG-ID: 04uRDO8QO8yu87Q3_AjUVQ_1788184341 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1788184341; x=1788789141; darn=nongnu.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=sWNljSdOe9ZST1zA+pC3GmPfahj6oMI13NjXy9D13Fc=; b=pQsXe5KpfSeDTrHyOxP/ClAtJElhSj5YIB0Jc6wIuBYqrZ0WCqwpmZg9ixqRBonmTg 1TDUhaaiV0YuGYz7ofvWu7HHP5n4S+nKZ6wcaFjGQLkpMXtX5XoH6BFYoD1M/SJUwLA+ FXTcZJCcFuMdqPa3ydRtIkRdjln+I8ebT2imEy4M92+6gk8bngb4bhuMYd6nYkZkUYY9 1tijvOdsLxuGvxT5dGoFVAMt6GGKcBbJlUr2zbAdoHEUzdJZjh33faIJiqj+uOuy6+nS 7SPIj1A8THZhoPGXCmW7KBmCi4tFkYaGUL2BHqQ05yHEeVkBZEAoTk/lxtGBVtF+nndq CZPQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788184341; x=1788789141; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=sWNljSdOe9ZST1zA+pC3GmPfahj6oMI13NjXy9D13Fc=; b=VqAfFH8uhwrgaaMEjq0poEjHQRVUJEn+y6HRwKI90KZBcEKfgzd88QQazHqGYG6Q9I k9qus+1Zr8+wl1pOSDKAbJ572ScKHYE3FW5O2p1yYE8lbZtEZNtFsHDxbAeZYBWB+qQ5 61GscRrGpEgKZblKguJ+GWxzI+MS4WP2Xi08oo3AkJmTPaEVtCa2MJJlsQJMCZcmvKv9 6OGuBYogOjI73iKJZ3ZZ/KVfvyUkrp6/LdBblZKWASeBX6VWOReSP6pte2jH7FDUJM2j 8cAGSBEwDLPVqMiJyX0/yc08r8MJOGlQcUxQx74p9xEVwIbXVGrHXv8+p8EysfDNRJ1M M3Xg== X-Gm-Message-State: AFuF++kV+VWlAblOGLwnjeKUEkz2ALMmJLEmPBwEujzEOzFgYoW5qhpU 9QTxjgWfHRkwgh0Ap4UvqhysXBD+mV+sH0ZWOF5t93IHWwpkQ45UlE+P4Ui2Q3fGhPP0KGyGaDB JWf1qo8oNFWJ28RldIiY563K7Tp7xDfVXIYdPxAVmLiPm6Wh5idcWQ6Dd X-Gm-Gg: AYBFou0Hk/3l/dEp3vvxXwVNGsZZML8OXnOUGyHw4qwUzB41tFMh8FhsVW7Ahirfahf uMj1g3v9c6nABqd8dxVTahwQbLGR3oW0+UFlkbi0SZoPj34fee4dw8eKdiBl9h5xIaoNvm2vIPj MXfQi8CA3lYsPAI59KwrOYh0q8nyqYmnplhC7+hBDs/s1FVEr3Hs1OCQCozlpVn1wGZUxIimCwM rAh3Ql4ZM3cfBAU6DzOc1baa3p41Z/EwS1qX+TKnvtnTBL1PbwDkpfVYso0n3997PttAECmTqow BcmGGBRaAKCpq3QwewVzVJzBL8JD/yWk1qUcTQKZSVt5mU4mEb7zBqyKDfcs9dsu1ldYOojUusX KmKOz0LFlULBXNYNEREF4XUH7Yna30LD58Fzj3Zd33BAyJd4rFpYM/Q3BPGc= X-Received: by 2002:a05:6000:468a:b0:47f:7e8f:d62d with SMTP id ffacd0b85a97d-48440fcc37cmr1413226f8f.10.1788184340144; Mon, 31 Aug 2026 06:52:20 -0700 (PDT) X-Received: by 2002:a05:6000:468a:b0:47f:7e8f:d62d with SMTP id ffacd0b85a97d-48440fcc37cmr1413132f8f.10.1788184339624; Mon, 31 Aug 2026 06:52:19 -0700 (PDT) From: Hanna Czenczek To: qemu-block@nongnu.org Cc: qemu-devel@nongnu.org, Hanna Czenczek , Kevin Wolf , John Snow , "Denis V . Lunev" , Eric Blake , Markus Armbruster , Stefan Hajnoczi Subject: [PATCH 1/9] block/accounting: Add offset to BlockAcctCookie Date: Mon, 31 Aug 2026 15:51:57 +0200 Message-ID: <20260831135206.126184-2-hreitz@redhat.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260831135206.126184-1-hreitz@redhat.com> References: <20260831135206.126184-1-hreitz@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.133.124; envelope-from=hreitz@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1788184405191158500 Content-Type: text/plain; charset="utf-8" For latency alerts, we will want to generate QMP events from block accounting cookies. These should contain some minimal information about the offending request, i.e., start offset, size, and type. The latter two are already part of the cookie, the former is not. Add it. Signed-off-by: Hanna Czenczek Acked-by: Jesper Wendel Devantier --- include/block/accounting.h | 7 ++++- include/system/dma.h | 2 +- block/accounting.c | 3 ++- hw/block/dataplane/xen-block.c | 4 +-- hw/block/virtio-blk.c | 15 ++++++----- hw/ide/ahci.c | 6 +++-- hw/ide/atapi.c | 9 ++++--- hw/ide/core.c | 9 +++++-- hw/ide/macio.c | 15 ++++++++--- hw/nvme/ctrl.c | 43 +++++++++++++++++------------- hw/nvme/dif.c | 8 +++--- hw/scsi/scsi-disk.c | 28 ++++++++++++------- qemu-io-cmds.c | 14 +++++----- system/dma-helpers.c | 4 +-- tests/unit/test-block-accounting.c | 2 +- 15 files changed, 105 insertions(+), 64 deletions(-) diff --git a/include/block/accounting.h b/include/block/accounting.h index 12d32460927..9386440ec89 100644 --- a/include/block/accounting.h +++ b/include/block/accounting.h @@ -95,6 +95,7 @@ struct BlockAcctStats { }; =20 typedef struct BlockAcctCookie { + int64_t offset; int64_t bytes; int64_t start_time_ns; enum BlockAcctType type; @@ -108,8 +109,12 @@ void block_acct_cleanup(BlockAcctStats *stats); void block_acct_add_interval(BlockAcctStats *stats, unsigned interval_leng= th); BlockAcctTimedStats *block_acct_interval_next(BlockAcctStats *stats, BlockAcctTimedStats *s); +/** + * Begin an I/O operation. + * @offset =3D=3D -1 indicates an unknown offset (e.g. for meta operations= ). + */ void block_acct_start(BlockAcctStats *stats, BlockAcctCookie *cookie, - int64_t bytes, enum BlockAcctType type); + int64_t offset, int64_t bytes, enum BlockAcctType ty= pe); void block_acct_done(BlockAcctStats *stats, BlockAcctCookie *cookie); void block_acct_failed(BlockAcctStats *stats, BlockAcctCookie *cookie); void block_acct_invalid(BlockAcctStats *stats, enum BlockAcctType type); diff --git a/include/system/dma.h b/include/system/dma.h index 82e7ad54374..1291697642e 100644 --- a/include/system/dma.h +++ b/include/system/dma.h @@ -305,7 +305,7 @@ MemTxResult dma_buf_write(void *ptr, dma_addr_t len, dm= a_addr_t *residual, QEMUSGList *sg, MemTxAttrs attrs); =20 void dma_acct_start(BlockBackend *blk, BlockAcctCookie *cookie, - QEMUSGList *sg, enum BlockAcctType type); + QEMUSGList *sg, int64_t offset, enum BlockAcctType typ= e); =20 /** * dma_aligned_pow2_mask: Return the address bit mask of the largest diff --git a/block/accounting.c b/block/accounting.c index 038af370170..66e5001403f 100644 --- a/block/accounting.c +++ b/block/accounting.c @@ -115,10 +115,11 @@ BlockAcctTimedStats *block_acct_interval_next(BlockAc= ctStats *stats, } =20 void block_acct_start(BlockAcctStats *stats, BlockAcctCookie *cookie, - int64_t bytes, enum BlockAcctType type) + int64_t offset, int64_t bytes, enum BlockAcctType ty= pe) { assert(type < BLOCK_MAX_IOTYPE); =20 + cookie->offset =3D offset; cookie->bytes =3D bytes; cookie->start_time_ns =3D qemu_clock_get_ns(clock_type); cookie->type =3D type; diff --git a/hw/block/dataplane/xen-block.c b/hw/block/dataplane/xen-block.c index 48c2e315f31..f4dab9b2510 100644 --- a/hw/block/dataplane/xen-block.c +++ b/hw/block/dataplane/xen-block.c @@ -373,7 +373,7 @@ static int xen_block_do_aio(XenBlockRequest *request) case BLKIF_OP_READ: qemu_iovec_add(&request->v, request->buf, request->size); block_acct_start(blk_get_stats(dataplane->blk), &request->acct, - request->v.size, BLOCK_ACCT_READ); + request->start, request->v.size, BLOCK_ACCT_READ); request->aio_inflight++; blk_aio_preadv(dataplane->blk, request->start, &request->v, 0, xen_block_complete_aio, request); @@ -386,7 +386,7 @@ static int xen_block_do_aio(XenBlockRequest *request) =20 qemu_iovec_add(&request->v, request->buf, request->size); block_acct_start(blk_get_stats(dataplane->blk), &request->acct, - request->v.size, + request->start, request->v.size, request->req.operation =3D=3D BLKIF_OP_WRITE ? BLOCK_ACCT_WRITE : BLOCK_ACCT_FLUSH); request->aio_inflight++; diff --git a/hw/block/virtio-blk.c b/hw/block/virtio-blk.c index 384a5ee3f1c..d2605814795 100644 --- a/hw/block/virtio-blk.c +++ b/hw/block/virtio-blk.c @@ -338,7 +338,7 @@ static void virtio_blk_handle_flush(VirtIOBlockReq *req= , MultiReqBuffer *mrb) { VirtIOBlock *s =3D req->dev; =20 - block_acct_start(blk_get_stats(s->blk), &req->acct, 0, + block_acct_start(blk_get_stats(s->blk), &req->acct, -1, 0, BLOCK_ACCT_FLUSH); =20 /* @@ -421,8 +421,8 @@ static uint8_t virtio_blk_handle_discard_write_zeroes(V= irtIOBlockReq *req, blk_aio_flags |=3D BDRV_REQ_MAY_UNMAP; } =20 - block_acct_start(blk_get_stats(s->blk), &req->acct, bytes, - BLOCK_ACCT_WRITE); + block_acct_start(blk_get_stats(s->blk), &req->acct, + sector << BDRV_SECTOR_BITS, bytes, BLOCK_ACCT_WRI= TE); =20 blk_aio_pwrite_zeroes(s->blk, sector << BDRV_SECTOR_BITS, bytes, blk_aio_flags, @@ -437,8 +437,8 @@ static uint8_t virtio_blk_handle_discard_write_zeroes(V= irtIOBlockReq *req, goto err; } =20 - block_acct_start(blk_get_stats(s->blk), &req->acct, bytes, - BLOCK_ACCT_UNMAP); + block_acct_start(blk_get_stats(s->blk), &req->acct, + sector << BDRV_SECTOR_BITS, bytes, BLOCK_ACCT_UNM= AP); =20 blk_aio_pdiscard(s->blk, sector << BDRV_SECTOR_BITS, bytes, virtio_blk_discard_write_zeroes_complete, req); @@ -813,7 +813,7 @@ static int virtio_blk_handle_zone_append(VirtIOBlockReq= *req, data->zone_append_data.offset =3D offset; qemu_iovec_init_external(&req->qiov, out_iov, out_num); =20 - block_acct_start(blk_get_stats(s->blk), &req->acct, len, + block_acct_start(blk_get_stats(s->blk), &req->acct, offset, len, BLOCK_ACCT_ZONE_APPEND); =20 blk_aio_zone_append(s->blk, &data->zone_append_data.offset, &req->qiov= , 0, @@ -893,7 +893,8 @@ static int virtio_blk_handle_request(VirtIOBlockReq *re= q, MultiReqBuffer *mrb) return 0; } =20 - block_acct_start(blk_get_stats(s->blk), &req->acct, req->qiov.size, + block_acct_start(blk_get_stats(s->blk), &req->acct, + req->sector_num * BDRV_SECTOR_SIZE, req->qiov.siz= e, is_write ? BLOCK_ACCT_WRITE : BLOCK_ACCT_READ); =20 /* merge would exceed maximum number of requests or IO direction diff --git a/hw/ide/ahci.c b/hw/ide/ahci.c index 6b04762c4ad..cf63c87a013 100644 --- a/hw/ide/ahci.c +++ b/hw/ide/ahci.c @@ -1092,7 +1092,8 @@ static void execute_ncq_command(NCQTransferState *ncq= _tfs) trace_execute_ncq_command_read(ad->hba, port, ncq_tfs->tag, ncq_tfs->sector_count, ncq_tfs->lba= ); dma_acct_start(ide_state->blk, &ncq_tfs->acct, - &ncq_tfs->sglist, BLOCK_ACCT_READ); + &ncq_tfs->sglist, ncq_tfs->lba << BDRV_SECTOR_BITS, + BLOCK_ACCT_READ); ncq_tfs->aiocb =3D dma_blk_read(ide_state->blk, &ncq_tfs->sglist, ncq_tfs->lba << BDRV_SECTOR_BITS, BDRV_SECTOR_SIZE, @@ -1102,7 +1103,8 @@ static void execute_ncq_command(NCQTransferState *ncq= _tfs) trace_execute_ncq_command_write(ad->hba, port, ncq_tfs->tag, ncq_tfs->sector_count, ncq_tfs->lb= a); dma_acct_start(ide_state->blk, &ncq_tfs->acct, - &ncq_tfs->sglist, BLOCK_ACCT_WRITE); + &ncq_tfs->sglist, ncq_tfs->lba << BDRV_SECTOR_BITS, + BLOCK_ACCT_WRITE); ncq_tfs->aiocb =3D dma_blk_write(ide_state->blk, &ncq_tfs->sglist, ncq_tfs->lba << BDRV_SECTOR_BITS, BDRV_SECTOR_SIZE, diff --git a/hw/ide/atapi.c b/hw/ide/atapi.c index 0ea149ad8c6..6f1187bce12 100644 --- a/hw/ide/atapi.c +++ b/hw/ide/atapi.c @@ -163,6 +163,7 @@ static int cd_read_sector(IDEState *s) trace_cd_read_sector(s->lba); =20 block_acct_start(blk_get_stats(s->blk), &s->acct, + (int64_t)s->lba << ATAPI_SECTOR_BITS, nsec * ATAPI_SECTOR_SIZE, BLOCK_ACCT_READ); =20 ide_buffered_readv(s, (int64_t)s->lba << 2, &s->qiov, nsec * 4, @@ -297,7 +298,8 @@ static void ide_atapi_cmd_reply(IDEState *s, int size, = int max_size) s->elementary_transfer_size =3D 0; =20 if (s->atapi_dma) { - block_acct_start(blk_get_stats(s->blk), &s->acct, size, + /* No offset available for these commands */ + block_acct_start(blk_get_stats(s->blk), &s->acct, -1, size, BLOCK_ACCT_READ); s->status =3D READY_STAT | SEEK_STAT | DRQ_STAT; ide_start_dma(s, ide_atapi_cmd_read_dma_cb); @@ -419,8 +421,9 @@ static void ide_atapi_cmd_read_dma(IDEState *s, int lba= , int nb_sectors, s->io_buffer_size =3D 0; s->cd_sector_size =3D sector_size; =20 - block_acct_start(blk_get_stats(s->blk), &s->acct, s->packet_transfer_s= ize, - BLOCK_ACCT_READ); + block_acct_start(blk_get_stats(s->blk), &s->acct, + (int64_t)lba << ATAPI_SECTOR_BITS, + s->packet_transfer_size, BLOCK_ACCT_READ); =20 /* XXX: check if BUSY_STAT should be set */ s->status =3D READY_STAT | SEEK_STAT | DRQ_STAT | BUSY_STAT; diff --git a/hw/ide/core.c b/hw/ide/core.c index 06e6bb6067d..4b559cf68d0 100644 --- a/hw/ide/core.c +++ b/hw/ide/core.c @@ -491,6 +491,7 @@ static void coroutine_fn ide_trim_co_entry(void *opaque) } =20 block_acct_start(blk_get_stats(s->blk), &s->acct, + sector << BDRV_SECTOR_BITS, count << BDRV_SECTOR_BITS, BLOCK_ACCT_UNMAP); =20 /* Got an entry! Submit and exit. */ @@ -833,6 +834,7 @@ static void ide_sector_read(IDEState *s) qemu_iovec_init_buf(&s->qiov, s->io_buffer, n * BDRV_SECTOR_SIZE); =20 block_acct_start(blk_get_stats(s->blk), &s->acct, + sector_num << BDRV_SECTOR_BITS, n * BDRV_SECTOR_SIZE, BLOCK_ACCT_READ); s->pio_aiocb =3D ide_buffered_readv(s, sector_num, &s->qiov, n, ide_sector_read_cb, s); @@ -1009,10 +1011,12 @@ static void ide_sector_start_dma(IDEState *s, enum = ide_dma_cmd dma_cmd) switch (dma_cmd) { case IDE_DMA_READ: block_acct_start(blk_get_stats(s->blk), &s->acct, + ide_get_sector(s) << BDRV_SECTOR_BITS, s->nsector * BDRV_SECTOR_SIZE, BLOCK_ACCT_READ); break; case IDE_DMA_WRITE: block_acct_start(blk_get_stats(s->blk), &s->acct, + ide_get_sector(s) << BDRV_SECTOR_BITS, s->nsector * BDRV_SECTOR_SIZE, BLOCK_ACCT_WRITE); break; default: @@ -1112,7 +1116,8 @@ static void ide_sector_write(IDEState *s) qemu_iovec_init_buf(&s->qiov, s->io_buffer, n * BDRV_SECTOR_SIZE); =20 block_acct_start(blk_get_stats(s->blk), &s->acct, - n * BDRV_SECTOR_SIZE, BLOCK_ACCT_WRITE); + sector_num << BDRV_SECTOR_BITS, n * BDRV_SECTOR_SIZE, + BLOCK_ACCT_WRITE); s->pio_aiocb =3D blk_aio_pwritev(s->blk, sector_num << BDRV_SECTOR_BIT= S, &s->qiov, 0, ide_sector_write_cb, s); } @@ -1147,7 +1152,7 @@ static void ide_flush_cache(IDEState *s) =20 s->status |=3D BUSY_STAT; ide_set_retry(s); - block_acct_start(blk_get_stats(s->blk), &s->acct, 0, BLOCK_ACCT_FLUSH); + block_acct_start(blk_get_stats(s->blk), &s->acct, -1, 0, BLOCK_ACCT_FL= USH); s->pio_aiocb =3D blk_aio_flush(s->blk, ide_flush_cb, s); } =20 diff --git a/hw/ide/macio.c b/hw/ide/macio.c index 40fb4f3b4f3..99d079be916 100644 --- a/hw/ide/macio.c +++ b/hw/ide/macio.c @@ -218,7 +218,14 @@ static void pmac_ide_transfer(DBDMA_io *io) MACIO_DPRINTF("\n"); =20 if (s->drive_kind =3D=3D IDE_CD) { - block_acct_start(blk_get_stats(s->blk), &s->acct, io->len, + int64_t offset =3D -1; + + if (s->lba >=3D 0) { + /* Same hardcoded 11 as in pmac_ide_atapi_transfer_cb() */ + offset =3D ((int64_t)s->lba << 11) + s->io_buffer_index; + } + + block_acct_start(blk_get_stats(s->blk), &s->acct, offset, io->len, BLOCK_ACCT_READ); =20 pmac_ide_atapi_transfer_cb(io, 0); @@ -227,11 +234,13 @@ static void pmac_ide_transfer(DBDMA_io *io) =20 switch (s->dma_cmd) { case IDE_DMA_READ: - block_acct_start(blk_get_stats(s->blk), &s->acct, io->len, + block_acct_start(blk_get_stats(s->blk), &s->acct, + ide_get_sector(s) << BDRV_SECTOR_BITS, io->len, BLOCK_ACCT_READ); break; case IDE_DMA_WRITE: - block_acct_start(blk_get_stats(s->blk), &s->acct, io->len, + block_acct_start(blk_get_stats(s->blk), &s->acct, + ide_get_sector(s) << BDRV_SECTOR_BITS, io->len, BLOCK_ACCT_WRITE); break; default: diff --git a/hw/nvme/ctrl.c b/hw/nvme/ctrl.c index 5168551e115..980816a2145 100644 --- a/hw/nvme/ctrl.c +++ b/hw/nvme/ctrl.c @@ -2754,7 +2754,7 @@ static uint16_t nvme_verify(NvmeCtrl *n, NvmeRequest = *req) qemu_iovec_init(&ctx->data.iov, 1); qemu_iovec_add(&ctx->data.iov, ctx->data.bounce, len); =20 - block_acct_start(blk_get_stats(blk), &req->acct, ctx->data.iov.size, + block_acct_start(blk_get_stats(blk), &req->acct, offset, ctx->data.iov= .size, BLOCK_ACCT_READ); =20 req->aiocb =3D blk_aio_preadv(ns->blkconf.blk, offset, &ctx->data.iov,= 0, @@ -2983,6 +2983,7 @@ static void nvme_copy_out_cb(void *opaque, int ret) uint32_t nlb; size_t mlen; uint8_t *mbounce; + int64_t offset; =20 if (ret < 0 || iocb->ret < 0) { block_acct_failed(stats, &iocb->acct.write); @@ -3003,10 +3004,10 @@ static void nvme_copy_out_cb(void *opaque, int ret) qemu_iovec_reset(&iocb->iov); qemu_iovec_add(&iocb->iov, mbounce, mlen); =20 - block_acct_start(stats, &iocb->acct.write, mlen, BLOCK_ACCT_WRITE); - iocb->aiocb =3D blk_aio_pwritev(dns->blkconf.blk, nvme_moff(dns, iocb-= >slba), - &iocb->iov, 0, nvme_copy_out_completed_c= b, - iocb); + offset =3D nvme_moff(dns, iocb->slba); + block_acct_start(stats, &iocb->acct.write, offset, mlen, BLOCK_ACCT_WR= ITE); + iocb->aiocb =3D blk_aio_pwritev(dns->blkconf.blk, offset, &iocb->iov, = 0, + nvme_copy_out_completed_cb, iocb); =20 return; =20 @@ -3029,6 +3030,7 @@ static void nvme_copy_in_completed_cb(void *opaque, i= nt ret) uint64_t reftag; size_t len, mlen; uint16_t status; + int64_t offset; =20 if (ret < 0) { iocb->ret =3D ret; @@ -3113,10 +3115,11 @@ static void nvme_copy_in_completed_cb(void *opaque,= int ret) qemu_iovec_reset(&iocb->iov); qemu_iovec_add(&iocb->iov, iocb->bounce, len); =20 - block_acct_start(blk_get_stats(dns->blkconf.blk), &iocb->acct.write, l= en, - BLOCK_ACCT_WRITE); + offset =3D nvme_l2b(dns, iocb->slba); + block_acct_start(blk_get_stats(dns->blkconf.blk), &iocb->acct.write, + offset, len, BLOCK_ACCT_WRITE); =20 - iocb->aiocb =3D blk_aio_pwritev(dns->blkconf.blk, nvme_l2b(dns, iocb->= slba), + iocb->aiocb =3D blk_aio_pwritev(dns->blkconf.blk, offset, &iocb->iov, 0, nvme_copy_out_cb, iocb); =20 return; @@ -3136,6 +3139,7 @@ static void nvme_copy_in_cb(void *opaque, int ret) uint64_t slba; uint32_t nlb; size_t mlen; + int64_t offset; =20 if (ret < 0 || iocb->ret < 0) { block_acct_failed(stats, &iocb->acct.read); @@ -3154,10 +3158,11 @@ static void nvme_copy_in_cb(void *opaque, int ret) qemu_iovec_reset(&iocb->iov); qemu_iovec_add(&iocb->iov, iocb->bounce + nvme_l2b(sns, nlb), mlen); =20 - block_acct_start(stats, &iocb->acct.read, mlen, BLOCK_ACCT_READ); - iocb->aiocb =3D blk_aio_preadv(sns->blkconf.blk, nvme_moff(sns, slba), - &iocb->iov, 0, nvme_copy_in_completed_cb, - iocb); + offset =3D nvme_moff(sns, slba); + block_acct_start(stats, &iocb->acct.read, offset, mlen, + BLOCK_ACCT_READ); + iocb->aiocb =3D blk_aio_preadv(sns->blkconf.blk, offset, &iocb->iov, 0, + nvme_copy_in_completed_cb, iocb); return; =20 out: @@ -3236,6 +3241,7 @@ static void nvme_do_copy(NvmeCopyAIOCB *iocb) uint16_t status; uint32_t dnsid =3D le32_to_cpu(req->cmd.nsid); uint32_t snsid =3D dnsid; + int64_t offset; =20 if (iocb->ret < 0) { goto done; @@ -3362,10 +3368,11 @@ static void nvme_do_copy(NvmeCopyAIOCB *iocb) assert(len <=3D blen); qemu_iovec_add(&iocb->iov, iocb->bounce, len); =20 - block_acct_start(blk_get_stats(sns->blkconf.blk), &iocb->acct.read, le= n, - BLOCK_ACCT_READ); + offset =3D nvme_l2b(sns, slba); + block_acct_start(blk_get_stats(sns->blkconf.blk), &iocb->acct.read, + offset, len, BLOCK_ACCT_READ); =20 - iocb->aiocb =3D blk_aio_preadv(sns->blkconf.blk, nvme_l2b(sns, slba), + iocb->aiocb =3D blk_aio_preadv(sns->blkconf.blk, offset, &iocb->iov, 0, nvme_copy_in_cb, iocb); return; =20 @@ -3524,7 +3531,7 @@ static uint16_t nvme_compare(NvmeCtrl *n, NvmeRequest= *req) qemu_iovec_init(&ctx->data.iov, 1); qemu_iovec_add(&ctx->data.iov, ctx->data.bounce, data_len); =20 - block_acct_start(blk_get_stats(blk), &req->acct, data_len, + block_acct_start(blk_get_stats(blk), &req->acct, offset, data_len, BLOCK_ACCT_READ); req->aiocb =3D blk_aio_preadv(blk, offset, &ctx->data.iov, 0, nvme_compare_data_cb, req); @@ -3722,7 +3729,7 @@ static uint16_t nvme_read(NvmeCtrl *n, NvmeRequest *r= eq) =20 data_offset =3D nvme_l2b(ns, slba); =20 - block_acct_start(blk_get_stats(blk), &req->acct, data_size, + block_acct_start(blk_get_stats(blk), &req->acct, data_offset, data_siz= e, BLOCK_ACCT_READ); nvme_blk_read(blk, data_offset, BDRV_SECTOR_SIZE, nvme_rw_cb, req); return NVME_NO_COMPLETE; @@ -3892,7 +3899,7 @@ static uint16_t nvme_do_write(NvmeCtrl *n, NvmeReques= t *req, bool append, goto invalid; } =20 - block_acct_start(blk_get_stats(blk), &req->acct, data_size, + block_acct_start(blk_get_stats(blk), &req->acct, data_offset, data= _size, BLOCK_ACCT_WRITE); nvme_blk_write(blk, data_offset, BDRV_SECTOR_SIZE, nvme_rw_cb, req= ); } else { diff --git a/hw/nvme/dif.c b/hw/nvme/dif.c index 4e7874f3223..fbd4d8eb816 100644 --- a/hw/nvme/dif.c +++ b/hw/nvme/dif.c @@ -644,8 +644,8 @@ uint16_t nvme_dif_rw(NvmeCtrl *n, NvmeRequest *req) qemu_iovec_add(&ctx->data.iov, ctx->data.bounce, len); =20 if (req->cmd.opcode =3D=3D NVME_CMD_READ) { - block_acct_start(blk_get_stats(blk), &req->acct, ctx->data.iov.siz= e, - BLOCK_ACCT_READ); + block_acct_start(blk_get_stats(blk), &req->acct, offset, + ctx->data.iov.size, BLOCK_ACCT_READ); =20 req->aiocb =3D blk_aio_preadv(ns->blkconf.blk, offset, &ctx->data.= iov, 0, nvme_dif_rw_mdata_in_cb, ctx); @@ -690,8 +690,8 @@ uint16_t nvme_dif_rw(NvmeCtrl *n, NvmeRequest *req) } } =20 - block_acct_start(blk_get_stats(blk), &req->acct, ctx->data.iov.size, - BLOCK_ACCT_WRITE); + block_acct_start(blk_get_stats(blk), &req->acct, offset, + ctx->data.iov.size, BLOCK_ACCT_WRITE); =20 req->aiocb =3D blk_aio_pwritev(ns->blkconf.blk, offset, &ctx->data.iov= , 0, nvme_dif_rw_mdata_out_cb, ctx); diff --git a/hw/scsi/scsi-disk.c b/hw/scsi/scsi-disk.c index 24bd1a78b6e..5b40e404e13 100644 --- a/hw/scsi/scsi-disk.c +++ b/hw/scsi/scsi-disk.c @@ -484,7 +484,8 @@ static void scsi_do_read(SCSIDiskReq *r, int ret) scsi_req_ref(&r->req); =20 if (r->req.sg) { - dma_acct_start(s->qdev.conf.blk, &r->acct, r->req.sg, BLOCK_ACCT_R= EAD); + dma_acct_start(s->qdev.conf.blk, &r->acct, r->req.sg, + r->sector << BDRV_SECTOR_BITS, BLOCK_ACCT_READ); r->req.residual -=3D r->req.sg->size; r->req.aiocb =3D dma_blk_io(r->req.sg, r->sector << BDRV_SECTOR_BI= TS, BDRV_SECTOR_SIZE, @@ -493,7 +494,8 @@ static void scsi_do_read(SCSIDiskReq *r, int ret) } else { scsi_init_iovec(r, SCSI_DMA_BUF_SIZE); block_acct_start(blk_get_stats(s->qdev.conf.blk), &r->acct, - r->qiov.size, BLOCK_ACCT_READ); + r->sector << BDRV_SECTOR_BITS, r->qiov.size, + BLOCK_ACCT_READ); r->req.aiocb =3D sdc->dma_readv(r->sector << BDRV_SECTOR_BITS, &r-= >qiov, scsi_read_complete, r, r); } @@ -551,7 +553,7 @@ static void scsi_read_data(SCSIRequest *req) first =3D !r->started; r->started =3D true; if (first && r->need_fua) { - block_acct_start(blk_get_stats(s->qdev.conf.blk), &r->acct, 0, + block_acct_start(blk_get_stats(s->qdev.conf.blk), &r->acct, -1, 0, BLOCK_ACCT_FLUSH); r->req.aiocb =3D blk_aio_flush(s->qdev.conf.blk, scsi_do_read_cb, = r); } else { @@ -634,7 +636,7 @@ static void scsi_write_data(SCSIRequest *req) =20 if (r->req.cmd.buf[0] =3D=3D VERIFY_10 || r->req.cmd.buf[0] =3D=3D VER= IFY_12 || r->req.cmd.buf[0] =3D=3D VERIFY_16) { - block_acct_start(blk_get_stats(s->qdev.conf.blk), &r->acct, 0, + block_acct_start(blk_get_stats(s->qdev.conf.blk), &r->acct, -1, 0, BLOCK_ACCT_FLUSH); cb =3D r->req.sg ? scsi_dma_complete : scsi_write_complete; r->req.aiocb =3D blk_aio_flush(s->qdev.conf.blk, cb, r); @@ -642,7 +644,8 @@ static void scsi_write_data(SCSIRequest *req) } =20 if (r->req.sg) { - dma_acct_start(s->qdev.conf.blk, &r->acct, r->req.sg, BLOCK_ACCT_W= RITE); + dma_acct_start(s->qdev.conf.blk, &r->acct, r->req.sg, + r->sector << BDRV_SECTOR_BITS, BLOCK_ACCT_WRITE); r->req.residual -=3D r->req.sg->size; r->req.aiocb =3D dma_blk_io(r->req.sg, r->sector << BDRV_SECTOR_BI= TS, BDRV_SECTOR_SIZE, @@ -650,7 +653,8 @@ static void scsi_write_data(SCSIRequest *req) DMA_DIRECTION_TO_DEVICE); } else { block_acct_start(blk_get_stats(s->qdev.conf.blk), &r->acct, - r->qiov.size, BLOCK_ACCT_WRITE); + r->sector << BDRV_SECTOR_BITS, r->qiov.size, + BLOCK_ACCT_WRITE); r->req.aiocb =3D sdc->dma_writev(r->sector << BDRV_SECTOR_BITS, &r= ->qiov, scsi_write_complete, r, r); } @@ -1710,7 +1714,7 @@ static void scsi_disk_emulate_mode_select(SCSIDiskReq= *r, uint8_t *inbuf) if (!blk_enable_write_cache(s->qdev.conf.blk)) { /* The request is used as the AIO opaque value, so add a ref. */ scsi_req_ref(&r->req); - block_acct_start(blk_get_stats(s->qdev.conf.blk), &r->acct, 0, + block_acct_start(blk_get_stats(s->qdev.conf.blk), &r->acct, -1, 0, BLOCK_ACCT_FLUSH); r->req.aiocb =3D blk_aio_flush(s->qdev.conf.blk, scsi_aio_complete= , r); return; @@ -1777,6 +1781,7 @@ static void scsi_unmap_complete_noio(UnmapCBData *dat= a, int ret) } =20 block_acct_start(blk_get_stats(s->qdev.conf.blk), &r->acct, + r->sector * BDRV_SECTOR_SIZE, r->sector_count * BDRV_SECTOR_SIZE, BLOCK_ACCT_UNMAP); =20 @@ -1894,7 +1899,8 @@ static void scsi_write_same_complete(void *opaque, in= t ret) data->iov.iov_len); if (data->iov.iov_len) { block_acct_start(blk_get_stats(s->qdev.conf.blk), &r->acct, - data->iov.iov_len, BLOCK_ACCT_WRITE); + data->sector << BDRV_SECTOR_BITS, data->iov.iov_l= en, + BLOCK_ACCT_WRITE); /* Reinitialize qiov, to handle unaligned WRITE SAME request * where final qiov may need smaller size */ qemu_iovec_init_external(&data->qiov, &data->iov, 1); @@ -1943,6 +1949,7 @@ static void scsi_disk_emulate_write_same(SCSIDiskReq = *r, uint8_t *inbuf) /* The request is used as the AIO opaque value, so add a ref. */ scsi_req_ref(&r->req); block_acct_start(blk_get_stats(s->qdev.conf.blk), &r->acct, + r->req.cmd.lba * s->qdev.blocksize, nb_sectors * s->qdev.blocksize, BLOCK_ACCT_WRITE); r->req.aiocb =3D blk_aio_pwrite_zeroes(s->qdev.conf.blk, @@ -1969,7 +1976,8 @@ static void scsi_disk_emulate_write_same(SCSIDiskReq = *r, uint8_t *inbuf) =20 scsi_req_ref(&r->req); block_acct_start(blk_get_stats(s->qdev.conf.blk), &r->acct, - data->iov.iov_len, BLOCK_ACCT_WRITE); + data->sector << BDRV_SECTOR_BITS, data->iov.iov_len, + BLOCK_ACCT_WRITE); r->req.aiocb =3D blk_aio_pwritev(s->qdev.conf.blk, data->sector << BDRV_SECTOR_BITS, &data->qiov, 0, @@ -2237,7 +2245,7 @@ static int32_t scsi_disk_emulate_command(SCSIRequest = *req, uint8_t *buf) case SYNCHRONIZE_CACHE: /* The request is used as the AIO opaque value, so add a ref. */ scsi_req_ref(&r->req); - block_acct_start(blk_get_stats(s->qdev.conf.blk), &r->acct, 0, + block_acct_start(blk_get_stats(s->qdev.conf.blk), &r->acct, -1, 0, BLOCK_ACCT_FLUSH); r->req.aiocb =3D blk_aio_flush(s->qdev.conf.blk, scsi_aio_complete= , r); return 0; diff --git a/qemu-io-cmds.c b/qemu-io-cmds.c index de4c1966fea..655dfae9057 100644 --- a/qemu-io-cmds.c +++ b/qemu-io-cmds.c @@ -1538,8 +1538,8 @@ static int aio_read_f(BlockBackend *blk, int argc, ch= ar **argv) } =20 clock_gettime(CLOCK_MONOTONIC, &ctx->t1); - block_acct_start(blk_get_stats(blk), &ctx->acct, ctx->qiov.size, - BLOCK_ACCT_READ); + block_acct_start(blk_get_stats(blk), &ctx->acct, ctx->offset, + ctx->qiov.size, BLOCK_ACCT_READ); blk_aio_preadv(blk, ctx->offset, &ctx->qiov, ctx->flags, aio_read_done, ctx); return 0; @@ -1693,8 +1693,8 @@ static int aio_write_f(BlockBackend *blk, int argc, c= har **argv) } =20 clock_gettime(CLOCK_MONOTONIC, &ctx->t1); - block_acct_start(blk_get_stats(blk), &ctx->acct, ctx->qiov.size, - BLOCK_ACCT_WRITE); + block_acct_start(blk_get_stats(blk), &ctx->acct, ctx->offset, + ctx->qiov.size, BLOCK_ACCT_WRITE); =20 blk_aio_pwritev(blk, ctx->offset, &ctx->qiov, ctx->flags, aio_write_done, ctx); @@ -1706,7 +1706,7 @@ static int aio_write_f(BlockBackend *blk, int argc, c= har **argv) static int aio_flush_f(BlockBackend *blk, int argc, char **argv) { BlockAcctCookie cookie; - block_acct_start(blk_get_stats(blk), &cookie, 0, BLOCK_ACCT_FLUSH); + block_acct_start(blk_get_stats(blk), &cookie, -1, 0, BLOCK_ACCT_FLUSH); blk_drain_all(); block_acct_done(blk_get_stats(blk), &cookie); return 0; @@ -2325,8 +2325,8 @@ static int aio_discard_f(BlockBackend *blk, int argc,= char **argv) =20 clock_gettime(CLOCK_MONOTONIC, &ctx->t1); ctx->qiov.size =3D count; - block_acct_start(blk_get_stats(blk), &ctx->acct, ctx->qiov.size, - BLOCK_ACCT_UNMAP); + block_acct_start(blk_get_stats(blk), &ctx->acct, ctx->offset, + ctx->qiov.size, BLOCK_ACCT_UNMAP); blk_aio_pdiscard(blk, ctx->offset, count, aio_discard_done, ctx); =20 return 0; diff --git a/system/dma-helpers.c b/system/dma-helpers.c index 0d592f64680..7bf41119ebc 100644 --- a/system/dma-helpers.c +++ b/system/dma-helpers.c @@ -315,9 +315,9 @@ MemTxResult dma_buf_write(void *ptr, dma_addr_t len, dm= a_addr_t *residual, } =20 void dma_acct_start(BlockBackend *blk, BlockAcctCookie *cookie, - QEMUSGList *sg, enum BlockAcctType type) + QEMUSGList *sg, int64_t offset, enum BlockAcctType typ= e) { - block_acct_start(blk_get_stats(blk), cookie, sg->size, type); + block_acct_start(blk_get_stats(blk), cookie, offset, sg->size, type); } =20 uint64_t dma_aligned_pow2_mask(uint64_t start, uint64_t end, int max_addr_= bits) diff --git a/tests/unit/test-block-accounting.c b/tests/unit/test-block-acc= ounting.c index 7aae491cfc2..0081502891c 100644 --- a/tests/unit/test-block-accounting.c +++ b/tests/unit/test-block-accounting.c @@ -63,7 +63,7 @@ static void *reader_thread(void *opaque) while (!qatomic_read(&stop_workers)) { BlockAcctCookie cookie; =20 - block_acct_start(stats, &cookie, 4096, BLOCK_ACCT_READ); + block_acct_start(stats, &cookie, -1, 4096, BLOCK_ACCT_READ); block_acct_done(stats, &cookie); } =20 --=20 2.55.0 From nobody Sat Sep 26 20:50:57 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1788184430; cv=none; d=zohomail.com; s=zohoarc; b=l84NvX0kROrNJl/mVzbHak/Ut15EA8hBuA+c9XL+GwFvh5Ed68IxogpJsuxPHWIZgjW//yJbeZLYTZJ/G6gzduaqlB3giBKR6olvzhcn2kviXK5LECAjTJKr/23+wGIhGbja993O/6JzivmUcGXkC+G9dF1wbZjmlrCz1SIOpEY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1788184430; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=gBILngA/o03AQ1uNpTJlz0pKm/hnPgAOBsC92GJh0xo=; b=i43qrLj1Z0QBYFvvfQ02JdJfzEqBRgKWFewiQ00B+Z2k/NfYGKAOU2UfG4w0bTWselnqaJt4RZ/BoeU+pf5OyR2TUxFF2y5cJh70httag5ghdVWPdznCYXL2uNHK61E8j98znNXhgKyJ34jela03jRRxzgrVWYs71Ise1k6P1LM= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 178818443093593.61601718831787; Mon, 31 Aug 2026 06:53:50 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1x12R3-0004Ak-2V; Mon, 31 Aug 2026 09:52:29 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1x12R1-0004AR-Mj for qemu-devel@nongnu.org; Mon, 31 Aug 2026 09:52:27 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1x12R0-0003x1-3B for qemu-devel@nongnu.org; Mon, 31 Aug 2026 09:52:27 -0400 Received: from mail-wm1-f69.google.com (mail-wm1-f69.google.com [209.85.128.69]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-588-x2e3IXxAPGi05TPYndh73Q-1; Mon, 31 Aug 2026 09:52:24 -0400 Received: by mail-wm1-f69.google.com with SMTP id 5b1f17b1804b1-495529a93f9so32698295e9.3 for ; Mon, 31 Aug 2026 06:52:23 -0700 (PDT) Received: from localhost (p200300cfd72080187472d8ceb75e67b1.dip0.t-ipconnect.de. [2003:cf:d720:8018:7472:d8ce:b75e:67b1]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-49cdb13f094sm35792465e9.3.2026.08.31.06.52.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 31 Aug 2026 06:52:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1788184345; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=gBILngA/o03AQ1uNpTJlz0pKm/hnPgAOBsC92GJh0xo=; b=YruXVkzDKhzywqcT6IBYuWDdCH6cKmO2Nm6RUEzNA4mr01eJPrZWOThQRswpeoUjvaQbPg SxL06e0o23+9P29nonsLmQynD2yklxSjzyzytENSsLija/QkwQFuFGiagQo/LRKXjndhzL SslDRLJ4DVVuYGBSgRE0iBA1tjPkl1I= X-MC-Unique: x2e3IXxAPGi05TPYndh73Q-1 X-Mimecast-MFC-AGG-ID: x2e3IXxAPGi05TPYndh73Q_1788184343 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1788184343; x=1788789143; darn=nongnu.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=gBILngA/o03AQ1uNpTJlz0pKm/hnPgAOBsC92GJh0xo=; b=NbohQkgJE+qIuaZmBR7s2jwit7RKGU5JxwiaNBeHuYeQmbQhQP6viJF03JeYzTaD8A aibwL82lJ4IUtrRM9VuHLezB5h1ex5cTnjg/WOMArW81nUFyRSLsAmXQDyJDdgEpk1w0 sICJiRMybODtTYrHWPWgoM1/k3P/P3rBcbyDm6zIrTK/GH7eqxthgNh3/hdKN/IQFocP HJu3igj4nULnghsygBASoIe7GtmKEmQUWyBP7iMAufIkFhZiK0c9HmKgVh8SjDb/5bKf 3X84Z5riW4BZwqKkcfDDI+8+NqkffZha4mv+q9c1q733dfZkZFZiU68H74SUB8Lk+EBU MezA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788184343; x=1788789143; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=gBILngA/o03AQ1uNpTJlz0pKm/hnPgAOBsC92GJh0xo=; b=rgADii60bvPyNEQ0FOQPj1VGaHIUSG46WrbU4gSKhCU6bNljHtH+qWgSf/ZWL9z3W0 7K8eHr1ZjrZ51YaqqKA/ebufyPJLMoS8T78QFouISnNqxRG6HhnsOIZHsVfRXeepykn+ 4mOq3guwpQE7/RciOlWQ1CLbEZjHe3azx0DUeROZ/uSwwxhLYR9wJ3vd/yz9gCgdDc2s 57hIOUIsseu0aKlAYKxlhl3oOwM0i0p1df1B8auXhfJbhC6MI64QBRTVcbhzPkWSJwDs kraqiodheiW3gI5jWRGt8mQFEpYCLPoM70v+zyOrLYd7eMYO9lhe8xPcGBlQAxsW51kA 626w== X-Gm-Message-State: AFuF++n9p+AuVHksYS2MrXCzEUddFYH+NUUmTZHn0Z9QIdWaTlWBGvxd qBjGJD1sosCluFH44HXThUqySrKvZ2HFEXOBWcqeFySMTlDLG3X5ZVOjcZd+jUgglhTob92XxOe 5ECFJ0mlPBL93rOuGEJIZ8vPtR44VwtVIA6XcJlcE3/86CU8jQza0Fjm3 X-Gm-Gg: AR+sD10epbPetUI+zLg3Wi3i1xVGv/VIuGOEVEDej8erNEB7IAnWt6t5UDWk130K8hg czGYItvxv7256UR0GlfA2pBH1Zpl+mBu1ggy/qKo2mnJBkFBZEbpJ7fub3pXfC66xbsbReLpxSA U9j0nsCOgGYtJSXEKzwaxWUZ/DthiWxqogqg5Y62p9E5aIFdu1Ta6gyNLpMgaQwbaJFZfbYzFqN jU6nr9WMZti6JoX0cOuizltaX42FEJaN7pMULDqWwI7YY8cPQj75babjj205rDU87NUIeahWMTr AwTwnHkLtNRot+Pgn6uiDHf6th64MZ5/0aYiuMU/QeaAOfraXgOd7e+FK1wc+TT9dM6b5HLG02s U71HqOl8PR2k5G5hmyfApxXZCfe4QXFpaEoToxJYdPJtEpR54xJbI+FMU0sY= X-Received: by 2002:a05:600c:19c8:b0:49b:c8e:a211 with SMTP id 5b1f17b1804b1-49b91c20bfamr403766725e9.5.1788184342736; Mon, 31 Aug 2026 06:52:22 -0700 (PDT) X-Received: by 2002:a05:600c:19c8:b0:49b:c8e:a211 with SMTP id 5b1f17b1804b1-49b91c20bfamr403765615e9.5.1788184342169; Mon, 31 Aug 2026 06:52:22 -0700 (PDT) From: Hanna Czenczek To: qemu-block@nongnu.org Cc: qemu-devel@nongnu.org, Hanna Czenczek , Kevin Wolf , John Snow , "Denis V . Lunev" , Eric Blake , Markus Armbruster , Stefan Hajnoczi Subject: [PATCH 2/9] qapi/block: Add IoAccountingOperation enum Date: Mon, 31 Aug 2026 15:51:58 +0200 Message-ID: <20260831135206.126184-3-hreitz@redhat.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260831135206.126184-1-hreitz@redhat.com> References: <20260831135206.126184-1-hreitz@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.133.124; envelope-from=hreitz@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1788184433015158500 Content-Type: text/plain; charset="utf-8" This enum gives more information than IoOperationType (which is used for the rerror/werror distinction) to identify operation types for block accounting. Signed-off-by: Hanna Czenczek --- qapi/block.json | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/qapi/block.json b/qapi/block.json index 46955bbb3e3..456118eb0b4 100644 --- a/qapi/block.json +++ b/qapi/block.json @@ -603,3 +603,25 @@ '*boundaries-zap': ['uint64'], '*boundaries-flush': ['uint64'] }, 'allow-preconfig': true } + +## +# @IoAccountingOperation: +# +# A more finely grained enumeration of I/O operation types beyond what +# `IoOperationType` provides (whose read/write distinction matches the +# rerror/werror policy settings). +# +# @read: Reading data +# +# @write: Writing data +# +# @flush: Flushing data to disk +# +# @zone-append: Appending data to a zone of a zoned block device +# +# @unmap: Discarding a block of data +# +# Since: 11.2 +## +{ 'enum': 'IoAccountingOperation', + 'data': [ 'read', 'write', 'flush', 'zone-append', 'unmap' ] } --=20 2.55.0 From nobody Sat Sep 26 20:50:57 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1788184455; cv=none; d=zohomail.com; s=zohoarc; b=Edmy/5n1LhXpvY7lLNbrip+mUqgKSKkHO19pQTR0EESwGRw0vbQ1X75xIq/OQNCcf+nnFYC5fI/HIH0nIToNnokzpkol6zx69LOXzjAZhGPDi088UOPN5UYUuDfp1A+KPCP5QxDY8CPJp5TuySc+/vZzVwz2usediqR36rssRBU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1788184455; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=FxuTKKPfZBG3LeAl6yXpicni4GMm8MaEJLalJaIjD3I=; b=Rtbr0HjFDEntPuWLdvIyp4F8PxTBrTkTaJCf/IMDB5cbKi5gRsDBrzNViiwpBQZ4ckNuZmNBpLNpB+OdZZOxMaFa+3KMBQSxh2aTtv/Wn0obJmZNFGrTA1yblxkDopdB+6KSrbED38+8RklC2ZghQTo3DLZB0wL3cnYaU4W171A= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1788184455055788.7982102302938; Mon, 31 Aug 2026 06:54:15 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1x12R6-0004CI-Hc; Mon, 31 Aug 2026 09:52:32 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1x12R5-0004C3-Qa for qemu-devel@nongnu.org; Mon, 31 Aug 2026 09:52:31 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1x12R4-0003xj-8p for qemu-devel@nongnu.org; Mon, 31 Aug 2026 09:52:31 -0400 Received: from mail-wm1-f69.google.com (mail-wm1-f69.google.com [209.85.128.69]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-79-lcx5sD_OMtm3wSbrT3mgng-1; Mon, 31 Aug 2026 09:52:28 -0400 Received: by mail-wm1-f69.google.com with SMTP id 5b1f17b1804b1-496bbcf7d1eso27856595e9.0 for ; Mon, 31 Aug 2026 06:52:27 -0700 (PDT) Received: from localhost (p200300cfd72080187472d8ceb75e67b1.dip0.t-ipconnect.de. [2003:cf:d720:8018:7472:d8ce:b75e:67b1]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-482fbb20122sm22604876f8f.20.2026.08.31.06.52.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 31 Aug 2026 06:52:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1788184349; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=FxuTKKPfZBG3LeAl6yXpicni4GMm8MaEJLalJaIjD3I=; b=M3fbpimhoAWKd3SwmANXZVqD5qBIO3czfDrk1rYOs6pePqeBKnKDQNySwhGcGvzbFgSQLl YAyqC5kR0AmQ/l/buWlyOHEY3AOXTm47taJGfr4QM46QoX32XKWDkMOXuGNtAz3X2bluxo KlUjgGmr2idvhxHzvSl7/BLslf3s874= X-MC-Unique: lcx5sD_OMtm3wSbrT3mgng-1 X-Mimecast-MFC-AGG-ID: lcx5sD_OMtm3wSbrT3mgng_1788184347 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1788184347; x=1788789147; darn=nongnu.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=FxuTKKPfZBG3LeAl6yXpicni4GMm8MaEJLalJaIjD3I=; b=QocNMHG2P/2aS+ssTzmK4ET9sMX6bHDVqBmoLYnQS/vS+LJg3NGUMb6oat/x0dv15c fMrIrj5XygC75I9L/6EpTwjG792ooUffTZ4rGUvKyAYsvzqR9zxI1OrM48mQoGYEvYSg xB7m4hjaoXw3rKKC75PVPdQb3MXK9GMIH8ECfoyM8qI9ZGO+QUTA38VEwByfvbmOml/A zE25KH2htODQ7TsZkDoMQ/eO5+u4yeGnjBxzR9RRYzO/nB1ojXFpXGtjpAZNDoef9dez 0mUd968EmZzqsCvLyXICNuvOP12EIW7zXJzQezjF/mVm9teLzTx2k+3Vpm28iG6Mzg9v i65w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788184347; x=1788789147; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=FxuTKKPfZBG3LeAl6yXpicni4GMm8MaEJLalJaIjD3I=; b=pLz6riet7ycSQvWIWnALPC6QioQrRF6p+PcRbMG5SKdnPynXcGPpT6NFCL2SrDH7R8 0VupG+pkHlG8Iwbg6OJjUs09mK2EZBxFXbvAHXpKbMdlUWFIFoQeM3PzEgRp19iygZ4x 1CS6R9w0TayC8hITJ/qN5sOeK8uP+YEa3HkfsCROAe/q/1tbtB+pXubNcEsKmWisln9C 0J+S7w8/x1+lXHJATMZYy+XFwQOUsH2GSQqpoJbtEkvrrE3EwVVotz9UffKSkYcT559A WVviJrRQcKl7JetXj56ojhgaHX31L0Al1tb6y6YCYTruFu71Hff23Ebx7/FeGnTVuAQR eRwA== X-Gm-Message-State: AFuF++kGoKK39fhU6v6eevD23MTYxLTO/UYRo/yh7rr0GJlnh6xL8Nnu JXOA76kmxHotaM/9Cl5YQK7Oi87pXUZHXeyFzqsssAxzTrR469ZPBVbXmAQaJDQislIDoM/3tPR hYM7tMDftDtB84Y1haQ/WEZB5Ra5TuBS3abDZ797VY+kkvF3OCY2Q9683 X-Gm-Gg: AR+sD12NMqOe7rVJgzJFox50kr+jhS7bEp53pmxv5b4tvb/aeKKMhUbXfftHhSETFz/ Qygc1Q3zVu6ubp8Pd9Ab16ISJRIAFNNLcISjGArUTFd0TdN9KGNJvtgbDrSoZEyHcE+HzXa5Nxj 7C5NCw0PwhX9QX3wnvF448g3RX9SV98XUkMqewdltOmjIA9Zn9VQbplRU5jL1hoHKytQK1WjxI9 MKVA8RJ3sVaeIKas1cnApyohSC6cyUAdrRUdOpePIrs278gbEuBNh0q7Tqt+EE5D63qFn93alKW JeFuRpItg81BjnAYnKpRPa1LxO/CPXNfTYnPDynQEW9eUD7kGI8w0xO/DlPP1r0NhW4vQiLnsjX M9WTe9RhgHiGhPlpRAmI3VU7MUoSNYtwfGCrxLtdoGoRJ5S5qGpMXd5rlLrg= X-Received: by 2002:a05:600c:5490:b0:49c:cf18:494e with SMTP id 5b1f17b1804b1-49ccf18498emr249132275e9.12.1788184346794; Mon, 31 Aug 2026 06:52:26 -0700 (PDT) X-Received: by 2002:a05:600c:5490:b0:49c:cf18:494e with SMTP id 5b1f17b1804b1-49ccf18498emr249131635e9.12.1788184346417; Mon, 31 Aug 2026 06:52:26 -0700 (PDT) From: Hanna Czenczek To: qemu-block@nongnu.org Cc: qemu-devel@nongnu.org, Hanna Czenczek , Kevin Wolf , John Snow , "Denis V . Lunev" , Eric Blake , Markus Armbruster , Stefan Hajnoczi Subject: [PATCH 3/9] qapi/block: Add BLOCK_IO_DELAY event Date: Mon, 31 Aug 2026 15:51:59 +0200 Message-ID: <20260831135206.126184-4-hreitz@redhat.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260831135206.126184-1-hreitz@redhat.com> References: <20260831135206.126184-1-hreitz@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.129.124; envelope-from=hreitz@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1788184457374158500 Content-Type: text/plain; charset="utf-8" This event will be emitted when a disk operation takes longer than a pre-defined threshold (as set on the block device). Signed-off-by: Hanna Czenczek --- qapi/block.json | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/qapi/block.json b/qapi/block.json index 456118eb0b4..1cdaffd5520 100644 --- a/qapi/block.json +++ b/qapi/block.json @@ -625,3 +625,33 @@ ## { 'enum': 'IoAccountingOperation', 'data': [ 'read', 'write', 'flush', 'zone-append', 'unmap' ] } + +## +# @BLOCK_IO_DELAY: +# +# Emitted when a disk operation takes longer than the pre-defined +# threshold (as set via the delay-alert-ms property on the block +# device). +# +# Note that delays deliberately incurred by throttling do count +# towards the operation duration. +# +# @qom-path: path to the device object in the QOM tree +# +# @operation: I/O operation +# +# @duration: Ongoing duration of the operation (in seconds) +# +# @offset: Request offset in the guest disk (in bytes), if available +# +# @bytes: Request length +# +# Since: 11.2 +## +{ 'event': 'BLOCK_IO_DELAY', + 'data': { + 'qom-path': 'str', + 'operation': 'IoAccountingOperation', + 'duration': 'number', + '*offset': 'uint64', + 'bytes': 'uint64' } } --=20 2.55.0 From nobody Sat Sep 26 20:50:57 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1788184381; cv=none; d=zohomail.com; s=zohoarc; b=Ivkf3WCzD2CiuyIIEFtr0R4G99YSPFkAsjMAt930R2/Na7pJpROkOyqwRxOBkZ+L9dv7iuIyGzmKnuOEzsbkENbqm89q6U15Lp+DWNWmI1RMXfLAkERp2JNOStmN5Mp/+Ya//GIsj5U0PHPMHbBqMP7HcySrWmIVttUmCiyo2no= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1788184381; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=mARaIROY7KV7DEbzkF9LPUd5zvGcOmMBrV5r51m4f3k=; b=fS/YX8M+lQbu/4fbNAdOExNSV37Im/aeJL2qknP72ptidWa6RIWVUheXxXFx43HP9ctI+cpZhjAzoEcokoR7jrmElo3Xq8QYxa3Fc/XlyT1ZQIdjEVJVud+wNdl7v1DdTguP6LQvXZHrDnOfTS1D5HUaY/EgBQv84uuNGxhQyjo= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1788184381059638.6425326021482; Mon, 31 Aug 2026 06:53:01 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1x12R8-0004DZ-Nc; Mon, 31 Aug 2026 09:52:34 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1x12R7-0004D6-N2 for qemu-devel@nongnu.org; Mon, 31 Aug 2026 09:52:33 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1x12R5-0003yE-Sn for qemu-devel@nongnu.org; Mon, 31 Aug 2026 09:52:33 -0400 Received: from mail-wm1-f69.google.com (mail-wm1-f69.google.com [209.85.128.69]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-94-lUGHsFX6OEyk_kw5ibttxA-1; Mon, 31 Aug 2026 09:52:29 -0400 Received: by mail-wm1-f69.google.com with SMTP id 5b1f17b1804b1-49b0d7a07acso34422845e9.3 for ; Mon, 31 Aug 2026 06:52:29 -0700 (PDT) Received: from localhost (p200300cfd72080187472d8ceb75e67b1.dip0.t-ipconnect.de. [2003:cf:d720:8018:7472:d8ce:b75e:67b1]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-49b49cc61cfsm410444125e9.6.2026.08.31.06.52.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 31 Aug 2026 06:52:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1788184351; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=mARaIROY7KV7DEbzkF9LPUd5zvGcOmMBrV5r51m4f3k=; b=C6YWcAWugI9rckkpXL2MoWSP5Tb2FIik4sFo1z5bpTuwvW4rXqXWy9QQqMGe7z6ymhL6Gj XrfHjPjiALXHZF8+hi7ul0qUzCCc0mWw6wd4J4OUbf3tSpueKWsRKngnB/bbPYJv0SMaF1 v51vJHq8hD9dNyEF56yTgELqgODcLtA= X-MC-Unique: lUGHsFX6OEyk_kw5ibttxA-1 X-Mimecast-MFC-AGG-ID: lUGHsFX6OEyk_kw5ibttxA_1788184349 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1788184348; x=1788789148; darn=nongnu.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=mARaIROY7KV7DEbzkF9LPUd5zvGcOmMBrV5r51m4f3k=; b=oCCo8lFvO3PVf9zoN824Yzew470/IA1MFCii3MTXQmZH+Y7LEQ+mxGesf859+Sol2V dXo+ONy+aXtoGtnYmwEGC/P+pPV6MgV61il0x3iEMBWWYwV+y+ri4eBTMdnFPYTdt4fC UtvnXVgFCfHJAJhv43VB7pxrGtqxXnAOJAgASLtnW2s6HMBqzOfiiJR2jh7rXsIP0xW3 5z5omHMFBqV0eWd60CWZHQJ4xW/ZIufUIlbFzn+v+G0H7MtLjwYKUF4J/LS+4JK/qnJv Vu6FK7Gh0eOUnx7dayvWH5IK1h18hruhswBLvcs435PJymC7SJC89A4QTiUCn3cjmo2U oVzg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788184348; x=1788789148; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=mARaIROY7KV7DEbzkF9LPUd5zvGcOmMBrV5r51m4f3k=; b=CHvBPCaAu1XLfZLPJS/hJ4ludW67ZJcdnPPEtt2jwddHoS+yOW6PXkMS/90zRrPeqM 6h7iGDTCC/rbC4anhH02hRhruK2aLxPVQRg6+NqhQXrmjvoClTD8DJvM9Xw6sxGiQ3ry jFh8W1cX3eHdbbSrK5P0Hnl9z0B6fpJMZ32V5pPI5sU+gKRTYWuDg7J0l2PuBteSstXD X0cFlgG6dfsl7xSTdAJo097t7SzB5hTo9gQXgxaqxzDEsl0Q8eUj0SYNJF6Dn13ZOXdK hk/nccBHVkttseVtyqvAP9K3KRCIT3hzeWC2PLTIp+THDgKxH+6+IYL7DWQ8Cb5xvy0A F0yg== X-Gm-Message-State: AFuF++lHqpEh1x/rh2aHc+6apQF1hMNWBGZqJExVkNOrYSlg8JCQaCtf WQX2rZn7Pgb08GA8kyQYEM/6HrQV5Vh8vHPyoyDjZmd3dvYO4FSnSVnVxeSA0IiSG7uVRjO98j4 IytecL5Z8z6SH27fCVyiS3g5W6aTHb668oA5ReG52R4qhk2lCGOBr+CjL X-Gm-Gg: AR+sD11iqXSL3LOqcgRS0sW2eeXwo9hX4KcFtAkSE1GxwR7ehcl1w1sPhhpqehsalL4 qxDnXVWDDu/y1DRb/BZrnMNgz5Ma1z5fNm2GR6PrgTb6FgLrdR9hNbdU90COJDTINBjpzP3Nn7w DMJE67BZfBNtIiFO9u31uWPEo/zmUrA3rbRIa9FEGxcYndpg1coI1JktUC8L5cB6Vpnd2umEQzE dwHEiYoo9JH1o99EmjHv1xPHwVJPYyxCsh9ENC/cPuL02xzcYK7o3Hdc/lvAvg9UuLnJ5YjifsR sJ/6OBxho94H5x/ycV6S5kS+F3TtOxDNO0emXBF+JNeZ+mOi1lX7FBo4QbE6cetxC76xwbpCHsE dLJogK2nNPqY7mSB8nFJGRjjSR9PFPyaHwrpVYgELY8HgJLpmqwvFY4NcMFM= X-Received: by 2002:a05:600c:1d1d:b0:49b:d45:703e with SMTP id 5b1f17b1804b1-49b91c2dfecmr398052745e9.8.1788184348546; Mon, 31 Aug 2026 06:52:28 -0700 (PDT) X-Received: by 2002:a05:600c:1d1d:b0:49b:d45:703e with SMTP id 5b1f17b1804b1-49b91c2dfecmr398051545e9.8.1788184347971; Mon, 31 Aug 2026 06:52:27 -0700 (PDT) From: Hanna Czenczek To: qemu-block@nongnu.org Cc: qemu-devel@nongnu.org, Hanna Czenczek , Kevin Wolf , John Snow , "Denis V . Lunev" , Eric Blake , Markus Armbruster , Stefan Hajnoczi Subject: [PATCH 4/9] block-backend: Public blk_get_attached_dev_path() Date: Mon, 31 Aug 2026 15:52:00 +0200 Message-ID: <20260831135206.126184-5-hreitz@redhat.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260831135206.126184-1-hreitz@redhat.com> References: <20260831135206.126184-1-hreitz@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.133.124; envelope-from=hreitz@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1788184383031158500 Content-Type: text/plain; charset="utf-8" Make blk_get_attached_dev_path() public so we can use it in the I/O operation delay QMP event to identify the affected guest block device. Signed-off-by: Hanna Czenczek --- include/system/block-backend-io.h | 9 +++++++++ block/block-backend.c | 6 +----- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/include/system/block-backend-io.h b/include/system/block-backe= nd-io.h index fd84723d9d0..63b2dd2e24f 100644 --- a/include/system/block-backend-io.h +++ b/include/system/block-backend-io.h @@ -41,6 +41,15 @@ bool blk_iostatus_is_enabled(const BlockBackend *blk); */ char *blk_get_attached_dev_id(BlockBackend *blk); =20 +/* + * Return the QOM path of the block device attached to the + * BlockBackend. + * + * The caller is responsible for releasing the value returned + * with g_free() after use. + */ +char *blk_get_attached_dev_path(BlockBackend *blk); + BlockAIOCB *blk_aio_pwrite_zeroes(BlockBackend *blk, int64_t offset, int64_t bytes, BdrvRequestFlags flags, BlockCompletionFunc *cb, void *opaque); diff --git a/block/block-backend.c b/block/block-backend.c index 37ba7e9fc40..164bda846f4 100644 --- a/block/block-backend.c +++ b/block/block-backend.c @@ -1053,11 +1053,7 @@ char *blk_get_attached_dev_id(BlockBackend *blk) return blk_get_attached_dev_id_or_path(blk, true); } =20 -/* - * The caller is responsible for releasing the value returned - * with g_free() after use. - */ -static char *blk_get_attached_dev_path(BlockBackend *blk) +char *blk_get_attached_dev_path(BlockBackend *blk) { return blk_get_attached_dev_id_or_path(blk, false); } --=20 2.55.0 From nobody Sat Sep 26 20:50:57 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1788184455; cv=none; d=zohomail.com; s=zohoarc; b=QP63MPH8gW8wW6BMAlH8tb+7xq+Ue+E8q/H5ilc13QTiWS/TCSlKk2K7N1Mro90aADtzuTMz4fi0MHaABfQ9kmvuBqJlA/bU2D2U/R05qzhPGrgfr2ZJZqEjNPtsHgp4K6NkW2zaKF+13uVQji+VK2CKeerXo84/nvS4az3Y78E= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1788184455; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=3NguZRg2njAzfq0LjCSooGLybivAspJ8iVsvKAnTuuw=; b=S70P5sgDHjisYpVdLUz3+GyJrZvgvWYBoWOxjlvOIURwyLtU3YjmFpK0QOayLHNcLVh8FgKIVr56cJrgCGurNp+J+kYXKgrP4En2W9ADcUN+rCVFJGmpkOwDOCdnkXFOUPM32+Hi+ko15/SoCmIUDGOyCD3NPWCGrcahSoNfh78= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1788184455458430.8079986313502; Mon, 31 Aug 2026 06:54:15 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1x12RA-0004F1-Vu; Mon, 31 Aug 2026 09:52:37 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1x12RA-0004EX-7E for qemu-devel@nongnu.org; Mon, 31 Aug 2026 09:52:36 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1x12R8-0003z2-FM for qemu-devel@nongnu.org; Mon, 31 Aug 2026 09:52:35 -0400 Received: from mail-wm1-f69.google.com (mail-wm1-f69.google.com [209.85.128.69]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-573-mgB30ikkOESbGGJAw1Zgbw-1; Mon, 31 Aug 2026 09:52:32 -0400 Received: by mail-wm1-f69.google.com with SMTP id 5b1f17b1804b1-49b0e6638e3so27238705e9.2 for ; Mon, 31 Aug 2026 06:52:31 -0700 (PDT) Received: from localhost (p200300cfd72080187472d8ceb75e67b1.dip0.t-ipconnect.de. [2003:cf:d720:8018:7472:d8ce:b75e:67b1]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-49cd53a4678sm119908535e9.13.2026.08.31.06.52.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 31 Aug 2026 06:52:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1788184353; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=3NguZRg2njAzfq0LjCSooGLybivAspJ8iVsvKAnTuuw=; b=F8oYaNOyKbtnapaD+gX2qkFYeDAtS8NfQsmP1nXYTze4ghIr72Os3mTJoXsMROJwj/bEn1 36wnZnS3c35BO/Fohdb6SYq2DIn0VYIxlWwVZRbfC3uWBDI/htNDzIQ+HGVbsOqL0hlv4Z 94KBqy4TAuaXGjiwoqxaHpc6gFM/dj0= X-MC-Unique: mgB30ikkOESbGGJAw1Zgbw-1 X-Mimecast-MFC-AGG-ID: mgB30ikkOESbGGJAw1Zgbw_1788184351 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1788184351; x=1788789151; darn=nongnu.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=3NguZRg2njAzfq0LjCSooGLybivAspJ8iVsvKAnTuuw=; b=QW400cwTZS/YU0m64ODTF+0Ley79NzOVAizlKX3Lvej2WBE4hfOE8sKt5gPl1QQHqz TkbiDw7DfpsPa4SAnyVqjVziwq5GJu46Vk+VoeYZye5+2qfe2Hx3Ixi40dVymRcHvVYJ ZecEZanzpLdndjR5O0LxDVBHmKFec1jDwDUwUZlViRXV6F7s/28zf8TaRD583JJ5UDiL mfk739p6sZ1XUegtMdS8VAUyJw8fe4Mq/uEKxtCZHnDcbCUXO2fadI0x4rzj3WPQxUJJ uYzu8smpXk0hxfZ3MyiIKndKfkHyCs6R7oWGTSVnHx/LN+4SpkbkzRSOZSPSZ6QCNG72 ZZoA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788184351; x=1788789151; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=3NguZRg2njAzfq0LjCSooGLybivAspJ8iVsvKAnTuuw=; b=J6LyK3WQXYb8g7SVSdRfrb3FgIQJbTrJ1dNbzjYvKNCCQuMDkGC/CnQSKa7nGIikCk 7PO8UoKzoTyFKSL+MuyUc7CeopQG8Oj7Epd7/jc5K+kdCzmslYXSRgP1MLRo2o5nTFAm rSgB3zAbtoLCHoQevyPQfCiTXYKdf/vASiFhCFiEx4HqNS6FuAxAzmyb8Si1aYf4d2hK 6aKk+kE1qGAU82lj1bVF0xL6yV2Ba86Bz+t5/iYVRI3pKHLig+kS5Yrgd6THPW3jkWbl llABnMlafAqc2B15dQZVQaySKDVnwPHwz8st94Qq8/vTYA5G5elt1AB8YbmnLGhHVyXZ u3yQ== X-Gm-Message-State: AFuF++kfexdnh8NyfImyO+XMqBqWtXOsakGBIst8Fi8zu3lLhtP+17P7 xYhgAUZ/sWqKrYRqGklx2vr6Vc4q5y/LSfD62bYK6lb3IemPDug/ne8bTBlObzrw0P7zGWV/GT6 C7mnSRuuPIHFAt3Fkvk1TxH/fcfxLkd4fqF3lapd/6ThgjoKKVRvpTTmB X-Gm-Gg: AR+sD10PH4dYVBE1arwpzZYl2QFaHAwnzWDFu5KgFtGqc9/Yx84M291zs3wfwh6UftJ tgzhgyox3hSXdcPtvWPydY/Y9JmVmhBZKOXmBLBlRPuCIhIxEu2U1Vq3wCFfymHX/tqLQqa5/Uz 0KzNoDJZSybZLWPcbFl0Agbdrtx5S5exKHK1L9w/47sm5uOWZavg6eX9pPGR2U7IvhlpYJ+UljJ OX3OKHUN0Rn/FzFvTJRNY0Hq4Ra80g+J5GOYxhL2MUXhahPBXUL+gh+Ge+6W0mFn5oxkmM5YMkh x2Zz9W8d75gCc3XQZeD+B+RH72qyV+9wNs+YL1+q140SCj9J4NJCtyQ8qQSLWyNCtT4uYqeT69R FEiTzi6lDdVynKWpwY1TFu8jW/NI1onGkChm37+2zdYv0Y/VId4HU00Q6Unk= X-Received: by 2002:a05:600c:1d08:b0:49c:d293:70c8 with SMTP id 5b1f17b1804b1-49cdc40551bmr16384435e9.3.1788184350927; Mon, 31 Aug 2026 06:52:30 -0700 (PDT) X-Received: by 2002:a05:600c:1d08:b0:49c:d293:70c8 with SMTP id 5b1f17b1804b1-49cdc40551bmr16383065e9.3.1788184350390; Mon, 31 Aug 2026 06:52:30 -0700 (PDT) From: Hanna Czenczek To: qemu-block@nongnu.org Cc: qemu-devel@nongnu.org, Hanna Czenczek , Kevin Wolf , John Snow , "Denis V . Lunev" , Eric Blake , Markus Armbruster , Stefan Hajnoczi Subject: [PATCH 5/9] block/accounting: Add BB field to latency checker Date: Mon, 31 Aug 2026 15:52:01 +0200 Message-ID: <20260831135206.126184-6-hreitz@redhat.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260831135206.126184-1-hreitz@redhat.com> References: <20260831135206.126184-1-hreitz@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.129.124; envelope-from=hreitz@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1788184457394158500 Content-Type: text/plain; charset="utf-8" The BlockBackend reference is required to be able to generate the QOM path as part of emitted events. A weak reference is enough because BlockAcctStats is tied directly to one BlockBackend, and will be deleted via block_acct_cleanup() before the BlockBackend is truly deleted. Signed-off-by: Hanna Czenczek --- include/block/accounting.h | 3 ++- block/accounting.c | 7 ++++++- block/block-backend.c | 2 +- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/include/block/accounting.h b/include/block/accounting.h index 9386440ec89..025536239e6 100644 --- a/include/block/accounting.h +++ b/include/block/accounting.h @@ -81,6 +81,7 @@ typedef struct BlockLatencyHistogram { =20 struct BlockAcctStats { QemuMutex lock; + BlockBackend *blk; uint64_t nr_bytes[BLOCK_MAX_IOTYPE]; uint64_t nr_ops[BLOCK_MAX_IOTYPE]; uint64_t invalid_ops[BLOCK_MAX_IOTYPE]; @@ -101,7 +102,7 @@ typedef struct BlockAcctCookie { enum BlockAcctType type; } BlockAcctCookie; =20 -void block_acct_init(BlockAcctStats *stats); +void block_acct_init(BlockBackend *blk, BlockAcctStats *stats); bool block_acct_setup(BlockAcctStats *stats, enum OnOffAuto account_invali= d, enum OnOffAuto account_failed, uint32_t *stats_inter= vals, uint32_t num_stats_intervals, Error **errp); diff --git a/block/accounting.c b/block/accounting.c index 66e5001403f..a74551d41f2 100644 --- a/block/accounting.c +++ b/block/accounting.c @@ -33,7 +33,7 @@ static QEMUClockType clock_type =3D QEMU_CLOCK_REALTIME; static const int qtest_latency_ns =3D NANOSECONDS_PER_SECOND / 1000; =20 -void block_acct_init(BlockAcctStats *stats) +void block_acct_init(BlockBackend *blk, BlockAcctStats *stats) { qemu_mutex_init(&stats->lock); if (qtest_enabled()) { @@ -41,6 +41,11 @@ void block_acct_init(BlockAcctStats *stats) } stats->account_invalid =3D true; stats->account_failed =3D true; + /* + * No need to blk_ref() because block_acct_cleanup() is called exactly= when + * the BB is deleted. + */ + stats->blk =3D blk; } =20 static bool bool_from_onoffauto(OnOffAuto val, bool def) diff --git a/block/block-backend.c b/block/block-backend.c index 164bda846f4..ca091a8bf5d 100644 --- a/block/block-backend.c +++ b/block/block-backend.c @@ -369,7 +369,7 @@ BlockBackend *blk_new(AioContext *ctx, uint64_t perm, u= int64_t shared_perm) blk->on_read_error =3D BLOCKDEV_ON_ERROR_REPORT; blk->on_write_error =3D BLOCKDEV_ON_ERROR_ENOSPC; =20 - block_acct_init(&blk->stats); + block_acct_init(blk, &blk->stats); =20 qemu_mutex_init(&blk->queued_requests_lock); qemu_co_queue_init(&blk->queued_requests); --=20 2.55.0 From nobody Sat Sep 26 20:50:57 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1788184430; cv=none; d=zohomail.com; s=zohoarc; b=dOS1nhmpHqq9n7sgyj54NOJOyomAcJhI9jWci7QBshcpiR4lrC5bDYxBAc6wMPtSqJrnkrh8QzM+5lXPRduUafnspLuvX3fLZhtFV4rZouu64TgLpLCx6VTcr1rciJXEZN25FprlgIc9tuqh5tckUASFuZNCbHTLG8tAv2xatws= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1788184430; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=XsKq84WWl0P0xyX3zc9NdARXmnRPfWGby8GQ+hm8M4k=; b=l+Qy86GDoEwKxbrs6YKbKC7hdWocHbHnEclvVLRlg4n1G5fXTo0dx7RyTymNjG4vGFuSXwbudb+dXA4OS0ssHzCsQoz92lhjpHqb2qQeF2MahQC+Bu6jFsWmMW5i/lC0yMrdG/YW0Y6lwWL/3JmimP1JBDCelQikErJD4jMWBEU= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1788184430684588.2610949646463; Mon, 31 Aug 2026 06:53:50 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1x12RL-0004Lr-4H; Mon, 31 Aug 2026 09:52:47 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1x12RH-0004LI-JL for qemu-devel@nongnu.org; Mon, 31 Aug 2026 09:52:43 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1x12RF-00040Q-Hr for qemu-devel@nongnu.org; Mon, 31 Aug 2026 09:52:43 -0400 Received: from mail-wm1-f71.google.com (mail-wm1-f71.google.com [209.85.128.71]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-678-dtl7g0woNjOfjc9QgRrsWg-1; Mon, 31 Aug 2026 09:52:38 -0400 Received: by mail-wm1-f71.google.com with SMTP id 5b1f17b1804b1-49554715277so33079225e9.1 for ; Mon, 31 Aug 2026 06:52:38 -0700 (PDT) Received: from localhost (p200300cfd72080187472d8ceb75e67b1.dip0.t-ipconnect.de. [2003:cf:d720:8018:7472:d8ce:b75e:67b1]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-49ccea6b814sm177277405e9.0.2026.08.31.06.52.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 31 Aug 2026 06:52:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1788184361; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=XsKq84WWl0P0xyX3zc9NdARXmnRPfWGby8GQ+hm8M4k=; b=OmXRVaR6t1g0bcYkyKPCumQJXwvnlKZCswBmC9ksMtnTcNK9BXgpQVp1/H/mtB0im3E+22 gABqWmKPNY3wLjDa0eXhf1LhirYKoAmfW9wui9TxUMmluD2ZvthVnccm+ORYurQ1Ldrzk4 dFXdo+oE0Ng+6p3g9h+Q1qIxRRujEXE= X-MC-Unique: dtl7g0woNjOfjc9QgRrsWg-1 X-Mimecast-MFC-AGG-ID: dtl7g0woNjOfjc9QgRrsWg_1788184357 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1788184357; x=1788789157; darn=nongnu.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=XsKq84WWl0P0xyX3zc9NdARXmnRPfWGby8GQ+hm8M4k=; b=RKYlJU07dQyivLl/sgrIO6wRipD9Txy+RvYxdk5srUyA0s95r3KuNaC17i11Ddttma jRNwxSgjPZyhdgnk34feUg+8GmzObOjHnu5XqO9DmLczsJUAE6ue0pi20BlINYJJsKHy 9HAAsp/tiAup8bJX9DQgYahI6N1HEjCjPuVMfRr7HwmGZurHvyL7g7QN4ffaBL2VwdGQ BuMi425iMlZDRu0/Y/OYNOIiJ2chkj8jHB7NxB7ysc+4nlEVqaHJMdMbk00HqmlXZ2r5 3CI1cQZN9y31+aYvVKymm1RZL6S7O3pF/OePYdvWFKnWWByooIlDrLhIR7D5/AfQ0cSn m7aw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788184357; x=1788789157; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=XsKq84WWl0P0xyX3zc9NdARXmnRPfWGby8GQ+hm8M4k=; b=XAk2tjWGw7dLC9rba3h04WDCyjRiw8u2COHS+CX0F1q2qZoFA6IgTlksqcqvsVaFUF HOnNESDV65df53zuFzoddUVkGea4LIqZpWPLX8fUnHHV+JT/pXi/livdf6lQtimHNfbs m1hZqIj9Uka00FNIKis041iggRbZJVRc0WR8T+CO33p8TjVoSDueTsPx500LHEwJWu+v I3Xk6FW+545ymiVyGq9BblAIom2Pd9smR54SWiGiEfWuC09fOtJpBFm21S9E4G0wXOor 9MOGqFJiKPvVtYerQQadjGqDCVu8jpssT9u+nDrOctPAbRcK7stCfB8nhNM3aC5NcFE8 U85w== X-Gm-Message-State: AFuF++k3syWGneb7GcVw0LHCF4mR6K/DoseTTBtEn27nRAOJtZx/I8pE l4FVdabGpYegs64ywVIMus/yYLhTToOfQTSDFJFZ1yV5+HFCCp/oP6DP1XITekUr7Q8YlLqA+e1 nyhSo74g4SDt/gCyBEiEK/pb/GDuVtRvTSxuOlC7V2sU+VTe87XzF/Cme X-Gm-Gg: AR+sD11YhexN2IwEoN4QLbtp9hq5h88AAX7nlFBpMPwwsMPfiqr9EN4EzaA/2PhTgtk XRn93C9HSKgjD5A3myg/cx7ujbhfHp9hv6qm28/1sajVtVI/TLIhza09VmcKyaiBL3ChUp6P6Zi HFlX7+KXMO/HafWmvHb+zHso1itsLcJWPLoNcsSiB+eacF/5Gb4xzVP0FNLjyW9EJnOC0E1afbH xrcxkliOwz4fT2MJ3mMqjtEDQVNwp6bX/fp7B44+3jvAxav3vXTsseiySlMG/TrKFBI0/vjHOLU XYMrzbynBORlCe+NMN8lBVOl1fyLLLnpq9eLekhjJS5HYNzCRHAOjSNt9UlJFmqv7F5yx1ZX8IA WN2e4xMBtgGJP8YEb6nljef83EZmTPq/QcvMiCDmbhnySPxztnctejH1B/5E= X-Received: by 2002:a05:600c:a4a:b0:499:7a15:fcec with SMTP id 5b1f17b1804b1-49cdc567061mr15382985e9.13.1788184357391; Mon, 31 Aug 2026 06:52:37 -0700 (PDT) X-Received: by 2002:a05:600c:a4a:b0:499:7a15:fcec with SMTP id 5b1f17b1804b1-49cdc567061mr15382005e9.13.1788184356984; Mon, 31 Aug 2026 06:52:36 -0700 (PDT) From: Hanna Czenczek To: qemu-block@nongnu.org Cc: qemu-devel@nongnu.org, Hanna Czenczek , Kevin Wolf , John Snow , "Denis V . Lunev" , Eric Blake , Markus Armbruster , Stefan Hajnoczi Subject: [PATCH 6/9] block/accounting: Emit BLOCK_IO_DELAY event Date: Mon, 31 Aug 2026 15:52:02 +0200 Message-ID: <20260831135206.126184-7-hreitz@redhat.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260831135206.126184-1-hreitz@redhat.com> References: <20260831135206.126184-1-hreitz@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.133.124; envelope-from=hreitz@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1788184431098158500 Content-Type: text/plain; charset="utf-8" When a request finishes with a higher latency than a predefined threshold, emit the BLOCK_IO_DELAY event. Note there would be an alternative, more precise solution: We could keep all active cookies per BlockBackend in a list and repeatedly iterate over it in a background coroutine (woken on a timer so it would wake always exactly when the next request would time out, so it generally stays asleep until there is actually a timeout). This way, we could emit the event exactly when a request crosses the delay threshold, while it is still running; and we could hypothetically even take actions like pausing the VM until the request is done so the guest operating system is shielded from extreme latency spikes. In practice, this is very complicated because latency cookies are created and finalized all over the place, so it is very hard to guarantee that every `block_acct_start()` is matched by the right finalization to ensure that cookies are properly removed from the list when they are done. Even if we fix all non-matching places now, there is hardly a guarantee this will be kept in order in the future. So, for now, just implement the simpler solution of only notifying the management layer when the request does complete, so VMs with high latency spikes can at least be identified when they happen without having to regularly check the latency histogram. Signed-off-by: Hanna Czenczek --- include/block/accounting.h | 10 ++++++++- block/accounting.c | 42 +++++++++++++++++++++++++++++++++++++- blockdev.c | 2 +- hw/block/block.c | 2 +- 4 files changed, 52 insertions(+), 4 deletions(-) diff --git a/include/block/accounting.h b/include/block/accounting.h index 025536239e6..ba3a6859cf4 100644 --- a/include/block/accounting.h +++ b/include/block/accounting.h @@ -92,6 +92,7 @@ struct BlockAcctStats { QSLIST_HEAD(, BlockAcctTimedStats) intervals; bool account_invalid; bool account_failed; + int64_t delay_threshold_ns; BlockLatencyHistogram latency_histogram[BLOCK_MAX_IOTYPE]; }; =20 @@ -103,9 +104,16 @@ typedef struct BlockAcctCookie { } BlockAcctCookie; =20 void block_acct_init(BlockBackend *blk, BlockAcctStats *stats); +/** + * Set up accounting for a block device in @stats. + * @alert_ns specifies a latency so that if any request takes longer than = that + * threshold, a BLOCK_IO_DELAY event will be generated (when that request + * completes). Pass 0 to disable. + */ bool block_acct_setup(BlockAcctStats *stats, enum OnOffAuto account_invali= d, enum OnOffAuto account_failed, uint32_t *stats_inter= vals, - uint32_t num_stats_intervals, Error **errp); + uint32_t num_stats_intervals, int64_t alert_ns, + Error **errp); void block_acct_cleanup(BlockAcctStats *stats); void block_acct_add_interval(BlockAcctStats *stats, unsigned interval_leng= th); BlockAcctTimedStats *block_acct_interval_next(BlockAcctStats *stats, diff --git a/block/accounting.c b/block/accounting.c index a74551d41f2..debf1924455 100644 --- a/block/accounting.c +++ b/block/accounting.c @@ -27,8 +27,10 @@ #include "block/accounting.h" #include "block/block_int.h" #include "qemu/timer.h" +#include "system/block-backend.h" #include "system/qtest.h" #include "qapi/error.h" +#include "qapi/qapi-events-block.h" =20 static QEMUClockType clock_type =3D QEMU_CLOCK_REALTIME; static const int qtest_latency_ns =3D NANOSECONDS_PER_SECOND / 1000; @@ -62,9 +64,35 @@ static bool bool_from_onoffauto(OnOffAuto val, bool def) } } =20 +/** + * Convert a BlockAcctType into its QAPI equivalent IoAccountingOperation. + * + * Must only be called for valid BlockAcctType values, i.e. specifically n= ot for + * `BLOCK_ACCT_NONE`. + */ +static IoAccountingOperation block_acct_qapi_type(enum BlockAcctType type) +{ + switch (type) { + case BLOCK_ACCT_READ: + return IO_ACCOUNTING_OPERATION_READ; + case BLOCK_ACCT_WRITE: + return IO_ACCOUNTING_OPERATION_WRITE; + case BLOCK_ACCT_FLUSH: + return IO_ACCOUNTING_OPERATION_FLUSH; + case BLOCK_ACCT_ZONE_APPEND: + return IO_ACCOUNTING_OPERATION_ZONE_APPEND; + case BLOCK_ACCT_UNMAP: + return IO_ACCOUNTING_OPERATION_UNMAP; + case BLOCK_ACCT_NONE: + default: + g_assert_not_reached(); + } +} + bool block_acct_setup(BlockAcctStats *stats, enum OnOffAuto account_invali= d, enum OnOffAuto account_failed, uint32_t *stats_inter= vals, - uint32_t num_stats_intervals, Error **errp) + uint32_t num_stats_intervals, int64_t alert_ns, + Error **errp) { stats->account_invalid =3D bool_from_onoffauto(account_invalid, stats->account_invalid); @@ -79,6 +107,7 @@ bool block_acct_setup(BlockAcctStats *stats, enum OnOffA= uto account_invalid, block_acct_add_interval(stats, stats_intervals[i]); } } + stats->delay_threshold_ns =3D alert_ns; return true; } =20 @@ -252,6 +281,17 @@ static void block_account_one_io(BlockAcctStats *stats= , BlockAcctCookie *cookie, return; } =20 + if (stats->delay_threshold_ns && latency_ns > stats->delay_threshold_n= s) { + g_autofree char *dev_path =3D blk_get_attached_dev_path(stats->blk= ); + double latency =3D latency_ns / (double)NANOSECONDS_PER_SECOND; + + qapi_event_send_block_io_delay(dev_path, + block_acct_qapi_type(cookie->type), + latency, + cookie->offset >=3D 0, cookie->offs= et, + cookie->bytes); + } + WITH_QEMU_LOCK_GUARD(&stats->lock) { if (failed) { stats->failed_ops[cookie->type]++; diff --git a/blockdev.c b/blockdev.c index 6e86c6262f9..195bac8af01 100644 --- a/blockdev.c +++ b/blockdev.c @@ -618,7 +618,7 @@ static BlockBackend *blockdev_init(const char *file, QD= ict *bs_opts, bs->detect_zeroes =3D detect_zeroes; =20 block_acct_setup(blk_get_stats(blk), account_invalid, account_fail= ed, - NULL, 0, NULL); + NULL, 0, 0, NULL); =20 if (!parse_stats_intervals(blk_get_stats(blk), interval_list, errp= )) { blk_unref(blk); diff --git a/hw/block/block.c b/hw/block/block.c index f187fa025d0..19301c6f995 100644 --- a/hw/block/block.c +++ b/hw/block/block.c @@ -251,7 +251,7 @@ bool blkconf_apply_backend_options(BlockConf *conf, boo= l readonly, =20 if (!block_acct_setup(blk_get_stats(blk), conf->account_invalid, conf->account_failed, conf->stats_intervals, - conf->num_stats_intervals, errp)) { + conf->num_stats_intervals, 0, errp)) { return false; } return true; --=20 2.55.0 From nobody Sat Sep 26 20:50:57 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1788184394; cv=none; d=zohomail.com; s=zohoarc; b=WVip6T5xkm0jWA2UKzFJGQwc6bcwpcKI4Jhk3yargL8q8ErEF8NNKAkkOurLd59x3IkvTVy7TSzMbh5lfoXKWtnoLiKGSCIhzVi5SKbnJdX8rt6nMZ877KJ7T7tvTF6Xv8Rqy2OgmqJ5728OabeJlpOPP2LsYm+pHa8Wc8AZM1E= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1788184394; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=KN20tbZuutJDgdlaY9S7sS/A8dOBAhXHQZ9ffbHxohc=; b=iPReUQ1gaTSHf/o14KyTuvFskdaBn9AEzxhopvVuCjuXkTACzsgLX/NHmIVvd2M1EInH91QDdilNXZ1dyEMAP5kgGE4Mlh8iHZA78rEJrrv4Mz1ddoiagyne0aFoPLH0KNQQSqF8J8ee9mOW8Qi87UEyqIFgxpWcxttVH24erVU= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1788184394690182.38255734353618; Mon, 31 Aug 2026 06:53:14 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1x12RP-0004Nq-CY; Mon, 31 Aug 2026 09:52:52 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1x12RM-0004Mo-Mo for qemu-devel@nongnu.org; Mon, 31 Aug 2026 09:52:49 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1x12RJ-000418-EO for qemu-devel@nongnu.org; Mon, 31 Aug 2026 09:52:48 -0400 Received: from mail-wm1-f69.google.com (mail-wm1-f69.google.com [209.85.128.69]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-581-_excqipuNdWJfh1rnWNcFA-1; Mon, 31 Aug 2026 09:52:43 -0400 Received: by mail-wm1-f69.google.com with SMTP id 5b1f17b1804b1-499913d1a79so19535145e9.0 for ; Mon, 31 Aug 2026 06:52:42 -0700 (PDT) Received: from localhost (p200300cfd72080187472d8ceb75e67b1.dip0.t-ipconnect.de. [2003:cf:d720:8018:7472:d8ce:b75e:67b1]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-49b9266be71sm615958675e9.2.2026.08.31.06.52.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 31 Aug 2026 06:52:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1788184364; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=KN20tbZuutJDgdlaY9S7sS/A8dOBAhXHQZ9ffbHxohc=; b=Gqfffr/XCiUBzpS9CgexNirO37/5Kn51jH3eAb5vMGNyjfxHFchZ8yNE5YK+OnkCtPo+uq Z/rt956ZxodKa4UU4i4DSbpWfnHAXF5gi27Zs4lXe7eyhrfdZVeglLa1/QWgKpXniI789B HAxGs08DHk0k/6CjSIl/UI3AL8aKnY8= X-MC-Unique: _excqipuNdWJfh1rnWNcFA-1 X-Mimecast-MFC-AGG-ID: _excqipuNdWJfh1rnWNcFA_1788184362 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1788184362; x=1788789162; darn=nongnu.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=KN20tbZuutJDgdlaY9S7sS/A8dOBAhXHQZ9ffbHxohc=; b=fMhidweCFcYtE1vnd/8wPatwC0Vad3Z18t53xXW9vIc9ku/Sb1aSPL/1zsiVAcf3Yo q+8kkLN47bW8eKHirkfPp8Z8XHZ0+TRIKFEzoOiFxC8lc/hRCK4llu/die2+OGxpB8Hr 3ymOR04nCknDcXFIqY175dxo4x1LlB4ahA/6/2nb5uVJUJoWooZXwjwFHIaddj1hs1Lo Y6mEkoO1bac/RoTG1YZ9GzdfTN5MXPr5JjPZ+phLCEr/SyvY2as4jaMtxgmLw0t616A4 IlCvLFYwrZocFbJMyHM2ggU+YjSP8L76rRlMtJLiwIXGXSdUlPkjYP37HSlsFnMuI904 1aDQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788184362; x=1788789162; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=KN20tbZuutJDgdlaY9S7sS/A8dOBAhXHQZ9ffbHxohc=; b=Q15YbA0E+hQRwyRpHHvuSNoqiTZJvZQDW8AxYQQ2czYrGgWhi7US5V4wjx+KUzhIim 1VNqz8gJWJVWJr9iw05pCu5FEC03lx+AkpTokSGz8LU4w1Gi4z8JUzxZPJVs1diobR+L 0Y+gGUaNb+oKJTUw8yDd41wAjoqTDVUJ7Xod2OWJTbk4LSQUb01i3oHidPTN9k6oQATO VRzba7ru+TH8NU1WkXXYkF0tieJsvGTzAFMCMoxnVam5VWFTU6h0oZ7ZeVdwx0wTzUib cgzcKfpW/VdjVad0fViDiKdgrTi9nBy1S5HFtlwX+LgChwq+gOJUmH+VExdrLbdMeQPK 8cGA== X-Gm-Message-State: AFuF++kBZUoaRkqpxHTsCEYed25iOi7rZw4psuYOjcl2oneYcOyKwfJM G3+CePcXlp3//xsxZBjxd1aKDKl3CUez1qq3iHfOngcgpG1TtQOGQoqbyb3W+srgNzg/pDKZir2 8364De/h8Fm3EBSr5TmE7oReQctxUsl3PZEzHZ7CT6XTDN5Aj1+E7JiZD X-Gm-Gg: AR+sD13OuWsBC/Rc9/2gWZ0sy6W+JYul4UMSAlmZAPloyAjVtcXXD5IXPmTCIkt69xr 6UdZn9t8MTsx43f8gm96I9L+RmWDiLGcAE2QQeimIJD8ebBDYYwPockla5rb8GFR75IBDY8xgRP j8RwTsCax+HQBAAtIOsHTCZkezOm8VmS4f8aqwDHnI60rd0fzkdllDHtGhLgbtwbid+vA4NKWlS m0OBVWMNRNITZoP87etW1HPHlN4h0160f24PnMrjrk+f4V8AW21jkhKx1iLmH/gjlbzLpYWJ2n0 UFcqAfv1kePTNVudRQqX0MHK9T5NByQYLeKYkLKhcCKcSq5HuFhrnAZZJ147bq+1dgFQ2a1gAdw osSzKWjn9Cbf599F1wl3rBMQ+YKbchUkDwetykEfybTQp+oaSndWymbI+WFU= X-Received: by 2002:a05:600c:3b13:b0:495:4d5c:903e with SMTP id 5b1f17b1804b1-49cdc4332d4mr13504425e9.7.1788184361720; Mon, 31 Aug 2026 06:52:41 -0700 (PDT) X-Received: by 2002:a05:600c:3b13:b0:495:4d5c:903e with SMTP id 5b1f17b1804b1-49cdc4332d4mr13503275e9.7.1788184361258; Mon, 31 Aug 2026 06:52:41 -0700 (PDT) From: Hanna Czenczek To: qemu-block@nongnu.org Cc: qemu-devel@nongnu.org, Hanna Czenczek , Kevin Wolf , John Snow , "Denis V . Lunev" , Eric Blake , Markus Armbruster , Stefan Hajnoczi Subject: [PATCH 7/9] block: Add delay-alert-ms property Date: Mon, 31 Aug 2026 15:52:03 +0200 Message-ID: <20260831135206.126184-8-hreitz@redhat.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260831135206.126184-1-hreitz@redhat.com> References: <20260831135206.126184-1-hreitz@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.129.124; envelope-from=hreitz@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1788184398121154100 Content-Type: text/plain; charset="utf-8" This device property allows setting up an I/O latency threshold for when to emit a delay QMP event. Signed-off-by: Hanna Czenczek --- include/hw/block/block.h | 5 ++++- blockdev.c | 16 +++++++++++++++- hw/block/block.c | 4 +++- tests/qemu-iotests/172.out | 38 ++++++++++++++++++++++++++++++++++++++ 4 files changed, 60 insertions(+), 3 deletions(-) diff --git a/include/hw/block/block.h b/include/hw/block/block.h index df941df19f2..e7e401dd303 100644 --- a/include/hw/block/block.h +++ b/include/hw/block/block.h @@ -36,6 +36,7 @@ typedef struct BlockConf { BlockdevOnError werror; uint32_t num_stats_intervals; uint32_t *stats_intervals; + uint32_t delay_alert_ms; } BlockConf; =20 static inline unsigned int get_physical_block_exp(BlockConf *conf) @@ -83,7 +84,9 @@ static inline unsigned int get_physical_block_exp(BlockCo= nf *conf) _conf.account_failed, ON_OFF_AUTO_AUTO), \ DEFINE_PROP_ARRAY("stats-intervals", _state, \ _conf.num_stats_intervals, _conf.stats_intervals, \ - qdev_prop_uint32, uint32_t) + qdev_prop_uint32, uint32_t), \ + DEFINE_PROP_UINT32("delay-alert-ms", _state, _conf.delay_alert_ms, \ + 0) \ =20 #define DEFINE_BLOCK_PROPERTIES(_state, _conf) \ DEFINE_PROP_DRIVE("drive", _state, _conf.blk), \ diff --git a/blockdev.c b/blockdev.c index 195bac8af01..9c76e89ef38 100644 --- a/blockdev.c +++ b/blockdev.c @@ -496,6 +496,7 @@ static BlockBackend *blockdev_init(const char *file, QD= ict *bs_opts, BlockdevDetectZeroesOptions detect_zeroes =3D BLOCKDEV_DETECT_ZEROES_OPTIONS_OFF; const char *throttling_group =3D NULL; + uint64_t delay_alert_ns; =20 /* Check common options by copying from bs_opts to opts, all other opt= ions * stay in bs_opts for processing by bdrv_open(). */ @@ -580,6 +581,14 @@ static BlockBackend *blockdev_init(const char *file, Q= Dict *bs_opts, =20 read_only =3D qemu_opt_get_bool(opts, BDRV_OPT_READ_ONLY, false); =20 + delay_alert_ns =3D qemu_opt_get_number(opts, "delay-alert-ms", 0); + if (delay_alert_ns > (uint64_t)INT64_MAX / SCALE_MS) { + error_setg(errp, "delay-alert-ms must not exceed %" PRId64, + INT64_MAX / SCALE_MS); + goto early_err; + } + delay_alert_ns *=3D SCALE_MS; + /* init */ if ((!file || !*file) && !qdict_size(bs_opts)) { BlockBackendRootState *blk_rs; @@ -618,7 +627,7 @@ static BlockBackend *blockdev_init(const char *file, QD= ict *bs_opts, bs->detect_zeroes =3D detect_zeroes; =20 block_acct_setup(blk_get_stats(blk), account_invalid, account_fail= ed, - NULL, 0, 0, NULL); + NULL, 0, delay_alert_ns, NULL); =20 if (!parse_stats_intervals(blk_get_stats(blk), interval_list, errp= )) { blk_unref(blk); @@ -3753,6 +3762,11 @@ QemuOptsList qemu_common_drive_opts =3D { .type =3D QEMU_OPT_BOOL, .help =3D "whether to account for failed I/O operations " "in the statistics", + },{ + .name =3D "delay-alert-ms", + .type =3D QEMU_OPT_NUMBER, + .help =3D "threshold in ms when to emit an I/O operation " + "delay QMP event", }, { /* end of list */ } }, diff --git a/hw/block/block.c b/hw/block/block.c index 19301c6f995..be0ea89cb79 100644 --- a/hw/block/block.c +++ b/hw/block/block.c @@ -207,6 +207,7 @@ bool blkconf_apply_backend_options(BlockConf *conf, boo= l readonly, BlockBackend *blk =3D conf->blk; BlockdevOnError rerror, werror; uint64_t perm, shared_perm; + uint64_t delay_alert_ns; bool wce; int ret; =20 @@ -249,9 +250,10 @@ bool blkconf_apply_backend_options(BlockConf *conf, bo= ol readonly, blk_set_enable_write_cache(blk, wce); blk_set_on_error(blk, rerror, werror); =20 + delay_alert_ns =3D (uint64_t)conf->delay_alert_ms * SCALE_MS; if (!block_acct_setup(blk_get_stats(blk), conf->account_invalid, conf->account_failed, conf->stats_intervals, - conf->num_stats_intervals, 0, errp)) { + conf->num_stats_intervals, delay_alert_ns, errp)= ) { return false; } return true; diff --git a/tests/qemu-iotests/172.out b/tests/qemu-iotests/172.out index a023cd407de..ea6a1875eb3 100644 --- a/tests/qemu-iotests/172.out +++ b/tests/qemu-iotests/172.out @@ -31,6 +31,7 @@ Testing: account-invalid =3D "auto" account-failed =3D "auto" stats-intervals =3D + delay-alert-ms =3D 0 (0x0) drive-type =3D "288" =20 =20 @@ -61,6 +62,7 @@ Testing: -fda TEST_DIR/t.qcow2 account-invalid =3D "auto" account-failed =3D "auto" stats-intervals =3D + delay-alert-ms =3D 0 (0x0) drive-type =3D "144" floppy0 (NODE_NAME): TEST_DIR/t.qcow2 (qcow2) Attached to: /machine/unattached/device[N] @@ -98,6 +100,7 @@ Testing: -fdb TEST_DIR/t.qcow2 account-invalid =3D "auto" account-failed =3D "auto" stats-intervals =3D + delay-alert-ms =3D 0 (0x0) drive-type =3D "144" dev: floppy, id "" unit =3D 0 (0x0) @@ -113,6 +116,7 @@ Testing: -fdb TEST_DIR/t.qcow2 account-invalid =3D "auto" account-failed =3D "auto" stats-intervals =3D + delay-alert-ms =3D 0 (0x0) drive-type =3D "288" floppy1 (NODE_NAME): TEST_DIR/t.qcow2 (qcow2) Attached to: /machine/unattached/device[N] @@ -154,6 +158,7 @@ Testing: -fda TEST_DIR/t.qcow2 -fdb TEST_DIR/t.qcow2.2 account-invalid =3D "auto" account-failed =3D "auto" stats-intervals =3D + delay-alert-ms =3D 0 (0x0) drive-type =3D "144" dev: floppy, id "" unit =3D 0 (0x0) @@ -169,6 +174,7 @@ Testing: -fda TEST_DIR/t.qcow2 -fdb TEST_DIR/t.qcow2.2 account-invalid =3D "auto" account-failed =3D "auto" stats-intervals =3D + delay-alert-ms =3D 0 (0x0) drive-type =3D "144" floppy0 (NODE_NAME): TEST_DIR/t.qcow2 (qcow2) Attached to: /machine/unattached/device[N] @@ -211,6 +217,7 @@ Testing: -fdb account-invalid =3D "auto" account-failed =3D "auto" stats-intervals =3D + delay-alert-ms =3D 0 (0x0) drive-type =3D "288" dev: floppy, id "" unit =3D 0 (0x0) @@ -226,6 +233,7 @@ Testing: -fdb account-invalid =3D "auto" account-failed =3D "auto" stats-intervals =3D + delay-alert-ms =3D 0 (0x0) drive-type =3D "288" =20 =20 @@ -256,6 +264,7 @@ Testing: -drive if=3Dfloppy,file=3DTEST_DIR/t.qcow2 account-invalid =3D "auto" account-failed =3D "auto" stats-intervals =3D + delay-alert-ms =3D 0 (0x0) drive-type =3D "144" floppy0 (NODE_NAME): TEST_DIR/t.qcow2 (qcow2) Attached to: /machine/unattached/device[N] @@ -293,6 +302,7 @@ Testing: -drive if=3Dfloppy,file=3DTEST_DIR/t.qcow2,ind= ex=3D1 account-invalid =3D "auto" account-failed =3D "auto" stats-intervals =3D + delay-alert-ms =3D 0 (0x0) drive-type =3D "144" dev: floppy, id "" unit =3D 0 (0x0) @@ -308,6 +318,7 @@ Testing: -drive if=3Dfloppy,file=3DTEST_DIR/t.qcow2,ind= ex=3D1 account-invalid =3D "auto" account-failed =3D "auto" stats-intervals =3D + delay-alert-ms =3D 0 (0x0) drive-type =3D "288" floppy1 (NODE_NAME): TEST_DIR/t.qcow2 (qcow2) Attached to: /machine/unattached/device[N] @@ -349,6 +360,7 @@ Testing: -drive if=3Dfloppy,file=3DTEST_DIR/t.qcow2 -dr= ive if=3Dfloppy,file=3DTEST_DIR/t account-invalid =3D "auto" account-failed =3D "auto" stats-intervals =3D + delay-alert-ms =3D 0 (0x0) drive-type =3D "144" dev: floppy, id "" unit =3D 0 (0x0) @@ -364,6 +376,7 @@ Testing: -drive if=3Dfloppy,file=3DTEST_DIR/t.qcow2 -dr= ive if=3Dfloppy,file=3DTEST_DIR/t account-invalid =3D "auto" account-failed =3D "auto" stats-intervals =3D + delay-alert-ms =3D 0 (0x0) drive-type =3D "144" floppy0 (NODE_NAME): TEST_DIR/t.qcow2 (qcow2) Attached to: /machine/unattached/device[N] @@ -409,6 +422,7 @@ Testing: -drive if=3Dnone,file=3DTEST_DIR/t.qcow2 -devi= ce floppy,drive=3Dnone0 account-invalid =3D "auto" account-failed =3D "auto" stats-intervals =3D + delay-alert-ms =3D 0 (0x0) drive-type =3D "144" none0 (NODE_NAME): TEST_DIR/t.qcow2 (qcow2) Attached to: /machine/peripheral-anon/device[N] @@ -446,6 +460,7 @@ Testing: -drive if=3Dnone,file=3DTEST_DIR/t.qcow2 -devi= ce floppy,drive=3Dnone0,unit=3D1 account-invalid =3D "auto" account-failed =3D "auto" stats-intervals =3D + delay-alert-ms =3D 0 (0x0) drive-type =3D "144" none0 (NODE_NAME): TEST_DIR/t.qcow2 (qcow2) Attached to: /machine/peripheral-anon/device[N] @@ -483,6 +498,7 @@ Testing: -drive if=3Dnone,file=3DTEST_DIR/t.qcow2 -driv= e if=3Dnone,file=3DTEST_DIR/t.qco account-invalid =3D "auto" account-failed =3D "auto" stats-intervals =3D + delay-alert-ms =3D 0 (0x0) drive-type =3D "144" dev: floppy, id "" unit =3D 0 (0x0) @@ -498,6 +514,7 @@ Testing: -drive if=3Dnone,file=3DTEST_DIR/t.qcow2 -driv= e if=3Dnone,file=3DTEST_DIR/t.qco account-invalid =3D "auto" account-failed =3D "auto" stats-intervals =3D + delay-alert-ms =3D 0 (0x0) drive-type =3D "144" none0 (NODE_NAME): TEST_DIR/t.qcow2 (qcow2) Attached to: /machine/peripheral-anon/device[N] @@ -549,6 +566,7 @@ Testing: -fda TEST_DIR/t.qcow2 -drive if=3Dnone,file=3D= TEST_DIR/t.qcow2.2 -device fl account-invalid =3D "auto" account-failed =3D "auto" stats-intervals =3D + delay-alert-ms =3D 0 (0x0) drive-type =3D "144" dev: floppy, id "" unit =3D 0 (0x0) @@ -564,6 +582,7 @@ Testing: -fda TEST_DIR/t.qcow2 -drive if=3Dnone,file=3D= TEST_DIR/t.qcow2.2 -device fl account-invalid =3D "auto" account-failed =3D "auto" stats-intervals =3D + delay-alert-ms =3D 0 (0x0) drive-type =3D "144" floppy0 (NODE_NAME): TEST_DIR/t.qcow2 (qcow2) Attached to: /machine/unattached/device[N] @@ -606,6 +625,7 @@ Testing: -fda TEST_DIR/t.qcow2 -drive if=3Dnone,file=3D= TEST_DIR/t.qcow2.2 -device fl account-invalid =3D "auto" account-failed =3D "auto" stats-intervals =3D + delay-alert-ms =3D 0 (0x0) drive-type =3D "144" dev: floppy, id "" unit =3D 0 (0x0) @@ -621,6 +641,7 @@ Testing: -fda TEST_DIR/t.qcow2 -drive if=3Dnone,file=3D= TEST_DIR/t.qcow2.2 -device fl account-invalid =3D "auto" account-failed =3D "auto" stats-intervals =3D + delay-alert-ms =3D 0 (0x0) drive-type =3D "144" floppy0 (NODE_NAME): TEST_DIR/t.qcow2 (qcow2) Attached to: /machine/unattached/device[N] @@ -663,6 +684,7 @@ Testing: -fdb TEST_DIR/t.qcow2 -drive if=3Dnone,file=3D= TEST_DIR/t.qcow2.2 -device fl account-invalid =3D "auto" account-failed =3D "auto" stats-intervals =3D + delay-alert-ms =3D 0 (0x0) drive-type =3D "144" dev: floppy, id "" unit =3D 1 (0x1) @@ -678,6 +700,7 @@ Testing: -fdb TEST_DIR/t.qcow2 -drive if=3Dnone,file=3D= TEST_DIR/t.qcow2.2 -device fl account-invalid =3D "auto" account-failed =3D "auto" stats-intervals =3D + delay-alert-ms =3D 0 (0x0) drive-type =3D "144" floppy1 (NODE_NAME): TEST_DIR/t.qcow2 (qcow2) Attached to: /machine/unattached/device[N] @@ -720,6 +743,7 @@ Testing: -fdb TEST_DIR/t.qcow2 -drive if=3Dnone,file=3D= TEST_DIR/t.qcow2.2 -device fl account-invalid =3D "auto" account-failed =3D "auto" stats-intervals =3D + delay-alert-ms =3D 0 (0x0) drive-type =3D "144" dev: floppy, id "" unit =3D 1 (0x1) @@ -735,6 +759,7 @@ Testing: -fdb TEST_DIR/t.qcow2 -drive if=3Dnone,file=3D= TEST_DIR/t.qcow2.2 -device fl account-invalid =3D "auto" account-failed =3D "auto" stats-intervals =3D + delay-alert-ms =3D 0 (0x0) drive-type =3D "144" floppy1 (NODE_NAME): TEST_DIR/t.qcow2 (qcow2) Attached to: /machine/unattached/device[N] @@ -786,6 +811,7 @@ Testing: -drive if=3Dfloppy,file=3DTEST_DIR/t.qcow2 -dr= ive if=3Dnone,file=3DTEST_DIR/t.q account-invalid =3D "auto" account-failed =3D "auto" stats-intervals =3D + delay-alert-ms =3D 0 (0x0) drive-type =3D "144" dev: floppy, id "" unit =3D 0 (0x0) @@ -801,6 +827,7 @@ Testing: -drive if=3Dfloppy,file=3DTEST_DIR/t.qcow2 -dr= ive if=3Dnone,file=3DTEST_DIR/t.q account-invalid =3D "auto" account-failed =3D "auto" stats-intervals =3D + delay-alert-ms =3D 0 (0x0) drive-type =3D "144" floppy0 (NODE_NAME): TEST_DIR/t.qcow2 (qcow2) Attached to: /machine/unattached/device[N] @@ -843,6 +870,7 @@ Testing: -drive if=3Dfloppy,file=3DTEST_DIR/t.qcow2 -dr= ive if=3Dnone,file=3DTEST_DIR/t.q account-invalid =3D "auto" account-failed =3D "auto" stats-intervals =3D + delay-alert-ms =3D 0 (0x0) drive-type =3D "144" dev: floppy, id "" unit =3D 0 (0x0) @@ -858,6 +886,7 @@ Testing: -drive if=3Dfloppy,file=3DTEST_DIR/t.qcow2 -dr= ive if=3Dnone,file=3DTEST_DIR/t.q account-invalid =3D "auto" account-failed =3D "auto" stats-intervals =3D + delay-alert-ms =3D 0 (0x0) drive-type =3D "144" floppy0 (NODE_NAME): TEST_DIR/t.qcow2 (qcow2) Attached to: /machine/unattached/device[N] @@ -906,6 +935,7 @@ Testing: -drive if=3Dnone,file=3DTEST_DIR/t.qcow2 -glob= al floppy.drive=3Dnone0 -device account-invalid =3D "auto" account-failed =3D "auto" stats-intervals =3D + delay-alert-ms =3D 0 (0x0) drive-type =3D "144" none0 (NODE_NAME): TEST_DIR/t.qcow2 (qcow2) Attached to: /machine/peripheral-anon/device[N] @@ -973,6 +1003,7 @@ Testing: -device floppy account-invalid =3D "auto" account-failed =3D "auto" stats-intervals =3D + delay-alert-ms =3D 0 (0x0) drive-type =3D "288" =20 Testing: -device floppy,drive-type=3D120 @@ -1000,6 +1031,7 @@ Testing: -device floppy,drive-type=3D120 account-invalid =3D "auto" account-failed =3D "auto" stats-intervals =3D + delay-alert-ms =3D 0 (0x0) drive-type =3D "120" =20 Testing: -device floppy,drive-type=3D144 @@ -1027,6 +1059,7 @@ Testing: -device floppy,drive-type=3D144 account-invalid =3D "auto" account-failed =3D "auto" stats-intervals =3D + delay-alert-ms =3D 0 (0x0) drive-type =3D "144" =20 Testing: -device floppy,drive-type=3D288 @@ -1054,6 +1087,7 @@ Testing: -device floppy,drive-type=3D288 account-invalid =3D "auto" account-failed =3D "auto" stats-intervals =3D + delay-alert-ms =3D 0 (0x0) drive-type =3D "288" =20 =20 @@ -1084,6 +1118,7 @@ Testing: -drive if=3Dnone,file=3DTEST_DIR/t.qcow2 -de= vice floppy,drive=3Dnone0,drive-t account-invalid =3D "auto" account-failed =3D "auto" stats-intervals =3D + delay-alert-ms =3D 0 (0x0) drive-type =3D "120" none0 (NODE_NAME): TEST_DIR/t.qcow2 (qcow2) Attached to: /machine/peripheral-anon/device[N] @@ -1121,6 +1156,7 @@ Testing: -drive if=3Dnone,file=3DTEST_DIR/t.qcow2 -de= vice floppy,drive=3Dnone0,drive-t account-invalid =3D "auto" account-failed =3D "auto" stats-intervals =3D + delay-alert-ms =3D 0 (0x0) drive-type =3D "288" none0 (NODE_NAME): TEST_DIR/t.qcow2 (qcow2) Attached to: /machine/peripheral-anon/device[N] @@ -1161,6 +1197,7 @@ Testing: -drive if=3Dnone,file=3DTEST_DIR/t.qcow2 -de= vice floppy,drive=3Dnone0,logical account-invalid =3D "auto" account-failed =3D "auto" stats-intervals =3D + delay-alert-ms =3D 0 (0x0) drive-type =3D "144" none0 (NODE_NAME): TEST_DIR/t.qcow2 (qcow2) Attached to: /machine/peripheral-anon/device[N] @@ -1198,6 +1235,7 @@ Testing: -drive if=3Dnone,file=3DTEST_DIR/t.qcow2 -de= vice floppy,drive=3Dnone0,physica account-invalid =3D "auto" account-failed =3D "auto" stats-intervals =3D + delay-alert-ms =3D 0 (0x0) drive-type =3D "144" none0 (NODE_NAME): TEST_DIR/t.qcow2 (qcow2) Attached to: /machine/peripheral-anon/device[N] --=20 2.55.0 From nobody Sat Sep 26 20:50:57 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1788184385; cv=none; d=zohomail.com; s=zohoarc; b=NfXCMLTpHq4EjG900YrXDl9vxDHCq+ilRnIjcJuDQXkgzVKURwWAetiy1Ss/cAjxX2tYLLP4vndE55Zb3pLAWwJBKUUVigaN8YNusmR1GhvJYODzTi+SViNkRHlw9lNwp3fsNz0LqGFNivNLr6o7YjLxgWs0nCraoqlTkRGs0ug= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1788184385; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=tBPynONSXt50qWGPPxB8QrsPyQCuzGu7AJuh/pD4AQk=; b=NpErgj3Z46mPtFB1eDdXQpvbbEy0Ir253hw1tCc5l2/T3AtbJKMeP37HSVA9CWRiI8/U82Nugy8FFYd96xVAzT7YT4WR0t27vlwYy2P+bGuSC/EGo9PX40QRZDaovJyagO7N3Dm3uQLQu7kJVxPCEGefje17NNdf+HjoMPVovL0= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1788184385182210.28342735801652; Mon, 31 Aug 2026 06:53:05 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1x12RS-0004Rl-3S; Mon, 31 Aug 2026 09:52:54 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1x12RN-0004NN-Rc for qemu-devel@nongnu.org; Mon, 31 Aug 2026 09:52:49 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1x12RM-00041c-EV for qemu-devel@nongnu.org; Mon, 31 Aug 2026 09:52:49 -0400 Received: from mail-wm1-f71.google.com (mail-wm1-f71.google.com [209.85.128.71]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-388-xxkbcGi2OMWMMcFI_KDCXg-1; Mon, 31 Aug 2026 09:52:46 -0400 Received: by mail-wm1-f71.google.com with SMTP id 5b1f17b1804b1-49b0d7a07acso34426565e9.3 for ; Mon, 31 Aug 2026 06:52:45 -0700 (PDT) Received: from localhost (p200300cfd72080187472d8ceb75e67b1.dip0.t-ipconnect.de. [2003:cf:d720:8018:7472:d8ce:b75e:67b1]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-49b95018ee8sm288163055e9.15.2026.08.31.06.52.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 31 Aug 2026 06:52:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1788184367; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=tBPynONSXt50qWGPPxB8QrsPyQCuzGu7AJuh/pD4AQk=; b=MDHRgOQuTV0ssV+15v7m8u/UH52NpZcTef9/FGi4dDWXEjP5iawOuz7YMN0dTJa4PNOKgp g49R6rWuKPzNuosOsPIvRqD/yDMt6fbFi0GL12Vd6pVDvG8AMoLSJJQLURK92O0wKxL1zx kRuZfzvUckdD/citxB3ApSMUXLSXIOs= X-MC-Unique: xxkbcGi2OMWMMcFI_KDCXg-1 X-Mimecast-MFC-AGG-ID: xxkbcGi2OMWMMcFI_KDCXg_1788184365 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1788184365; x=1788789165; darn=nongnu.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=tBPynONSXt50qWGPPxB8QrsPyQCuzGu7AJuh/pD4AQk=; b=mVKjLlDzAVnj6wanjKVpAw6zmllUZFKU/0rCjMkUrLGMv3JZS0Iefgrhhe5UUFuICa lOlUvdJc8H4c4HTsdQqMeNOSEwlJKtT12WWf57f7CmJWgupA4P9+mGjDAYEKNZgGFptr 7L/LOXTjCz3CjHc+BOl2GMAgU7ddtmk31UqUPD4NYEavnUVCpcyOVSIYKauo+uwKMJXd F+0TPUWktgltI9oq8BXWXNhafWAsa43vnlNokS4bRmqVjGFJrhLI7BEx49ui75ZsGo4q YmGWtCpwogfCTxbOFH1+Ri7/Gr78hcmzD1D+KNzCJrpnz9Etl//djz/VLXnNwk6ucAoy mRWQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788184365; x=1788789165; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=tBPynONSXt50qWGPPxB8QrsPyQCuzGu7AJuh/pD4AQk=; b=E75w3E5sBBcpvsXpPfexHQBtV1UgS/eaHhEnly/6++7lAAKYz1DDr/Icl5sGk/mm// EuBNTwQ96ACp/JV4/ckG5WoDd1QQfQjXdUk7hS3b4bJZkwSJ2V8V+otcbNkYcYKfX5+l 4CqYnb2pvRY9mGvk2XFyUuvR4unoysjo/rEyzMgcWGlE9mg3ItYd6AitjGUWVstGtvjB Gwq2kbRbzHCscW/B09yXPV2tGXg/j7ldLTLrCCZew9cdFzaPek2h96ZmbJ/B4DfKNVhh J5fnPWnWlW6enbNM+laJVfgX80bSru4zfhofEgPglHR458XE6A4MakZ8vfQFfKRbvB93 63Jw== X-Gm-Message-State: AFuF++kTIu22NhCfnDZFyinwoI4hCf6zP6QdqqXzpk8XgG2u4FDtY2Po ts8GJp5jn1cvzatdtxbTtJW5J4gBAO7nu8IZSCO+AcpOaJUAw7cN3Llbx5PINFS+YkxlDUWanQ8 uIzLZhbeFzQ2qtab1mLMuQTaSgZDmtfHqXVa2tkXAm0f+t2EJlR0wd0G6 X-Gm-Gg: AR+sD11qdR/CjaXyve/yneo9wZpm4nNRZAcHgu9Vtb+GSbduEfmdsrPaXsajRcWHL4p Lc15+vrQbyVoNLKvfPeHDJBi8BD1eyVkninv4g/h+nTfcy+GiyOBd+mkX/b1dDMonr35eD2GntW ox/beUrxjJlOb4/6C4p4a1NLfkTf80hxg1km2RPukelCzgDME5TgqO1kecKsYFiEmL3/MDjpgtT cyqlM12R9U/Qyr1Rs+u8hl2433I2ck3/kzkMtcyWyWZEmvvuJxTItdEElSBCwT2y9hpfKersqjz oqRP/lrsxeES3g5n7txKQZ1WbyOb80D0cz3rYJjbs5jhKxZnxN+jFuWrTPfkb9y0SgH/xuA5+nl dygL/OjKa07hSVl0kD+eciIgudioEiZq/XnHSjQnwB6zvNsFJMmAaHU/Hh6Y= X-Received: by 2002:a05:600c:1d8c:b0:49b:916f:1471 with SMTP id 5b1f17b1804b1-49b91c1df21mr447700625e9.3.1788184364899; Mon, 31 Aug 2026 06:52:44 -0700 (PDT) X-Received: by 2002:a05:600c:1d8c:b0:49b:916f:1471 with SMTP id 5b1f17b1804b1-49b91c1df21mr447699535e9.3.1788184364465; Mon, 31 Aug 2026 06:52:44 -0700 (PDT) From: Hanna Czenczek To: qemu-block@nongnu.org Cc: qemu-devel@nongnu.org, Hanna Czenczek , Kevin Wolf , John Snow , "Denis V . Lunev" , Eric Blake , Markus Armbruster , Stefan Hajnoczi Subject: [PATCH 8/9] block/accounting: Move latency_ns override down Date: Mon, 31 Aug 2026 15:52:04 +0200 Message-ID: <20260831135206.126184-9-hreitz@redhat.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260831135206.126184-1-hreitz@redhat.com> References: <20260831135206.126184-1-hreitz@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.133.124; envelope-from=hreitz@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1788184386836158500 Content-Type: text/plain; charset="utf-8" I am not quite sure why `latency_ns` is overridden by a fixed value in qtest mode because personally, I find it much better if I can individually change requests' latency by modifying the qtest clock. But I'm not going to change existing behavior for the histogram and such, so I will just move this override after the latency has been evaluated regarding a potential BLOCK_IO_DELAY event. Signed-off-by: Hanna Czenczek --- block/accounting.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/block/accounting.c b/block/accounting.c index debf1924455..223becd2e04 100644 --- a/block/accounting.c +++ b/block/accounting.c @@ -271,10 +271,6 @@ static void block_account_one_io(BlockAcctStats *stats= , BlockAcctCookie *cookie, int64_t time_ns =3D qemu_clock_get_ns(clock_type); int64_t latency_ns =3D time_ns - cookie->start_time_ns; =20 - if (qtest_enabled()) { - latency_ns =3D qtest_latency_ns; - } - assert(cookie->type < BLOCK_MAX_IOTYPE); =20 if (cookie->type =3D=3D BLOCK_ACCT_NONE) { @@ -292,6 +288,10 @@ static void block_account_one_io(BlockAcctStats *stats= , BlockAcctCookie *cookie, cookie->bytes); } =20 + if (qtest_enabled()) { + latency_ns =3D qtest_latency_ns; + } + WITH_QEMU_LOCK_GUARD(&stats->lock) { if (failed) { stats->failed_ops[cookie->type]++; --=20 2.55.0 From nobody Sat Sep 26 20:50:57 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1788184421; cv=none; d=zohomail.com; s=zohoarc; b=YxgNvJEQWresNBVXlbPjD2yUt4GT4o9M9VN2WlMgQbusnHKiIHAuWYa9cRNZlZoxLs8l+GThhtmEPdyAgvBJMdx80F3v9KVJRBxVOkDiI2hWzepBPzd0MhyhXvq8ZyOGsuJpZlES/fXGwUsXyoqUxuwPz6T1eCfU1o8PJrrDPws= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1788184421; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=e5bBcsxgaPauphBAbkV3pf/dICs6jqAgw/5t5PALPAY=; b=kgHjj3S5IpJ57Kh/JXNggbhmyCnppeMWw7CR/Zl8BJGL6txGlTEmoGcRbhBJbZCVQCk6lZQc3ZrKXZVwV3h1zXYx2+jkRmY9PwWA1+IZ/93pHorLZFp0F+N5xBMNEuGTbEPbd9QHkKOc5QGB0+5CdqS76Wan9BgK1STmdWkLdyI= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 178818442194936.18733235356899; Mon, 31 Aug 2026 06:53:41 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1x12RV-0004VR-Iv; Mon, 31 Aug 2026 09:52:57 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1x12RS-0004Tn-QS for qemu-devel@nongnu.org; Mon, 31 Aug 2026 09:52:54 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1x12RP-00042T-NV for qemu-devel@nongnu.org; Mon, 31 Aug 2026 09:52:54 -0400 Received: from mail-wm1-f71.google.com (mail-wm1-f71.google.com [209.85.128.71]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-81--Y0zBVsCNTCWAnvE0SjpxQ-1; Mon, 31 Aug 2026 09:52:49 -0400 Received: by mail-wm1-f71.google.com with SMTP id 5b1f17b1804b1-49a1b4ea633so32188965e9.0 for ; Mon, 31 Aug 2026 06:52:49 -0700 (PDT) Received: from localhost (p200300cfd72080187472d8ceb75e67b1.dip0.t-ipconnect.de. [2003:cf:d720:8018:7472:d8ce:b75e:67b1]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-49ccae954f9sm220330825e9.13.2026.08.31.06.52.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 31 Aug 2026 06:52:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1788184371; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=e5bBcsxgaPauphBAbkV3pf/dICs6jqAgw/5t5PALPAY=; b=CC5g1STol0qf2I2TJvcSkjRHbwLedEsORKKtZaFT3ByA7ok62y8CONoykBibMHMjZ4Y5yc 5GoRZl5fwY+CJJMk5xIG/0UPFrmdihb0w+0CTezeGUtZ56t8GOOiQVixk1CLN3eSRZisHG +SIzHE5y5rnLIjoCYjC5eruIUx7WaQM= X-MC-Unique: -Y0zBVsCNTCWAnvE0SjpxQ-1 X-Mimecast-MFC-AGG-ID: -Y0zBVsCNTCWAnvE0SjpxQ_1788184368 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1788184368; x=1788789168; darn=nongnu.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=e5bBcsxgaPauphBAbkV3pf/dICs6jqAgw/5t5PALPAY=; b=q6X0dvtlAUGqrkwBaR2BVWSKb7OA4VmrmVKT4lIVGjdmHhE/pEEeivlXBKitlXC/A0 f3SlTqIQqhubPRGsKQ/h7gRDKNhgXKUqsdbYvv4MaOBin3BtwoAPaxTlkgcw5irHD/V1 R+j4BN/S+JlOGHQSgla5g4wRAdvZIRY/xvF1pDvCL8Pn7Wyxmd5z6zpX3eHmSavngVfX Nnp/QjETElGFYWt7xlbPZBWEUA3RHq5lJfiophLaUAGtQFwvGY47KsmoRowAELLbGvGp GALg3P/mMrWlCVaj9wQZY6CuEyoBqf1h0EJO5xp2BUYH1W6PN/M9exqR6Kh+MPcL/UyE 8Yxg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788184368; x=1788789168; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=e5bBcsxgaPauphBAbkV3pf/dICs6jqAgw/5t5PALPAY=; b=BnKtlFfCU/mLCFF8ls0YRMxSje5RAhGBzwRaFTD1aXTWBa7OJBJM2Yk4moe/tlW3pR oI06/fBemhLUewGVjMNGEivTm7d56c8uLOwfpSrToWsnICVyVGo4L3VrP3cNFY3nQJCK mkl1bPwjjvoVN5UQnOoTvMFkPxgrsehwPc3SgztEDWD0LSsOFemRfO0Ecqz5gf0pD9Ny 7BDXWSKUpPkxbmo2hj6xcu/b6IoBlyPIwG9Y1wg6aEr9jG9GJsBX4ml9RnTHkJ0PRGW4 +gKWhAN2Pehq/F8V9gRlc53Z2Aa55xfcCkvGLV0EVmBUtWAuTpAyDAZUdJ2HD1TnuLyA 3vTw== X-Gm-Message-State: AFuF++nIJSnN6D+QaToWduLTdTQdF0XrTjCc/HPNOF41cynjOqR4Sa02 vzeB+CUJYHiTLKSF8DTy3Bfu103cWCKHTNSRsNQGsIZl60hGCV2SDQ/MFmFpZnufSfO5it5KL8J /QcMkdwOVstMeNb/wg8xmb8f+4XLJkKunjFde+P6aI76szz8++ANS4NcJSF7yzIr+ X-Gm-Gg: AR+sD12tmUUtwWWw9nVpOMO6+ANiQ8tsT2QzK6Sawo62pLKVv+9lDMqkpsdCnELtpVq +h51shWdvFXk+NfG1p6bSA6+MAnb9rBUWPo+j7SaA+GUp+lxXEXW8ocm6w1wPSGtlYDVsyr+ASb aKMt4ThIiTc5s8uofqmVNQsiYNJtTF+1GRN+aFwMeeV5lNeh8X+fbkBk5inTvW97MW/ZUXyN8+U u8WUNw38x0a/5pc5Aa6wjL1TBqtZSyOMMIhalmU7NciU9J77YA4JGkTZ6BKvWpY4iStMRPna9xa k9AFRKTZDQtu8PTwz0wCfN3CmIO56+rBmHsz9U090V/iDluaunyLm8Tk4yrWd4OFoSfV5e1Xhwh fSD/kyh2trcoaEufDMej0mhtyZgkflZUylWyeGM1k6DSPk5fl+H1M1XCzCZc= X-Received: by 2002:a05:600c:64c6:b0:495:52a5:8829 with SMTP id 5b1f17b1804b1-49cdc558470mr13855015e9.11.1788184367771; Mon, 31 Aug 2026 06:52:47 -0700 (PDT) X-Received: by 2002:a05:600c:64c6:b0:495:52a5:8829 with SMTP id 5b1f17b1804b1-49cdc558470mr13853645e9.11.1788184367155; Mon, 31 Aug 2026 06:52:47 -0700 (PDT) From: Hanna Czenczek To: qemu-block@nongnu.org Cc: qemu-devel@nongnu.org, Hanna Czenczek , Kevin Wolf , John Snow , "Denis V . Lunev" , Eric Blake , Markus Armbruster , Stefan Hajnoczi Subject: [PATCH 9/9] iotests: Add delay-alert test Date: Mon, 31 Aug 2026 15:52:05 +0200 Message-ID: <20260831135206.126184-10-hreitz@redhat.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260831135206.126184-1-hreitz@redhat.com> References: <20260831135206.126184-1-hreitz@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.129.124; envelope-from=hreitz@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1788184424555154100 Content-Type: text/plain; charset="utf-8" Test delay-alert-ms via HMP qemu-io (break, aio_read/write, resume) on a null node (with blkdebug). Signed-off-by: Hanna Czenczek Reviewed-by: Stefan Hajnoczi --- tests/qemu-iotests/tests/delay-alert | 136 +++++++++++++++++++++++ tests/qemu-iotests/tests/delay-alert.out | 46 ++++++++ 2 files changed, 182 insertions(+) create mode 100755 tests/qemu-iotests/tests/delay-alert create mode 100644 tests/qemu-iotests/tests/delay-alert.out diff --git a/tests/qemu-iotests/tests/delay-alert b/tests/qemu-iotests/test= s/delay-alert new file mode 100755 index 00000000000..d98f537e802 --- /dev/null +++ b/tests/qemu-iotests/tests/delay-alert @@ -0,0 +1,136 @@ +#!/usr/bin/env python3 +# group: rw +# +# Test the I/O delay QMP event. +# +# Copyright (C) 2026 Red Hat, Inc. +# +# SPDX-License-Identifier: GPL-2.0-or-later +# +# Creator/Owner: Hanna Czenczek + +import asyncio +import iotests +from iotests import filter_qmp_event, log + +DELAY_ALERT_MS =3D 5000 # ms +EPSILON_MS =3D 50 # ms -- small delta that can safely be added/subtracted +NS_PER_MS =3D 1000 * 1000 + +qtest_clock =3D 0 # ms + +iotests.script_initialize() + +def vm_qemu_io(qvm, virtio_blk_id, cmd): + log(f'[HMP] qemu-io to {virtio_blk_id}: {cmd}') + cmd =3D f'qemu-io -d {virtio_blk_id}/virtio-backend "{cmd}"' + log(qvm.qmp('human-monitor-command', command_line=3Dcmd)) + +def advance_clock_to(qvm, clock_ms): + # Retain the current absolute clock time so we can step *to* a specific + # time via `clock_step`. pylint does not like global much, but this is= a + # test script, and not using global would just make this more complica= ted. + global qtest_clock # pylint: disable=3Dglobal-statement + + msecs =3D clock_ms - qtest_clock + log(f'[qtest] clock_step {msecs}ms to {clock_ms}ms') + qvm.qtest(f'clock_step {msecs * NS_PER_MS}') + qtest_clock +=3D msecs + +def assert_no_event(qvm, event_name): + try: + evt =3D qvm.event_wait(event_name, timeout=3D0.1) + assert evt is None, f'Unexpected {event_name} event: {evt}' + except asyncio.TimeoutError: + pass + log(f'(No {event_name} event)') + +with iotests.VM() as vm: + # Cannot use null-co.latency-ns, as that uses realtime (not qtest time) + # Need to use raw to get the read_aio event working + vm.add_blockdev(vm.qmp_to_opts({ + 'driver': 'raw', + 'node-name': 'test-node', + 'file': { + 'driver': 'blkdebug', + 'image': { + 'driver': 'null-co', + }, + }, + })) + + vm.launch() + + log(f'[QMP] device_add id=3Dvblk delay-alert-ms=3D{DELAY_ALERT_MS}') + log(vm.qmp('device_add', { + 'driver': 'virtio-blk', + 'id': 'vblk', + 'drive': 'test-node', + 'delay-alert-ms': DELAY_ALERT_MS, + })) + + try: + # Test different operation types. Flushing and discarding would al= so be + # nice but `aio_flush` does not actually execute a flush, and ther= e is + # no blkdebug event for discarding. + + vm_qemu_io(vm, 'vblk', 'break read_aio read_0') + vm_qemu_io(vm, 'vblk', 'aio_read 0k 4k') + vm_qemu_io(vm, 'vblk', 'wait_break read_0') + + vm_qemu_io(vm, 'vblk', 'break write_aio write_0') + vm_qemu_io(vm, 'vblk', 'aio_write 4k 4k') + vm_qemu_io(vm, 'vblk', 'wait_break write_0') + + vm_qemu_io(vm, 'vblk', 'break read_aio read_1') + vm_qemu_io(vm, 'vblk', 'aio_read 8k 4k') + vm_qemu_io(vm, 'vblk', 'wait_break read_1') + + vm_qemu_io(vm, 'vblk', 'break write_aio write_1') + vm_qemu_io(vm, 'vblk', 'aio_write 12k 4k') + vm_qemu_io(vm, 'vblk', 'wait_break write_1') + + # Assert there is no event before the step + advance_clock_to(vm, DELAY_ALERT_MS - EPSILON_MS) + assert_no_event(vm, 'BLOCK_IO_DELAY') + + # Even when a request finishes here + vm_qemu_io(vm, 'vblk', 'resume read_0') + assert_no_event(vm, 'BLOCK_IO_DELAY') + + # Crossing the threshold alone does not cause an event to fire + advance_clock_to(vm, DELAY_ALERT_MS + EPSILON_MS) + assert_no_event(vm, 'BLOCK_IO_DELAY') + + # Only when the request finishes past the threshold do we see one + vm_qemu_io(vm, 'vblk', 'resume write_0') + event =3D vm.event_wait('BLOCK_IO_DELAY') + assert event is not None + log(event, filters=3D[filter_qmp_event]) + assert_no_event(vm, 'BLOCK_IO_DELAY') + + # Check that we get the event immediately on completion + vm_qemu_io(vm, 'vblk', 'resume read_1') + event =3D vm.event_wait('BLOCK_IO_DELAY') + assert event is not None + log(event, filters=3D[filter_qmp_event]) + assert_no_event(vm, 'BLOCK_IO_DELAY') + + # And the same for the final request, but add another bit of delay + advance_clock_to(vm, DELAY_ALERT_MS + 2 * EPSILON_MS) + vm_qemu_io(vm, 'vblk', 'resume write_1') + event =3D vm.event_wait('BLOCK_IO_DELAY') + assert event is not None + log(event, filters=3D[filter_qmp_event]) + assert_no_event(vm, 'BLOCK_IO_DELAY') + except Exception as exc: + # The VM will not be able to quit without these requests + # finished, which (without this block) would make the test + # hang instead of exit if something unexpected goes wrong + vm_qemu_io(vm, 'vblk', 'resume read_0') + vm_qemu_io(vm, 'vblk', 'resume write_0') + vm_qemu_io(vm, 'vblk', 'resume read_1') + vm_qemu_io(vm, 'vblk', 'resume write_1') + raise exc + + vm.shutdown() diff --git a/tests/qemu-iotests/tests/delay-alert.out b/tests/qemu-iotests/= tests/delay-alert.out new file mode 100644 index 00000000000..fe6cd71c6b1 --- /dev/null +++ b/tests/qemu-iotests/tests/delay-alert.out @@ -0,0 +1,46 @@ +[QMP] device_add id=3Dvblk delay-alert-ms=3D5000 +{"return": {}} +[HMP] qemu-io to vblk: break read_aio read_0 +{"return": ""} +[HMP] qemu-io to vblk: aio_read 0k 4k +{"return": ""} +[HMP] qemu-io to vblk: wait_break read_0 +{"return": ""} +[HMP] qemu-io to vblk: break write_aio write_0 +{"return": ""} +[HMP] qemu-io to vblk: aio_write 4k 4k +{"return": ""} +[HMP] qemu-io to vblk: wait_break write_0 +{"return": ""} +[HMP] qemu-io to vblk: break read_aio read_1 +{"return": ""} +[HMP] qemu-io to vblk: aio_read 8k 4k +{"return": ""} +[HMP] qemu-io to vblk: wait_break read_1 +{"return": ""} +[HMP] qemu-io to vblk: break write_aio write_1 +{"return": ""} +[HMP] qemu-io to vblk: aio_write 12k 4k +{"return": ""} +[HMP] qemu-io to vblk: wait_break write_1 +{"return": ""} +[qtest] clock_step 4950ms to 4950ms +(No BLOCK_IO_DELAY event) +[HMP] qemu-io to vblk: resume read_0 +{"return": ""} +(No BLOCK_IO_DELAY event) +[qtest] clock_step 100ms to 5050ms +(No BLOCK_IO_DELAY event) +[HMP] qemu-io to vblk: resume write_0 +{"return": ""} +{"data": {"bytes": 4096, "duration": 5.05, "offset": 4096, "operation": "w= rite", "qom-path": "/machine/peripheral/vblk/virtio-backend"}, "event": "BL= OCK_IO_DELAY", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} +(No BLOCK_IO_DELAY event) +[HMP] qemu-io to vblk: resume read_1 +{"return": ""} +{"data": {"bytes": 4096, "duration": 5.05, "offset": 8192, "operation": "r= ead", "qom-path": "/machine/peripheral/vblk/virtio-backend"}, "event": "BLO= CK_IO_DELAY", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} +(No BLOCK_IO_DELAY event) +[qtest] clock_step 50ms to 5100ms +[HMP] qemu-io to vblk: resume write_1 +{"return": ""} +{"data": {"bytes": 4096, "duration": 5.1, "offset": 12288, "operation": "w= rite", "qom-path": "/machine/peripheral/vblk/virtio-backend"}, "event": "BL= OCK_IO_DELAY", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} +(No BLOCK_IO_DELAY event) --=20 2.55.0