[llvm] r341905 - [XRay] Add TSC to NewCPUId Records

Dean Michael Berris via llvm-commits llvm-commits at lists.llvm.org
Mon Sep 10 23:36:51 PDT 2018


Author: dberris
Date: Mon Sep 10 23:36:51 2018
New Revision: 341905

URL: http://llvm.org/viewvc/llvm-project?rev=341905&view=rev
Log:
[XRay] Add TSC to NewCPUId Records

Summary:
This more correctly reflects the data written by the FDR mode runtime.

This is a continuation of the work in D50441.

Reviewers: mboerger, eizan

Subscribers: hiraditya, llvm-commits

Differential Revision: https://reviews.llvm.org/D51911

Modified:
    llvm/trunk/include/llvm/XRay/FDRRecords.h
    llvm/trunk/lib/XRay/RecordInitializer.cpp
    llvm/trunk/lib/XRay/RecordPrinter.cpp
    llvm/trunk/test/tools/llvm-xray/X86/fdr-dump-arg1-version-3.txt
    llvm/trunk/test/tools/llvm-xray/X86/fdr-dump-arg1.txt
    llvm/trunk/unittests/XRay/FDRBlockIndexerTest.cpp
    llvm/trunk/unittests/XRay/FDRBlockVerifierTest.cpp
    llvm/trunk/unittests/XRay/FDRProducerConsumerTest.cpp
    llvm/trunk/unittests/XRay/FDRRecordPrinterTest.cpp
    llvm/trunk/unittests/XRay/FDRRecordsTest.cpp
    llvm/trunk/unittests/XRay/FDRTraceWriterTest.cpp

Modified: llvm/trunk/include/llvm/XRay/FDRRecords.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/XRay/FDRRecords.h?rev=341905&r1=341904&r2=341905&view=diff
==============================================================================
--- llvm/trunk/include/llvm/XRay/FDRRecords.h (original)
+++ llvm/trunk/include/llvm/XRay/FDRRecords.h Mon Sep 10 23:36:51 2018
@@ -119,16 +119,19 @@ public:
 
 class NewCPUIDRecord : public MetadataRecord {
   uint16_t CPUId = 0;
+  uint64_t TSC = 0;
   friend class RecordInitializer;
 
 public:
   NewCPUIDRecord() = default;
-  explicit NewCPUIDRecord(uint16_t C) : MetadataRecord(), CPUId(C) {}
+  NewCPUIDRecord(uint16_t C, uint64_t T) : MetadataRecord(), CPUId(C), TSC(T) {}
 
   MetadataType metadataType() const override { return MetadataType::NewCPUId; }
 
   uint16_t cpuid() const { return CPUId; }
 
+  uint64_t tsc() const { return TSC; }
+
   Error apply(RecordVisitor &V) override;
 };
 

Modified: llvm/trunk/lib/XRay/RecordInitializer.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/XRay/RecordInitializer.cpp?rev=341905&r1=341904&r2=341905&view=diff
==============================================================================
--- llvm/trunk/lib/XRay/RecordInitializer.cpp (original)
+++ llvm/trunk/lib/XRay/RecordInitializer.cpp Mon Sep 10 23:36:51 2018
@@ -61,13 +61,20 @@ Error RecordInitializer::visit(NewCPUIDR
     return createStringError(std::make_error_code(std::errc::bad_address),
                              "Invalid offset for a new cpu id record (%d).",
                              OffsetPtr);
+  auto BeginOffset = OffsetPtr;
   auto PreReadOffset = OffsetPtr;
   R.CPUId = E.getU16(&OffsetPtr);
   if (OffsetPtr == PreReadOffset)
     return createStringError(std::make_error_code(std::errc::bad_message),
                              "Cannot read CPU id at offset %d.", OffsetPtr);
 
-  OffsetPtr += MetadataRecord::kMetadataBodySize - (OffsetPtr - PreReadOffset);
+  PreReadOffset = OffsetPtr;
+  R.TSC = E.getU64(&OffsetPtr);
+  if (OffsetPtr == PreReadOffset)
+    return createStringError(std::make_error_code(std::errc::bad_message),
+                             "Cannot read CPU TSC at offset %d.", OffsetPtr);
+
+  OffsetPtr += MetadataRecord::kMetadataBodySize - (OffsetPtr - BeginOffset);
   return Error::success();
 }
 

