1*424fb153SAndroid Build Coastguard Worker // Copyright 2006 Google Inc. All Rights Reserved. 2*424fb153SAndroid Build Coastguard Worker 3*424fb153SAndroid Build Coastguard Worker // Licensed under the Apache License, Version 2.0 (the "License"); 4*424fb153SAndroid Build Coastguard Worker // you may not use this file except in compliance with the License. 5*424fb153SAndroid Build Coastguard Worker // You may obtain a copy of the License at 6*424fb153SAndroid Build Coastguard Worker 7*424fb153SAndroid Build Coastguard Worker // http://www.apache.org/licenses/LICENSE-2.0 8*424fb153SAndroid Build Coastguard Worker 9*424fb153SAndroid Build Coastguard Worker // Unless required by applicable law or agreed to in writing, software 10*424fb153SAndroid Build Coastguard Worker // distributed under the License is distributed on an "AS IS" BASIS, 11*424fb153SAndroid Build Coastguard Worker // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12*424fb153SAndroid Build Coastguard Worker // See the License for the specific language governing permissions and 13*424fb153SAndroid Build Coastguard Worker // limitations under the License. 14*424fb153SAndroid Build Coastguard Worker 15*424fb153SAndroid Build Coastguard Worker // sat.h : sat stress test object interface and data structures 16*424fb153SAndroid Build Coastguard Worker 17*424fb153SAndroid Build Coastguard Worker #ifndef STRESSAPPTEST_SAT_H_ 18*424fb153SAndroid Build Coastguard Worker #define STRESSAPPTEST_SAT_H_ 19*424fb153SAndroid Build Coastguard Worker 20*424fb153SAndroid Build Coastguard Worker #include <signal.h> 21*424fb153SAndroid Build Coastguard Worker 22*424fb153SAndroid Build Coastguard Worker #include <map> 23*424fb153SAndroid Build Coastguard Worker #include <string> 24*424fb153SAndroid Build Coastguard Worker #include <vector> 25*424fb153SAndroid Build Coastguard Worker 26*424fb153SAndroid Build Coastguard Worker // This file must work with autoconf on its public version, 27*424fb153SAndroid Build Coastguard Worker // so these includes are correct. 28*424fb153SAndroid Build Coastguard Worker #include "finelock_queue.h" 29*424fb153SAndroid Build Coastguard Worker #include "queue.h" 30*424fb153SAndroid Build Coastguard Worker #include "sattypes.h" 31*424fb153SAndroid Build Coastguard Worker #include "worker.h" 32*424fb153SAndroid Build Coastguard Worker #include "os.h" 33*424fb153SAndroid Build Coastguard Worker 34*424fb153SAndroid Build Coastguard Worker // SAT stress test class. 35*424fb153SAndroid Build Coastguard Worker class Sat { 36*424fb153SAndroid Build Coastguard Worker public: 37*424fb153SAndroid Build Coastguard Worker // Enum for page queue implementation switch. 38*424fb153SAndroid Build Coastguard Worker enum PageQueueType { SAT_ONELOCK, SAT_FINELOCK }; 39*424fb153SAndroid Build Coastguard Worker 40*424fb153SAndroid Build Coastguard Worker Sat(); 41*424fb153SAndroid Build Coastguard Worker virtual ~Sat(); 42*424fb153SAndroid Build Coastguard Worker 43*424fb153SAndroid Build Coastguard Worker // Read configuration from arguments. Called first. 44*424fb153SAndroid Build Coastguard Worker bool ParseArgs(int argc, char **argv); 45*424fb153SAndroid Build Coastguard Worker virtual bool CheckGoogleSpecificArgs(int argc, char **argv, int *i); 46*424fb153SAndroid Build Coastguard Worker // Initialize data structures, subclasses, and resources, 47*424fb153SAndroid Build Coastguard Worker // based on command line args. 48*424fb153SAndroid Build Coastguard Worker // Called after ParseArgs(). 49*424fb153SAndroid Build Coastguard Worker bool Initialize(); 50*424fb153SAndroid Build Coastguard Worker 51*424fb153SAndroid Build Coastguard Worker // Execute the test. Initialize() and ParseArgs() must be called first. 52*424fb153SAndroid Build Coastguard Worker // This must be called from a single-threaded program. 53*424fb153SAndroid Build Coastguard Worker bool Run(); 54*424fb153SAndroid Build Coastguard Worker 55*424fb153SAndroid Build Coastguard Worker // Pretty print result summary. 56*424fb153SAndroid Build Coastguard Worker // Called after Run(). 57*424fb153SAndroid Build Coastguard Worker // Return value is success or failure of the SAT run, *not* of this function! 58*424fb153SAndroid Build Coastguard Worker bool PrintResults(); 59*424fb153SAndroid Build Coastguard Worker 60*424fb153SAndroid Build Coastguard Worker // Pretty print version info. 61*424fb153SAndroid Build Coastguard Worker bool PrintVersion(); 62*424fb153SAndroid Build Coastguard Worker 63*424fb153SAndroid Build Coastguard Worker // Pretty print help. 64*424fb153SAndroid Build Coastguard Worker virtual void PrintHelp(); 65*424fb153SAndroid Build Coastguard Worker 66*424fb153SAndroid Build Coastguard Worker // Clean up allocations and resources. 67*424fb153SAndroid Build Coastguard Worker // Called last. 68*424fb153SAndroid Build Coastguard Worker bool Cleanup(); 69*424fb153SAndroid Build Coastguard Worker 70*424fb153SAndroid Build Coastguard Worker // Abort Run(). Only for use by Run()-installed signal handlers. Break()71*424fb153SAndroid Build Coastguard Worker void Break() { user_break_ = true; } 72*424fb153SAndroid Build Coastguard Worker 73*424fb153SAndroid Build Coastguard Worker // Fetch and return empty and full pages into the empty and full pools. 74*424fb153SAndroid Build Coastguard Worker bool GetValid(struct page_entry *pe); 75*424fb153SAndroid Build Coastguard Worker bool PutValid(struct page_entry *pe); 76*424fb153SAndroid Build Coastguard Worker bool GetEmpty(struct page_entry *pe); 77*424fb153SAndroid Build Coastguard Worker bool PutEmpty(struct page_entry *pe); 78*424fb153SAndroid Build Coastguard Worker 79*424fb153SAndroid Build Coastguard Worker bool GetValid(struct page_entry *pe, int32 tag); 80*424fb153SAndroid Build Coastguard Worker bool GetEmpty(struct page_entry *pe, int32 tag); 81*424fb153SAndroid Build Coastguard Worker 82*424fb153SAndroid Build Coastguard Worker // Accessor functions. verbosity()83*424fb153SAndroid Build Coastguard Worker int verbosity() const { return verbosity_; } logfile()84*424fb153SAndroid Build Coastguard Worker int logfile() const { return logfile_; } page_length()85*424fb153SAndroid Build Coastguard Worker int page_length() const { return page_length_; } disk_pages()86*424fb153SAndroid Build Coastguard Worker int disk_pages() const { return disk_pages_; } strict()87*424fb153SAndroid Build Coastguard Worker int strict() const { return strict_; } tag_mode()88*424fb153SAndroid Build Coastguard Worker int tag_mode() const { return tag_mode_; } status()89*424fb153SAndroid Build Coastguard Worker int status() const { return statuscount_; } bad_status()90*424fb153SAndroid Build Coastguard Worker void bad_status() { statuscount_++; } errors()91*424fb153SAndroid Build Coastguard Worker int errors() const { return errorcount_; } warm()92*424fb153SAndroid Build Coastguard Worker int warm() const { return warm_; } stop_on_error()93*424fb153SAndroid Build Coastguard Worker bool stop_on_error() const { return stop_on_error_; } region_mask()94*424fb153SAndroid Build Coastguard Worker int32 region_mask() const { return region_mask_; } 95*424fb153SAndroid Build Coastguard Worker // Semi-accessor to find the "nth" region to avoid replicated bit searching.. region_find(int32 num)96*424fb153SAndroid Build Coastguard Worker int32 region_find(int32 num) const { 97*424fb153SAndroid Build Coastguard Worker for (int i = 0; i < 32; i++) { 98*424fb153SAndroid Build Coastguard Worker if ((1 << i) & region_mask_) { 99*424fb153SAndroid Build Coastguard Worker if (num == 0) 100*424fb153SAndroid Build Coastguard Worker return i; 101*424fb153SAndroid Build Coastguard Worker num--; 102*424fb153SAndroid Build Coastguard Worker } 103*424fb153SAndroid Build Coastguard Worker } 104*424fb153SAndroid Build Coastguard Worker return 0; 105*424fb153SAndroid Build Coastguard Worker } 106*424fb153SAndroid Build Coastguard Worker 107*424fb153SAndroid Build Coastguard Worker // Causes false errors for unittesting. 108*424fb153SAndroid Build Coastguard Worker // Setting to "true" causes errors to be injected. set_error_injection(bool errors)109*424fb153SAndroid Build Coastguard Worker void set_error_injection(bool errors) { error_injection_ = errors; } error_injection()110*424fb153SAndroid Build Coastguard Worker bool error_injection() const { return error_injection_; } 111*424fb153SAndroid Build Coastguard Worker 112*424fb153SAndroid Build Coastguard Worker protected: 113*424fb153SAndroid Build Coastguard Worker // Opens log file for writing. Returns 0 on failure. 114*424fb153SAndroid Build Coastguard Worker bool InitializeLogfile(); 115*424fb153SAndroid Build Coastguard Worker // Checks for supported environment. Returns 0 on failure. 116*424fb153SAndroid Build Coastguard Worker bool CheckEnvironment(); 117*424fb153SAndroid Build Coastguard Worker // Allocates size_ bytes of test memory. 118*424fb153SAndroid Build Coastguard Worker bool AllocateMemory(); 119*424fb153SAndroid Build Coastguard Worker // Initializes datapattern reference structures. 120*424fb153SAndroid Build Coastguard Worker bool InitializePatterns(); 121*424fb153SAndroid Build Coastguard Worker // Initializes test memory with datapatterns. 122*424fb153SAndroid Build Coastguard Worker bool InitializePages(); 123*424fb153SAndroid Build Coastguard Worker 124*424fb153SAndroid Build Coastguard Worker // Start up worker threads. 125*424fb153SAndroid Build Coastguard Worker virtual void InitializeThreads(); 126*424fb153SAndroid Build Coastguard Worker // Spawn worker threads. 127*424fb153SAndroid Build Coastguard Worker void SpawnThreads(); 128*424fb153SAndroid Build Coastguard Worker // Reap worker threads. 129*424fb153SAndroid Build Coastguard Worker void JoinThreads(); 130*424fb153SAndroid Build Coastguard Worker // Run bandwidth and error analysis. 131*424fb153SAndroid Build Coastguard Worker virtual void RunAnalysis(); 132*424fb153SAndroid Build Coastguard Worker // Delete worker threads. 133*424fb153SAndroid Build Coastguard Worker void DeleteThreads(); 134*424fb153SAndroid Build Coastguard Worker 135*424fb153SAndroid Build Coastguard Worker // Return the number of cpus in the system. 136*424fb153SAndroid Build Coastguard Worker int CpuCount(); 137*424fb153SAndroid Build Coastguard Worker // Return the worst-case (largest) cache line size of the system. 138*424fb153SAndroid Build Coastguard Worker int CacheLineSize(); 139*424fb153SAndroid Build Coastguard Worker 140*424fb153SAndroid Build Coastguard Worker // Collect error counts from threads. 141*424fb153SAndroid Build Coastguard Worker int64 GetTotalErrorCount(); 142*424fb153SAndroid Build Coastguard Worker 143*424fb153SAndroid Build Coastguard Worker // Command line arguments. 144*424fb153SAndroid Build Coastguard Worker string cmdline_; 145*424fb153SAndroid Build Coastguard Worker 146*424fb153SAndroid Build Coastguard Worker // Memory and test configuration. 147*424fb153SAndroid Build Coastguard Worker int runtime_seconds_; // Seconds to run. 148*424fb153SAndroid Build Coastguard Worker int page_length_; // Length of each memory block. 149*424fb153SAndroid Build Coastguard Worker int64 pages_; // Number of memory blocks. 150*424fb153SAndroid Build Coastguard Worker int64 size_; // Size of memory tested, in bytes. 151*424fb153SAndroid Build Coastguard Worker int64 size_mb_; // Size of memory tested, in MB. 152*424fb153SAndroid Build Coastguard Worker int64 reserve_mb_; // Reserve at least this amount of memory 153*424fb153SAndroid Build Coastguard Worker // for the system, in MB. 154*424fb153SAndroid Build Coastguard Worker int64 min_hugepages_mbytes_; // Minimum hugepages size. 155*424fb153SAndroid Build Coastguard Worker int64 freepages_; // How many invalid pages we need. 156*424fb153SAndroid Build Coastguard Worker int disk_pages_; // Number of pages per temp file. 157*424fb153SAndroid Build Coastguard Worker uint64 paddr_base_; // Physical address base. 158*424fb153SAndroid Build Coastguard Worker uint64 channel_hash_; // Mask of address bits XORed for channel. 159*424fb153SAndroid Build Coastguard Worker int channel_width_; // Channel width in bits. 160*424fb153SAndroid Build Coastguard Worker vector< vector<string> > channels_; // Memory module names per channel. 161*424fb153SAndroid Build Coastguard Worker 162*424fb153SAndroid Build Coastguard Worker // Control flags. 163*424fb153SAndroid Build Coastguard Worker volatile sig_atomic_t user_break_; // User has signalled early exit. Used as 164*424fb153SAndroid Build Coastguard Worker // a boolean. 165*424fb153SAndroid Build Coastguard Worker int verbosity_; // How much to print. 166*424fb153SAndroid Build Coastguard Worker int print_delay_; // Chatty update frequency. 167*424fb153SAndroid Build Coastguard Worker int strict_; // Check results per transaction. 168*424fb153SAndroid Build Coastguard Worker int warm_; // FPU warms CPU while copying. 169*424fb153SAndroid Build Coastguard Worker int address_mode_; // 32 or 64 bit binary. 170*424fb153SAndroid Build Coastguard Worker bool stop_on_error_; // Exit immendiately on any error. 171*424fb153SAndroid Build Coastguard Worker bool findfiles_; // Autodetect tempfile locations. 172*424fb153SAndroid Build Coastguard Worker 173*424fb153SAndroid Build Coastguard Worker bool error_injection_; // Simulate errors, for unittests. 174*424fb153SAndroid Build Coastguard Worker bool crazy_error_injection_; // Simulate lots of errors. 175*424fb153SAndroid Build Coastguard Worker uint64 max_errorcount_; // Number of errors before forced exit. 176*424fb153SAndroid Build Coastguard Worker int run_on_anything_; // Ignore unknown machine ereor. 177*424fb153SAndroid Build Coastguard Worker bool use_logfile_; // Log to a file. 178*424fb153SAndroid Build Coastguard Worker char logfilename_[255]; // Name of file to log to. 179*424fb153SAndroid Build Coastguard Worker int logfile_; // File handle to log to. 180*424fb153SAndroid Build Coastguard Worker bool log_timestamps_; // Whether to add timestamps to log lines. 181*424fb153SAndroid Build Coastguard Worker 182*424fb153SAndroid Build Coastguard Worker // Disk thread options. 183*424fb153SAndroid Build Coastguard Worker int read_block_size_; // Size of block to read from disk. 184*424fb153SAndroid Build Coastguard Worker int write_block_size_; // Size of block to write to disk. 185*424fb153SAndroid Build Coastguard Worker int64 segment_size_; // Size of segment to split disk into. 186*424fb153SAndroid Build Coastguard Worker int cache_size_; // Size of disk cache. 187*424fb153SAndroid Build Coastguard Worker int blocks_per_segment_; // Number of blocks to test per segment. 188*424fb153SAndroid Build Coastguard Worker int read_threshold_; // Maximum time (in us) a read should take 189*424fb153SAndroid Build Coastguard Worker // before warning of a slow read. 190*424fb153SAndroid Build Coastguard Worker int write_threshold_; // Maximum time (in us) a write should 191*424fb153SAndroid Build Coastguard Worker // take before warning of a slow write. 192*424fb153SAndroid Build Coastguard Worker int non_destructive_; // Whether to use non-destructive mode for 193*424fb153SAndroid Build Coastguard Worker // the disk test. 194*424fb153SAndroid Build Coastguard Worker 195*424fb153SAndroid Build Coastguard Worker // Generic Options. 196*424fb153SAndroid Build Coastguard Worker int monitor_mode_; // Switch for monitor-only mode SAT. 197*424fb153SAndroid Build Coastguard Worker // This switch trumps most of the other 198*424fb153SAndroid Build Coastguard Worker // argument, as SAT will only run error 199*424fb153SAndroid Build Coastguard Worker // polling threads. 200*424fb153SAndroid Build Coastguard Worker int tag_mode_; // Do tagging of memory and strict 201*424fb153SAndroid Build Coastguard Worker // checking for misplaced cachelines. 202*424fb153SAndroid Build Coastguard Worker 203*424fb153SAndroid Build Coastguard Worker bool do_page_map_; // Should we print a list of used pages? 204*424fb153SAndroid Build Coastguard Worker unsigned char *page_bitmap_; // Store bitmap of physical pages seen. 205*424fb153SAndroid Build Coastguard Worker uint64 page_bitmap_size_; // Length of physical memory represented. 206*424fb153SAndroid Build Coastguard Worker 207*424fb153SAndroid Build Coastguard Worker // Cpu Cache Coherency Options. 208*424fb153SAndroid Build Coastguard Worker bool cc_test_; // Flag to decide whether to start the 209*424fb153SAndroid Build Coastguard Worker // cache coherency threads. 210*424fb153SAndroid Build Coastguard Worker int cc_cacheline_count_; // Number of cache line size structures. 211*424fb153SAndroid Build Coastguard Worker int cc_cacheline_size_; // Size of a cache line. 212*424fb153SAndroid Build Coastguard Worker int cc_inc_count_; // Number of times to increment the shared 213*424fb153SAndroid Build Coastguard Worker // cache lines structure members. 214*424fb153SAndroid Build Coastguard Worker 215*424fb153SAndroid Build Coastguard Worker // Cpu Frequency Options. 216*424fb153SAndroid Build Coastguard Worker bool cpu_freq_test_; // Flag to decide whether to start the 217*424fb153SAndroid Build Coastguard Worker // cpu frequency thread. 218*424fb153SAndroid Build Coastguard Worker int cpu_freq_threshold_; // The MHz threshold which will cause 219*424fb153SAndroid Build Coastguard Worker // the test to fail. 220*424fb153SAndroid Build Coastguard Worker int cpu_freq_round_; // Round the computed frequency to this 221*424fb153SAndroid Build Coastguard Worker // value. 222*424fb153SAndroid Build Coastguard Worker 223*424fb153SAndroid Build Coastguard Worker // Thread control. 224*424fb153SAndroid Build Coastguard Worker int file_threads_; // Threads of file IO. 225*424fb153SAndroid Build Coastguard Worker int net_threads_; // Threads of network IO. 226*424fb153SAndroid Build Coastguard Worker int listen_threads_; // Threads for network IO to connect. 227*424fb153SAndroid Build Coastguard Worker int memory_threads_; // Threads of memcpy. 228*424fb153SAndroid Build Coastguard Worker int invert_threads_; // Threads of invert. 229*424fb153SAndroid Build Coastguard Worker int fill_threads_; // Threads of memset. 230*424fb153SAndroid Build Coastguard Worker int check_threads_; // Threads of strcmp. 231*424fb153SAndroid Build Coastguard Worker int cpu_stress_threads_; // Threads of CPU stress workload. 232*424fb153SAndroid Build Coastguard Worker int disk_threads_; // Threads of disk test. 233*424fb153SAndroid Build Coastguard Worker int random_threads_; // Number of random disk threads. 234*424fb153SAndroid Build Coastguard Worker int total_threads_; // Total threads used. 235*424fb153SAndroid Build Coastguard Worker bool error_poll_; // Poll for system errors. 236*424fb153SAndroid Build Coastguard Worker 237*424fb153SAndroid Build Coastguard Worker // Resources. 238*424fb153SAndroid Build Coastguard Worker cc_cacheline_data *cc_cacheline_data_; // The cache line sized datastructure 239*424fb153SAndroid Build Coastguard Worker // used by the ccache threads 240*424fb153SAndroid Build Coastguard Worker // (in worker.h). 241*424fb153SAndroid Build Coastguard Worker vector<string> filename_; // Filenames for file IO. 242*424fb153SAndroid Build Coastguard Worker vector<string> ipaddrs_; // Addresses for network IO. 243*424fb153SAndroid Build Coastguard Worker vector<string> diskfilename_; // Filename for disk IO device. 244*424fb153SAndroid Build Coastguard Worker // Block table for IO device. 245*424fb153SAndroid Build Coastguard Worker vector<DiskBlockTable*> blocktables_; 246*424fb153SAndroid Build Coastguard Worker 247*424fb153SAndroid Build Coastguard Worker int32 region_mask_; // Bitmask of available NUMA regions. 248*424fb153SAndroid Build Coastguard Worker int32 region_count_; // Count of available NUMA regions. 249*424fb153SAndroid Build Coastguard Worker int32 region_[32]; // Pagecount per region. 250*424fb153SAndroid Build Coastguard Worker int region_mode_; // What to do with NUMA hints? 251*424fb153SAndroid Build Coastguard Worker static const int kLocalNuma = 1; // Target local memory. 252*424fb153SAndroid Build Coastguard Worker static const int kRemoteNuma = 2; // Target remote memory. 253*424fb153SAndroid Build Coastguard Worker 254*424fb153SAndroid Build Coastguard Worker // Results. 255*424fb153SAndroid Build Coastguard Worker int64 errorcount_; // Total hardware incidents seen. 256*424fb153SAndroid Build Coastguard Worker int statuscount_; // Total test errors seen. 257*424fb153SAndroid Build Coastguard Worker 258*424fb153SAndroid Build Coastguard Worker // Thread type constants and types 259*424fb153SAndroid Build Coastguard Worker enum ThreadType { 260*424fb153SAndroid Build Coastguard Worker kMemoryType = 0, 261*424fb153SAndroid Build Coastguard Worker kFileIOType = 1, 262*424fb153SAndroid Build Coastguard Worker kNetIOType = 2, 263*424fb153SAndroid Build Coastguard Worker kNetSlaveType = 3, 264*424fb153SAndroid Build Coastguard Worker kCheckType = 4, 265*424fb153SAndroid Build Coastguard Worker kInvertType = 5, 266*424fb153SAndroid Build Coastguard Worker kDiskType = 6, 267*424fb153SAndroid Build Coastguard Worker kRandomDiskType = 7, 268*424fb153SAndroid Build Coastguard Worker kCPUType = 8, 269*424fb153SAndroid Build Coastguard Worker kErrorType = 9, 270*424fb153SAndroid Build Coastguard Worker kCCType = 10, 271*424fb153SAndroid Build Coastguard Worker kCPUFreqType = 11, 272*424fb153SAndroid Build Coastguard Worker }; 273*424fb153SAndroid Build Coastguard Worker 274*424fb153SAndroid Build Coastguard Worker // Helper functions. 275*424fb153SAndroid Build Coastguard Worker virtual void AcquireWorkerLock(); 276*424fb153SAndroid Build Coastguard Worker virtual void ReleaseWorkerLock(); 277*424fb153SAndroid Build Coastguard Worker pthread_mutex_t worker_lock_; // Lock access to the worker thread structure. 278*424fb153SAndroid Build Coastguard Worker typedef vector<WorkerThread*> WorkerVector; 279*424fb153SAndroid Build Coastguard Worker typedef map<int, WorkerVector*> WorkerMap; 280*424fb153SAndroid Build Coastguard Worker // Contains all worker threads. 281*424fb153SAndroid Build Coastguard Worker WorkerMap workers_map_; 282*424fb153SAndroid Build Coastguard Worker // Delay between power spikes. 283*424fb153SAndroid Build Coastguard Worker time_t pause_delay_; 284*424fb153SAndroid Build Coastguard Worker // The duration of each pause (for power spikes). 285*424fb153SAndroid Build Coastguard Worker time_t pause_duration_; 286*424fb153SAndroid Build Coastguard Worker // For the workers we pause and resume to create power spikes. 287*424fb153SAndroid Build Coastguard Worker WorkerStatus power_spike_status_; 288*424fb153SAndroid Build Coastguard Worker // For the workers we never pause. 289*424fb153SAndroid Build Coastguard Worker WorkerStatus continuous_status_; 290*424fb153SAndroid Build Coastguard Worker 291*424fb153SAndroid Build Coastguard Worker class OsLayer *os_; // Os abstraction: put hacks here. 292*424fb153SAndroid Build Coastguard Worker class PatternList *patternlist_; // Access to global data patterns. 293*424fb153SAndroid Build Coastguard Worker 294*424fb153SAndroid Build Coastguard Worker // RunAnalysis methods 295*424fb153SAndroid Build Coastguard Worker void AnalysisAllStats(); // Summary of all runs. 296*424fb153SAndroid Build Coastguard Worker void MemoryStats(); 297*424fb153SAndroid Build Coastguard Worker void FileStats(); 298*424fb153SAndroid Build Coastguard Worker void NetStats(); 299*424fb153SAndroid Build Coastguard Worker void CheckStats(); 300*424fb153SAndroid Build Coastguard Worker void InvertStats(); 301*424fb153SAndroid Build Coastguard Worker void DiskStats(); 302*424fb153SAndroid Build Coastguard Worker 303*424fb153SAndroid Build Coastguard Worker void QueueStats(); 304*424fb153SAndroid Build Coastguard Worker 305*424fb153SAndroid Build Coastguard Worker // Physical page use reporting. 306*424fb153SAndroid Build Coastguard Worker void AddrMapInit(); 307*424fb153SAndroid Build Coastguard Worker void AddrMapUpdate(struct page_entry *pe); 308*424fb153SAndroid Build Coastguard Worker void AddrMapPrint(); 309*424fb153SAndroid Build Coastguard Worker 310*424fb153SAndroid Build Coastguard Worker // additional memory data from google-specific tests. 311*424fb153SAndroid Build Coastguard Worker virtual void GoogleMemoryStats(float *memcopy_data, 312*424fb153SAndroid Build Coastguard Worker float *memcopy_bandwidth); 313*424fb153SAndroid Build Coastguard Worker 314*424fb153SAndroid Build Coastguard Worker virtual void GoogleOsOptions(std::map<std::string, std::string> *options); 315*424fb153SAndroid Build Coastguard Worker 316*424fb153SAndroid Build Coastguard Worker // Page queues, only one of (valid_+empty_) or (finelock_q_) will be used 317*424fb153SAndroid Build Coastguard Worker // at a time. A commandline switch controls which queue implementation will 318*424fb153SAndroid Build Coastguard Worker // be used. 319*424fb153SAndroid Build Coastguard Worker class PageEntryQueue *valid_; // Page queue structure, valid pages. 320*424fb153SAndroid Build Coastguard Worker class PageEntryQueue *empty_; // Page queue structure, free pages. 321*424fb153SAndroid Build Coastguard Worker class FineLockPEQueue *finelock_q_; // Page queue with fine-grain locks 322*424fb153SAndroid Build Coastguard Worker Sat::PageQueueType pe_q_implementation_; // Queue implementation switch 323*424fb153SAndroid Build Coastguard Worker 324*424fb153SAndroid Build Coastguard Worker DISALLOW_COPY_AND_ASSIGN(Sat); 325*424fb153SAndroid Build Coastguard Worker }; 326*424fb153SAndroid Build Coastguard Worker 327*424fb153SAndroid Build Coastguard Worker Sat *SatFactory(); 328*424fb153SAndroid Build Coastguard Worker 329*424fb153SAndroid Build Coastguard Worker #endif // STRESSAPPTEST_SAT_H_ 330