xref: /netbsd-src/external/gpl3/binutils/dist/gprofng/src/FileData.h (revision cb63e24e8d6aae7ddac1859a9015f48b1d8bd90e)
1*cb63e24eSchristos /* Copyright (C) 2021-2024 Free Software Foundation, Inc.
24f645668Schristos    Contributed by Oracle.
34f645668Schristos 
44f645668Schristos    This file is part of GNU Binutils.
54f645668Schristos 
64f645668Schristos    This program is free software; you can redistribute it and/or modify
74f645668Schristos    it under the terms of the GNU General Public License as published by
84f645668Schristos    the Free Software Foundation; either version 3, or (at your option)
94f645668Schristos    any later version.
104f645668Schristos 
114f645668Schristos    This program is distributed in the hope that it will be useful,
124f645668Schristos    but WITHOUT ANY WARRANTY; without even the implied warranty of
134f645668Schristos    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
144f645668Schristos    GNU General Public License for more details.
154f645668Schristos 
164f645668Schristos    You should have received a copy of the GNU General Public License
174f645668Schristos    along with this program; if not, write to the Free Software
184f645668Schristos    Foundation, 51 Franklin Street - Fifth Floor, Boston,
194f645668Schristos    MA 02110-1301, USA.  */
204f645668Schristos 
214f645668Schristos #ifndef _FILEDATA_H
224f645668Schristos #define _FILEDATA_H
234f645668Schristos 
244f645668Schristos #include "gp-defs.h"
254f645668Schristos #include "gp-time.h"
264f645668Schristos 
274f645668Schristos #include "vec.h"
284f645668Schristos #include "data_pckts.h"
294f645668Schristos #include "Histable.h"
304f645668Schristos 
314f645668Schristos #define FSTYPESZ  16
324f645668Schristos 
334f645668Schristos #define VIRTUAL_FD_TOTAL    0
344f645668Schristos #define VIRTUAL_FD_STDIN    1
354f645668Schristos #define VIRTUAL_FD_STDOUT   2
364f645668Schristos #define VIRTUAL_FD_STDERR   3
374f645668Schristos #define VIRTUAL_FD_OTHERIO  4
384f645668Schristos #define VIRTUAL_FD_NONE     -1
394f645668Schristos 
404f645668Schristos #define STDIN_FD            0
414f645668Schristos #define STDOUT_FD           1
424f645668Schristos #define STDERR_FD           2
434f645668Schristos #define OTHERIO_FD          -1
444f645668Schristos 
454f645668Schristos #define OTHERIO_FILENAME    "<Other IO activity>"
464f645668Schristos #define STDIN_FILENAME      "<stdin>"
474f645668Schristos #define STDOUT_FILENAME     "<stdout>"
484f645668Schristos #define STDERR_FILENAME     "<stderr>"
494f645668Schristos #define TOTAL_FILENAME      NTXT("<Total>")
504f645668Schristos #define UNKNOWNFD_FILENAME  "<pipe(), socket(), or other fds>"
514f645668Schristos 
524f645668Schristos #define _1KB        1024
534f645668Schristos #define _8KB        8192
544f645668Schristos #define _32KB       32768
554f645668Schristos #define _128KB      131072
564f645668Schristos #define _256KB      262144
574f645668Schristos #define _512KB      524288
584f645668Schristos #define _1000KB     1048576
594f645668Schristos #define _10MB       10485760
604f645668Schristos #define _100MB      104857600
614f645668Schristos #define _1GB        1073741824
624f645668Schristos #define _10GB       10737418240
634f645668Schristos #define _100GB      107374182400
644f645668Schristos #define _1TB        1099511627776
654f645668Schristos #define _10TB       10995116277760
664f645668Schristos 
674f645668Schristos class FileData : public Histable
684f645668Schristos {
694f645668Schristos   friend class IOActivity;
704f645668Schristos public:
714f645668Schristos   FileData (const char *fName);
724f645668Schristos   FileData (FileData *fData);
734f645668Schristos   ~FileData ();
744f645668Schristos 
754f645668Schristos   virtual char *get_name (Histable::NameFormat nfmt);
764f645668Schristos   virtual Histable *convertto (Histable_type, Histable* = NULL);
774f645668Schristos 
784f645668Schristos   char *get_raw_name (Histable::NameFormat nfmt);
794f645668Schristos   void setFsType (FileSystem_type fst);
804f645668Schristos   void setFsType (const char* fst);
814f645668Schristos 
824f645668Schristos   virtual Histable_type
get_type()834f645668Schristos   get_type ()
844f645668Schristos   {
854f645668Schristos     return histType;
864f645668Schristos   };
874f645668Schristos 
884f645668Schristos   virtual uint64_t
get_addr()894f645668Schristos   get_addr ()
904f645668Schristos   {
914f645668Schristos     return virtualFd;
924f645668Schristos   };
934f645668Schristos 
944f645668Schristos   uint64_t
get_index()954f645668Schristos   get_index ()
964f645668Schristos   {
974f645668Schristos     return virtualFd;
984f645668Schristos   };
994f645668Schristos 
1004f645668Schristos   void init ();
1014f645668Schristos 
1024f645668Schristos   char *
getFileName()1034f645668Schristos   getFileName ()
1044f645668Schristos   {
1054f645668Schristos     return fileName;
1064f645668Schristos   }
1074f645668Schristos 
1084f645668Schristos   void
addReadEvent(hrtime_t rt,int64_t nb)1094f645668Schristos   addReadEvent (hrtime_t rt, int64_t nb)
1104f645668Schristos   {
1114f645668Schristos     readTime += rt;
1124f645668Schristos     readBytes += nb;
1134f645668Schristos     readCnt++;
1144f645668Schristos   }
1154f645668Schristos 
1164f645668Schristos   hrtime_t
getReadTime()1174f645668Schristos   getReadTime ()
1184f645668Schristos   {
1194f645668Schristos     return readTime;
1204f645668Schristos   }
1214f645668Schristos 
1224f645668Schristos   int64_t
getReadBytes()1234f645668Schristos   getReadBytes ()
1244f645668Schristos   {
1254f645668Schristos     return readBytes;
1264f645668Schristos   }
1274f645668Schristos 
1284f645668Schristos   int32_t
getReadCnt()1294f645668Schristos   getReadCnt ()
1304f645668Schristos   {
1314f645668Schristos     return readCnt;
1324f645668Schristos   }
1334f645668Schristos 
1344f645668Schristos   void
addWriteEvent(hrtime_t wt,int64_t nb)1354f645668Schristos   addWriteEvent (hrtime_t wt, int64_t nb)
1364f645668Schristos   {
1374f645668Schristos     writeTime += wt;
1384f645668Schristos     writeBytes += nb;
1394f645668Schristos     writeCnt++;
1404f645668Schristos   }
1414f645668Schristos 
1424f645668Schristos   hrtime_t
getWriteTime()1434f645668Schristos   getWriteTime ()
1444f645668Schristos   {
1454f645668Schristos     return writeTime;
1464f645668Schristos   }
1474f645668Schristos 
1484f645668Schristos   int64_t
getWriteBytes()1494f645668Schristos   getWriteBytes ()
1504f645668Schristos   {
1514f645668Schristos     return writeBytes;
1524f645668Schristos   }
1534f645668Schristos 
1544f645668Schristos   int32_t
getWriteCnt()1554f645668Schristos   getWriteCnt ()
1564f645668Schristos   {
1574f645668Schristos     return writeCnt;
1584f645668Schristos   }
1594f645668Schristos 
1604f645668Schristos   void
addOtherEvent(hrtime_t ot)1614f645668Schristos   addOtherEvent (hrtime_t ot)
1624f645668Schristos   {
1634f645668Schristos     otherTime += ot;
1644f645668Schristos     otherCnt++;
1654f645668Schristos   }
1664f645668Schristos 
1674f645668Schristos   hrtime_t
getOtherTime()1684f645668Schristos   getOtherTime ()
1694f645668Schristos   {
1704f645668Schristos     return otherTime;
1714f645668Schristos   }
1724f645668Schristos 
1734f645668Schristos   int32_t
getOtherCnt()1744f645668Schristos   getOtherCnt ()
1754f645668Schristos   {
1764f645668Schristos     return otherCnt;
1774f645668Schristos   }
1784f645668Schristos 
1794f645668Schristos   void
addErrorEvent(hrtime_t er)1804f645668Schristos   addErrorEvent (hrtime_t er)
1814f645668Schristos   {
1824f645668Schristos     errorTime += er;
1834f645668Schristos     errorCnt++;
1844f645668Schristos   }
1854f645668Schristos 
1864f645668Schristos   hrtime_t
getErrorTime()1874f645668Schristos   getErrorTime ()
1884f645668Schristos   {
1894f645668Schristos     return errorTime;
1904f645668Schristos   }
1914f645668Schristos 
1924f645668Schristos   int32_t
getErrorCnt()1934f645668Schristos   getErrorCnt ()
1944f645668Schristos   {
1954f645668Schristos     return errorCnt;
1964f645668Schristos   }
1974f645668Schristos 
1984f645668Schristos   void setFileDesList (int fd);
1994f645668Schristos 
2004f645668Schristos   Vector<int> *
getFileDesList()2014f645668Schristos   getFileDesList ()
2024f645668Schristos   {
2034f645668Schristos     return fileDesList;
2044f645668Schristos   }
2054f645668Schristos 
2064f645668Schristos   void
setFileDes(int fd)2074f645668Schristos   setFileDes (int fd)
2084f645668Schristos   {
2094f645668Schristos     fileDes = fd;
2104f645668Schristos   }
2114f645668Schristos 
2124f645668Schristos   int32_t
getFileDes()2134f645668Schristos   getFileDes ()
2144f645668Schristos   {
2154f645668Schristos     return fileDes;
2164f645668Schristos   }
2174f645668Schristos 
2184f645668Schristos   void setVirtualFds (int64_t vfd);
2194f645668Schristos 
2204f645668Schristos   Vector<int64_t> *
getVirtualFds()2214f645668Schristos   getVirtualFds ()
2224f645668Schristos   {
2234f645668Schristos     return virtualFds;
2244f645668Schristos   }
2254f645668Schristos 
2264f645668Schristos   char *
getFsType()2274f645668Schristos   getFsType ()
2284f645668Schristos   {
2294f645668Schristos     return fsType;
2304f645668Schristos   }
2314f645668Schristos 
2324f645668Schristos   void
setVirtualFd(int64_t vFd)2334f645668Schristos   setVirtualFd (int64_t vFd)
2344f645668Schristos   {
2354f645668Schristos     virtualFd = vFd;
2364f645668Schristos   }
2374f645668Schristos 
2384f645668Schristos   int64_t
getVirtualFd()2394f645668Schristos   getVirtualFd ()
2404f645668Schristos   {
2414f645668Schristos     return virtualFd;
2424f645668Schristos   }
2434f645668Schristos 
2444f645668Schristos   void
setHistType(Histable::Type hType)2454f645668Schristos   setHistType (Histable::Type hType)
2464f645668Schristos   {
2474f645668Schristos     histType = hType;
2484f645668Schristos   }
2494f645668Schristos 
2504f645668Schristos   Histable::Type
getHistType()2514f645668Schristos   getHistType ()
2524f645668Schristos   {
2534f645668Schristos     return histType;
2544f645668Schristos   }
2554f645668Schristos 
2564f645668Schristos   void setWriteStat (hrtime_t wt, int64_t nb);
2574f645668Schristos 
2584f645668Schristos   hrtime_t
getWSlowestBytes()2594f645668Schristos   getWSlowestBytes ()
2604f645668Schristos   {
2614f645668Schristos     return wSlowestBytes;
2624f645668Schristos   }
2634f645668Schristos 
2644f645668Schristos   int64_t
getWSmallestBytes()2654f645668Schristos   getWSmallestBytes ()
2664f645668Schristos   {
2674f645668Schristos     return wSmallestBytes;
2684f645668Schristos   }
2694f645668Schristos 
2704f645668Schristos   int64_t
getWLargestBytes()2714f645668Schristos   getWLargestBytes ()
2724f645668Schristos   {
2734f645668Schristos     return wLargestBytes;
2744f645668Schristos   }
2754f645668Schristos 
2764f645668Schristos   int32_t
getW0KB1KBCnt()2774f645668Schristos   getW0KB1KBCnt ()
2784f645668Schristos   {
2794f645668Schristos     return w0KB1KBCnt;
2804f645668Schristos   }
2814f645668Schristos 
2824f645668Schristos   int32_t
getW1KB8KBCnt()2834f645668Schristos   getW1KB8KBCnt ()
2844f645668Schristos   {
2854f645668Schristos     return w1KB8KBCnt;
2864f645668Schristos   }
2874f645668Schristos 
2884f645668Schristos   int32_t
getW8KB32KBCnt()2894f645668Schristos   getW8KB32KBCnt ()
2904f645668Schristos   {
2914f645668Schristos     return w8KB32KBCnt;
2924f645668Schristos   }
2934f645668Schristos 
2944f645668Schristos   int32_t
getW32KB128KBCnt()2954f645668Schristos   getW32KB128KBCnt ()
2964f645668Schristos   {
2974f645668Schristos     return w32KB128KBCnt;
2984f645668Schristos   }
2994f645668Schristos 
3004f645668Schristos   int32_t
getW128KB256KBCnt()3014f645668Schristos   getW128KB256KBCnt ()
3024f645668Schristos   {
3034f645668Schristos     return w128KB256KBCnt;
3044f645668Schristos   }
3054f645668Schristos 
3064f645668Schristos   int32_t
getW256KB512KBCnt()3074f645668Schristos   getW256KB512KBCnt ()
3084f645668Schristos   {
3094f645668Schristos     return w256KB512KBCnt;
3104f645668Schristos   }
3114f645668Schristos 
3124f645668Schristos   int32_t
getW512KB1000KBCnt()3134f645668Schristos   getW512KB1000KBCnt ()
3144f645668Schristos   {
3154f645668Schristos     return w512KB1000KBCnt;
3164f645668Schristos   }
3174f645668Schristos 
3184f645668Schristos   int32_t
getW1000KB10MBCnt()3194f645668Schristos   getW1000KB10MBCnt ()
3204f645668Schristos   {
3214f645668Schristos     return w1000KB10MBCnt;
3224f645668Schristos   }
3234f645668Schristos 
3244f645668Schristos   int32_t
getW10MB100MBCnt()3254f645668Schristos   getW10MB100MBCnt ()
3264f645668Schristos   {
3274f645668Schristos     return w10MB100MBCnt;
3284f645668Schristos   }
3294f645668Schristos 
3304f645668Schristos   int32_t
getW100MB1GBCnt()3314f645668Schristos   getW100MB1GBCnt ()
3324f645668Schristos   {
3334f645668Schristos     return w100MB1GBCnt;
3344f645668Schristos   }
3354f645668Schristos 
3364f645668Schristos   int32_t
getW1GB10GBCnt()3374f645668Schristos   getW1GB10GBCnt ()
3384f645668Schristos   {
3394f645668Schristos     return w1GB10GBCnt;
3404f645668Schristos   }
3414f645668Schristos 
3424f645668Schristos   int32_t
getW10GB100GBCnt()3434f645668Schristos   getW10GB100GBCnt ()
3444f645668Schristos   {
3454f645668Schristos     return w10GB100GBCnt;
3464f645668Schristos   }
3474f645668Schristos 
3484f645668Schristos   int32_t
getW100GB1TBCnt()3494f645668Schristos   getW100GB1TBCnt ()
3504f645668Schristos   {
3514f645668Schristos     return w100GB1TBCnt;
3524f645668Schristos   }
3534f645668Schristos 
3544f645668Schristos   int32_t
getW1TB10TBCnt()3554f645668Schristos   getW1TB10TBCnt ()
3564f645668Schristos   {
3574f645668Schristos     return w1TB10TBCnt;
3584f645668Schristos   }
3594f645668Schristos 
3604f645668Schristos   void setReadStat (hrtime_t rt, int64_t nb);
3614f645668Schristos 
3624f645668Schristos   hrtime_t
getRSlowestBytes()3634f645668Schristos   getRSlowestBytes ()
3644f645668Schristos   {
3654f645668Schristos     return rSlowestBytes;
3664f645668Schristos   }
3674f645668Schristos 
3684f645668Schristos   int64_t
getRSmallestBytes()3694f645668Schristos   getRSmallestBytes ()
3704f645668Schristos   {
3714f645668Schristos     return rSmallestBytes;
3724f645668Schristos   }
3734f645668Schristos 
3744f645668Schristos   int64_t
getRLargestBytes()3754f645668Schristos   getRLargestBytes ()
3764f645668Schristos   {
3774f645668Schristos     return rLargestBytes;
3784f645668Schristos   }
3794f645668Schristos 
3804f645668Schristos   int32_t
getR0KB1KBCnt()3814f645668Schristos   getR0KB1KBCnt ()
3824f645668Schristos   {
3834f645668Schristos     return r0KB1KBCnt;
3844f645668Schristos   }
3854f645668Schristos 
3864f645668Schristos   int32_t
getR1KB8KBCnt()3874f645668Schristos   getR1KB8KBCnt ()
3884f645668Schristos   {
3894f645668Schristos     return r1KB8KBCnt;
3904f645668Schristos   }
3914f645668Schristos 
3924f645668Schristos   int32_t
getR8KB32KBCnt()3934f645668Schristos   getR8KB32KBCnt ()
3944f645668Schristos   {
3954f645668Schristos     return r8KB32KBCnt;
3964f645668Schristos   }
3974f645668Schristos 
3984f645668Schristos   int32_t
getR32KB128KBCnt()3994f645668Schristos   getR32KB128KBCnt ()
4004f645668Schristos   {
4014f645668Schristos     return r32KB128KBCnt;
4024f645668Schristos   }
4034f645668Schristos 
4044f645668Schristos   int32_t
getR128KB256KBCnt()4054f645668Schristos   getR128KB256KBCnt ()
4064f645668Schristos   {
4074f645668Schristos     return r128KB256KBCnt;
4084f645668Schristos   }
4094f645668Schristos 
4104f645668Schristos   int32_t
getR256KB512KBCnt()4114f645668Schristos   getR256KB512KBCnt ()
4124f645668Schristos   {
4134f645668Schristos     return r256KB512KBCnt;
4144f645668Schristos   }
4154f645668Schristos 
4164f645668Schristos   int32_t
getR512KB1000KBCnt()4174f645668Schristos   getR512KB1000KBCnt ()
4184f645668Schristos   {
4194f645668Schristos     return r512KB1000KBCnt;
4204f645668Schristos   }
4214f645668Schristos 
4224f645668Schristos   int32_t
getR1000KB10MBCnt()4234f645668Schristos   getR1000KB10MBCnt ()
4244f645668Schristos   {
4254f645668Schristos     return r1000KB10MBCnt;
4264f645668Schristos   }
4274f645668Schristos 
4284f645668Schristos   int32_t
getR10MB100MBCnt()4294f645668Schristos   getR10MB100MBCnt ()
4304f645668Schristos   {
4314f645668Schristos     return r10MB100MBCnt;
4324f645668Schristos   }
4334f645668Schristos 
4344f645668Schristos   int32_t
getR100MB1GBCnt()4354f645668Schristos   getR100MB1GBCnt ()
4364f645668Schristos   {
4374f645668Schristos     return r100MB1GBCnt;
4384f645668Schristos   }
4394f645668Schristos 
4404f645668Schristos   int32_t
getR1GB10GBCnt()4414f645668Schristos   getR1GB10GBCnt ()
4424f645668Schristos   {
4434f645668Schristos     return r1GB10GBCnt;
4444f645668Schristos   }
4454f645668Schristos 
4464f645668Schristos   int32_t
getR10GB100GBCnt()4474f645668Schristos   getR10GB100GBCnt ()
4484f645668Schristos   {
4494f645668Schristos     return r10GB100GBCnt;
4504f645668Schristos   }
4514f645668Schristos 
4524f645668Schristos   int32_t
getR100GB1TBCnt()4534f645668Schristos   getR100GB1TBCnt ()
4544f645668Schristos   {
4554f645668Schristos     return r100GB1TBCnt;
4564f645668Schristos   }
4574f645668Schristos 
4584f645668Schristos   int32_t
getR1TB10TBCnt()4594f645668Schristos   getR1TB10TBCnt ()
4604f645668Schristos   {
4614f645668Schristos     return r1TB10TBCnt;
4624f645668Schristos   }
4634f645668Schristos 
4644f645668Schristos private:
4654f645668Schristos   char *fileName;           // File name
4664f645668Schristos   hrtime_t readTime;        // The Total time for read operations;
4674f645668Schristos   hrtime_t writeTime;       // The Total time for write operations;
4684f645668Schristos   hrtime_t otherTime;       // The Total time for other IO operations;
4694f645668Schristos   hrtime_t errorTime;       // The Total time for failed IO operations;
4704f645668Schristos   int64_t readBytes;        //The total bytes read
4714f645668Schristos   int64_t writeBytes;       //The total bytes written
4724f645668Schristos   int32_t readCnt;          // The read count
4734f645668Schristos   int32_t writeCnt;         // The write count
4744f645668Schristos   int32_t otherCnt;         // The other IO count
4754f645668Schristos   int32_t errorCnt;         // The failed IO count
4764f645668Schristos   Vector<int> *fileDesList; // The list of file descriptors
4774f645668Schristos   Vector<int64_t> *virtualFds; // The list of file virtual descriptors
4784f645668Schristos   char fsType[FSTYPESZ];    // The file system type
4794f645668Schristos   int64_t virtualFd;        // The virtual file descriptor
4804f645668Schristos   int32_t fileDes;          // The file descriptor
4814f645668Schristos   Histable::Type histType;  // The Histable type: IOACTFILE, IOACTVFD, ...
4824f645668Schristos 
4834f645668Schristos   // Write statistics
4844f645668Schristos   hrtime_t wSlowestBytes;
4854f645668Schristos   int64_t wSmallestBytes;
4864f645668Schristos   int64_t wLargestBytes;
4874f645668Schristos   int32_t w0KB1KBCnt;
4884f645668Schristos   int32_t w1KB8KBCnt;
4894f645668Schristos   int32_t w8KB32KBCnt;
4904f645668Schristos   int32_t w32KB128KBCnt;
4914f645668Schristos   int32_t w128KB256KBCnt;
4924f645668Schristos   int32_t w256KB512KBCnt;
4934f645668Schristos   int32_t w512KB1000KBCnt;
4944f645668Schristos   int32_t w1000KB10MBCnt;
4954f645668Schristos   int32_t w10MB100MBCnt;
4964f645668Schristos   int32_t w100MB1GBCnt;
4974f645668Schristos   int32_t w1GB10GBCnt;
4984f645668Schristos   int32_t w10GB100GBCnt;
4994f645668Schristos   int32_t w100GB1TBCnt;
5004f645668Schristos   int32_t w1TB10TBCnt;
5014f645668Schristos 
5024f645668Schristos   // Read statistics
5034f645668Schristos   hrtime_t rSlowestBytes;
5044f645668Schristos   int64_t rSmallestBytes;
5054f645668Schristos   int64_t rLargestBytes;
5064f645668Schristos   int32_t r0KB1KBCnt;
5074f645668Schristos   int32_t r1KB8KBCnt;
5084f645668Schristos   int32_t r8KB32KBCnt;
5094f645668Schristos   int32_t r32KB128KBCnt;
5104f645668Schristos   int32_t r128KB256KBCnt;
5114f645668Schristos   int32_t r256KB512KBCnt;
5124f645668Schristos   int32_t r512KB1000KBCnt;
5134f645668Schristos   int32_t r1000KB10MBCnt;
5144f645668Schristos   int32_t r10MB100MBCnt;
5154f645668Schristos   int32_t r100MB1GBCnt;
5164f645668Schristos   int32_t r1GB10GBCnt;
5174f645668Schristos   int32_t r10GB100GBCnt;
5184f645668Schristos   int32_t r100GB1TBCnt;
5194f645668Schristos   int32_t r1TB10TBCnt;
5204f645668Schristos };
5214f645668Schristos 
5224f645668Schristos #endif
523