Bug 157015

Summary: Improve jsc --help and making sampling options
Product: WebKit Reporter: Joseph Pecoraro <joepeck>
Component: JavaScriptCoreAssignee: Joseph Pecoraro <joepeck>
Status: RESOLVED FIXED    
Severity: Normal CC: benjamin, commit-queue, keith_miller, mark.lam, msaboff, ossy, saam
Priority: P2    
Version: WebKit Nightly Build   
Hardware: Unspecified   
OS: Unspecified   
Attachments:
Description Flags
[PATCH] Proposed Fix none

Description Joseph Pecoraro 2016-04-25 19:35:18 PDT
* SUMMARY
Improve jsc --help and making sampling options

  • --help doesn't mention --reportSamplingProfilerData
  • --reportSamplingProfilerData is hard to remember, lets call it --sample
  • --samplingProfilerTimingInterval is hard to remember, lets call it --sampleInterval
  • --options used to print out all options and exit, allowing you to discover options, now it only prints overloaded options
    • lets make --options output all options with help data
    • lets keep --dumpOptions outputting just overridden options

* NOTES
Before:

    $ jsc --help
    Usage: jsc [options] [files] [-- arguments]
      -d         Dumps bytecode (debug builds only)
      -e         Evaluate argument as script code
      -f         Specifies a source file (deprecated)
      -h|--help  Prints this help message
      -i         Enables interactive mode (default if no files are specified)
      -m         Execute as a module
      -s         Installs signal handlers that exit on a crash (Unix platforms only)
      -p <file>  Outputs profiling data to a file
      -x         Output exit code before terminating

      --options                  Dumps all JSC VM options and exits
      --dumpOptions              Dumps all JSC VM options before continuing
      --<jsc VM option>=<value>  Sets the specified JSC VM option

    $ jsc --options
    All JSC runtime options:
       reoptimizationRetryCounterMax=21 (default: 0)

    $ jsc --dumpOptions
    All JSC runtime options:
       reoptimizationRetryCounterMax=21 (default: 0)
    >>>