Modified: llvm/trunk/lib/XRay/RecordPrinter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/XRay/RecordPrinter.cpp?rev=341905&r1=341904&r2=341905&view=diff
==============================================================================
--- llvm/trunk/lib/XRay/RecordPrinter.cpp (original)
+++ llvm/trunk/lib/XRay/RecordPrinter.cpp Mon Sep 10 23:36:51 2018
@@ -25,7 +25,7 @@ Error RecordPrinter::visit(WallclockReco
 }
 
 Error RecordPrinter::visit(NewCPUIDRecord &R) {
-  OS << formatv("<CPU ID: {0}>", R.cpuid()) << Delim;
+  OS << formatv("<CPU: id = {0}, tsc = {1}>", R.cpuid(), R.tsc()) << Delim;
   return Error::success();
 }
 

Modified: llvm/trunk/test/tools/llvm-xray/X86/fdr-dump-arg1-version-3.txt
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-xray/X86/fdr-dump-arg1-version-3.txt?rev=341905&r1=341904&r2=341905&view=diff
==============================================================================
--- llvm/trunk/test/tools/llvm-xray/X86/fdr-dump-arg1-version-3.txt (original)
+++ llvm/trunk/test/tools/llvm-xray/X86/fdr-dump-arg1-version-3.txt Mon Sep 10 23:36:51 2018
@@ -8,8 +8,8 @@
 ; CHECK-NEXT: <PID: 2631>
 ; CHECK-EMPTY:
 ; CHECK-NEXT: Body:
-; CHECK-NEXT:  <CPU ID: 6>
-; CHECK-NEXT:  <CPU ID: 6>
+; CHECK-NEXT:  <CPU: id = 6, tsc = 2034042117104344>
+; CHECK-NEXT:  <CPU: id = 6, tsc = 2034042117104344>
 ; CHECK-NEXT:  <TSC Wrap: base = 2034042117104344>
 ; CHECK-EMPTY:
 ; CHECK-NEXT: -  <Function Enter: #3 delta = +3>

Modified: llvm/trunk/test/tools/llvm-xray/X86/fdr-dump-arg1.txt
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-xray/X86/fdr-dump-arg1.txt?rev=341905&r1=341904&r2=341905&view=diff
==============================================================================
--- llvm/trunk/test/tools/llvm-xray/X86/fdr-dump-arg1.txt (original)
+++ llvm/trunk/test/tools/llvm-xray/X86/fdr-dump-arg1.txt Mon Sep 10 23:36:51 2018
@@ -6,7 +6,7 @@
 ; CHECK-NEXT: <Wall Time: seconds = 1452786.250689>
 ; CHECK-EMPTY:
 ; CHECK-NEXT: Body:
-; CHECK-NEXT:  <CPU ID: 49>
+; CHECK-NEXT:  <CPU: id = 49, tsc = 18828908666540172>
 ; CHECK-NEXT:  <TSC Wrap: base = 18828908666540172>
 ; CHECK-EMPTY:
 ; CHECK-NEXT: -  <Function Enter: #1 delta = +1>

Modified: llvm/trunk/unittests/XRay/FDRBlockIndexerTest.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/XRay/FDRBlockIndexerTest.cpp?rev=341905&r1=341904&r2=341905&view=diff
==============================================================================
--- llvm/trunk/unittests/XRay/FDRBlockIndexerTest.cpp (original)
+++ llvm/trunk/unittests/XRay/FDRBlockIndexerTest.cpp Mon Sep 10 23:36:51 2018
@@ -30,7 +30,7 @@ TEST(FDRBlockIndexerTest, IndexBlocksV3)
                     .add<NewBufferRecord>(1)
                     .add<WallclockRecord>(1, 2)
                     .add<PIDRecord>(1)
