X-Git-Url: http://git.megacz.com/?p=ghc-hetmet.git;a=blobdiff_plain;f=includes%2FRtsFlags.h;h=778fccf40aa7eeace041e4ce5997e1c6072e3307;hp=7d0b418aa121359d7e03902cfac7cd78cd8a7f63;hb=a2a67cd520b9841114d69a87a423dabcb3b4368e;hpb=f732e7862bb1fcc65fcfbcfb6eaaf6dde39fdd5f diff --git a/includes/RtsFlags.h b/includes/RtsFlags.h index 7d0b418..778fccf 100644 --- a/includes/RtsFlags.h +++ b/includes/RtsFlags.h @@ -1,394 +1,2 @@ -/* ----------------------------------------------------------------------------- - * - * (c) The GHC Team, 1998-1999 - * - * Datatypes that holds the command-line flag settings. - * - * ---------------------------------------------------------------------------*/ - -#ifndef RTSFLAGS_H -#define RTSFLAGS_H - -#include - -/* For defaults, see the @initRtsFlagsDefaults@ routine. */ - -struct GC_FLAGS { - FILE *statsFile; - nat giveStats; -#define NO_GC_STATS 0 -#define COLLECT_GC_STATS 1 -#define ONELINE_GC_STATS 2 -#define SUMMARY_GC_STATS 3 -#define VERBOSE_GC_STATS 4 - - nat maxStkSize; /* in *words* */ - nat initialStkSize; /* in *words* */ - - nat maxHeapSize; /* in *blocks* */ - nat minAllocAreaSize; /* in *blocks* */ - nat minOldGenSize; /* in *blocks* */ - nat heapSizeSuggestion; /* in *blocks* */ - double oldGenFactor; - double pcFreeHeap; - - nat generations; - nat steps; - rtsBool squeezeUpdFrames; - - rtsBool compact; /* True <=> "compact all the time" */ - double compactThreshold; - - rtsBool ringBell; - rtsBool frontpanel; - - int idleGCDelayTime; /* in milliseconds */ - - StgWord heapBase; /* address to ask the OS for memory */ -}; - -struct DEBUG_FLAGS { - /* flags to control debugging output & extra checking in various subsystems */ - rtsBool scheduler; /* 's' */ - rtsBool interpreter; /* 'i' */ - rtsBool weak; /* 'w' */ - rtsBool gccafs; /* 'G' */ - rtsBool gc; /* 'g' */ - rtsBool block_alloc; /* 'b' */ - rtsBool sanity; /* 'S' warning: might be expensive! */ - rtsBool stable; /* 't' */ - rtsBool prof; /* 'p' */ - rtsBool gran; /* 'r' */ - rtsBool par; /* 'P' */ - rtsBool linker; /* 'l' the object linker */ - rtsBool apply; /* 'a' */ - rtsBool stm; /* 'm' */ - rtsBool squeeze; /* 'z' stack squeezing & lazy blackholing */ - rtsBool hpc; /* 'c' coverage */ -}; - -struct COST_CENTRE_FLAGS { - unsigned int doCostCentres; -# define COST_CENTRES_SUMMARY 1 -# define COST_CENTRES_VERBOSE 2 /* incl. serial time profile */ -# define COST_CENTRES_ALL 3 -# define COST_CENTRES_XML 4 - - int profilerTicks; /* derived */ - int msecsPerTick; /* derived */ -}; - -struct PROFILING_FLAGS { - unsigned int doHeapProfile; -# define NO_HEAP_PROFILING 0 /* N.B. Used as indexes into arrays */ -# define HEAP_BY_CCS 1 -# define HEAP_BY_MOD 2 -# define HEAP_BY_DESCR 4 -# define HEAP_BY_TYPE 5 -# define HEAP_BY_RETAINER 6 -# define HEAP_BY_LDV 7 - -# define HEAP_BY_CLOSURE_TYPE 8 - - nat profileInterval; /* delta between samples (in ms) */ - nat profileIntervalTicks; /* delta between samples (in 'ticks') */ - rtsBool includeTSOs; - - - rtsBool showCCSOnException; - - nat maxRetainerSetSize; - - nat ccsLength; - - char* modSelector; - char* descrSelector; - char* typeSelector; - char* ccSelector; - char* ccsSelector; - char* retainerSelector; - char* bioSelector; - -}; - -struct CONCURRENT_FLAGS { - int ctxtSwitchTime; /* in milliseconds */ - int ctxtSwitchTicks; /* derived */ -}; - -struct MISC_FLAGS { - int tickInterval; /* in milliseconds */ - rtsBool install_signal_handlers; -}; - -#ifdef PAR -/* currently the same as GRAN_STATS_FLAGS */ -struct PAR_STATS_FLAGS { - rtsBool Full; /* Full .gr profile (rtsTrue) or only END events? */ - rtsBool Suppressed; /* No .gr profile at all */ - rtsBool Binary; /* Binary profile? (not yet implemented) */ - rtsBool Sparks; /* Info on sparks in profile? */ - rtsBool Heap; /* Info on heap allocs in profile? */ - rtsBool NewLogfile; /* Use new log-file format? (not yet implemented) */ - rtsBool Global; /* Global statistics? (printed on shutdown; no log file) */ -}; - -struct PAR_DEBUG_FLAGS { - /* flags to control debugging output in various subsystems */ - rtsBool verbose : 1; /* 1 */ - rtsBool bq : 1; /* 2 */ - rtsBool schedule : 1; /* 4 */ - rtsBool free : 1; /* 8 */ - rtsBool resume : 1; /* 16 */ - rtsBool weight : 1; /* 32 */ - rtsBool fetch : 1; /* 64 */ - rtsBool fish : 1; /* 128 */ - rtsBool tables : 1; /* 256 */ - rtsBool packet : 1; /* 512 */ - rtsBool pack : 1; /* 1024 */ - rtsBool paranoia : 1; /* 2048 */ -}; - -#define MAX_PAR_DEBUG_OPTION 11 -#define PAR_DEBUG_MASK(n) ((nat)(ldexp(1,n))) -#define MAX_PAR_DEBUG_MASK ((nat)(ldexp(1,(MAX_PAR_DEBUG_OPTION+1))-1)) - -struct PAR_FLAGS { - struct PAR_STATS_FLAGS ParStats; /* profile and stats output */ - struct PAR_DEBUG_FLAGS Debug; /* debugging options */ - rtsBool outputDisabled; /* Disable output for performance purposes */ - rtsBool doFairScheduling; /* Fair-ish scheduling (round robin; no time-slices) */ - nat packBufferSize; - nat thunksToPack; /* number of thunks in packet + 1 */ - nat globalising; /* globalisation scheme */ - nat maxLocalSparks; /* spark pool size */ - nat maxThreads; /* thread pool size */ - nat maxFishes; /* max number of active fishes */ - rtsTime fishDelay; /* delay before sending a new fish */ - long wait; -}; -#endif /* PAR */ - -#ifdef THREADED_RTS -struct PAR_FLAGS { - nat nNodes; /* number of threads to run simultaneously */ - rtsBool migrate; /* migrate threads between capabilities */ - rtsBool wakeupMigrate; /* migrate a thread on wakeup */ - unsigned int maxLocalSparks; - nat gcThreads; /* number of threads for parallel GC */ -}; -#endif /* THREADED_RTS */ - -#ifdef GRAN -struct GRAN_STATS_FLAGS { - rtsBool Full; /* Full .gr profile (rtsTrue) or only END events? */ - rtsBool Suppressed; /* No .gr profile at all */ - rtsBool Binary; /* Binary profile? (not yet implemented) */ - rtsBool Sparks; /* Info on sparks in profile? */ - rtsBool Heap; /* Info on heap allocs in profile? */ - rtsBool NewLogfile; /* Use new log-file format? (not yet implemented) */ - rtsBool Global; /* Global statistics? (printed on shutdown; no log file) */ -}; - -struct GRAN_COST_FLAGS { - /* Communication Cost Variables -- set in main program */ - nat latency; /* Latency for single packet */ - nat additional_latency; /* Latency for additional packets */ - nat fetchtime; - nat lunblocktime; /* Time for local unblock */ - nat gunblocktime; /* Time for global unblock */ - nat mpacktime; /* Cost of creating a packet */ - nat munpacktime; /* Cost of receiving a packet */ - nat mtidytime; /* Cost of cleaning up after send */ - - nat threadcreatetime; /* Thread creation costs */ - nat threadqueuetime; /* Cost of adding a thread to the running/runnable queue */ - nat threaddescheduletime; /* Cost of descheduling a thread */ - nat threadscheduletime; /* Cost of scheduling a thread */ - nat threadcontextswitchtime; /* Cost of context switch */ - - /* Instruction Costs */ - nat arith_cost; /* arithmetic instructions (+,i,< etc) */ - nat branch_cost; /* branch instructions */ - nat load_cost; /* load into register */ - nat store_cost; /* store into memory */ - nat float_cost; /* floating point operations */ - - nat heapalloc_cost; /* heap allocation costs */ - - /* Overhead for granularity control mechanisms */ - /* overhead per elem of spark queue */ - nat pri_spark_overhead; - /* overhead per elem of thread queue */ - nat pri_sched_overhead; -}; - -struct GRAN_DEBUG_FLAGS { - /* flags to control debugging output in various subsystems */ - rtsBool event_trace : 1; /* 1 */ - rtsBool event_stats : 1; /* 2 */ - rtsBool bq : 1; /* 4 */ - rtsBool pack : 1; /* 8 */ - rtsBool checkSparkQ : 1; /* 16 */ - rtsBool thunkStealing : 1; /* 32 */ - rtsBool randomSteal : 1; /* 64 */ - rtsBool findWork : 1; /* 128 */ - rtsBool unused : 1; /* 256 */ - rtsBool pri : 1; /* 512 */ - rtsBool checkLight : 1; /* 1024 */ - rtsBool sortedQ : 1; /* 2048 */ - rtsBool blockOnFetch : 1; /* 4096 */ - rtsBool packBuffer : 1; /* 8192 */ - rtsBool blockOnFetch_sanity : 1; /* 16384 */ -}; - -#define MAX_GRAN_DEBUG_OPTION 14 -#define GRAN_DEBUG_MASK(n) ((nat)(ldexp(1,n))) -#define MAX_GRAN_DEBUG_MASK ((nat)(ldexp(1,(MAX_GRAN_DEBUG_OPTION+1))-1)) - -struct GRAN_FLAGS { - struct GRAN_STATS_FLAGS GranSimStats; /* profile and stats output */ - struct GRAN_COST_FLAGS Costs; /* cost metric for simulation */ - struct GRAN_DEBUG_FLAGS Debug; /* debugging options */ - - nat maxThreads; /* ToDo: share with THREADED_RTS and GUM */ - /* rtsBool labelling; */ - nat packBufferSize; - nat packBufferSize_internal; - - PEs proc; /* number of processors */ - rtsBool Fishing; /* Simulate GUM style fishing mechanism? */ - nat maxFishes; /* max number of spark or thread steals */ - rtsTime time_slice; /* max time slice of one reduction thread */ - - /* GrAnSim-Light: This version puts no bound on the number of - processors but in exchange doesn't model communication costs - (all communication is 0 cost). Mainly intended to show maximal - degree of parallelism in the program (*not* to simulate the - execution on a real machine). */ - - rtsBool Light; - - rtsBool DoFairSchedule ; /* fair scheduling alg? default: unfair */ - rtsBool DoAsyncFetch; /* async. communication? */ - rtsBool DoStealThreadsFirst; /* prefer threads over sparks when stealing */ - rtsBool DoAlwaysCreateThreads; /* eager thread creation */ - rtsBool DoBulkFetching; /* bulk fetching */ - rtsBool DoThreadMigration; /* allow to move threads */ - nat FetchStrategy; /* what to do when waiting for data */ - rtsBool PreferSparksOfLocalNodes; /* prefer local over global sparks */ - rtsBool DoPrioritySparking; /* sparks sorted by priorities */ - rtsBool DoPriorityScheduling; /* threads sorted by priorities */ - nat SparkPriority; /* threshold for cut-off mechanism */ - nat SparkPriority2; - rtsBool RandomPriorities; - rtsBool InversePriorities; - rtsBool IgnorePriorities; - nat ThunksToPack; /* number of thunks in packet + 1 */ - rtsBool RandomSteal; /* steal spark/thread from random proc */ - rtsBool NoForward; /* no forwarding of fetch messages */ - - /* unsigned int debug; */ - /* rtsBool event_trace; */ - /* rtsBool event_trace_all; */ -}; -#endif /* GRAN */ - -struct TICKY_FLAGS { - rtsBool showTickyStats; - FILE *tickyFile; -}; - -struct TRACE_FLAGS { - rtsBool sched; /* trace scheduler events for profiling */ - rtsBool gc; /* trace GC events */ - rtsBool timestamp; /* add timestamps to traces */ -}; - -#ifdef USE_PAPI -#define MAX_PAPI_USER_EVENTS 8 - -struct PAPI_FLAGS { - nat eventType; /* The type of events to count */ - nat numUserEvents; - char * userEvents[MAX_PAPI_USER_EVENTS]; -}; - -#define PAPI_FLAG_CACHE_L1 1 -#define PAPI_FLAG_CACHE_L2 2 -#define PAPI_FLAG_BRANCH 3 -#define PAPI_FLAG_STALLS 4 -#define PAPI_FLAG_CB_EVENTS 5 -#define PAPI_USER_EVENTS 6 - -#endif - -/* Put them together: */ - -typedef struct _RTS_FLAGS { - /* The first portion of RTS_FLAGS is invariant. */ - struct GC_FLAGS GcFlags; - struct CONCURRENT_FLAGS ConcFlags; - struct MISC_FLAGS MiscFlags; - struct DEBUG_FLAGS DebugFlags; - struct COST_CENTRE_FLAGS CcFlags; - struct PROFILING_FLAGS ProfFlags; - struct TICKY_FLAGS TickyFlags; - struct TRACE_FLAGS TraceFlags; - -#if defined(THREADED_RTS) || defined(PAR) - struct PAR_FLAGS ParFlags; -#endif -#ifdef GRAN - struct GRAN_FLAGS GranFlags; -#endif -#ifdef USE_PAPI - struct PAPI_FLAGS PapiFlags; -#endif -} RTS_FLAGS; - -#ifdef COMPILING_RTS_MAIN -extern DLLIMPORT RTS_FLAGS RtsFlags; -#elif IN_STG_CODE -/* Hack because the C code generator can't generate '&label'. */ -extern RTS_FLAGS RtsFlags[]; -#else -extern RTS_FLAGS RtsFlags; -#endif - -/* Routines that operate-on/to-do-with RTS flags: */ - -extern void initRtsFlagsDefaults(void); -extern void setupRtsFlags(int *argc, char *argv[], int *rts_argc, char *rts_argv[]); -extern void setProgName(char *argv[]); - - -/* - * The printf formats are here, so we are less likely to make - * overly-long filenames (with disastrous results). No more than 128 - * chars, please! - */ - -#define STATS_FILENAME_MAXLEN 128 - -#define GR_FILENAME_FMT "%0.124s.gr" -#define GR_FILENAME_FMT_GUM "%0.120s.%03d.%s" -#define HP_FILENAME_FMT "%0.124s.hp" -#define LIFE_FILENAME_FMT "%0.122s.life" -#define PROF_FILENAME_FMT "%0.122s.prof" -#define PROF_FILENAME_FMT_GUM "%0.118s.%03d.prof" -#define QP_FILENAME_FMT "%0.124s.qp" -#define STAT_FILENAME_FMT "%0.122s.stat" -#define TICKY_FILENAME_FMT "%0.121s.ticky" -#define TIME_FILENAME_FMT "%0.122s.time" -#define TIME_FILENAME_FMT_GUM "%0.118s.%03d.time" - -/* an "int" so as to match normal "argc" */ -/* Now defined in Stg.h (lib/std/cbits need these too.) -extern int prog_argc; -extern char **prog_argv; -*/ -extern int rts_argc; /* ditto */ -extern char *rts_argv[]; - -#endif /* RTSFLAGS_H */ +#warning RtsFlags.h is DEPRECATED; please just #include "Rts.h" +#include "Rts.h"