Re: [PATCH v3 1/2] KVM: selftests: Provide generic way to read system counter

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Mon, Mar 27, 2023, Colton Lewis wrote:
> +uint64_t cycles_read(void);

I would prefer something like get_system_counter() or read_system_counter()
Pairing "read" after "cycles" can be read (lol) in past tense or current tense,
e.g. "the number of cycles that were read" versus "read the current number of
cycles".  I used guest_system_counter_read() in an example in v1[*], but that was
just me copy+pasting from the patch.

And "cycles" is typically used to describe latency and elapsed time, e.g. doing

	uint64_t time = cycles_to_ns(cycles_read());

looks valid at a glance, e.g. "convert that number of cycles that were read into
nanoseconds", but is nonsensical in most cases because it's current tense, and
there's no baseline time.

Sorry for not bringing this up in v2, I think I only looked at the implementation.

[*] https://lore.kernel.org/kvm/Y9LPhs1BgBA4+kBY@xxxxxxxxxx

> +uint64_t cycles_to_ns(struct kvm_vcpu *vcpu, uint64_t cycles)
> +{
> +	TEST_ASSERT(cycles < 10000000000, "Conversion to ns may overflow");
> +	return cycles * NSEC_PER_SEC / timer_get_cntfrq();
> +}
> diff --git a/tools/testing/selftests/kvm/lib/x86_64/processor.c b/tools/testing/selftests/kvm/lib/x86_64/processor.c
> index ae1e573d94ce..adef76bebff3 100644
> --- a/tools/testing/selftests/kvm/lib/x86_64/processor.c
> +++ b/tools/testing/selftests/kvm/lib/x86_64/processor.c
> @@ -1270,3 +1270,16 @@ void kvm_selftest_arch_init(void)
>  	host_cpu_is_intel = this_cpu_is_intel();
>  	host_cpu_is_amd = this_cpu_is_amd();
>  }
> +
> +uint64_t cycles_read(void)
> +{
> +	return rdtsc();
> +}
> +
> +uint64_t cycles_to_ns(struct kvm_vcpu *vcpu, uint64_t cycles)
> +{
> +	uint64_t tsc_khz = __vcpu_ioctl(vcpu, KVM_GET_TSC_KHZ, NULL);
> +
> +	TEST_ASSERT(cycles < 10000000000, "Conversion to ns may overflow");

Is it possible to calculate this programatically instead of hardcoding a magic
number?

> +	return cycles * NSEC_PER_SEC / (tsc_khz * 1000);



[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux