- >csgdZdkZdkZdkZdkZdZdZdfdYZdefdYZdefd YZ d efd YZ d fd YZ de fdYZ de fdYZ dZdfdYZdZdfdYZde fdYZedZdZdZdZedjoeiendS(sECache simulation. Usage: simul.py [-bflyz] [-X] [-s size] tracefile Use one of -b, -f, -l, -y or -z select the cache simulator: -b: buddy system allocator -f: simple free list allocator -l: idealized LRU (no allocator) -y: variation on the existing ZEO cache that copies to current file -z: existing ZEO cache (default) Options: -s size: cache size in MB (default 20 MB) -X: enable heuristic checking for misaligned records: oids > 2**32 will be rejected; this requires the tracefile to be seekable Note: the buddy system allocator rounds the cache size up to a power of 2 Ncsti|IJtitIJdS(N(ssyssstderrsmsgs__doc__(smsg((s1/usr/pkg/lib/python2.2/site-packages/ZEO/simul.pysusage's c sdd} d| } t}d} y#titidd\}}Wn&ti j o}t |dSnXx|D]\}} |djo t}n|djo t}n|d jo t}n|d jo t}n|d jo t}n|d jott| | } n|d jo d} nqsWt|djot ddSn|d}|idoy dk}Wn$tj otidIJdSnXy|i|d}Wn0tj o$}tid||fIJdSnXna|djo ti}nGyt|d}Wn0tj o$}tid||fIJdSnX|| }|i d}d}|i#}t%i&}xdo|d}t|djoPn|d7}|d|\}}|djoqn|d}t|djoPn|d7}|d7}|d|\}}|d@|d@|d@|d@f\} }}}|i0|| |||||qW|i1dSdS(Niiiisbflyzs:Xis-bs-fs-ls-ys-zs-ss-Xs"exactly one file argument requireds.gzs)can't read gzipped files (no module gzip)srbscan't open %s: %ss-is>iiis>8s8siii~(2sMBs cachelimitsZEOCacheSimulationssimclasss heuristicsgetoptssyssargvsoptssargsserrorsmsgsusagesosasBuddyCacheSimulationsSimpleCacheSimulationsLRUCacheSimulationsAltZEOCacheSimulationsintsfloatslensfilenamesendswithsgzips ImportErrorsstderrsopensfsIOErrorsstdinssims printheadersoffsetsrecordssreadsf_readsstructsunpacks struct_unpacksrstsscodesoidsserialsdlensversionscurrentseventsfinish(sargss struct_unpacksoidstssf_readsmsgscodesoffsetsserialsas heuristicsdlensMBs cachelimitsfsosfilenamescurrentsrssimsversionsrecordssgzipssimclasssopts((s1/usr/pkg/lib/python2.2/site-packages/ZEO/simul.pysmain+s  #                                  .$ s SimulationcsqtZdZdZdZdZdZdZdZdZ dZ d Z d Z d Z d ZRS( s Base class for simulations. The driver program calls: event(), printheader(), finish(). The standard event() method calls these additional methods: write(), load(), inval(), report(), restart(); the standard finish() method also calls report(). csD||_t|_d|_d|_d|_d|_|idS(Ni( s cachelimitsselfsNonesepochs total_loadss total_hitss total_invalss total_writessrestart(sselfs cachelimit((s1/usr/pkg/lib/python2.2/site-packages/ZEO/simul.pys__init__s      cs1d|_d|_d|_d|_t|_dS(Ni(sselfsloadsshitssinvalsswritessNonests0(sself((s1/usr/pkg/lib/python2.2/site-packages/ZEO/simul.pysrestarts     cs |itjo*||_|itjo ||_nn||_|o|d@dddfjoq|djo2|id7_|i d7_ |i ||n/|i d7_ |i d7_ |i||nH|d@djo|i|n&|djo|i|indS( Nipi i0iPi:iii(sselfsts0sNonestssepochsts1sdlenscodeswritess total_writesswritesoidsloadss total_loadssloadsinvalsreportsrestart(sselfstssdlens_versionscodes_currentsoids_serial((s1/usr/pkg/lib/python2.2/site-packages/ZEO/simul.pysevents$  !   csdS(N((sselfsoidssize((s1/usr/pkg/lib/python2.2/site-packages/ZEO/simul.pyswritescsdS(N((sselfsoidssize((s1/usr/pkg/lib/python2.2/site-packages/ZEO/simul.pysloadscsdS(N((sselfsoid((s1/usr/pkg/lib/python2.2/site-packages/ZEO/simul.pysinvalss %12s %9s %8s %8s %6s %6s %6s %6ss*** please override ***c sOd|iit|ifGH|idddddd|iidfGHdS( Ns%s, cache size %s bytess START TIMEsDURATIONsLOADSsHITSsINVALSsWRITESsHITRATE(sselfs __class__s__name__s addcommass cachelimitsformats extranamesupper(sself((s1/usr/pkg/lib/python2.2/site-packages/ZEO/simul.pys printheadersic s|io|id7_|iti|idd!t|i|i|i|i |i |i t ||i t|i|i fGHndS(Niii(sselfsloadssnreportssformatstimesctimests0sdurationsts1shitssinvalsswritessgetattrs extranameshitrate(sself((s1/usr/pkg/lib/python2.2/site-packages/ZEO/simul.pysreports c s|i|idjoz|idti|idd!t|i|i|i |i |i |i t |d|it|i |i fGHndS(Nis OVERALLiistotal_(sselfsreportsnreportssformatstimesctimesepochsdurationsts1s total_loadss total_hitss total_invalss total_writessgetattrs extranameshitrate(sself((s1/usr/pkg/lib/python2.2/site-packages/ZEO/simul.pysfinishs (s__name__s __module__s__doc__s__init__srestartseventswritesloadsinvalsformats extranames printheadersnreportssreportsfinish(((s1/usr/pkg/lib/python2.2/site-packages/ZEO/simul.pys Simulations        sZEOCacheSimulationcsAtZdZdZdZdZdZdZdZRS(sSimulate the current (ZEO 1.0 and 2.0) ZEO cache behavior. This assumes the cache is not persistent (we don't know how to simulate cache validation.) sflipscsti||d|_dS(Ni(s Simulations__init__sselfs cachelimits total_flips(sselfs cachelimit((s1/usr/pkg/lib/python2.2/site-packages/ZEO/simul.pys__init__scsAti|d|_ddg|_hhg|_d|_dS(Nii(s Simulationsrestartsselfsflipssfilesizesfileoidsscurrent(sself((s1/usr/pkg/lib/python2.2/site-packages/ZEO/simul.pysrestart s   csn|i|ii|p|id|ii|o"|id7_|id7_n|i||dS(Ni( sselfsfileoidsscurrentsgetsoidshitss total_hitsswritessize(sselfsoidssize((s1/usr/pkg/lib/python2.2/site-packages/ZEO/simul.pysloads8cs|dd}|i|i||idjoR|id7_|id7_d|i|_d|i|is"(s__name__s __module__s__doc__sload(((s1/usr/pkg/lib/python2.2/site-packages/ZEO/simul.pysAltZEOCacheSimulation4s sLRUCacheSimulationcs;tZdZdZdZdZdZdZRS(Nsevictscsti||d|_dS(Ni(s Simulations__init__sselfs cachelimits total_evicts(sselfs cachelimit((s1/usr/pkg/lib/python2.2/site-packages/ZEO/simul.pys__init__RscsQti|d|_h|_d|_ttt|_|ii |idS(Ni( s SimulationsrestartsselfsevictsscachessizesNodesNonesheads linkbefore(sself((s1/usr/pkg/lib/python2.2/site-packages/ZEO/simul.pysrestartXs     cse|ii|}|tj o2|id7_|id7_|i|i n|i ||dS(Ni( sselfscachesgetsoidsnodesNoneshitss total_hitss linkbeforesheadswritessize(sselfsoidssizesnode((s1/usr/pkg/lib/python2.2/site-packages/ZEO/simul.pysloadcs  cs|ii|}|tj o |i|i|i8_nt||}||i|<|i |i |i|7_xk|i|i joW|i d7_ |i d7_ |i i}|i|i|i=|i|i8_q}WdS(Ni(sselfscachesgetsoidsnodesNonesunlinkssizesNodes linkbeforesheads cachelimitsevictss total_evictssnext(sselfsoidssizesnode((s1/usr/pkg/lib/python2.2/site-packages/ZEO/simul.pyswritels&      csk|ii|}|tj oH|id7_|id7_|i|i|=|i |i 8_ ndS(Ni( sselfscachesgetsoidsnodesNonesinvalss total_invalssunlinkssize(sselfsoidsnode((s1/usr/pkg/lib/python2.2/site-packages/ZEO/simul.pysinvals   (s__name__s __module__s extranames__init__srestartsloadswritesinval(((s1/usr/pkg/lib/python2.2/site-packages/ZEO/simul.pysLRUCacheSimulationNs   sNodecsAtZdZeZddddgZdZdZdZRS(sNode in a doubly-linked list, storing oid and size as payload. A node can be linked or unlinked; in the latter case, next and prev are None. Initially a node is unlinked. sprevsnextsoidssizecs&||_||_t|_|_dS(N(soidsselfssizesNonesprevsnext(sselfsoidssize((s1/usr/pkg/lib/python2.2/site-packages/ZEO/simul.pys__init__s  csI|i}|i}|tj o&||_||_t|_|_ndS(N(sselfsprevsnextsNone(sselfsprevsnext((s1/usr/pkg/lib/python2.2/site-packages/ZEO/simul.pysunlinks     csP|i|i}|tjo |}n||_||_||_|_dS(N(sselfsunlinksnextsprevsNone(sselfsnextsprev((s1/usr/pkg/lib/python2.2/site-packages/ZEO/simul.pys linkbefores      ( s__name__s __module__s__doc__stypes __metaclass__s __slots__s__init__sunlinks linkbefore(((s1/usr/pkg/lib/python2.2/site-packages/ZEO/simul.pysNodes   sBuddyCacheSimulationcs5tZdZdZdZdZdZRS(Ncsti|t|dS(N(sLRUCacheSimulations__init__sselfsroundups cachelimit(sselfs cachelimit((s1/usr/pkg/lib/python2.2/site-packages/ZEO/simul.pys__init__scs&ti||i|i|_dS(N(sLRUCacheSimulationsrestartsselfsallocatorFactorys cachelimits allocator(sself((s1/usr/pkg/lib/python2.2/site-packages/ZEO/simul.pysrestarts cst|SdS(N(sBuddyAllocatorssize(sselfssize((s1/usr/pkg/lib/python2.2/site-packages/ZEO/simul.pysallocatorFactoryscs!|ii|}|tj o0|i|i|i8_|ii |nxdo|ii |}|tj oPn|i i }|i d7_ |id7_|i|i|i=|i|i8_|ii |qRW||_||i|<|i|i |i|i7_dS(Ni(sselfscachesgetsoidsnodesNonesunlinkssizes allocatorsfreesallocsheadsnextsevictss total_evictss linkbefore(sselfsoidssizesnode((s1/usr/pkg/lib/python2.2/site-packages/ZEO/simul.pyswrites0        cs{|ii|}|tj oX|id7_|id7_|i|i|=|i |i 8_ |i i |ndS(Ni( sselfscachesgetsoidsnodesNonesinvalss total_invalssunlinkssizes allocatorsfree(sselfsoidsnode((s1/usr/pkg/lib/python2.2/site-packages/ZEO/simul.pysinvals   (s__name__s __module__s__init__srestartsallocatorFactoryswritesinval(((s1/usr/pkg/lib/python2.2/site-packages/ZEO/simul.pysBuddyCacheSimulations     sSimpleCacheSimulationcstZdZdZRS(Ncst|SdS(N(sSimpleAllocatorssize(sselfssize((s1/usr/pkg/lib/python2.2/site-packages/ZEO/simul.pysallocatorFactoryscsti||iidS(N(sBuddyCacheSimulationsfinishsselfs allocatorsreport(sself((s1/usr/pkg/lib/python2.2/site-packages/ZEO/simul.pysfinishs (s__name__s __module__sallocatorFactorysfinish(((s1/usr/pkg/lib/python2.2/site-packages/ZEO/simul.pysSimpleCacheSimulations isBuddyAllocatorcs/tZdZdZdZddZRS(Ncst|}||_h|_h|_t}xC||jo5ttt|i|<}|i |||7}q0Wt t|d}||id<|i |i|dS(Ni( sroundups cachelimitsselfsavailsnodessMINSIZEsksNodesNonesns linkbefores BlockNodesnode(sselfs cachelimitsnodesksn((s1/usr/pkg/lib/python2.2/site-packages/ZEO/simul.pys__init__s       cst|}|}xK||ijo6|i|}|i}||j oPn||7}qWt S|i |i}xb||joT|d}||_t t ||i |}||i|i <|i|i|qvWd|_|SdS(Nii(sroundupssizesksselfs cachelimitsavailsheadsnextsnodesNonesunlinkssize2s BlockNodesaddrsbuddysnodess linkbeforesoid(sselfssizesnodesheadsbuddyssize2sk((s1/usr/pkg/lib/python2.2/site-packages/ZEO/simul.pysallocs,          cst|_x|i|ijo|i|iA}|i|}|itj p|i|ijoPn|i |i|ijo|i|i=|}n|i|i=|id9_q W|i |i |idS(Ni( sNonesnodesoidssizesselfs cachelimitsaddrs buddy_addrsnodessbuddysunlinks linkbeforesavail(sselfsnodes buddy_addrsbuddy((s1/usr/pkg/lib/python2.2/site-packages/ZEO/simul.pysfrees$  #    scs|o|Gnt}d}}x||ijo|i|}|i }d}x%||j o|d7}|i }qQW|od||fGn||7}|||7}||7}q"Wd||fGHdS(Niis%d:%ds -- %d, %d( smsgsMINSIZEssizesblockssbytessselfs cachelimitsavailsheadsnextsnodescount(sselfsmsgsnodesheadsblockssbytesscountssize((s1/usr/pkg/lib/python2.2/site-packages/ZEO/simul.pysdump1s&      (s__name__s __module__s__init__sallocsfreesdump(((s1/usr/pkg/lib/python2.2/site-packages/ZEO/simul.pysBuddyAllocators   cs-t}x||jo||7}q W|SdS(N(sMINSIZEskssize(ssizesk((s1/usr/pkg/lib/python2.2/site-packages/ZEO/simul.pysroundupDs  sSimpleAllocatorcs8tZdZdZdZdZddZRS(Ncs||_ttdd|_|i|_tt|d}|i|ih|d<|_h||<|_ d|_ d|_ d|_ ||_ d|_d|_d|_dS(Nii(s arenasizesselfs BlockNodesNonesavailsroversnodes linkbeforestaglostaghisnallocssnfreess allocloopss freebytess freeblockss allocbytess allocblocks(sselfs arenasizesnode((s1/usr/pkg/lib/python2.2/site-packages/ZEO/simul.pys__init__Ls        cs7d|i|i|i|i|i|i|ifGHdS(Ns-NA=%d AL=%d NF=%d ABy=%d ABl=%d FBy=%d FBl=%d(sselfsnallocss allocloopssnfreess allocbytess allocblockss freebytess freeblocks(sself((s1/usr/pkg/lib/python2.2/site-packages/ZEO/simul.pysreport]scsz|id7_|i}}xNdoF|id7_|i|joPn|i}||jotSnqW|i|jox|i|_|i|i |i =|i |i |=|i d8_ |i d7_ |i|8_|i|7_|Sntt||i }|i |i =|i|8_|i |7_ ||i |i <|i d7_ |i|8_|i|7_|SdS(Ni(sselfsnallocssroversstops allocloopsssizesnextsNonesunlinkstaglosaddrstaghis freeblockss allocblockss freebytess allocbytess BlockNodesnode(sselfssizesnodesroversstop((s1/usr/pkg/lib/python2.2/site-packages/ZEO/simul.pysallocds<        cs|id7_|id7_|id8_|i|i7_|i|i8_|i|i ||i |i <||i |i |i<|i i |i }|tj oy|i|id8_|i |i =|i |i |i=|i |i =|i |_ |i|i7_||i |i