Commit 9e33ad75 authored by GangCao's avatar GangCao Committed by Tomasz Zawadzki
Browse files

Bdev: add the ZCopy operation for IO stats



To track the ZCopy IO stats like IOs and Bytes read and written.

Change-Id: Iab2c4d8397aee5d746db9491bd4e8ac4eea69529
Signed-off-by: default avatarGangCao <gang.cao@intel.com>
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/539


Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: default avatarShuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
Reviewed-by: default avatarTomasz Zawadzki <tomasz.zawadzki@intel.com>
parent f6e682af
Loading
Loading
Loading
Loading
+37 −0
Original line number Diff line number Diff line
@@ -1474,6 +1474,12 @@ bdev_qos_io_to_limit(struct spdk_bdev_io *bdev_io)
	case SPDK_BDEV_IO_TYPE_READ:
	case SPDK_BDEV_IO_TYPE_WRITE:
		return true;
	case SPDK_BDEV_IO_TYPE_ZCOPY:
		if (bdev_io->u.bdev.zcopy.start) {
			return true;
		} else {
			return false;
		}
	default:
		return false;
	}
@@ -1493,6 +1499,13 @@ bdev_is_read_io(struct spdk_bdev_io *bdev_io)
		}
	case SPDK_BDEV_IO_TYPE_READ:
		return true;
	case SPDK_BDEV_IO_TYPE_ZCOPY:
		/* Populate to read from disk */
		if (bdev_io->u.bdev.zcopy.populate) {
			return true;
		} else {
			return false;
		}
	default:
		return false;
	}
@@ -1510,6 +1523,13 @@ bdev_get_io_size_in_byte(struct spdk_bdev_io *bdev_io)
	case SPDK_BDEV_IO_TYPE_READ:
	case SPDK_BDEV_IO_TYPE_WRITE:
		return bdev_io->u.bdev.num_blocks * bdev->blocklen;
	case SPDK_BDEV_IO_TYPE_ZCOPY:
		/* Track the data in the start phase only */
		if (bdev_io->u.bdev.zcopy.start) {
			return bdev_io->u.bdev.num_blocks * bdev->blocklen;
		} else {
			return 0;
		}
	default:
		return 0;
	}
@@ -4481,6 +4501,23 @@ bdev_io_complete(void *ctx)
			bdev_io->internal.ch->stat.bytes_unmapped += bdev_io->u.bdev.num_blocks * bdev_io->bdev->blocklen;
			bdev_io->internal.ch->stat.num_unmap_ops++;
			bdev_io->internal.ch->stat.unmap_latency_ticks += tsc_diff;
			break;
		case SPDK_BDEV_IO_TYPE_ZCOPY:
			/* Track the data in the start phase only */
			if (bdev_io->u.bdev.zcopy.start) {
				if (bdev_io->u.bdev.zcopy.populate) {
					bdev_io->internal.ch->stat.bytes_read +=
						bdev_io->u.bdev.num_blocks * bdev_io->bdev->blocklen;
					bdev_io->internal.ch->stat.num_read_ops++;
					bdev_io->internal.ch->stat.read_latency_ticks += tsc_diff;
				} else {
					bdev_io->internal.ch->stat.bytes_written +=
						bdev_io->u.bdev.num_blocks * bdev_io->bdev->blocklen;
					bdev_io->internal.ch->stat.num_write_ops++;
					bdev_io->internal.ch->stat.write_latency_ticks += tsc_diff;
				}
			}
			break;
		default:
			break;
		}