-                    .add<NewCPUIDRecord>(1)
+                    .add<NewCPUIDRecord>(1, 2)
                     .add<FunctionRecord>(RecordTypes::ENTER, 1, 1)
                     .add<FunctionRecord>(RecordTypes::EXIT, 1, 100)
                     .consume();
@@ -39,7 +39,7 @@ TEST(FDRBlockIndexerTest, IndexBlocksV3)
                     .add<NewBufferRecord>(1)
                     .add<WallclockRecord>(1, 2)
                     .add<PIDRecord>(1)
-                    .add<NewCPUIDRecord>(1)
+                    .add<NewCPUIDRecord>(1, 2)
                     .add<FunctionRecord>(RecordTypes::ENTER, 1, 1)
                     .add<FunctionRecord>(RecordTypes::EXIT, 1, 100)
                     .consume();
@@ -48,7 +48,7 @@ TEST(FDRBlockIndexerTest, IndexBlocksV3)
                     .add<NewBufferRecord>(2)
                     .add<WallclockRecord>(1, 2)
                     .add<PIDRecord>(1)
-                    .add<NewCPUIDRecord>(2)
+                    .add<NewCPUIDRecord>(2, 2)
                     .add<FunctionRecord>(RecordTypes::ENTER, 1, 1)
                     .add<FunctionRecord>(RecordTypes::EXIT, 1, 100)
                     .consume();

