/* * Copyright (c) 2012 Google, Inc * Contributed by Stephane Eranian * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies * of the Software, and to permit persons to whom the Software is furnished to do so, * subject to the following conditions: * * The above copyright notice and this permission notice shall be included in all * copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * This file is part of libpfm, a performance monitoring support library for * applications on Linux. * * This file has been automatically generated. * * PMU: snbep_unc_ha (Intel SandyBridge-EP HA uncore PMU) */ static const intel_x86_umask_t snbep_unc_h_conflict_cycles[]={ { .uname = "CONFLICT", .udesc = "Number of cycles that we are handling conflicts", .ucode = 0x200, .uflags = INTEL_X86_NCOMBO, }, { .uname = "NO_CONFLICT", .udesc = "Number of cycles that we are not handling conflicts", .ucode = 0x100, .uflags = INTEL_X86_NCOMBO, }, }; static const intel_x86_umask_t snbep_unc_h_directory_lookup[]={ { .uname = "NO_SNP", .udesc = "Snoop not needed", .ucode = 0x200, .uflags = INTEL_X86_NCOMBO, }, { .uname = "SNP", .udesc = "Snoop needed", .ucode = 0x100, .uflags = INTEL_X86_NCOMBO, }, }; static const intel_x86_umask_t snbep_unc_h_directory_update[]={ { .uname = "ANY", .udesc = "Counts any directory update", .ucode = 0x300, .uflags = INTEL_X86_NCOMBO | INTEL_X86_DFL, }, { .uname = "CLEAR", .udesc = "Directory clears", .ucode = 0x200, .uflags = INTEL_X86_NCOMBO, }, { .uname = "SET", .udesc = "Directory set", .ucode = 0x100, .uflags = INTEL_X86_NCOMBO, }, }; static const intel_x86_umask_t snbep_unc_h_igr_no_credit_cycles[]={ { .uname = "AD_QPI0", .udesc = "AD to QPI link 0", .ucode = 0x100, .uflags = INTEL_X86_NCOMBO, }, { .uname = "AD_QPI1", .udesc = "AD to QPI link 1", .ucode = 0x200, .uflags = INTEL_X86_NCOMBO, }, { .uname = "BL_QPI0", .udesc = "BL to QPI link 0", .ucode = 0x400, .uflags = INTEL_X86_NCOMBO, }, { .uname = "BL_QPI1", .udesc = "BL to QPI link 1", .ucode = 0x800, .uflags = INTEL_X86_NCOMBO, }, }; static const intel_x86_umask_t snbep_unc_h_imc_writes[]={ { .uname = "ALL", .udesc = "Counts all writes", .ucode = 0xf00, .uflags = INTEL_X86_NCOMBO | INTEL_X86_DFL, }, { .uname = "FULL", .udesc = "Counts full line non ISOCH", .ucode = 0x100, .uflags = INTEL_X86_NCOMBO, }, { .uname = "FULL_ISOCH", .udesc = "Counts ISOCH full line", .ucode = 0x400, .uflags = INTEL_X86_NCOMBO, }, { .uname = "PARTIAL", .udesc = "Counts partial non-ISOCH", .ucode = 0x200, .uflags = INTEL_X86_NCOMBO, }, { .uname = "PARTIAL_ISOCH", .udesc = "Counts ISOCH partial", .ucode = 0x800, .uflags = INTEL_X86_NCOMBO, }, }; static const intel_x86_umask_t snbep_unc_h_requests[]={ { .uname = "READS", .udesc = "Counts incoming read requests. Good proxy for LLC read misses, incl. RFOs", .ucode = 0x300, .uflags = INTEL_X86_NCOMBO, }, { .uname = "WRITES", .udesc = "Counts incoming writes", .ucode = 0xc00, .uflags = INTEL_X86_NCOMBO, }, }; static const intel_x86_umask_t snbep_unc_h_rpq_cycles_no_reg_credits[]={ { .uname = "CHN0", .udesc = "Channel 0", .ucode = 0x100, .uflags = INTEL_X86_NCOMBO, }, { .uname = "CHN1", .udesc = "Channel 1", .ucode = 0x200, .uflags = INTEL_X86_NCOMBO, }, { .uname = "CHN2", .udesc = "channel 2", .ucode = 0x400, .uflags = INTEL_X86_NCOMBO, }, { .uname = "CHN3", .udesc = "Chanell 3", .ucode = 0x800, .uflags = INTEL_X86_NCOMBO, }, }; static const intel_x86_umask_t snbep_unc_h_tad_requests_g0[]={ { .uname = "REGION0", .udesc = "Counts for TAD Region 0", .ucode = 0x100, .uflags = INTEL_X86_NCOMBO, }, { .uname = "REGION1", .udesc = "Counts for TAD Region 1", .ucode = 0x200, .uflags = INTEL_X86_NCOMBO, }, { .uname = "REGION2", .udesc = "Counts for TAD Region 2", .ucode = 0x400, .uflags = INTEL_X86_NCOMBO, }, { .uname = "REGION3", .udesc = "Counts for TAD Region 3", .ucode = 0x800, .uflags = INTEL_X86_NCOMBO, }, { .uname = "REGION4", .udesc = "Counts for TAD Region 4", .ucode = 0x1000, .uflags = INTEL_X86_NCOMBO, }, { .uname = "REGION5", .udesc = "Counts for TAD Region 5", .ucode = 0x2000, .uflags = INTEL_X86_NCOMBO, }, { .uname = "REGION6", .udesc = "Counts for TAD Region 6", .ucode = 0x4000, .uflags = INTEL_X86_NCOMBO, }, { .uname = "REGION7", .udesc = "Counts for TAD Region 7", .ucode = 0x8000, .uflags = INTEL_X86_NCOMBO, }, }; static const intel_x86_umask_t snbep_unc_h_tad_requests_g1[]={ { .uname = "REGION8", .udesc = "Counts for TAD Region 8", .ucode = 0x100, .uflags = INTEL_X86_NCOMBO, }, { .uname = "REGION9", .udesc = "Counts for TAD Region 9", .ucode = 0x200, .uflags = INTEL_X86_NCOMBO, }, { .uname = "REGION10", .udesc = "Counts for TAD Region 10", .ucode = 0x400, .uflags = INTEL_X86_NCOMBO, }, { .uname = "REGION11", .udesc = "Counts for TAD Region 11", .ucode = 0x800, .uflags = INTEL_X86_NCOMBO, }, }; static const intel_x86_umask_t snbep_unc_h_tracker_inserts[]={ { .uname = "ALL", .udesc = "Counts all requests", .ucode = 0x300, .uflags = INTEL_X86_NCOMBO | INTEL_X86_DFL, }, }; static const intel_x86_umask_t snbep_unc_h_txr_ad[]={ { .uname = "NDR", .udesc = "Counts non-data responses", .ucode = 0x100, .uflags = INTEL_X86_NCOMBO, }, { .uname = "SNP", .udesc = "Counts outbound snoops send on the ring", .ucode = 0x200, .uflags = INTEL_X86_NCOMBO, }, }; static const intel_x86_umask_t snbep_unc_h_txr_ad_cycles_full[]={ { .uname = "ALL", .udesc = "Counts cycles full from both schedulers", .ucode = 0x300, .uflags = INTEL_X86_NCOMBO | INTEL_X86_DFL, }, { .uname = "SCHED0", .udesc = "Counts cycles full from scheduler bank 0", .ucode = 0x100, .uflags = INTEL_X86_NCOMBO, }, { .uname = "SCHED1", .udesc = "Counts cycles full from scheduler bank 1", .ucode = 0x200, .uflags = INTEL_X86_NCOMBO, }, }; static const intel_x86_umask_t snbep_unc_h_txr_ak_cycles_full[]={ { .uname = "ALL", .udesc = "Counts cycles from both schedulers", .ucode = 0x300, .uflags = INTEL_X86_NCOMBO | INTEL_X86_DFL, }, { .uname = "SCHED0", .udesc = "Counts cycles from scheduler bank 0", .ucode = 0x100, .uflags = INTEL_X86_NCOMBO, }, { .uname = "SCHED1", .udesc = "Counts cycles from scheduler bank 1", .ucode = 0x200, .uflags = INTEL_X86_NCOMBO, }, }; static const intel_x86_umask_t snbep_unc_h_txr_bl[]={ { .uname = "DRS_CACHE", .udesc = "Counts data being sent to the cache", .ucode = 0x100, .uflags = INTEL_X86_NCOMBO, }, { .uname = "DRS_CORE", .udesc = "Counts data being sent directly to the requesting core", .ucode = 0x200, .uflags = INTEL_X86_NCOMBO, }, { .uname = "DRS_QPI", .udesc = "Counts data being sent to a remote socket over QPI", .ucode = 0x400, .uflags = INTEL_X86_NCOMBO, }, }; #if 0 static const intel_x86_umask_t snbep_unc_h_addr_opc_match[]={ { .uname = "FILT", .udesc = "Number of addr and opcode matches (opc via opc= or address via addr= modifiers)", .ucode = 0x300, .uflags = INTEL_X86_NCOMBO | INTEL_X86_DFL | INTEL_X86_ADDR, }, }; #endif static const intel_x86_entry_t intel_snbep_unc_h_pe[]={ { .name = "UNC_H_CLOCKTICKS", .desc = "HA Uncore clockticks", .modmsk = SNBEP_UNC_HA_ATTRS, .cntmsk = 0xf, .code = 0x00, }, { .name = "UNC_H_CONFLICT_CYCLES", .desc = "Conflict Checks", .code = 0xb, .cntmsk = 0xf, .ngrp = 1, .modmsk = SNBEP_UNC_HA_ATTRS, .numasks = LIBPFM_ARRAY_SIZE(snbep_unc_h_conflict_cycles), .umasks = snbep_unc_h_conflict_cycles, }, { .name = "UNC_H_DIRECT2CORE_COUNT", .desc = "Direct2Core Messages Sent", .code = 0x11, .cntmsk = 0xf, .modmsk = SNBEP_UNC_HA_ATTRS, }, { .name = "UNC_H_DIRECT2CORE_CYCLES_DISABLED", .desc = "Cycles when Direct2Core was Disabled", .code = 0x12, .cntmsk = 0xf, .modmsk = SNBEP_UNC_HA_ATTRS, }, { .name = "UNC_H_DIRECT2CORE_TXN_OVERRIDE", .desc = "Number of Reads that had Direct2Core Overridden", .code = 0x13, .cntmsk = 0xf, .modmsk = SNBEP_UNC_HA_ATTRS, }, { .name = "UNC_H_DIRECTORY_LOOKUP", .desc = "Directory Lookups", .code = 0xc, .cntmsk = 0xf, .ngrp = 1, .modmsk = SNBEP_UNC_HA_ATTRS, .numasks = LIBPFM_ARRAY_SIZE(snbep_unc_h_directory_lookup), .umasks = snbep_unc_h_directory_lookup }, { .name = "UNC_H_DIRECTORY_UPDATE", .desc = "Directory Updates", .code = 0xd, .cntmsk = 0xf, .ngrp = 1, .modmsk = SNBEP_UNC_HA_ATTRS, .numasks = LIBPFM_ARRAY_SIZE(snbep_unc_h_directory_update), .umasks = snbep_unc_h_directory_update }, { .name = "UNC_H_IGR_NO_CREDIT_CYCLES", .desc = "Cycles without QPI Ingress Credits", .code = 0x22, .cntmsk = 0xf, .ngrp = 1, .modmsk = SNBEP_UNC_HA_ATTRS, .numasks = LIBPFM_ARRAY_SIZE(snbep_unc_h_igr_no_credit_cycles), .umasks = snbep_unc_h_igr_no_credit_cycles }, { .name = "UNC_H_IMC_RETRY", .desc = "Retry Events", .code = 0x1e, .cntmsk = 0xf, .modmsk = SNBEP_UNC_HA_ATTRS, }, { .name = "UNC_H_IMC_WRITES", .desc = "HA to iMC Full Line Writes Issued", .code = 0x1a, .cntmsk = 0xf, .ngrp = 1, .modmsk = SNBEP_UNC_HA_ATTRS, .numasks = LIBPFM_ARRAY_SIZE(snbep_unc_h_imc_writes), .umasks = snbep_unc_h_imc_writes }, { .name = "UNC_H_REQUESTS", .desc = "Read and Write Requests", .code = 0x1, .cntmsk = 0xf, .ngrp = 1, .modmsk = SNBEP_UNC_HA_ATTRS, .numasks = LIBPFM_ARRAY_SIZE(snbep_unc_h_requests), .umasks = snbep_unc_h_requests }, { .name = "UNC_H_RPQ_CYCLES_NO_REG_CREDITS", .desc = "iMC RPQ Credits Empty - Regular", .code = 0x15, .cntmsk = 0xf, .ngrp = 1, .modmsk = SNBEP_UNC_HA_ATTRS, .numasks = LIBPFM_ARRAY_SIZE(snbep_unc_h_rpq_cycles_no_reg_credits), .umasks = snbep_unc_h_rpq_cycles_no_reg_credits }, { .name = "UNC_H_TAD_REQUESTS_G0", .desc = "HA Requests to a TAD Region - Group 0", .code = 0x1b, .cntmsk = 0xf, .ngrp = 1, .modmsk = SNBEP_UNC_HA_ATTRS, .numasks = LIBPFM_ARRAY_SIZE(snbep_unc_h_tad_requests_g0), .umasks = snbep_unc_h_tad_requests_g0 }, { .name = "UNC_H_TAD_REQUESTS_G1", .desc = "HA Requests to a TAD Region - Group 1", .code = 0x1c, .cntmsk = 0xf, .ngrp = 1, .modmsk = SNBEP_UNC_HA_ATTRS, .numasks = LIBPFM_ARRAY_SIZE(snbep_unc_h_tad_requests_g1), .umasks = snbep_unc_h_tad_requests_g1 }, { .name = "UNC_H_TRACKER_INSERTS", .desc = "Tracker Allocations", .code = 0x6, .cntmsk = 0xf, .ngrp = 1, .modmsk = SNBEP_UNC_HA_ATTRS, .numasks = LIBPFM_ARRAY_SIZE(snbep_unc_h_tracker_inserts), .umasks = snbep_unc_h_tracker_inserts }, { .name = "UNC_H_TXR_AD", .desc = "Outbound NDR Ring Transactions", .code = 0xf, .cntmsk = 0xf, .ngrp = 1, .modmsk = SNBEP_UNC_HA_ATTRS, .numasks = LIBPFM_ARRAY_SIZE(snbep_unc_h_txr_ad), .umasks = snbep_unc_h_txr_ad }, { .name = "UNC_H_TXR_AD_CYCLES_FULL", .desc = "AD Egress Full", .code = 0x2a, .cntmsk = 0xf, .ngrp = 1, .modmsk = SNBEP_UNC_HA_ATTRS, .numasks = LIBPFM_ARRAY_SIZE(snbep_unc_h_txr_ad_cycles_full), .umasks = snbep_unc_h_txr_ad_cycles_full }, { .name = "UNC_H_TXR_AK_CYCLES_FULL", .desc = "AK Egress Full", .code = 0x32, .cntmsk = 0xf, .ngrp = 1, .modmsk = SNBEP_UNC_HA_ATTRS, .numasks = LIBPFM_ARRAY_SIZE(snbep_unc_h_txr_ak_cycles_full), .umasks = snbep_unc_h_txr_ak_cycles_full }, { .name = "UNC_H_TXR_AK_NDR", .desc = "Outbound NDR Ring Transactions", .code = 0xe, .cntmsk = 0xf, .modmsk = SNBEP_UNC_HA_ATTRS, }, { .name = "UNC_H_TXR_BL", .desc = "Outbound DRS Ring Transactions to Cache", .code = 0x10, .cntmsk = 0xf, .ngrp = 1, .modmsk = SNBEP_UNC_HA_ATTRS, .numasks = LIBPFM_ARRAY_SIZE(snbep_unc_h_txr_bl), .umasks = snbep_unc_h_txr_bl }, { .name = "UNC_H_TXR_BL_CYCLES_FULL", .desc = "BL Egress Full", .code = 0x36, .cntmsk = 0xf, .ngrp = 1, .modmsk = SNBEP_UNC_HA_ATTRS, .numasks = LIBPFM_ARRAY_SIZE(snbep_unc_h_txr_ak_cycles_full), .umasks = snbep_unc_h_txr_ak_cycles_full, /* identical to snbep_unc_h_txr_ak_cycles_full */ }, { .name = "UNC_H_WPQ_CYCLES_NO_REG_CREDITS", .desc = "HA iMC CHN0 WPQ Credits Empty - Regular", .code = 0x18, .cntmsk = 0xf, .ngrp = 1, .modmsk = SNBEP_UNC_HA_ATTRS, .numasks = LIBPFM_ARRAY_SIZE(snbep_unc_h_rpq_cycles_no_reg_credits), .umasks = snbep_unc_h_rpq_cycles_no_reg_credits , /* identical to snbep_unc_h_rpq_cycles_no_reg_credits */ }, #if 0 { .name = "UNC_H_ADDR_OPC_MATCH", .desc = "QPI address/opcode match", .code = 0x20, .cntmsk = 0xf, .ngrp = 1, .modmsk = SNBEP_UNC_HA_OPC_ATTRS, .numasks = LIBPFM_ARRAY_SIZE(snbep_unc_h_addr_opc_match), .umasks = snbep_unc_h_addr_opc_match, }, #endif };