After:

    $ jsc --help
    Usage: jsc [options] [files] [-- arguments]
      -d         Dumps bytecode (debug builds only)
      -e         Evaluate argument as script code
      -f         Specifies a source file (deprecated)
      -h|--help  Prints this help message
      -i         Enables interactive mode (default if no files are specified)
      -m         Execute as a module
      -s         Installs signal handlers that exit on a crash (Unix platforms only)
      -p <file>  Outputs profiling data to a file
      -x         Output exit code before terminating

      --sample                   Collects and outputs sampling profiler data
      --options                  Dumps all JSC VM options and exits
      --dumpOptions              Dumps all non-default JSC VM options before continuing
      --<jsc VM option>=<value>  Sets the specified JSC VM option

    $ jsc --options
    All JSC runtime options:
       validateOptions=false   ... crashes if mis-typed JSC options were passed to the VM
       dumpOptions=0   ... dumps JSC options (0 = None, 1 = Overridden only, 2 = All, 3 = Verbose)
       useLLInt=true   ... allows the LLINT to be used if true
       useJIT=true   ... allows the baseline JIT to be used if true
       useDFGJIT=true   ... allows the DFG JIT to be used if true
       useRegExpJIT=true   ... allows the RegExp JIT to be used if true
       reportMustSucceedExecutableAllocations=false
       maxPerThreadStackUsage=4194304
       reservedZoneSize=131072
       errorModeReservedZoneSize=65536
       crashIfCantAllocateJITMemory=false
       jitMemoryReservationSize=0   ... Set this number to change the executable allocation size in ExecutableAllocatorFixedVMPool. (In bytes.)
       useSeparatedWXHeap=false
       forceCodeBlockLiveness=false
       forceICFailure=false
       repatchCountForCoolDown=10
       initialCoolDownCount=20
       repatchBufferingCountdown=10
       dumpGeneratedBytecodes=false
       dumpBytecodeLivenessResults=false
       validateBytecode=false
       forceDebuggerBytecodeGeneration=false
       forceProfilerBytecodeGeneration=false
       useFunctionDotArguments=true
       useTailCalls=true
       alwaysUseShadowChicken=false
       shadowChickenLogSize=1000
       shadowChickenStackSizeLimit=100000
       dumpDisassembly=false   ... dumps disassembly of all JIT compiled code upon compilation
       asyncDisassembly=false
       dumpDFGDisassembly=false   ... dumps disassembly of DFG function upon compilation
       dumpFTLDisassembly=false   ... dumps disassembly of FTL function upon compilation
       dumpAllDFGNodes=false
       bytecodeRangeToDFGCompile=<null>   ... bytecode size range to allow DFG compilation on, e.g. 1:100
       bytecodeRangeToFTLCompile=<null>   ... bytecode size range to allow FTL compilation on, e.g. 1:100
       dfgWhitelist=""   ... file with list of function signatures to allow DFG compilation on
       dumpSourceAtDFGTime=false   ... dumps source code of JS function being DFG compiled
       dumpBytecodeAtDFGTime=false   ... dumps bytecode of JS function being DFG compiled
       dumpGraphAfterParsing=false
       dumpGraphAtEachPhase=false
       dumpDFGGraphAtEachPhase=false   ... dumps the DFG graph at each phase DFG of complitaion (note this excludes DFG graphs during FTL compilation)
       dumpDFGFTLGraphAtEachPhase=false   ... dumps the DFG graph at each phase DFG of complitaion when compiling FTL code
       dumpB3GraphAtEachPhase=false   ... dumps the B3 graph at each phase of compilation
       dumpAirGraphAtEachPhase=false   ... dumps the Air graph at each phase of compilation
       verboseDFGByteCodeParsing=false
       verboseCompilation=false
       verboseFTLCompilation=false
       logCompilationChanges=false
       printEachOSRExit=false
       validateGraph=false
       validateGraphAtEachPhase=false
       verboseValidationFailure=false
       verboseOSR=false
       verboseFTLOSRExit=false
       verboseCallLink=false
       verboseCompilationQueue=false
       reportCompileTimes=false   ... dumps JS function signature and the time it took to compile
       reportFTLCompileTimes=false   ... dumps JS function signature and the time it took to FTL compile
       reportTotalCompileTimes=false
       verboseCFA=false
       verboseFTLToJSThunk=false
       verboseFTLFailure=false
       alwaysComputeHash=false
       testTheFTL=false
       verboseSanitizeStack=false
       useGenerationalGC=true
       eagerlyUpdateTopCallFrame=false
       useOSREntryToDFG=true
       useOSREntryToFTL=true
       useFTLJIT=true   ... allows the FTL JIT to be used if true
       useFTLTBAA=true
       validateFTLOSRExitLiveness=false
       b3AlwaysFailsBeforeCompile=false
       b3AlwaysFailsBeforeLink=false
       ftlCrashes=false
       clobberAllRegsInFTLICSlowPath=false
       useAccessInlining=true
       maxAccessVariantListSize=13
       megamorphicLoadCost=999
       usePolyvariantDevirtualization=true
       usePolymorphicAccessInlining=true
       usePolymorphicCallInlining=true
       usePolymorphicCallInliningForNonStubStatus=false
       maxPolymorphicCallVariantListSize=15
       maxPolymorphicCallVariantListSizeForTopTier=5
       maxPolymorphicCallVariantsForInlining=5
       frequentCallThreshold=2
       minimumCallToKnownRate=0.51
       createPreHeaders=true
       useMovHintRemoval=true
       usePutStackSinking=true
       useObjectAllocationSinking=true
       useConcurrentJIT=true   ... allows the DFG / FTL compilation in threads other than the executing JS thread
       numberOfDFGCompilerThreads=1
       numberOfFTLCompilerThreads=7
       priorityDeltaOfDFGCompilerThreads=0
       priorityDeltaOfFTLCompilerThreads=0
       useProfiler=false
       disassembleBaselineForProfiler=true
       useArchitectureSpecificOptimizations=true
       breakOnThrow=false
       maximumOptimizationCandidateInstructionCount=100000
       maximumFunctionForCallInlineCandidateInstructionCount=180
       maximumFunctionForClosureCallInlineCandidateInstructionCount=100
       maximumFunctionForConstructInlineCandidateInstructionCount=100
       maximumFTLCandidateInstructionCount=20000
       maximumInliningDepth=5   ... maximum allowed inlining depth.  Depth of 1 means no inlining
       maximumInliningRecursion=2
       maximumInliningCallerSize=10000
       maximumVarargsForInlining=100
       usePolyvariantCallInlining=true
       usePolyvariantByIdInlining=true
       useMaximalFlushInsertionPhase=false   ... Setting to true allows the DFG's MaximalFlushInsertionPhase to run.
       maximumBinaryStringSwitchCaseLength=50
       maximumBinaryStringSwitchTotalLength=2000
       jitPolicyScale=1   ... scale JIT thresholds to this specified ratio between 0.0 (compile ASAP) and 1.0 (compile like normal).
       forceEagerCompilation=false
       thresholdForJITAfterWarmUp=500
       thresholdForJITSoon=100
       thresholdForOptimizeAfterWarmUp=1000
       thresholdForOptimizeAfterLongWarmUp=1000
       thresholdForOptimizeSoon=1000
       executionCounterIncrementForLoop=1
       executionCounterIncrementForEntry=15
       thresholdForFTLOptimizeAfterWarmUp=100000
       thresholdForFTLOptimizeSoon=1000
       ftlTierUpCounterIncrementForLoop=1
       ftlTierUpCounterIncrementForReturn=15
       ftlOSREntryFailureCountForReoptimization=15
       ftlOSREntryRetryThreshold=100
       evalThresholdMultiplier=10
       maximumEvalCacheableSourceLength=256
       randomizeExecutionCountsBetweenCheckpoints=false
       maximumExecutionCountsBetweenCheckpointsForBaseline=1000
       maximumExecutionCountsBetweenCheckpointsForUpperTiers=50000
       likelyToTakeSlowCaseMinimumCount=20
       couldTakeSlowCaseMinimumCount=10
       osrExitCountForReoptimization=100
       osrExitCountForReoptimizationFromLoop=5
       reoptimizationRetryCounterMax=21 (default: 0)
       minimumOptimizationDelay=1
       maximumOptimizationDelay=5
       desiredProfileLivenessRate=0.75
       desiredProfileFullnessRate=0.35
       doubleVoteRatioForDoubleFormat=2
       structureCheckVoteRatioForHoisting=1
       checkArrayVoteRatioForHoisting=1
       minimumNumberOfScansBetweenRebalance=100
       numberOfGCMarkers=7
       opaqueRootMergeThreshold=1000
       minHeapUtilization=0.8
       minCopiedBlockUtilization=0.9
       minMarkedBlockUtilization=0.9
       slowPathAllocsBetweenGCs=0   ... force a GC on every Nth slow path alloc, where N is specified by this option
       percentCPUPerMBForFullTimer=0.0003125
       percentCPUPerMBForEdenTimer=0.0025
       collectionTimerMaxPercentCPU=0.05
       forceWeakRandomSeed=false
       forcedWeakRandomSeed=0
       useZombieMode=false   ... debugging option to scribble over dead objects with 0xdeadbeef
       useImmortalObjects=false   ... debugging option to keep all objects alive forever
       dumpObjectStatistics=false
       logGC=None   ... debugging option to log GC activity (0 = None, 1 = Basic, 2 = Verbose)
       useGC=true
       gcAtEnd=false   ... If true, the jsc CLI will do a GC before exiting
       forceGCSlowPaths=false   ... If true, we will force all JIT fast allocations down their slow paths.
       gcMaxHeapSize=0
       forceRAMSize=0
       recordGCPauseTimes=false
       logHeapStatisticsAtExit=false
       useTypeProfiler=false
       useControlFlowProfiler=false
       useSamplingProfiler=false
       sampleInterval=1000   ... Time between stack traces in microseconds.
       collectSamplingProfilerDataForJSCShell=false   ... This corresponds to the JSC shell's --sample option.
       alwaysGeneratePCToCodeOriginMap=false   ... This will make sure we always generate a PCToCodeOriginMap for JITed code.
       verifyHeap=false
       numberOfGCCyclesToRecordForVerification=3
       useExceptionFuzz=false
       fireExceptionFuzzAt=0
       validateDFGExceptionHandling=false   ... Causes the DFG to emit code validating exception handling for each node that can exit
       useExecutableAllocationFuzz=false
       fireExecutableAllocationFuzzAt=0
       fireExecutableAllocationFuzzAtOrAfter=0
       verboseExecutableAllocationFuzz=false
       useOSRExitFuzz=false
       fireOSRExitFuzzAtStatic=0
       fireOSRExitFuzzAt=0
       fireOSRExitFuzzAtOrAfter=0
       logB3PhaseTimes=false
       rareBlockPenalty=0.001
       airSpillsEverything=false
       logAirRegisterPressure=false
       maxB3TailDupBlockSize=3
       maxB3TailDupBlockSuccessors=3
       useDollarVM=false   ... installs the $vm debugging tool in global objects
       functionOverrides=""   ... file with debugging overrides for function bodies
       watchdog=0   ... watchdog timeout (0 = Disabled, N = a timeout period of N milliseconds)
       useICStats=false
       dumpModuleRecord=false
       dumpModuleLoadingState=false
       exposeInternalModuleLoader=false   ... expose the internal module loader object to the global space for debugging
       useSuperSampler=false

    $ jsc --dumpOptions
    All JSC runtime options:
       reoptimizationRetryCounterMax=21 (default: 0)
    >>>
