LearnBitcoin

Bitcoin Dev Archive 2012

performance testing for bitcoin

5 messages, 3 to 4 Oct 2012. Started by Ian Miers.

Ian Miers (3), Jeff Garzik, Joel Joonatan Kaartinen

Permalink Original thread on gnusha.org

Ian Miers permalink original

Whats the best way to get performance numbers for modifications to bitcoin ? Profiling it while running on testnet might work, but that would take a rather long time to get data. Is there anyway to speed this up if we only needed to provide relative performance between tests. (in a sense a fast performance regression test).

At least in theory, one possibility would be to replay real bitcoin transactions to a test-net-in-a-box network (of maybe a few nodes) that has the real blockchain history loaded into it but then operates at a far reduced hash difficulty in order facilitate running quickly.

Are there existing techniques/scripts for some kind of perf testing with traffic that at least approximates real world traffic ? The test infrastructure that ships with bitcoin does not appear to provide this.

Thanks, Ian

Quoted text (2 lines)
>
>
Jeff Garzik in reply to Ian Miers permalink original

On Wed, Oct 3, 2012 at 1:38 PM, Ian Miers <imiers1@jhu•edu> wrote:

Quoted text (5 lines)
> Whats the best way to get performance numbers for modifications to bitcoin ?
> Profiling it while running on testnet might work, but that would take a
> rather long time to get data.
> Is there anyway to speed this up  if we only needed to provide  relative
> performance between tests. (in a sense a fast performance regression test).

You have to be specific about what you're measuring, because "performance" is vague.

You can measure many aspects of blockchain performance by importing blocks via -loadblock=FILE.

Other performance measurements like "how fast does a block relay through the network" cannot be as easily measured.

Ian Miers in reply to Jeff Garzik permalink original

Script evaluation performance was what I was primarily concerned with. I'm fooling around with adding some new instruction types. The tricky part is that to test how that effects performance, you need to be able to intersperse transactions with the new instructions with existing ones. For accuracy, you'd like your simulated traffic to at least approximate the real world traffic.

Also, is there any bench-marking / instrumentation in bitcoind ?

Ian On Wed, Oct 3, 2012 at 1:43 PM, Jeff Garzik <jgarzik@exmulti•com> wrote:

Quoted text (23 lines)
> On Wed, Oct 3, 2012 at 1:38 PM, Ian Miers <imiers1@jhu•edu> wrote:
> > Whats the best way to get performance numbers for modifications to
> bitcoin ?
> > Profiling it while running on testnet might work, but that would take a
> > rather long time to get data.
> > Is there anyway to speed this up  if we only needed to provide  relative
> > performance between tests. (in a sense a fast performance regression
> test).
>
> You have to be specific about what you're measuring, because
> "performance" is vague.
>
> You can measure many aspects of blockchain performance by importing
> blocks via -loadblock=FILE.
>
> Other performance measurements like "how fast does a block relay
> through the network" cannot be as easily measured.
>
> --
> Jeff Garzik
> exMULTI, Inc.
> jgarzik@exmulti•com
>
Joel Joonatan Kaartinen in reply to Ian Miers permalink original

For script evaluation benchmarking, I don't think just a good approximation of real-world traffic is enough. You really need to benchmark the worst case scenarios, otherwise you could be creating a DoS vulnerability.

- Joel

ke, 2012-10-03 kello 13:57 -0400, Ian Miers kirjoitti:

