arenavm.c:
- M_whole, M_frac: print count of bytes as Megabytes
- diag on VMCompact after all client-requested traces, plus any others where we returned a chunk.
- show vmem change, and also trace cond, live / % / stuck(pip), notCond
mpm.c -- new "$3" format for 0-padding 3-char-wide field, for thousandths of a MB
zcoll.c -- try some new parameters for tests
diag.c -- just VMCompact diag
Copied from Perforce
Change: 170097
ServerID: perforce.ravenbrook.com
arenavm.c -- on VMFree(), destroy any empty chunks (except the primary). (VMFree is not the ideal place to do it, but works for proof of concept).
tract.c -- fix ChunkCache defects:
- previously, if cache is empty (chunkCache->chunk == NULL) then other fields are *undefined*; but code looks at them anyway (!) without first checking chunkCache->chunk;
- change it (.chunk.empty.fields) so that, if cache is empty, other fields have defined values: cache-using code may look at them, and they are chosen so that no cache hit will occur.
--> this fixes crashing defect shown by changelist 170072
- AVERT(ChunkCache) in the many places it should be checked;
- use AVERT_CRITICAL in ChunkEncache, because it is called by ChunkOfAddr;
Also:
plan.txt -- notes on use of primary chunk.
config.h -- DIAG also in ci, please [Do not integ to master]
diag.c -- skip ChainCondemnAuto diag thanks
zcoll.c -- move printf announcing Destroying arena etc to just before, not just after, we do it.
Copied from Perforce
Change: 170082
ServerID: perforce.ravenbrook.com
arenavm.c: VMFree is okay for testing chunk-ret; though just sparePagesPurge() for now;
diag.c: show what we want for using zcoll to show chunk-ret:
VM_ix_Create/Destroy
TraceStart, excpet only briefly for dyn-crit (why=2) and not at all for minor
locus.c: no newline on "condemn gens" diag please
tract.c: ChunkDecache is BROKEN; just add AVER to catch this for now
vmix.c: VM_ix_Create_ok/VM_ix_Destroy (vmw3.c needs similar)
zcoll.c:
release after mps_arena_collect!!!
make, collect, make, collect, to show chunk-ret
10MB arena means many chunks
None of this is releaseable quality of course.
Copied from Perforce
Change: 170071
ServerID: perforce.ravenbrook.com
See design/poolamc for thorough documentation.
AMCBufferFill, for large requests (> 8 ArenaAligns) now gives precisely the requested size to the buffer, and immediately pads the rest [poolamc.c]. See #define AMCLargeSegPAGES 8 [config.h].
New PoolTraceEndMethod -- do end-of-trace work:
Tracer calls PoolTraceEnd() after reclaim, when the trace is TraceFINISHED [trace.c]. AbstractPoolClass uses PoolTrivTraceEnd -- a NOOP [mpm.h, mpmst.h, mpmtypes.h, pool.c, poolabs.c, pooln.c]. AMC overrides with AMCTraceEnd, to emit diagnostic about how well the trace went [poolamc.c].
DIAGNOSTICS:
AMCTraceEnd_pageret: reports page retention (currently gated to only emit if >= 100 pages are retained).
traceSetSignalEmergency: warn when a trace enters emergency mode.
DIAG buffer now 200K, and copes with overflow.
TESTS:
zcoll.c: Test allocation of mixed big and small objects. Test allocation of big object immediately followed by a retained small object, to test AMC LSP.
Copied from Perforce
Change: 169898
ServerID: perforce.ravenbrook.com
poolamc.c tidy up:
neater implementation of obj1pip (amcReclaimNailed)
neater implementation of amcResetTraceIdStats -- no need for a function any more
delete lots of obsolete temporary diagnostic (superseded by AMCTraceEnd_pageret)
a few more avers (especially on buffer empty)
also revert temporary diagnostic changes in arena.c, config.h, diag.c, global.c
diag.c: fix diag-buffer at 100 screenfuls (200000 chars).
zcoll.c: reinstate Make 50000 with occasional big objs.
Copied from Perforce
Change: 168688
ServerID: perforce.ravenbrook.com
zcoll:
- parameterize BigdropSmall for big-obj size and small-obj ref-type, eg "BigdropSmall(big 28000, small A)"
- Park, to avoid all those minor collections. Explanatory comments.
poolamc.c:
- diags: AMCTraceEnd, AMCTraceEnd_perc (new), AMCTraceEnd_pad_med (new),
- AMCTraceEnd: c Segs/Pages Whiten/Reclaim, cPagesRet(ained)
- AMCTraceEnd_perc: percentage of condemned pages retained by ambig refs
- AMCTraceEnd_pad_med: over-detailed calculations of Gain & Loss for Medium segs,
requiring knowledge of size of obj1 in each seg.
diag.c:
- Just show AMCTraceEnd_perc and AMCTraceEnd_pad_med, for zcoll/BigdropSmall's purposes.
Note: poolamc.c now has several episodes of experimental diagnostic in it.
It's time to re-baseline it from an un-hacked version.
Copied from Perforce
Change: 168512
ServerID: perforce.ravenbrook.com
Tracer calls PoolTraceEnd() when the trace is TraceFINISHED.
AbstractPoolClass uses PoolTrivTraceEnd -- a NOOP. [mpm.h, mpmst.h, mpmtypes.h, pool.c, poolabs.c]
AMC overrides with AMCTraceEnd, to emit diagnostic on how well the trace went! [poolamc.c]
Copied from Perforce
Change: 168478
ServerID: perforce.ravenbrook.com
zcoll.c: BigSmall() command -- creates small, then big, then small object.
poolamc.c: AMCDescribe(): output AMC Seg maps, showing single big object -- a pad -- at end of large-segment.
arena/config/diag: allow output of AMC Seg maps.
Copied from Perforce
Change: 167763
ServerID: perforce.ravenbrook.com
More diag:
- new traceSetSignalEmergency;
- new AMCFix_amcSegCreateNailboard and AMCHeaderFix_amcSegCreateNailboard
(note: the other, unreported, route to becoming boarded is because of a (mutator) buffer);
- in traces: show SegBase and zone;
- in TraceStart: show genZoneSets;
- in amcReclaimNailed: show cbpip and cbpad.
zcoll.c:
- sizemethod 1 to Make command: occasionally makes >1MiB objects;
- declare root_table all MPS_RANK_AMBIG.
Copied from Perforce
Change: 167726
ServerID: perforce.ravenbrook.com
un-tagged diags, every diag should end with \n.
poolamc.c: fix spelling of amcScanNailed_loop diag.
Copied from Perforce
Change: 163125
ServerID: perforce.ravenbrook.com
20000 chars (10 screenfuls) in diag varieties, 1 char in others.
Handle diag->buf overflow (in fact was already handled; now tested;
in the always-on safety tests, use a condition that is verbatim
the same as the corresponding AVER).
Diag type: DiagSig, and AVERT(Diag, diag). Neater .rules.debug.
Copied from Perforce
Change: 163114
ServerID: perforce.ravenbrook.com
(tidyup) Move RulesGlobal to head of file; write instructions.
(tidyup) Move StringEqual into mpm.c (with StringLength); add AVER.
(cosmetic) Correct case of names: module-interface names begin
uppercase; local names begin lowercase. Tags should be C identifiers.
Copied from Perforce
Change: 163112
ServerID: perforce.ravenbrook.com
-DIAGTEST/*/*
will filter out all diags whose tags contain "DIAGTEST".
Unit test for PatternOccurs. (PatternOccurs used to be called
StringMatch).
Copied from Perforce
Change: 163111
ServerID: perforce.ravenbrook.com
the whole of a given diag, so memoize it (instead of repeating the
match for every line of the diag).
locus.c: new diag from ChainCondemnAuto.
trace.c: tidy up TraceStart diag, give traceFindGrey diag a tag.
Copied from Perforce
Change: 163077
ServerID: perforce.ravenbrook.com
diagnostic based on something on one of its lines. See RulesGlobalX
for an example. Implementation currently inefficient (scans whole
buffer for each line).
Copied from Perforce
Change: 163073
ServerID: perforce.ravenbrook.com
report helpfully if poor programmer forgot to end a tag.
FilterOutput: really filters now, but only on Tag.
Copied from Perforce
Change: 163070
ServerID: perforce.ravenbrook.com
and mps_lib_EOF.
diag.c:
Diag is a buffer capable of holding a diagnostic.
FilterStream can buffer and filter diagnostics.
Rule is a selection rule for filtering diagnostics.
FilterOutput does output (but does not apply the rules yet).
DiagStream can be switched to either FilterStream() or mps_lib_stdout().
Copied from Perforce
Change: 163067
ServerID: perforce.ravenbrook.com
diag.c: support tagging of diagnostics, and avoid having to
say DIAG_STREAM every time, with new macros:
DIAG_SINGLEF, DIAG_FIRSTF, DIAG_MOREF, DIAG_END.
mpm.c: new WriteF_firstformat_v required by DIAG_MOREF.
Copied from Perforce
Change: 163059
ServerID: perforce.ravenbrook.com
always present in the source, even for builds (eg. non-diag
varieties) in which it is not invoked. (avoids ranlib warning on
xcppgc).
Copied from Perforce
Change: 162948
ServerID: perforce.ravenbrook.com
Hope to fix in time, but for now I need DIAG-out to work, so switch
to printf (yes, really, I know, sorry).
Also, only do DIAG-out in variety.di, to avoid damage to .ci.
So for now, remove DIAG_WRITEF and DIAG from arenavm and trace.
To test, add DIAG_PRINTF in trace.
Copied from Perforce
Change: 162387
ServerID: perforce.ravenbrook.com
mpm.h: DIAG() et al under control of DIAGNOSTICS;
diag.c: under control of DIAGNOSTICS, plus add header and copyright.
Copied from Perforce
Change: 162214
ServerID: perforce.ravenbrook.com