1 /* Copyright (C) 2021 Free Software Foundation, Inc. 2 Contributed by Oracle. 3 4 This file is part of GNU Binutils. 5 6 This program is free software; you can redistribute it and/or modify 7 it under the terms of the GNU General Public License as published by 8 the Free Software Foundation; either version 3, or (at your option) 9 any later version. 10 11 This program is distributed in the hope that it will be useful, 12 but WITHOUT ANY WARRANTY; without even the implied warranty of 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 GNU General Public License for more details. 15 16 You should have received a copy of the GNU General Public License 17 along with this program; if not, write to the Free Software 18 Foundation, 51 Franklin Street - Fifth Floor, Boston, 19 MA 02110-1301, USA. */ 20 21 #ifndef _FILEDATA_H 22 #define _FILEDATA_H 23 24 #include "gp-defs.h" 25 #include "gp-time.h" 26 27 #include "vec.h" 28 #include "data_pckts.h" 29 #include "Histable.h" 30 31 #define FSTYPESZ 16 32 33 #define VIRTUAL_FD_TOTAL 0 34 #define VIRTUAL_FD_STDIN 1 35 #define VIRTUAL_FD_STDOUT 2 36 #define VIRTUAL_FD_STDERR 3 37 #define VIRTUAL_FD_OTHERIO 4 38 #define VIRTUAL_FD_NONE -1 39 40 #define STDIN_FD 0 41 #define STDOUT_FD 1 42 #define STDERR_FD 2 43 #define OTHERIO_FD -1 44 45 #define OTHERIO_FILENAME "<Other IO activity>" 46 #define STDIN_FILENAME "<stdin>" 47 #define STDOUT_FILENAME "<stdout>" 48 #define STDERR_FILENAME "<stderr>" 49 #define TOTAL_FILENAME NTXT("<Total>") 50 #define UNKNOWNFD_FILENAME "<pipe(), socket(), or other fds>" 51 52 #define _1KB 1024 53 #define _8KB 8192 54 #define _32KB 32768 55 #define _128KB 131072 56 #define _256KB 262144 57 #define _512KB 524288 58 #define _1000KB 1048576 59 #define _10MB 10485760 60 #define _100MB 104857600 61 #define _1GB 1073741824 62 #define _10GB 10737418240 63 #define _100GB 107374182400 64 #define _1TB 1099511627776 65 #define _10TB 10995116277760 66 67 class FileData : public Histable 68 { 69 friend class IOActivity; 70 public: 71 FileData (const char *fName); 72 FileData (FileData *fData); 73 ~FileData (); 74 75 virtual char *get_name (Histable::NameFormat nfmt); 76 virtual Histable *convertto (Histable_type, Histable* = NULL); 77 78 char *get_raw_name (Histable::NameFormat nfmt); 79 void setFsType (FileSystem_type fst); 80 void setFsType (const char* fst); 81 82 virtual Histable_type get_type()83 get_type () 84 { 85 return histType; 86 }; 87 88 virtual uint64_t get_addr()89 get_addr () 90 { 91 return virtualFd; 92 }; 93 94 uint64_t get_index()95 get_index () 96 { 97 return virtualFd; 98 }; 99 100 void init (); 101 102 char * getFileName()103 getFileName () 104 { 105 return fileName; 106 } 107 108 void addReadEvent(hrtime_t rt,int64_t nb)109 addReadEvent (hrtime_t rt, int64_t nb) 110 { 111 readTime += rt; 112 readBytes += nb; 113 readCnt++; 114 } 115 116 hrtime_t getReadTime()117 getReadTime () 118 { 119 return readTime; 120 } 121 122 int64_t getReadBytes()123 getReadBytes () 124 { 125 return readBytes; 126 } 127 128 int32_t getReadCnt()129 getReadCnt () 130 { 131 return readCnt; 132 } 133 134 void addWriteEvent(hrtime_t wt,int64_t nb)135 addWriteEvent (hrtime_t wt, int64_t nb) 136 { 137 writeTime += wt; 138 writeBytes += nb; 139 writeCnt++; 140 } 141 142 hrtime_t getWriteTime()143 getWriteTime () 144 { 145 return writeTime; 146 } 147 148 int64_t getWriteBytes()149 getWriteBytes () 150 { 151 return writeBytes; 152 } 153 154 int32_t getWriteCnt()155 getWriteCnt () 156 { 157 return writeCnt; 158 } 159 160 void addOtherEvent(hrtime_t ot)161 addOtherEvent (hrtime_t ot) 162 { 163 otherTime += ot; 164 otherCnt++; 165 } 166 167 hrtime_t getOtherTime()168 getOtherTime () 169 { 170 return otherTime; 171 } 172 173 int32_t getOtherCnt()174 getOtherCnt () 175 { 176 return otherCnt; 177 } 178 179 void addErrorEvent(hrtime_t er)180 addErrorEvent (hrtime_t er) 181 { 182 errorTime += er; 183 errorCnt++; 184 } 185 186 hrtime_t getErrorTime()187 getErrorTime () 188 { 189 return errorTime; 190 } 191 192 int32_t getErrorCnt()193 getErrorCnt () 194 { 195 return errorCnt; 196 } 197 198 void setFileDesList (int fd); 199 200 Vector<int> * getFileDesList()201 getFileDesList () 202 { 203 return fileDesList; 204 } 205 206 void setFileDes(int fd)207 setFileDes (int fd) 208 { 209 fileDes = fd; 210 } 211 212 int32_t getFileDes()213 getFileDes () 214 { 215 return fileDes; 216 } 217 218 void setVirtualFds (int64_t vfd); 219 220 Vector<int64_t> * getVirtualFds()221 getVirtualFds () 222 { 223 return virtualFds; 224 } 225 226 char * getFsType()227 getFsType () 228 { 229 return fsType; 230 } 231 232 void setVirtualFd(int64_t vFd)233 setVirtualFd (int64_t vFd) 234 { 235 virtualFd = vFd; 236 } 237 238 int64_t getVirtualFd()239 getVirtualFd () 240 { 241 return virtualFd; 242 } 243 244 void setHistType(Histable::Type hType)245 setHistType (Histable::Type hType) 246 { 247 histType = hType; 248 } 249 250 Histable::Type getHistType()251 getHistType () 252 { 253 return histType; 254 } 255 256 void setWriteStat (hrtime_t wt, int64_t nb); 257 258 hrtime_t getWSlowestBytes()259 getWSlowestBytes () 260 { 261 return wSlowestBytes; 262 } 263 264 int64_t getWSmallestBytes()265 getWSmallestBytes () 266 { 267 return wSmallestBytes; 268 } 269 270 int64_t getWLargestBytes()271 getWLargestBytes () 272 { 273 return wLargestBytes; 274 } 275 276 int32_t getW0KB1KBCnt()277 getW0KB1KBCnt () 278 { 279 return w0KB1KBCnt; 280 } 281 282 int32_t getW1KB8KBCnt()283 getW1KB8KBCnt () 284 { 285 return w1KB8KBCnt; 286 } 287 288 int32_t getW8KB32KBCnt()289 getW8KB32KBCnt () 290 { 291 return w8KB32KBCnt; 292 } 293 294 int32_t getW32KB128KBCnt()295 getW32KB128KBCnt () 296 { 297 return w32KB128KBCnt; 298 } 299 300 int32_t getW128KB256KBCnt()301 getW128KB256KBCnt () 302 { 303 return w128KB256KBCnt; 304 } 305 306 int32_t getW256KB512KBCnt()307 getW256KB512KBCnt () 308 { 309 return w256KB512KBCnt; 310 } 311 312 int32_t getW512KB1000KBCnt()313 getW512KB1000KBCnt () 314 { 315 return w512KB1000KBCnt; 316 } 317 318 int32_t getW1000KB10MBCnt()319 getW1000KB10MBCnt () 320 { 321 return w1000KB10MBCnt; 322 } 323 324 int32_t getW10MB100MBCnt()325 getW10MB100MBCnt () 326 { 327 return w10MB100MBCnt; 328 } 329 330 int32_t getW100MB1GBCnt()331 getW100MB1GBCnt () 332 { 333 return w100MB1GBCnt; 334 } 335 336 int32_t getW1GB10GBCnt()337 getW1GB10GBCnt () 338 { 339 return w1GB10GBCnt; 340 } 341 342 int32_t getW10GB100GBCnt()343 getW10GB100GBCnt () 344 { 345 return w10GB100GBCnt; 346 } 347 348 int32_t getW100GB1TBCnt()349 getW100GB1TBCnt () 350 { 351 return w100GB1TBCnt; 352 } 353 354 int32_t getW1TB10TBCnt()355 getW1TB10TBCnt () 356 { 357 return w1TB10TBCnt; 358 } 359 360 void setReadStat (hrtime_t rt, int64_t nb); 361 362 hrtime_t getRSlowestBytes()363 getRSlowestBytes () 364 { 365 return rSlowestBytes; 366 } 367 368 int64_t getRSmallestBytes()369 getRSmallestBytes () 370 { 371 return rSmallestBytes; 372 } 373 374 int64_t getRLargestBytes()375 getRLargestBytes () 376 { 377 return rLargestBytes; 378 } 379 380 int32_t getR0KB1KBCnt()381 getR0KB1KBCnt () 382 { 383 return r0KB1KBCnt; 384 } 385 386 int32_t getR1KB8KBCnt()387 getR1KB8KBCnt () 388 { 389 return r1KB8KBCnt; 390 } 391 392 int32_t getR8KB32KBCnt()393 getR8KB32KBCnt () 394 { 395 return r8KB32KBCnt; 396 } 397 398 int32_t getR32KB128KBCnt()399 getR32KB128KBCnt () 400 { 401 return r32KB128KBCnt; 402 } 403 404 int32_t getR128KB256KBCnt()405 getR128KB256KBCnt () 406 { 407 return r128KB256KBCnt; 408 } 409 410 int32_t getR256KB512KBCnt()411 getR256KB512KBCnt () 412 { 413 return r256KB512KBCnt; 414 } 415 416 int32_t getR512KB1000KBCnt()417 getR512KB1000KBCnt () 418 { 419 return r512KB1000KBCnt; 420 } 421 422 int32_t getR1000KB10MBCnt()423 getR1000KB10MBCnt () 424 { 425 return r1000KB10MBCnt; 426 } 427 428 int32_t getR10MB100MBCnt()429 getR10MB100MBCnt () 430 { 431 return r10MB100MBCnt; 432 } 433 434 int32_t getR100MB1GBCnt()435 getR100MB1GBCnt () 436 { 437 return r100MB1GBCnt; 438 } 439 440 int32_t getR1GB10GBCnt()441 getR1GB10GBCnt () 442 { 443 return r1GB10GBCnt; 444 } 445 446 int32_t getR10GB100GBCnt()447 getR10GB100GBCnt () 448 { 449 return r10GB100GBCnt; 450 } 451 452 int32_t getR100GB1TBCnt()453 getR100GB1TBCnt () 454 { 455 return r100GB1TBCnt; 456 } 457 458 int32_t getR1TB10TBCnt()459 getR1TB10TBCnt () 460 { 461 return r1TB10TBCnt; 462 } 463 464 private: 465 char *fileName; // File name 466 hrtime_t readTime; // The Total time for read operations; 467 hrtime_t writeTime; // The Total time for write operations; 468 hrtime_t otherTime; // The Total time for other IO operations; 469 hrtime_t errorTime; // The Total time for failed IO operations; 470 int64_t readBytes; //The total bytes read 471 int64_t writeBytes; //The total bytes written 472 int32_t readCnt; // The read count 473 int32_t writeCnt; // The write count 474 int32_t otherCnt; // The other IO count 475 int32_t errorCnt; // The failed IO count 476 Vector<int> *fileDesList; // The list of file descriptors 477 Vector<int64_t> *virtualFds; // The list of file virtual descriptors 478 char fsType[FSTYPESZ]; // The file system type 479 int64_t virtualFd; // The virtual file descriptor 480 int32_t fileDes; // The file descriptor 481 Histable::Type histType; // The Histable type: IOACTFILE, IOACTVFD, ... 482 483 // Write statistics 484 hrtime_t wSlowestBytes; 485 int64_t wSmallestBytes; 486 int64_t wLargestBytes; 487 int32_t w0KB1KBCnt; 488 int32_t w1KB8KBCnt; 489 int32_t w8KB32KBCnt; 490 int32_t w32KB128KBCnt; 491 int32_t w128KB256KBCnt; 492 int32_t w256KB512KBCnt; 493 int32_t w512KB1000KBCnt; 494 int32_t w1000KB10MBCnt; 495 int32_t w10MB100MBCnt; 496 int32_t w100MB1GBCnt; 497 int32_t w1GB10GBCnt; 498 int32_t w10GB100GBCnt; 499 int32_t w100GB1TBCnt; 500 int32_t w1TB10TBCnt; 501 502 // Read statistics 503 hrtime_t rSlowestBytes; 504 int64_t rSmallestBytes; 505 int64_t rLargestBytes; 506 int32_t r0KB1KBCnt; 507 int32_t r1KB8KBCnt; 508 int32_t r8KB32KBCnt; 509 int32_t r32KB128KBCnt; 510 int32_t r128KB256KBCnt; 511 int32_t r256KB512KBCnt; 512 int32_t r512KB1000KBCnt; 513 int32_t r1000KB10MBCnt; 514 int32_t r10MB100MBCnt; 515 int32_t r100MB1GBCnt; 516 int32_t r1GB10GBCnt; 517 int32_t r10GB100GBCnt; 518 int32_t r100GB1TBCnt; 519 int32_t r1TB10TBCnt; 520 }; 521 522 #endif 523