Browse Source

test

release/v0.1
jl777 9 years ago
parent
commit
9a1a820056
  1. 4
      iguana/iguana777.h
  2. 2
      iguana/iguana_bundles.c
  3. 65
      iguana/iguana_ramchain.c
  4. 36
      iguana/iguana_unspents.c

4
iguana/iguana777.h

@ -23,7 +23,7 @@
typedef int32_t (*blockhashfunc)(uint8_t *blockhashp,uint8_t *serialized,int32_t len);
#define IGUANA_MAXSCRIPTSIZE 10001
#define IGUANA_SERIALIZE_SPENDVECTORGEN
//#define IGUANA_SERIALIZE_SPENDVECTORGEN
//#define IGUANA_DISABLEPEERS
#define _IGUANA_MAXSTUCKTIME 30
#define IGUANA_MAXITERATIONS 10000
@ -816,7 +816,7 @@ int32_t iguana_balancecalc(struct iguana_info *coin,struct iguana_bundle *bp,int
int32_t iguana_sendblockreqPT(struct iguana_info *coin,struct iguana_peer *addr,struct iguana_bundle *bp,int32_t bundlei,bits256 hash2,int32_t iamthreadsafe);
int32_t iguana_blockreq(struct iguana_info *coin,int32_t height,int32_t priority);
int64_t iguana_bundlecalcs(struct iguana_info *coin,struct iguana_bundle *bp,int32_t lag);
void iguana_ramchain_prefetch(struct iguana_info *coin,struct iguana_ramchain *ramchain);
void iguana_ramchain_prefetch(struct iguana_info *coin,struct iguana_ramchain *ramchain,int32_t txonly);
int32_t iguana_realtime_update(struct iguana_info *coin);
int32_t iguana_mapvolatiles(struct iguana_info *coin,struct iguana_ramchain *ramchain);
void iguana_purgevolatiles(struct iguana_info *coin,struct iguana_ramchain *ramchain);

2
iguana/iguana_bundles.c

@ -726,7 +726,7 @@ int32_t iguana_bundlefinish(struct iguana_info *coin,struct iguana_bundle *bp)
for (i=0; i<bp->hdrsi; i++)
if ( (prevbp= coin->bundles[i]) == 0 || prevbp->emitfinish <= 1 || prevbp->utxofinish == 0 )
break;
if ( bp->hdrsi < coin->blocks.hwmchain.height/coin->chain->bundlesize && i >= bp->hdrsi-0*IGUANA_NUMHELPERS/4 && time(NULL) > bp->emitfinish+10 )//&& coin->emitbusy <= 4 )
if ( bp->hdrsi < coin->blocks.hwmchain.height/coin->chain->bundlesize && i >= bp->hdrsi-IGUANA_NUMHELPERS/2 && time(NULL) > bp->emitfinish+10 )//&& coin->emitbusy <= 4 )
{
if ( bp->startutxo == 0 )
{

65
iguana/iguana_ramchain.c

@ -633,43 +633,48 @@ void *iguana_ramchain_offset(void *dest,uint8_t *lhash,FILE *fp,uint64_t fpos,vo
return((void *)(long)((long)destptr + fpos));
}
void iguana_ramchain_prefetch(struct iguana_info *coin,struct iguana_ramchain *ramchain)
void iguana_ramchain_prefetch(struct iguana_info *coin,struct iguana_ramchain *ramchain,int32_t txonly)
{
struct iguana_pkhash *P,p; struct iguana_unspent *U,u; struct iguana_txid *T,txid; uint32_t i,numpkinds,numtxids,numunspents,tlen,plen,nonz=0; uint8_t *PKbits,*TXbits,*ptr;
if ( ramchain->H.data != 0 )
{
ptr = ramchain->fileptr;
for (i=0; i<ramchain->filesize; i++)
if ( ptr[i] != 0 )
nonz++;
//printf("nonz.%d of %d\n",nonz,(int32_t)ramchain->filesize);
return;
U = (void *)(long)((long)ramchain->H.data + ramchain->H.data->Uoffset);
T = (void *)(long)((long)ramchain->H.data + ramchain->H.data->Toffset);
P = (void *)(long)((long)ramchain->H.data + ramchain->H.data->Poffset);
TXbits = (void *)(long)((long)ramchain->H.data + ramchain->H.data->TXoffset);
PKbits = (void *)(long)((long)ramchain->H.data + ramchain->H.data->PKoffset);
numpkinds = ramchain->H.data->numpkinds;
numunspents = ramchain->H.data->numunspents;
numtxids = ramchain->H.data->numtxids;
tlen = ramchain->H.data->numtxsparse * ramchain->H.data->txsparsebits;
plen = ramchain->H.data->numpksparse * ramchain->H.data->pksparsebits;
if ( 0 )
if ( txonly == 0 )
{
ptr = ramchain->fileptr;
for (i=0; i<ramchain->filesize; i++)
if ( ptr[i] != 0 )
nonz++;
}
else
{
//printf("nonz.%d of %d\n",nonz,(int32_t)ramchain->filesize);
T = (void *)(long)((long)ramchain->H.data + ramchain->H.data->Toffset);
TXbits = (void *)(long)((long)ramchain->H.data + ramchain->H.data->TXoffset);
numtxids = ramchain->H.data->numtxids;
tlen = ramchain->H.data->numtxsparse * ramchain->H.data->txsparsebits;
for (i=1; i<numtxids; i++)
memcpy(&txid,&T[i],sizeof(txid));
for (i=1; i<numunspents; i++)
memcpy(&u,&U[i],sizeof(u));
for (i=1; i<numpkinds; i++)
memcpy(&p,&P[i],sizeof(p));
}
for (i=0; i<tlen; i++)
if ( TXbits[i] != 0 )
nonz++;
for (i=0; i<plen; i++)
if ( PKbits[i] != 0 )
nonz++;
printf("nonz.%d\n",nonz);
for (i=0; i<tlen; i++)
if ( TXbits[i] != 0 )
nonz++;
if ( 0 )
{
U = (void *)(long)((long)ramchain->H.data + ramchain->H.data->Uoffset);
P = (void *)(long)((long)ramchain->H.data + ramchain->H.data->Poffset);
PKbits = (void *)(long)((long)ramchain->H.data + ramchain->H.data->PKoffset);
numpkinds = ramchain->H.data->numpkinds;
numunspents = ramchain->H.data->numunspents;
plen = ramchain->H.data->numpksparse * ramchain->H.data->pksparsebits;
for (i=1; i<numunspents; i++)
memcpy(&u,&U[i],sizeof(u));
for (i=1; i<numpkinds; i++)
memcpy(&p,&P[i],sizeof(p));
for (i=0; i<plen; i++)
if ( PKbits[i] != 0 )
nonz++;
printf("nonz.%d\n",nonz);
}
}
}
}

36
iguana/iguana_unspents.c

@ -460,13 +460,13 @@ struct iguana_bundle *iguana_externalspent(struct iguana_info *coin,bits256 *pre
{
if ( spentbp->lastprefetch == 0 || now >= spentbp->lastprefetch+5*coin->PREFETCHLAG )
{
iguana_ramchain_prefetch(coin,&spentbp->ramchain);
iguana_ramchain_prefetch(coin,&spentbp->ramchain,1);
spentbp->lastprefetch = now;
}
else if ( duration > 1 && duration > (10 * coin->txidfind_totalmillis)/coin->txidfind_num && now >= spentbp->lastprefetch+coin->PREFETCHLAG )
else if ( duration > 1 && duration > (10 * coin->txidfind_totalmillis)/coin->txidfind_num )//&& now >= spentbp->lastprefetch+coin->PREFETCHLAG )
{
//printf("slow txidfind %.2f vs %.2f prefetch[%d] from.[%d] lag.%ld last.%u\n",duration,coin->txidfind_totalmillis/coin->txidfind_num,spentbp->hdrsi,ramchain->H.data->height/coin->chain->bundlesize,time(NULL) - spentbp->lastprefetch,spentbp->lastprefetch);
iguana_ramchain_prefetch(coin,&spentbp->ramchain);
printf("slow txidfind %.2f vs %.2f prefetch[%d] from.[%d] lag.%ld last.%u\n",duration,coin->txidfind_totalmillis/coin->txidfind_num,spentbp->hdrsi,ramchain->H.data->height/coin->chain->bundlesize,time(NULL) - spentbp->lastprefetch,spentbp->lastprefetch);
iguana_ramchain_prefetch(coin,&spentbp->ramchain,1);
spentbp->lastprefetch = now;
}
}
@ -672,7 +672,7 @@ void iguana_unspents(struct supernet_info *myinfo,struct iguana_info *coin,cJSON
free(rmdarray);
}
void iguana_prefetch(struct iguana_info *coin,struct iguana_bundle *bp,int32_t width)
void iguana_prefetch(struct iguana_info *coin,struct iguana_bundle *bp,int32_t width,int32_t txonly)
{
int32_t i; struct iguana_bundle *spentbp; uint32_t starttime = (uint32_t)time(NULL);
if ( bp->hdrsi > width )
@ -682,7 +682,7 @@ void iguana_prefetch(struct iguana_info *coin,struct iguana_bundle *bp,int32_t w
{
if ( (spentbp= coin->bundles[bp->hdrsi - i]) != 0 )
{
iguana_ramchain_prefetch(coin,&spentbp->ramchain);
iguana_ramchain_prefetch(coin,&spentbp->ramchain,txonly);
spentbp->lastprefetch = starttime;
}
}
@ -747,8 +747,8 @@ int32_t iguana_spendvectors(struct iguana_info *coin,struct iguana_bundle *bp,in
txidind = spendind = rdata->firsti;
if ( coin->PREFETCHLAG != 0 )
{
iguana_ramchain_prefetch(coin,ramchain);
iguana_prefetch(coin,bp,4);
iguana_ramchain_prefetch(coin,ramchain,1);
iguana_prefetch(coin,bp,4,1);
}
starttime = (uint32_t)time(NULL);
for (i=0; i<bp->n; i++)
@ -785,14 +785,14 @@ int32_t iguana_spendvectors(struct iguana_info *coin,struct iguana_bundle *bp,in
errs++;
break;
}
/*if ( coin->PREFETCHLAG != 0 && now >= spentbp->lastprefetch+coin->PREFETCHLAG )
{
printf("prefetch[%d] from.[%d] lag.%d\n",spentbp->hdrsi,bp->hdrsi,now - spentbp->lastprefetch);
iguana_ramchain_prefetch(coin,&spentbp->ramchain);
spentbp->lastprefetch = now;
}*/
if ( RTmode != 0 )
{
if ( coin->PREFETCHLAG != 0 && now >= spentbp->lastprefetch+coin->PREFETCHLAG )
{
//printf("prefetch[%d] from.[%d] lag.%d\n",spentbp->hdrsi,bp->hdrsi,now - spentbp->lastprefetch);
iguana_ramchain_prefetch(coin,&spentbp->ramchain,0);
spentbp->lastprefetch = now;
}
spentU = (void *)(long)((long)spentbp->ramchain.H.data + spentbp->ramchain.H.data->Uoffset);
u = &spentU[spent_unspentind];
if ( (spent_pkind= u->pkind) != 0 && spent_pkind < spentbp->ramchain.H.data->numpkinds )
@ -892,7 +892,7 @@ int32_t iguana_balancegen(struct iguana_info *coin,struct iguana_bundle *bp,int3
return(-1);
}
if ( coin->PREFETCHLAG != 0 )
iguana_ramchain_prefetch(coin,ramchain);
iguana_ramchain_prefetch(coin,ramchain,0);
//printf("BALANCEGEN.%d hdrs.%d\n",bp->bundleheight,bp->hdrsi);
txidind = spendind = rdata->firsti;
for (i=0; i<bp->n; i++)
@ -1031,7 +1031,7 @@ int32_t iguana_RTutxo(struct iguana_info *coin,struct iguana_bundle *bp,struct i
if ( 0 && coin->PREFETCHLAG != 0 && now >= spentbp->lastprefetch+coin->PREFETCHLAG )
{
printf("RT prefetch[%d] from.[%d] lag.%d bundlei.%d numspends.%d of %d\n",spentbp->hdrsi,bp->hdrsi,now - spentbp->lastprefetch,bundlei,spendind,RTramchain->H.spendind);
iguana_ramchain_prefetch(coin,&spentbp->ramchain);
iguana_ramchain_prefetch(coin,&spentbp->ramchain,1);
spentbp->lastprefetch = now;
}
}
@ -1309,8 +1309,8 @@ void iguana_RTramchainalloc(struct iguana_info *coin,struct iguana_bundle *bp)
dest->H.scriptoffset = 1;
if ( coin->PREFETCHLAG != 0 )
{
iguana_ramchain_prefetch(coin,&coin->RTramchain);
iguana_prefetch(coin,bp,7);
iguana_ramchain_prefetch(coin,&coin->RTramchain,0);
iguana_prefetch(coin,bp,3,0);
}
}
}

Loading…
Cancel
Save