From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:43376) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TC8yI-0001MP-Q2 for qemu-devel@nongnu.org; Thu, 13 Sep 2012 08:56:48 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1TC8yC-0001kP-RA for qemu-devel@nongnu.org; Thu, 13 Sep 2012 08:56:42 -0400 Received: from ssl.dlhnet.de ([91.198.192.8]:43543 helo=ssl.dlh.net) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TC8yC-0001iX-Hn for qemu-devel@nongnu.org; Thu, 13 Sep 2012 08:56:36 -0400 Message-ID: <5051D801.6020302@dlhnet.de> Date: Thu, 13 Sep 2012 14:56:33 +0200 From: Peter Lieven MIME-Version: 1.0 References: <504DD9F5.2040300@redhat.com> <20120910122120.GA20907@redhat.com> <504DDD37.5000804@dlhnet.de> <504DDDDA.9040001@redhat.com> <505190E5.9080008@dlhnet.de> <5051915A.2050405@redhat.com> <20120913075734.GX20907@redhat.com> <5051929A.2060407@redhat.com> <20120913080529.GY20907@redhat.com> <5051CC03.1030101@dlhnet.de> <20120913124227.GE20907@redhat.com> In-Reply-To: <20120913124227.GE20907@redhat.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] memtest 4.20+ does not work with -cpu host List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Gleb Natapov Cc: Paolo Bonzini , "H. Peter Anvin" , Avi Kivity , "kvm@vger.kernel.org" , "qemu-devel@nongnu.org" On 13.09.2012 14:42, Gleb Natapov wrote: > On Thu, Sep 13, 2012 at 02:05:23PM +0200, Peter Lieven wrote: >> On 13.09.2012 10:05, Gleb Natapov wrote: >>> On Thu, Sep 13, 2012 at 10:00:26AM +0200, Paolo Bonzini wrote: >>>> Il 13/09/2012 09:57, Gleb Natapov ha scritto: >>>>>>>>> #rdmsr -0 0x194 >>>>>>>>> 0000000000011100 >>>>>>>>> #rdmsr -0 0xce >>>>>>>>> 00000c0004011103 >>>>>>> Yes, that can help implementing it in KVM. But without a spec to >>>>>>> understand what the bits actually mean, it's just as risky... >>>>>>> >>>>>>> Peter, do you have any idea where to get the spec of the memory >>>>>>> controller MSRs in Nehalem and newer processors? Apparently, memtest is >>>>>>> using them (and in particular 0x194) to find the speed of the FSB, or >>>>>>> something like that. >>>>>>> >>>>> Why would anyone will want to run memtest in a vm? May be just add those >>>>> MSRs to ignore list and that's it. >>>> >From the output it looks like it's basically a list of bits. Returning >>>> something sensible is better, same as for the speed scaling MSRs. >>>> >>> Everything is list of bits in computers :) At least 0xce is documented in SDM. >>> It cannot be implemented in a migration safe manner. >> What do you suggest just say memtest does not work? > Why do you want to run it in a guest? Testing memory thorughput of different host memory layouts/settings (hugepages, ksm etc.). Stress testing new settings and qemu-kvm builds. Testing new nodes with a VM which claims all available pages. Its a lot easier than booting a node with a CD and attaching to the Console. This, of course, is all not missing critical and call also be done with cpu model qemu64. I just came across memtest no longer working and where wondering if there is a general regressing. BTW, from http://opensource.apple.com/source/xnu/xnu-1228.15.4/osfmk/i386/tsc.c?txt #define MSR_FLEX_RATIO 0x194 #define MSR_PLATFORM_INFO 0x0ce #define BASE_NHM_CLOCK_SOURCE 133333333ULL #define CPUID_MODEL_NEHALEM 26 switch (cpuid_info()->cpuid_model) { case CPUID_MODEL_NEHALEM: { uint64_t cpu_mhz; uint64_t msr_flex_ratio; uint64_t msr_platform_info; /* See if FLEX_RATIO is being used */ msr_flex_ratio = rdmsr64(MSR_FLEX_RATIO); msr_platform_info = rdmsr64(MSR_PLATFORM_INFO); flex_ratio_min = (uint32_t)bitfield(msr_platform_info, 47, 40); flex_ratio_max = (uint32_t)bitfield(msr_platform_info, 15, 8); /* No BIOS-programed flex ratio. Use hardware max as default */ tscGranularity = flex_ratio_max; if (msr_flex_ratio & bit(16)) { /* Flex Enabled: Use this MSR if less than max */ flex_ratio = (uint32_t)bitfield(msr_flex_ratio, 15, 8); if (flex_ratio < flex_ratio_max) tscGranularity = flex_ratio; } /* If EFI isn't configured correctly, use a constant * value. See 6036811. */ if (busFreq == 0) busFreq = BASE_NHM_CLOCK_SOURCE; cpu_mhz = tscGranularity * BASE_NHM_CLOCK_SOURCE; kprintf("[NHM] Maximum Non-Turbo Ratio = [%d]\n", (uint32_t)tscGranularity); kprintf("[NHM] CPU: Frequency = %6d.%04dMhz\n", (uint32_t)(cpu_mhz / Mega), (uint32_t)(cpu_mhz % Mega)); break; } Peter