Comment 1 Joseph Pecoraro 2016-04-25 19:39:12 PDT
Created attachment 277311 [details]
[PATCH] Proposed Fix
Comment 2 WebKit Commit Bot 2016-04-25 19:40:22 PDT
Attachment 277311 [details] did not pass style-queue:


ERROR: Source/JavaScriptCore/ChangeLog:10:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:11:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
Total errors found: 2 in 4 files


If any of these errors are false positives, please file a bug against check-webkit-style.
Comment 3 WebKit Commit Bot 2016-04-26 09:47:08 PDT
Comment on attachment 277311 [details]
[PATCH] Proposed Fix

Clearing flags on attachment: 277311

Committed r200092: <http://trac.webkit.org/changeset/200092>
Comment 4 WebKit Commit Bot 2016-04-26 09:47:11 PDT
All reviewed patches have been landed.  Closing bug.
Comment 5 Csaba Osztrogonác 2016-05-17 06:29:18 PDT
(In reply to comment #0)
> * SUMMARY
> Improve jsc --help and making sampling options
> 
>   • --help doesn't mention --reportSamplingProfilerData
>   • --reportSamplingProfilerData is hard to remember, lets call it --sample
>   • --samplingProfilerTimingInterval is hard to remember, lets call it
> --sampleInterval
>   • --options used to print out all options and exit, allowing you to
> discover options, now it only prints overloaded options
>     • lets make --options output all options with help data
>     • lets keep --dumpOptions outputting just overridden options

Thanks for getting back the old/new --options behaviour . :)