Commit 73884e62 authored by Michal Berger's avatar Michal Berger Committed by Tomasz Zawadzki
Browse files

test/scheduler: Add simple tool for utilizing msr driver



This tool simply returns contents of EAX|ECX registers for a specific
MSR. Targeted use is to compare DPDK's governor results while working
under intel_pstate driver.

Change-Id: I40b3f3601d41e45ba65c96b99ebd1b6949b5af20
Signed-off-by: default avatarMichal Berger <michalx.berger@intel.com>
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/5737


Reviewed-by: default avatarTomasz Zawadzki <tomasz.zawadzki@intel.com>
Reviewed-by: default avatarMaciej Szwed <maciej.szwed@intel.com>
Reviewed-by: default avatarJim Harris <james.r.harris@intel.com>
Reviewed-by: default avatarKarol Latecki <karol.latecki@intel.com>
Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
parent 453b15d6
Loading
Loading
Loading
Loading
+34 −0
Original line number Diff line number Diff line
#!/usr/bin/env perl

use strict;
use warnings;

use constant SEEK_CUR => 1;

( @ARGV == 2 ) || exit(1);

my $cpu_path = sprintf( "/dev/cpu/%u/msr", shift() );
my $msr      = hex( shift() );
my $reg_size = 8;
my ( @msr, $msr_buf, $reg );

unless ( -e $cpu_path ) {
    printf STDERR "$cpu_path doesn't exist\n";
    exit(1);
}

open( MSR, "<", $cpu_path );
sysseek( MSR, $msr, SEEK_CUR );
sysread( MSR, $msr_buf, $reg_size );
@msr = unpack( "C*", $msr_buf );

unless ( @msr == $reg_size ) {
    printf STDERR "Failed to read $cpu_path\n";
    exit(1);
}

for ( my $byte = @msr - 1 ; $byte >= 0 ; $byte-- ) {
    $reg |= $msr[$byte] << ( $byte * 8 );
}

printf( "0x%x\n", $reg );