2015-04-20 18:14+0200, Radim Krčmář:
> Tested-by: Radim Krčmář <[email protected]>

Uncached accesses were roughly 20x slower.
In case anyone wanted to reproduce, I used this as a kvm-unit-test:

---
#include "processor.h"

#define NR_TOP_LOOPS 24
#define NR_MEM_LOOPS 10
#define MEM_ELEMENTS 1024

static volatile u64 pat_test_memory[MEM_ELEMENTS];

static void flush_tlb(void)
{
        write_cr3(read_cr3());
}

static void set_pat(u64 val)
{
        wrmsr(0x277, val);
        flush_tlb();

}

static u64 time_memory_accesses(void)
{
        u64 tsc_before = rdtsc();

        for (unsigned loop = 0; loop < NR_MEM_LOOPS; loop++)
                for (unsigned i = 0; i < MEM_ELEMENTS; i++)
                        pat_test_memory[i]++;

        return rdtsc() - tsc_before;
}

int main(int argc, char **argv)
{
        unsigned error = 0;

        for (unsigned loop = 0; loop < NR_TOP_LOOPS; loop++) {
                u64 time_uc, time_wb;

                set_pat(0);
                time_uc = time_memory_accesses();

                set_pat(0x0606060606060606ULL);
                time_wb = time_memory_accesses();

                if (time_uc < time_wb * 4)
                        error++;

                printf("%02d uc: %10lld wb: %8lld\n", loop, time_uc, time_wb);
        }

        report("guest PAT", !error);

        return report_summary();
}
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to