KVM: x86: Allow suppressing prints on RDMSR/WRMSR of unhandled MSRs
Some guests use these unhandled MSRs very frequently. This cause dmesg to be populated with lots of aggregated messages on usage of ignored MSRs. As ignore_msrs=true means that the user is well-aware his guest use ignored MSRs, allow to also disable the prints on their usage. An example of such guest is ESXi which tends to access a lot to MSR 0x34 (MSR_SMI_COUNT) very frequently. In addition, we have observed this to cause unnecessary delays to guest execution. Such an example is ESXi which experience networking delays in it's guests (L2 guests) because of these prints (even when prints are rate-limited). This can easily be reproduced by pinging from one L2 guest to another. Once in a while, a peak in ping RTT will be observed. Removing these unhandled MSR prints solves the issue. Because these prints can help diagnose issues with guests, this commit only suppress them by a module parameter instead of removing them from code entirely. Signed-off-by: Eyal Moscovici <eyal.moscovici@oracle.com> Reviewed-by: Liran Alon <liran.alon@oracle.com> Reviewed-by: Krish Sadhukhan <krish.sadhukhan@oracle.com> Signed-off-by: Krish Sadhukhan <krish.sadhukhan@oracle.com> Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com> [Changed suppress_ignore_msrs_prints to report_ignored_msrs - Radim] Signed-off-by: Radim Krčmář <rkrcmar@redhat.com>
This commit is contained in:
parent
4d772cb85f
commit
fab0aa3b77
|
@ -107,6 +107,9 @@ EXPORT_SYMBOL_GPL(kvm_x86_ops);
|
||||||
static bool __read_mostly ignore_msrs = 0;
|
static bool __read_mostly ignore_msrs = 0;
|
||||||
module_param(ignore_msrs, bool, S_IRUGO | S_IWUSR);
|
module_param(ignore_msrs, bool, S_IRUGO | S_IWUSR);
|
||||||
|
|
||||||
|
static bool __read_mostly report_ignored_msrs = true;
|
||||||
|
module_param(report_ignored_msrs, bool, S_IRUGO | S_IWUSR);
|
||||||
|
|
||||||
unsigned int min_timer_period_us = 500;
|
unsigned int min_timer_period_us = 500;
|
||||||
module_param(min_timer_period_us, uint, S_IRUGO | S_IWUSR);
|
module_param(min_timer_period_us, uint, S_IRUGO | S_IWUSR);
|
||||||
|
|
||||||
|
@ -2325,7 +2328,9 @@ int kvm_set_msr_common(struct kvm_vcpu *vcpu, struct msr_data *msr_info)
|
||||||
/* Drop writes to this legacy MSR -- see rdmsr
|
/* Drop writes to this legacy MSR -- see rdmsr
|
||||||
* counterpart for further detail.
|
* counterpart for further detail.
|
||||||
*/
|
*/
|
||||||
vcpu_unimpl(vcpu, "ignored wrmsr: 0x%x data 0x%llx\n", msr, data);
|
if (report_ignored_msrs)
|
||||||
|
vcpu_unimpl(vcpu, "ignored wrmsr: 0x%x data 0x%llx\n",
|
||||||
|
msr, data);
|
||||||
break;
|
break;
|
||||||
case MSR_AMD64_OSVW_ID_LENGTH:
|
case MSR_AMD64_OSVW_ID_LENGTH:
|
||||||
if (!guest_cpuid_has(vcpu, X86_FEATURE_OSVW))
|
if (!guest_cpuid_has(vcpu, X86_FEATURE_OSVW))
|
||||||
|
@ -2362,8 +2367,10 @@ int kvm_set_msr_common(struct kvm_vcpu *vcpu, struct msr_data *msr_info)
|
||||||
msr, data);
|
msr, data);
|
||||||
return 1;
|
return 1;
|
||||||
} else {
|
} else {
|
||||||
vcpu_unimpl(vcpu, "ignored wrmsr: 0x%x data 0x%llx\n",
|
if (report_ignored_msrs)
|
||||||
msr, data);
|
vcpu_unimpl(vcpu,
|
||||||
|
"ignored wrmsr: 0x%x data 0x%llx\n",
|
||||||
|
msr, data);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2581,7 +2588,9 @@ int kvm_get_msr_common(struct kvm_vcpu *vcpu, struct msr_data *msr_info)
|
||||||
msr_info->index);
|
msr_info->index);
|
||||||
return 1;
|
return 1;
|
||||||
} else {
|
} else {
|
||||||
vcpu_unimpl(vcpu, "ignored rdmsr: 0x%x\n", msr_info->index);
|
if (report_ignored_msrs)
|
||||||
|
vcpu_unimpl(vcpu, "ignored rdmsr: 0x%x\n",
|
||||||
|
msr_info->index);
|
||||||
msr_info->data = 0;
|
msr_info->data = 0;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Reference in New Issue