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