美文网首页
EOS系统吞吐量TPS限制

EOS系统吞吐量TPS限制

作者: vergil6 | 来源:发表于2018-10-17 14:23 被阅读117次

    在区块链项目中,TPS就是代表每秒钟系统能处理的交易数(Transaction Per Second),EOS目前线上的TPS 最高估计也就1,2000/秒,一个原因是目前eos中所有的trx的执行都是串行的,也就是单线程,且不说以后把它改成并行执行trx技术上存在的复杂度,另外一个重要的原因是EOS系统吞吐量还受限制于block的大小,在resource_limits.cpp中的add_transaction_usage函数(关于eos用户资源管理可以参考我的另外一篇 eos用户资源管理resource_limits深入解析),add_transaction_usage函数调用发生在每成功执行一个trx之后,就是把本次trx执行的cpu时间,net大小记录在某个用户下面

    void resource_limits_manager::add_transaction_usage(const flat_set<account_name>& accounts, uint64_t cpu_usage, uint64_t net_usage, uint32_t time_slot ) {
       const auto& state = _db.get<resource_limits_state_object>();
       const auto& config = _db.get<resource_limits_config_object>();
        ....
       _db.modify(state, [&](resource_limits_state_object& rls){
          rls.pending_cpu_usage += cpu_usage;
          rls.pending_net_usage += net_usage;
       });
    
       EOS_ASSERT( state.pending_cpu_usage <= config.cpu_limit_parameters.max, block_resource_exhausted, "Block has insufficient cpu resources" );
       EOS_ASSERT( state.pending_net_usage <= config.net_limit_parameters.max, block_resource_exhausted, "Block has insufficient net resources" );
    }
    

    上述函数中间省略了一下判断是否超出该用户最大使用限制的代码,我们来看最后的2个EOS_ASSERT,pending_cpu_usage和pending_net_usage是对本块中所有执行trx资源使用进行累计, config.cpu_limit_parameters.max和config.net_limit_parameters.max这2个值其实就是max_block_cpu_usage和max_block_net_usage,我们可以通过下面命令行获得

    ./cleos -u http://api.eosnewyork.io get table eosio eosio global

    {
      "rows": [{
          "max_block_net_usage": 1048576,
    ...
          "max_block_cpu_usage": 200000,
    ...
        }
      ],
      "more": false
    }
    
    

    上述max_block_net_usage=1048576B即 1m,max_block_cpu_usage=200000us 即0.2s,也就是说每个区块所有的trx加起来不能超过1m,每个区块所有的trx执行cpu时间加起来不能大于0.2s

    现在我们假设每笔trx的大小为100字节(不考虑cpu时间),那么按照最大1m的block来说 tps = 10485/0.5s = 20970/s,也就是说按照目前最大区块容量为1m的限制,系统在trx大小为100字节的情况下 系统吞吐量tps=20970/s

    现在我们假设执行每笔trx的cpu时间为500us(不考虑net大小),那么按照最大200000us的cpu时间来说 tps = 400/0.5s = 800/s,也就是说按照最大200000us的cpu时间限制,系统在每笔trx的cpu时间为500us的情况下 系统吞吐量tps=800/s,假设有一天eos实现了并行执行trx的话,假设可以100路并行,那么这个时候的tps=80000/s

    最后如果要达到eos官方宣传100w/S TPS,那么区块的容量大小至少要50m,eos也必须实现并行执行且并发路数至少要上1000路

    相关文章

      网友评论

          本文标题:EOS系统吞吐量TPS限制

          本文链接:https://www.haomeiwen.com/subject/zszlzftx.html