[llvm] r372439 - [SampleFDO] Expose an interface to return the size of a section or the size

Wei Mi via llvm-commits llvm-commits at lists.llvm.org
Sat Sep 21 12:39:25 PDT 2019


Sorry for the break. Fixed the problem and recommitted at rL372478.

On Sat, Sep 21, 2019 at 2:11 AM Amara Emerson <aemerson at apple.com> wrote:

> Hi,
>
> This commit seems to have broken the Mac build/greendragon bots for a
> while:
> http://green.lab.llvm.org/green/job/clang-stage1-cmake-RA-incremental/2582
>
> I’ve reverted it r372464.
>
> Thanks,
> Amara
>
> > On Sep 20, 2019, at 4:24 PM, Wei Mi via llvm-commits <
> llvm-commits at lists.llvm.org> wrote:
> >
> > Author: wmi
> > Date: Fri Sep 20 16:24:50 2019
> > New Revision: 372439
> >
> > URL: http://llvm.org/viewvc/llvm-project?rev=372439&view=rev
> > Log:
> > [SampleFDO] Expose an interface to return the size of a section or the
> size
> > of the profile for profile in ExtBinary format.
> >
> > Sometimes we want to limit the size of the profile by stripping some
> functions
> > with low sample count or by stripping some function names with small
> text size
> > from profile symbol list. That requires the profile reader to have the
> > interfaces returning the size of a section or the size of total profile.
> The
> > patch add those interfaces.
> >
> > At the same time, add some dump facility to show the size of each
> section.
> >
> >
> > Added:
> >    llvm/trunk/test/tools/llvm-profdata/show-prof-size.test
> > Modified:
> >    llvm/trunk/include/llvm/ProfileData/SampleProf.h
> >    llvm/trunk/include/llvm/ProfileData/SampleProfReader.h
> >    llvm/trunk/lib/ProfileData/SampleProfReader.cpp
> >    llvm/trunk/tools/llvm-profdata/llvm-profdata.cpp
> >
> > Modified: llvm/trunk/include/llvm/ProfileData/SampleProf.h
> > URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ProfileData/SampleProf.h?rev=372439&r1=372438&r2=372439&view=diff
> >
> ==============================================================================
> > --- llvm/trunk/include/llvm/ProfileData/SampleProf.h (original)
> > +++ llvm/trunk/include/llvm/ProfileData/SampleProf.h Fri Sep 20 16:24:50
> 2019
> > @@ -125,6 +125,22 @@ enum SecType {
> >   SecLBRProfile = SecFuncProfileFirst
> > };
> >
> > +static inline std::string getSecName(SecType Type) {
> > +  switch (Type) {
> > +  case SecInValid:
> > +    return "InvalidSection";
> > +  case SecProfSummary:
> > +    return "ProfileSummarySection";
> > +  case SecNameTable:
> > +    return "NameTableSection";
> > +  case SecProfileSymbolList:
> > +    return "ProfileSymbolListSection";
> > +  case SecLBRProfile:
> > +    return "LBRProfileSection";
> > +  }
> > +  llvm_unreachable("A SecType has no name for output");
> > +}
> > +
> > // Entry type of section header table used by
> SampleProfileExtBinaryBaseReader
> > // and SampleProfileExtBinaryBaseWriter.
> > struct SecHdrTableEntry {
> >
> > Modified: llvm/trunk/include/llvm/ProfileData/SampleProfReader.h
> > URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ProfileData/SampleProfReader.h?rev=372439&r1=372438&r2=372439&view=diff
> >
> ==============================================================================
> > --- llvm/trunk/include/llvm/ProfileData/SampleProfReader.h (original)
> > +++ llvm/trunk/include/llvm/ProfileData/SampleProfReader.h Fri Sep 20
> 16:24:50 2019
> > @@ -333,6 +333,7 @@ public:
> >   /// It includes all the names that have samples either in outline
> instance
> >   /// or inline instance.
> >   virtual std::vector<StringRef> *getNameTable() { return nullptr; }
> > +  virtual bool dumpSectionInfo(raw_ostream &OS = dbgs()) { return
> false; };
> >
> > protected:
> >   /// Map every function to its associated profile.
> > @@ -504,6 +505,12 @@ public:
> >
> >   /// Read sample profiles in extensible format from the associated file.
> >   std::error_code read() override;
> > +
> > +  /// Get the total size of all \p Type sections.
> > +  uint64_t getSectionSize(SecType Type);
> > +  /// Get the total size of header and all sections.
> > +  uint64_t getFileSize();
> > +  virtual bool dumpSectionInfo(raw_ostream &OS = dbgs()) override;
> > };
> >
> > class SampleProfileReaderExtBinary : public
> SampleProfileReaderExtBinaryBase {
> >
> > Modified: llvm/trunk/lib/ProfileData/SampleProfReader.cpp
> > URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/ProfileData/SampleProfReader.cpp?rev=372439&r1=372438&r2=372439&view=diff
> >
> ==============================================================================
> > --- llvm/trunk/lib/ProfileData/SampleProfReader.cpp (original)
> > +++ llvm/trunk/lib/ProfileData/SampleProfReader.cpp Fri Sep 20 16:24:50
> 2019
> > @@ -667,6 +667,36 @@ std::error_code SampleProfileReaderExtBi
> >   return sampleprof_error::success;
> > }
> >
> > +uint64_t SampleProfileReaderExtBinaryBase::getSectionSize(SecType Type)
> {
> > +  for (auto &Entry : SecHdrTable) {
> > +    if (Entry.Type == Type)
> > +      return Entry.Size;
> > +  }
> > +  return 0;
> > +}
> > +
> > +uint64_t SampleProfileReaderExtBinaryBase::getFileSize() {
> > +  auto &LastEntry = SecHdrTable.back();
> > +  return LastEntry.Offset + LastEntry.Size;
> > +}
> > +
> > +bool SampleProfileReaderExtBinaryBase::dumpSectionInfo(raw_ostream &OS)
> {
> > +  uint64_t TotalSecsSize = 0;
> > +  for (auto &Entry : SecHdrTable) {
> > +    OS << getSecName(Entry.Type) << " - Offset: " << Entry.Offset
> > +       << ", Size: " << Entry.Size << "\n";
> > +    TotalSecsSize += getSectionSize(Entry.Type);
> > +  }
> > +  uint64_t HeaderSize = SecHdrTable.front().Offset;
> > +  assert(HeaderSize + TotalSecsSize == getFileSize() &&
> > +         "Size of 'header + sections' doesn't match the total size of
> profile");
> > +
> > +  OS << "Header Size: " << HeaderSize << "\n";
> > +  OS << "Total Sections Size: " << TotalSecsSize << "\n";
> > +  OS << "File Size: " << getFileSize() << "\n";
> > +  return true;
> > +}
> > +
> > std::error_code SampleProfileReaderBinary::readMagicIdent() {
> >   // Read and check the magic identifier.
> >   auto Magic = readNumber<uint64_t>();
> >
> > Added: llvm/trunk/test/tools/llvm-profdata/show-prof-size.test
> > URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-profdata/show-prof-size.test?rev=372439&view=auto
> >
> ==============================================================================
> > --- llvm/trunk/test/tools/llvm-profdata/show-prof-size.test (added)
> > +++ llvm/trunk/test/tools/llvm-profdata/show-prof-size.test Fri Sep 20
> 16:24:50 2019
> > @@ -0,0 +1,7 @@
> > +; RUN: llvm-profdata merge -sample -extbinary
> -prof-sym-list=%S/Inputs/profile-symbol-list-1.text
> %S/Inputs/sample-profile.proftext -o %t.1.output
> > +; RUN: ls -l %t.1.output |cut -f5 -d ' ' > %t.txt
> > +; RUN: llvm-profdata show -sample -show-sec-info-only %t.1.output >>
> %t.txt
> > +; RUN: FileCheck %s --input-file=%t.txt
> > +; Check llvm-profdata shows the correct file size.
> > +; CHECK: [[FILESIZE:.*]]
> > +; CHECK: [[FILESIZE]]
> >
> > Modified: llvm/trunk/tools/llvm-profdata/llvm-profdata.cpp
> > URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-profdata/llvm-profdata.cpp?rev=372439&r1=372438&r2=372439&view=diff
> >
> ==============================================================================
> > --- llvm/trunk/tools/llvm-profdata/llvm-profdata.cpp (original)
> > +++ llvm/trunk/tools/llvm-profdata/llvm-profdata.cpp Fri Sep 20 16:24:50
> 2019
> > @@ -982,10 +982,21 @@ static int showInstrProfile(const std::s
> >   return 0;
> > }
> >
> > +static void showSectionInfo(sampleprof::SampleProfileReader *Reader,
> > +                            raw_fd_ostream &OS) {
> > +  if (!Reader->dumpSectionInfo(OS)) {
> > +    WithColor::warning() << "-show-sec-info-only is only supported for "
> > +                         << "sample profile in extbinary format and is "
> > +                         << "ignored for other formats.\n";
> > +    return;
> > +  }
> > +}
> > +
> > static int showSampleProfile(const std::string &Filename, bool
> ShowCounts,
> >                              bool ShowAllFunctions,
> >                              const std::string &ShowFunction,
> > -                             bool ShowProfileSymbolList, raw_fd_ostream
> &OS) {
> > +                             bool ShowProfileSymbolList,
> > +                             bool ShowSectionInfoOnly, raw_fd_ostream
> &OS) {
> >   using namespace sampleprof;
> >   LLVMContext Context;
> >   auto ReaderOrErr = SampleProfileReader::create(Filename, Context);
> > @@ -993,6 +1004,12 @@ static int showSampleProfile(const std::
> >     exitWithErrorCode(EC, Filename);
> >
> >   auto Reader = std::move(ReaderOrErr.get());
> > +
> > +  if (ShowSectionInfoOnly) {
> > +    showSectionInfo(Reader.get(), OS);
> > +    return 0;
> > +  }
> > +
> >   if (std::error_code EC = Reader->read())
> >     exitWithErrorCode(EC, Filename);
> >
> > @@ -1062,6 +1079,11 @@ static int show_main(int argc, const cha
> >   cl::opt<bool> ShowProfileSymbolList(
> >       "show-prof-sym-list", cl::init(false),
> >       cl::desc("Show profile symbol list if it exists in the profile.
> "));
> > +  cl::opt<bool> ShowSectionInfoOnly(
> > +      "show-sec-info-only", cl::init(false),
> > +      cl::desc("Show the information of each section in the sample
> profile. "
> > +               "The flag is only usable when the sample profile is in "
> > +               "extbinary format"));
> >
> >   cl::ParseCommandLineOptions(argc, argv, "LLVM profile data summary\n");
> >
> > @@ -1090,7 +1112,8 @@ static int show_main(int argc, const cha
> >                             OnlyListBelow, ShowFunction, TextFormat, OS);
> >   else
> >     return showSampleProfile(Filename, ShowCounts, ShowAllFunctions,
> > -                             ShowFunction, ShowProfileSymbolList, OS);
> > +                             ShowFunction, ShowProfileSymbolList,
> > +                             ShowSectionInfoOnly, OS);
> > }
> >
> > int main(int argc, const char *argv[]) {
> >
> >
> > _______________________________________________
> > llvm-commits mailing list
> > llvm-commits at lists.llvm.org
> > https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20190921/52e2e7cd/attachment.html>


More information about the llvm-commits mailing list