blob: 9376763e6d047d92191f333fb65162c6decab0ac [file] [log] [blame]
/* Copyright (C) 2021-2024 Free Software Foundation, Inc.
Contributed by Oracle.
This file is part of GNU Binutils.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3, or (at your option)
any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, 51 Franklin Street - Fifth Floor, Boston,
MA 02110-1301, USA. */
#ifndef _FILEDATA_H
#define _FILEDATA_H
#include "gp-defs.h"
#include "gp-time.h"
#include "vec.h"
#include "data_pckts.h"
#include "Histable.h"
#define FSTYPESZ 16
#define VIRTUAL_FD_TOTAL 0
#define VIRTUAL_FD_STDIN 1
#define VIRTUAL_FD_STDOUT 2
#define VIRTUAL_FD_STDERR 3
#define VIRTUAL_FD_OTHERIO 4
#define VIRTUAL_FD_NONE -1
#define STDIN_FD 0
#define STDOUT_FD 1
#define STDERR_FD 2
#define OTHERIO_FD -1
#define OTHERIO_FILENAME "<Other IO activity>"
#define STDIN_FILENAME "<stdin>"
#define STDOUT_FILENAME "<stdout>"
#define STDERR_FILENAME "<stderr>"
#define TOTAL_FILENAME NTXT("<Total>")
#define UNKNOWNFD_FILENAME "<pipe(), socket(), or other fds>"
#define _1KB 1024
#define _8KB 8192
#define _32KB 32768
#define _128KB 131072
#define _256KB 262144
#define _512KB 524288
#define _1000KB 1048576
#define _10MB 10485760
#define _100MB 104857600
#define _1GB 1073741824
#define _10GB 10737418240
#define _100GB 107374182400
#define _1TB 1099511627776
#define _10TB 10995116277760
class FileData : public Histable
{
friend class IOActivity;
public:
FileData (const char *fName);
FileData (FileData *fData);
~FileData ();
virtual char *get_name (Histable::NameFormat nfmt);
virtual Histable *convertto (Histable_type, Histable* = NULL);
char *get_raw_name (Histable::NameFormat nfmt);
void setFsType (FileSystem_type fst);
void setFsType (const char* fst);
virtual Histable_type
get_type ()
{
return histType;
};
virtual uint64_t
get_addr ()
{
return virtualFd;
};
uint64_t
get_index ()
{
return virtualFd;
};
void init ();
char *
getFileName ()
{
return fileName;
}
void
addReadEvent (hrtime_t rt, int64_t nb)
{
readTime += rt;
readBytes += nb;
readCnt++;
}
hrtime_t
getReadTime ()
{
return readTime;
}
int64_t
getReadBytes ()
{
return readBytes;
}
int32_t
getReadCnt ()
{
return readCnt;
}
void
addWriteEvent (hrtime_t wt, int64_t nb)
{
writeTime += wt;
writeBytes += nb;
writeCnt++;
}
hrtime_t
getWriteTime ()
{
return writeTime;
}
int64_t
getWriteBytes ()
{
return writeBytes;
}
int32_t
getWriteCnt ()
{
return writeCnt;
}
void
addOtherEvent (hrtime_t ot)
{
otherTime += ot;
otherCnt++;
}
hrtime_t
getOtherTime ()
{
return otherTime;
}
int32_t
getOtherCnt ()
{
return otherCnt;
}
void
addErrorEvent (hrtime_t er)
{
errorTime += er;
errorCnt++;
}
hrtime_t
getErrorTime ()
{
return errorTime;
}
int32_t
getErrorCnt ()
{
return errorCnt;
}
void setFileDesList (int fd);
Vector<int> *
getFileDesList ()
{
return fileDesList;
}
void
setFileDes (int fd)
{
fileDes = fd;
}
int32_t
getFileDes ()
{
return fileDes;
}
void setVirtualFds (int64_t vfd);
Vector<int64_t> *
getVirtualFds ()
{
return virtualFds;
}
char *
getFsType ()
{
return fsType;
}
void
setVirtualFd (int64_t vFd)
{
virtualFd = vFd;
}
int64_t
getVirtualFd ()
{
return virtualFd;
}
void
setHistType (Histable::Type hType)
{
histType = hType;
}
Histable::Type
getHistType ()
{
return histType;
}
void setWriteStat (hrtime_t wt, int64_t nb);
hrtime_t
getWSlowestBytes ()
{
return wSlowestBytes;
}
int64_t
getWSmallestBytes ()
{
return wSmallestBytes;
}
int64_t
getWLargestBytes ()
{
return wLargestBytes;
}
int32_t
getW0KB1KBCnt ()
{
return w0KB1KBCnt;
}
int32_t
getW1KB8KBCnt ()
{
return w1KB8KBCnt;
}
int32_t
getW8KB32KBCnt ()
{
return w8KB32KBCnt;
}
int32_t
getW32KB128KBCnt ()
{
return w32KB128KBCnt;
}
int32_t
getW128KB256KBCnt ()
{
return w128KB256KBCnt;
}
int32_t
getW256KB512KBCnt ()
{
return w256KB512KBCnt;
}
int32_t
getW512KB1000KBCnt ()
{
return w512KB1000KBCnt;
}
int32_t
getW1000KB10MBCnt ()
{
return w1000KB10MBCnt;
}
int32_t
getW10MB100MBCnt ()
{
return w10MB100MBCnt;
}
int32_t
getW100MB1GBCnt ()
{
return w100MB1GBCnt;
}
int32_t
getW1GB10GBCnt ()
{
return w1GB10GBCnt;
}
int32_t
getW10GB100GBCnt ()
{
return w10GB100GBCnt;
}
int32_t
getW100GB1TBCnt ()
{
return w100GB1TBCnt;
}
int32_t
getW1TB10TBCnt ()
{
return w1TB10TBCnt;
}
void setReadStat (hrtime_t rt, int64_t nb);
hrtime_t
getRSlowestBytes ()
{
return rSlowestBytes;
}
int64_t
getRSmallestBytes ()
{
return rSmallestBytes;
}
int64_t
getRLargestBytes ()
{
return rLargestBytes;
}
int32_t
getR0KB1KBCnt ()
{
return r0KB1KBCnt;
}
int32_t
getR1KB8KBCnt ()
{
return r1KB8KBCnt;
}
int32_t
getR8KB32KBCnt ()
{
return r8KB32KBCnt;
}
int32_t
getR32KB128KBCnt ()
{
return r32KB128KBCnt;
}
int32_t
getR128KB256KBCnt ()
{
return r128KB256KBCnt;
}
int32_t
getR256KB512KBCnt ()
{
return r256KB512KBCnt;
}
int32_t
getR512KB1000KBCnt ()
{
return r512KB1000KBCnt;
}
int32_t
getR1000KB10MBCnt ()
{
return r1000KB10MBCnt;
}
int32_t
getR10MB100MBCnt ()
{
return r10MB100MBCnt;
}
int32_t
getR100MB1GBCnt ()
{
return r100MB1GBCnt;
}
int32_t
getR1GB10GBCnt ()
{
return r1GB10GBCnt;
}
int32_t
getR10GB100GBCnt ()
{
return r10GB100GBCnt;
}
int32_t
getR100GB1TBCnt ()
{
return r100GB1TBCnt;
}
int32_t
getR1TB10TBCnt ()
{
return r1TB10TBCnt;
}
private:
char *fileName; // File name
hrtime_t readTime; // The Total time for read operations;
hrtime_t writeTime; // The Total time for write operations;
hrtime_t otherTime; // The Total time for other IO operations;
hrtime_t errorTime; // The Total time for failed IO operations;
int64_t readBytes; //The total bytes read
int64_t writeBytes; //The total bytes written
int32_t readCnt; // The read count
int32_t writeCnt; // The write count
int32_t otherCnt; // The other IO count
int32_t errorCnt; // The failed IO count
Vector<int> *fileDesList; // The list of file descriptors
Vector<int64_t> *virtualFds; // The list of file virtual descriptors
char fsType[FSTYPESZ]; // The file system type
int64_t virtualFd; // The virtual file descriptor
int32_t fileDes; // The file descriptor
Histable::Type histType; // The Histable type: IOACTFILE, IOACTVFD, ...
// Write statistics
hrtime_t wSlowestBytes;
int64_t wSmallestBytes;
int64_t wLargestBytes;
int32_t w0KB1KBCnt;
int32_t w1KB8KBCnt;
int32_t w8KB32KBCnt;
int32_t w32KB128KBCnt;
int32_t w128KB256KBCnt;
int32_t w256KB512KBCnt;
int32_t w512KB1000KBCnt;
int32_t w1000KB10MBCnt;
int32_t w10MB100MBCnt;
int32_t w100MB1GBCnt;
int32_t w1GB10GBCnt;
int32_t w10GB100GBCnt;
int32_t w100GB1TBCnt;
int32_t w1TB10TBCnt;
// Read statistics
hrtime_t rSlowestBytes;
int64_t rSmallestBytes;
int64_t rLargestBytes;
int32_t r0KB1KBCnt;
int32_t r1KB8KBCnt;
int32_t r8KB32KBCnt;
int32_t r32KB128KBCnt;
int32_t r128KB256KBCnt;
int32_t r256KB512KBCnt;
int32_t r512KB1000KBCnt;
int32_t r1000KB10MBCnt;
int32_t r10MB100MBCnt;
int32_t r100MB1GBCnt;
int32_t r1GB10GBCnt;
int32_t r10GB100GBCnt;
int32_t r100GB1TBCnt;
int32_t r1TB10TBCnt;
};
#endif