Module Name: src Committed By: msaitoh Date: Thu Dec 8 05:29:27 UTC 2022
Modified Files: src/sys/dev/tprof: tprof_x86_amd.c src/usr.sbin/tprof/arch: tprof_x86.c Log Message: Add AMD family 19h (zen3 and zen4) support to tprof. To generate a diff of this commit: cvs rdiff -u -r1.6 -r1.7 src/sys/dev/tprof/tprof_x86_amd.c cvs rdiff -u -r1.14 -r1.15 src/usr.sbin/tprof/arch/tprof_x86.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/dev/tprof/tprof_x86_amd.c diff -u src/sys/dev/tprof/tprof_x86_amd.c:1.6 src/sys/dev/tprof/tprof_x86_amd.c:1.7 --- src/sys/dev/tprof/tprof_x86_amd.c:1.6 Thu Dec 1 00:32:52 2022 +++ src/sys/dev/tprof/tprof_x86_amd.c Thu Dec 8 05:29:27 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: tprof_x86_amd.c,v 1.6 2022/12/01 00:32:52 ryo Exp $ */ +/* $NetBSD: tprof_x86_amd.c,v 1.7 2022/12/08 05:29:27 msaitoh Exp $ */ /* * Copyright (c) 2018 The NetBSD Foundation, Inc. @@ -56,7 +56,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: tprof_x86_amd.c,v 1.6 2022/12/01 00:32:52 ryo Exp $"); +__KERNEL_RCSID(0, "$NetBSD: tprof_x86_amd.c,v 1.7 2022/12/08 05:29:27 msaitoh Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -245,6 +245,7 @@ tprof_amd_ident(void) case 0x10: case 0x15: case 0x17: + case 0x19: return TPROF_IDENT_AMD_GENERIC; } Index: src/usr.sbin/tprof/arch/tprof_x86.c diff -u src/usr.sbin/tprof/arch/tprof_x86.c:1.14 src/usr.sbin/tprof/arch/tprof_x86.c:1.15 --- src/usr.sbin/tprof/arch/tprof_x86.c:1.14 Thu Dec 8 02:12:18 2022 +++ src/usr.sbin/tprof/arch/tprof_x86.c Thu Dec 8 05:29:27 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: tprof_x86.c,v 1.14 2022/12/08 02:12:18 msaitoh Exp $ */ +/* $NetBSD: tprof_x86.c,v 1.15 2022/12/08 05:29:27 msaitoh Exp $ */ /* * Copyright (c) 2018-2019 The NetBSD Foundation, Inc. @@ -831,6 +831,186 @@ static struct event_table amd_f17h = { .next = NULL }; +/* + * AMD Family 19h + * From PPR: + * - f19h model 01h B1 (zen3) + * - f19h model 11h B1 (zen4) + * - f19h model 21h B1 (zen3) + * - f19h model 51h A1 (zen3) + */ +static struct name_to_event amd_f19h_names[] = { + /* Model 1x only */ + { "FpRetx87FpOps", 0x02, __BITS(2,0), true }, + + /* Only model 1x has bit 4 */ + { "FpRetSseAvxOps", 0x03, __BITS(4,0), true }, + + { "FpRetiredSerOps", 0x05, __BITS(3,0), true }, + + /* Model 1x only */ + { "FpOpsRetiredByWidth", 0x08, __BITS(5,0), true }, + { "FpOpsRetiredByType", 0x0a, __BITS(7,0), true }, + { "SseAvxOpsRetired", 0x0b, __BITS(7,0), true }, + { "FpPackOpsRetired", 0x0c, __BITS(7,0), true }, + { "PackedIntOpType", 0x0d, __BITS(7,0), true }, + + { "FpDispFaults", 0x0e, __BITS(3,0), true }, + { "LsBadStatus2", 0x24, __BIT(1), true }, + { "LsLocks", 0x25, __BIT(0), true }, + { "LsRetClClush", 0x26, 0x00, true }, + { "LsRetCpuid", 0x27, 0x00, true }, + { "LsDispatch", 0x29, __BITS(2,0), true }, + { "LsSmiRx", 0x2b, 0x00, true }, + { "LsIntTaken", 0x2c, 0x00, true }, + { "LsSTLF", 0x35, 0x00, true }, + { "LsStCommitCancel2", 0x37, __BIT(0), true }, + { "LsMabAlloc-ls", 0x41, 0x3f, true }, + { "LsMabAlloc-hp", 0x41, 0x40, true }, + { "LsMabAlloc-all", 0x41, 0x7f, true }, + { "LsDmndFillsFromSys", 0x43, 0x5f, true }, + + /* Only model 1x has bit 7 */ + { "LsAnyFillsFromSys", 0x44, 0xdf, true }, + + { "LsL1DTlbMiss", 0x45, __BITS(7,0), true }, + { "LsMisalLoads-MA64", 0x47, __BIT(0), true }, + { "LsMisalLoads-MA4K", 0x47, __BIT(1), true }, + { "LsMisalLoads-all", 0x47, __BITS(1,0), true }, + { "LsPrefInstrDisp", 0x4b, __BITS(2,0), true }, + { "LsInefSwPref", 0x52, __BITS(1,0), true }, + + /* Only model 1x has bit 7 */ + { "LsSwPfDcFills", 0x59, 0xdf, true }, + { "LsHwPfDcFills", 0x5a, 0xdf, true }, + + { "LsAllocMabCount", 0x5f, 0x00, true }, + { "LsNotHaltedCyc", 0x76, 0x00, true }, + + /* Model 0x, 1x and 2x only */ + { "LsTlbFlush", 0x78, 0xff, true }, + + /* Model 1x only */ + { "LsNotHaltedP0Cyc", 0x120, __BIT(0), true }, + + { "IcCacheFillL2", 0x82, 0x00, true }, + { "IcCacheFillSys", 0x83, 0x00, true }, + { "BpL1TlbMissL2TlbHit", 0x84, 0x00, true }, + { "BpL1TlbMissL2TlbMiss-IF4K", 0x85, __BIT(0), true }, + { "BpL1TlbMissL2TlbMiss-IF2M", 0x85, __BIT(1), true }, + { "BpL1TlbMissL2TlbMiss-IF1G", 0x85, __BIT(2), true }, + { "BpL1TlbMissL2TlbMiss-Coalesced4K", 0x85, __BIT(3), true }, + { "BpL1TlbMissL2TlbMiss-all", 0x85, __BITS(3,0), true }, + + { "BpL2BTBCorrect", 0x8b, 0x00, true }, + { "BpDynIndPred", 0x8e, 0x00, true }, + { "BpDeReDirect", 0x91, 0x00, true }, + { "BpL1TlbFetchHit-IF4K", 0x94, __BIT(0), true }, + { "BpL1TlbFetchHit-IF2M", 0x94, __BIT(1), true }, + { "BpL1TlbFetchHit-IF1G", 0x94, __BIT(2), true }, + { "BpL1TlbFetchHit-all", 0x94, __BITS(2,0), true }, + + /* Model 1x only */ + { "ResyncsOrNcRedirects", 0x96, 0x00, true }, + + { "IcTagHitMiss-hit", 0x18e, 0x07, true }, + { "IcTagHitMiss-miss", 0x18e, 0x18, true }, + { "IcTagHitMiss-all", 0x18e, 0x1f, true }, + { "OpCacheHitMiss-hit", 0x28f, 0x03, true }, + { "OpCacheHitMiss-miss", 0x28f, 0x04, true }, + { "OpCacheHitMiss-all", 0x28f, 0x07, true }, + { "DeOpQueueEmpty", 0xa9, 0x00, true }, + + /* + * Model 0x and 1x only. + * Only model 1x has bit 2. + */ + { "DeSrcOpDisp", 0xaa, __BITS(2,0), true }, + + { "DeDisOpsFromDecoder-Fp-Ibs", 0xab, 0x04, true }, + { "DeDisOpsFromDecoder-Int-Ibs", 0xab, 0x08, true }, + + /* Model 0x, 2x and newer */ + { "DeDisOpsFromDecoder-Fp-Ret", 0xab, 0x84, true }, + { "DeDisOpsFromDecoder-Int-Ret", 0xab, 0x88, true }, + + { "DeDisDispatchTokenStalls1", 0xae, 0xf7, true }, + { "DeDisDispatchTokenStalls2", 0xaf, 0x2f, true }, + + /* Model 1x only */ + { "DeNoDispatchPerSolt-empty", 0x1a0, 0x01, true }, + { "DeNoDispatchPerSolt-backend", 0x1a0, 0x1e, true }, + { "DeNoDispatchPerSolt-otherSMT", 0x1a0, 0x60, true }, + { "DeAdditionalResourceStalls", 0x1a2, 0x30, true }, + + { "ExRetInstr", 0xc0, 0x00, true }, + { "ExRetCops", 0xc1, 0x00, true }, + { "ExRetBrn", 0xc2, 0x00, true }, + { "ExRetBrnMisp", 0xc3, 0x00, true }, + { "ExRetBrnTkn", 0xc4, 0x00, true }, + { "ExRetBrnTknMisp", 0xc5, 0x00, true }, + { "ExRetBrnFar", 0xc6, 0x00, true }, + { "ExRetBrnIndMisp", 0xca, 0x00, true }, + { "ExRetNearRet", 0xc8, 0x00, true }, + { "ExRetNearRetMispred", 0xc9, 0x00, true }, + { "ExRetMmxFpInstr@X87", 0xcb, __BIT(0), true }, + { "ExRetMmxFpInstr@Mmx", 0xcb, __BIT(1), true }, + { "ExRetMmxFpInstr@Sse", 0xcb, __BIT(2), true }, + { "ExRetIndBrchInstr", 0xcc, 0x00, true }, + { "ExRetCond", 0xd1, 0x00, true }, + { "ExDivBusy", 0xd3, 0x00, true }, + { "ExDivCount", 0xd4, 0x00, true }, + + /* Model 1x only */ + { "ExDivCount-LoadAndALU", 0xd6, 0x1f, true }, + { "ExDivCount-Load", 0xd6, 0xbf, true }, + { "ExRetUcodeInstr", 0x1c1, 0x00, true }, + { "ExRetUcodeOps", 0x1c2, 0x00, true }, + + { "ExRetMsprdBrnchInstrDirMsmtch", 0x1c7, 0x00, true }, + + /* Model 1x only */ + { "ExRetUncondBrnchInstrMspred", 0x1c8, 0x00, true }, + { "ExRetUncondBrnchInstr", 0x1c8, 0x00, true }, + + { "ExTaggedIbsOps", 0x1cf, __BITS(2,0), true }, + { "ExRetFusedInstr", 0x1d0, 0x00, true }, + + /* Only model 1x has bit 0 */ + { "L2RequestG1", 0x60, __BITS(7,1), true }, + + { "L2CacheReqStart", 0x64, __BITS(7,0), true }, + { "L2PfHitL2-L2", 0x70, __BITS(4,0), true }, + { "L2PfHitL2-L1", 0x70, __BITS(7,5), true }, + { "L2PfHitL2-all", 0x70, __BITS(7,0), true }, + { "L2PfMissL2HitL3-L2", 0x71, __BITS(4,0), true }, + { "L2PfMissL2HitL3-L1", 0x71, __BITS(7,5), true }, + { "L2PfMIssL2HitL3-all", 0x71, __BITS(7,0), true }, + { "L2PfMissL2L3-L2", 0x72, __BITS(4,0), true }, + { "L2PfMissL2L3-L1", 0x72, __BITS(7,5), true }, + { "L2PfMIssL2L3-all", 0x72, __BITS(7,0), true }, + + { "L3LookupState-L3Miss", 0x04, __BIT(0), true }, + { "L3LookupState-L3Hit", 0x04, __BITS(7,1), true }, + { "L3LookupState-all", 0x04, __BITS(7,0), true }, + + /* Model 0x, 2x and newer */ + { "XiSysFillLatency", 0x90, 0x00, true }, + { "XiCcxSdpReq1", 0x9a, 0x00, true }, + + /* Model 1x only */ + { "XiSampledLatency", 0xac, 0x00, true }, + { "XiSampledLatencyRequests", 0xad, 0x00, true }, +}; + +static struct event_table amd_f19h = { + .tablename = "AMD Family 19h", + .names = amd_f19h_names, + .nevents = sizeof(amd_f19h_names) / + sizeof(struct name_to_event), + .next = NULL +}; + static struct event_table * init_amd_generic(void) { @@ -849,6 +1029,8 @@ init_amd_generic(void) return &amd_f15h; case 0x17: return &amd_f17h; + case 0x19: + return &amd_f19h; } return NULL;