Quoted text (53 lines)
> Script evaluation performance was what I was primarily concerned
> with.  I'm fooling around with adding some new instruction types.
> The tricky part is that to test how that effects performance, you need
> to be able to intersperse transactions with the new instructions with
> existing ones.  For accuracy, you'd like your simulated traffic to at
> least approximate the real world traffic.
>
>
>
>
> Also, is there any bench-marking / instrumentation in bitcoind ?
>
>
> Ian
> On Wed, Oct 3, 2012 at 1:43 PM, Jeff Garzik <jgarzik@exmulti•com>
> wrote:
>         On Wed, Oct 3, 2012 at 1:38 PM, Ian Miers <imiers1@jhu•edu>
>         wrote:
>         > Whats the best way to get performance numbers for
>         modifications to bitcoin ?
>         > Profiling it while running on testnet might work, but that
>         would take a
>         > rather long time to get data.
>         > Is there anyway to speed this up  if we only needed to
>         provide  relative
>         > performance between tests. (in a sense a fast performance
>         regression test).
>
>
>         You have to be specific about what you're measuring, because
>         "performance" is vague.
>
>         You can measure many aspects of blockchain performance by
>         importing
>         blocks via -loadblock=FILE.
>
>         Other performance measurements like "how fast does a block
>         relay
>         through the network" cannot be as easily measured.
>
>         --
>         Jeff Garzik
>         exMULTI, Inc.
>         jgarzik@exmulti•com
>
>
> ------------------------------------------------------------------------------
> Don't let slow site performance ruin your business. Deploy New Relic APM
> Deploy New Relic app performance management and know exactly
> what is happening inside your Ruby, Python, PHP, Java, and .NET app
> Try New Relic at no cost today and get our sweet Data Nerd shirt too!
> http://p.sf.net/sfu/newrelic-dev2dev
> _______________________________________________ Bitcoin-development mailing list Bitcoin-development@lists•sourceforge•net https://lists.sourceforge.net/lists/listinfo/bitcoin-development
Ian Miers in reply to Joel Joonatan Kaartinen permalink original

Agreed, you need to consider DoS attacks. I have that in my mind under security and not performance. I'd imagine the test methodology would be completely different since you no longer are attempting to simulate real world traffic.

Ian

On Thu, Oct 4, 2012 at 5:55 AM, Joel Joonatan Kaartinen < joel.kaartinen@gmail•com> wrote:

Quoted text (67 lines)
> For script evaluation benchmarking, I don't think just a good
> approximation of real-world traffic is enough. You really need to
> benchmark the worst case scenarios, otherwise you could be creating a
> DoS vulnerability.
>
> - Joel
>
> ke, 2012-10-03 kello 13:57 -0400, Ian Miers kirjoitti:
> > Script evaluation performance was what I was primarily concerned
> > with.  I'm fooling around with adding some new instruction types.
> > The tricky part is that to test how that effects performance, you need
> > to be able to intersperse transactions with the new instructions with
> > existing ones.  For accuracy, you'd like your simulated traffic to at
> > least approximate the real world traffic.
> >
> >
> >
> >
> > Also, is there any bench-marking / instrumentation in bitcoind ?
> >
> >
> > Ian
> > On Wed, Oct 3, 2012 at 1:43 PM, Jeff Garzik <jgarzik@exmulti•com>
> > wrote:
> >         On Wed, Oct 3, 2012 at 1:38 PM, Ian Miers <imiers1@jhu•edu>
> >         wrote:
> >         > Whats the best way to get performance numbers for
> >         modifications to bitcoin ?
> >         > Profiling it while running on testnet might work, but that
> >         would take a
> >         > rather long time to get data.
> >         > Is there anyway to speed this up  if we only needed to
> >         provide  relative
> >         > performance between tests. (in a sense a fast performance
> >         regression test).
> >
> >
> >         You have to be specific about what you're measuring, because
> >         "performance" is vague.
> >
> >         You can measure many aspects of blockchain performance by
> >         importing
> >         blocks via -loadblock=FILE.
> >
> >         Other performance measurements like "how fast does a block
> >         relay
> >         through the network" cannot be as easily measured.
> >
> >         --
> >         Jeff Garzik
> >         exMULTI, Inc.
> >         jgarzik@exmulti•com
> >
> >
> >
> ------------------------------------------------------------------------------
> > Don't let slow site performance ruin your business. Deploy New Relic APM
> > Deploy New Relic app performance management and know exactly
> > what is happening inside your Ruby, Python, PHP, Java, and .NET app
> > Try New Relic at no cost today and get our sweet Data Nerd shirt too!
> > http://p.sf.net/sfu/newrelic-dev2dev
> > _______________________________________________ Bitcoin-development
> mailing list Bitcoin-development@lists•sourceforge•net
> https://lists.sourceforge.net/lists/listinfo/bitcoin-development
>
>
>