Modified: llvm/trunk/unittests/XRay/FDRBlockVerifierTest.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/XRay/FDRBlockVerifierTest.cpp?rev=341905&r1=341904&r2=341905&view=diff
==============================================================================
--- llvm/trunk/unittests/XRay/FDRBlockVerifierTest.cpp (original)
+++ llvm/trunk/unittests/XRay/FDRBlockVerifierTest.cpp Mon Sep 10 23:36:51 2018
@@ -28,7 +28,7 @@ TEST(FDRBlockVerifierTest, ValidBlocksV3
                     .add<NewBufferRecord>(1)
                     .add<WallclockRecord>(1, 2)
                     .add<PIDRecord>(1)
-                    .add<NewCPUIDRecord>(1)
+                    .add<NewCPUIDRecord>(1, 2)
                     .add<FunctionRecord>(RecordTypes::ENTER, 1, 1)
                     .add<FunctionRecord>(RecordTypes::EXIT, 1, 100)
                     .consume();
@@ -37,7 +37,7 @@ TEST(FDRBlockVerifierTest, ValidBlocksV3
                     .add<NewBufferRecord>(1)
                     .add<WallclockRecord>(1, 2)
                     .add<PIDRecord>(1)
-                    .add<NewCPUIDRecord>(1)
+                    .add<NewCPUIDRecord>(1, 2)
                     .add<FunctionRecord>(RecordTypes::ENTER, 1, 1)
                     .add<FunctionRecord>(RecordTypes::EXIT, 1, 100)
                     .consume();
@@ -46,7 +46,7 @@ TEST(FDRBlockVerifierTest, ValidBlocksV3
                     .add<NewBufferRecord>(2)
                     .add<WallclockRecord>(1, 2)
                     .add<PIDRecord>(1)
-                    .add<NewCPUIDRecord>(2)
+                    .add<NewCPUIDRecord>(2, 2)
                     .add<FunctionRecord>(RecordTypes::ENTER, 1, 1)
                     .add<FunctionRecord>(RecordTypes::EXIT, 1, 100)
                     .consume();
@@ -75,7 +75,7 @@ TEST(FDRBlockVerifierTest, MissingPIDRec
                    .add<BufferExtents>(20)
                    .add<NewBufferRecord>(1)
                    .add<WallclockRecord>(1, 2)
-                   .add<NewCPUIDRecord>(1)
+                   .add<NewCPUIDRecord>(1, 2)
                    .add<FunctionRecord>(RecordTypes::ENTER, 1, 1)
                    .add<FunctionRecord>(RecordTypes::EXIT, 1, 100)
                    .consume();
@@ -89,7 +89,7 @@ TEST(FDRBlockVerifierTest, MissingBuffer
   auto Block = LogBuilder()
                    .add<NewBufferRecord>(1)
                    .add<WallclockRecord>(1, 2)
-                   .add<NewCPUIDRecord>(1)
+                   .add<NewCPUIDRecord>(1, 2)
                    .add<FunctionRecord>(RecordTypes::ENTER, 1, 1)
                    .add<FunctionRecord>(RecordTypes::EXIT, 1, 100)
                    .consume();
@@ -103,7 +103,7 @@ TEST(FDRBlockVerifierTest, IgnoreRecords
   auto Block = LogBuilder()
                    .add<NewBufferRecord>(1)
                    .add<WallclockRecord>(1, 2)
-                   .add<NewCPUIDRecord>(1)
+                   .add<NewCPUIDRecord>(1, 2)
                    .add<EndBufferRecord>()
                    .add<FunctionRecord>(RecordTypes::ENTER, 1, 1)
                    .add<FunctionRecord>(RecordTypes::EXIT, 1, 100)
@@ -118,7 +118,7 @@ TEST(FDRBlockVerifierTest, MalformedV2)
   auto Block = LogBuilder()
                    .add<NewBufferRecord>(1)
                    .add<WallclockRecord>(1, 2)
-                   .add<NewCPUIDRecord>(1)
+                   .add<NewCPUIDRecord>(1, 2)
                    .add<FunctionRecord>(RecordTypes::ENTER, 1, 1)
                    .add<FunctionRecord>(RecordTypes::EXIT, 1, 100)
                    .add<NewBufferRecord>(2)

Modified: llvm/trunk/unittests/XRay/FDRProducerConsumerTest.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/XRay/FDRProducerConsumerTest.cpp?rev=341905&r1=341904&r2=341905&view=diff
==============================================================================
--- llvm/trunk/unittests/XRay/FDRProducerConsumerTest.cpp (original)
+++ llvm/trunk/unittests/XRay/FDRProducerConsumerTest.cpp Mon Sep 10 23:36:51 2018
@@ -42,7 +42,7 @@ template <> std::unique_ptr<Record> Make
 }
 
 template <> std::unique_ptr<Record> MakeRecord<NewCPUIDRecord>() {
-  return make_unique<NewCPUIDRecord>(1);
+  return make_unique<NewCPUIDRecord>(1, 2);
 }
 
 template <> std::unique_ptr<Record> MakeRecord<TSCWrapRecord>() {

Modified: llvm/trunk/unittests/XRay/FDRRecordPrinterTest.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/XRay/FDRRecordPrinterTest.cpp?rev=341905&r1=341904&r2=341905&view=diff
==============================================================================
--- llvm/trunk/unittests/XRay/FDRRecordPrinterTest.cpp (original)
+++ llvm/trunk/unittests/XRay/FDRRecordPrinterTest.cpp Mon Sep 10 23:36:51 2018
@@ -39,10 +39,10 @@ template <> struct Helper<WallclockRecor
 
 template <> struct Helper<NewCPUIDRecord> {
   static std::unique_ptr<Record> construct() {
-    return make_unique<NewCPUIDRecord>(1);
+    return make_unique<NewCPUIDRecord>(1, 2);
   }
 
-  static const char *expected() { return "<CPU ID: 1>"; }
+  static const char *expected() { return "<CPU: id = 1, tsc = 2>"; }
 };
 
 template <> struct Helper<TSCWrapRecord> {

Modified: llvm/trunk/unittests/XRay/FDRRecordsTest.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/XRay/FDRRecordsTest.cpp?rev=341905&r1=341904&r2=341905&view=diff
==============================================================================
--- llvm/trunk/unittests/XRay/FDRRecordsTest.cpp (original)
+++ llvm/trunk/unittests/XRay/FDRRecordsTest.cpp Mon Sep 10 23:36:51 2018
@@ -75,7 +75,7 @@ TEST(XRayFDRTest, BuilderAndBlockVerifie
                    .add<NewBufferRecord>(1)
                    .add<WallclockRecord>(1, 1)
                    .add<PIDRecord>(1)
-                   .add<NewCPUIDRecord>(1)
+                   .add<NewCPUIDRecord>(1, 2)
                    .consume();
   BlockVerifier Verifier;
   for (auto &R : Block)
@@ -89,7 +89,7 @@ TEST(XRayFDRTest, IndexAndVerifyBlocks)
                     .add<NewBufferRecord>(1)
                     .add<WallclockRecord>(1, 1)
                     .add<PIDRecord>(1)
-                    .add<NewCPUIDRecord>(1)
+                    .add<NewCPUIDRecord>(1, 2)
                     .add<FunctionRecord>(RecordTypes::ENTER, 1, 1)
                     .add<FunctionRecord>(RecordTypes::EXIT, 1, 100)
                     .consume();
@@ -98,7 +98,7 @@ TEST(XRayFDRTest, IndexAndVerifyBlocks)
                     .add<NewBufferRecord>(1)
                     .add<WallclockRecord>(1, 1)
                     .add<PIDRecord>(1)
-                    .add<NewCPUIDRecord>(1)
+                    .add<NewCPUIDRecord>(1, 2)
                     .add<FunctionRecord>(RecordTypes::ENTER, 1, 1)
                     .add<FunctionRecord>(RecordTypes::EXIT, 1, 100)
                     .consume();
@@ -107,7 +107,7 @@ TEST(XRayFDRTest, IndexAndVerifyBlocks)
                     .add<NewBufferRecord>(1)
                     .add<WallclockRecord>(1, 1)
                     .add<PIDRecord>(1)
-                    .add<NewCPUIDRecord>(1)
+                    .add<NewCPUIDRecord>(1, 2)
                     .add<FunctionRecord>(RecordTypes::ENTER, 1, 1)
                     .add<FunctionRecord>(RecordTypes::EXIT, 1, 100)
                     .consume();

Modified: llvm/trunk/unittests/XRay/FDRTraceWriterTest.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/XRay/FDRTraceWriterTest.cpp?rev=341905&r1=341904&r2=341905&view=diff
==============================================================================
--- llvm/trunk/unittests/XRay/FDRTraceWriterTest.cpp (original)
+++ llvm/trunk/unittests/XRay/FDRTraceWriterTest.cpp Mon Sep 10 23:36:51 2018
@@ -47,7 +47,7 @@ TEST(FDRTraceWriterTest, WriteToStringBu
                .add<NewBufferRecord>(1)
                .add<WallclockRecord>(1, 1)
                .add<PIDRecord>(1)
-               .add<NewCPUIDRecord>(1)
+               .add<NewCPUIDRecord>(1, 2)
                .add<FunctionRecord>(RecordTypes::ENTER, 1, 1)
                .add<FunctionRecord>(RecordTypes::EXIT, 1, 100)
                .consume();
@@ -92,7 +92,7 @@ TEST(FDRTraceWriterTest, WriteToStringBu
                .add<BufferExtents>(64)
                .add<NewBufferRecord>(1)
                .add<WallclockRecord>(1, 1)
-               .add<NewCPUIDRecord>(1)
+               .add<NewCPUIDRecord>(1, 2)
                .add<FunctionRecord>(RecordTypes::ENTER, 1, 1)
                .add<FunctionRecord>(RecordTypes::EXIT, 1, 100)
                .consume();
@@ -143,7 +143,7 @@ TEST(FDRTraceWriterTest, WriteToStringBu
   auto L = LogBuilder()
                .add<NewBufferRecord>(1)
                .add<WallclockRecord>(1, 1)
-               .add<NewCPUIDRecord>(1)
+               .add<NewCPUIDRecord>(1, 2)
                .add<FunctionRecord>(RecordTypes::ENTER, 1, 1)
                .add<FunctionRecord>(RecordTypes::EXIT, 1, 100)
                .add<EndBufferRecord>()




More information about the llvm-commits mailing list