管道 VM – 并行处理数千个智能合约

了解使索拉纳成为全球性能最优的区块链的 7 项关键技术中的 1 项

Solana是稳定高效运作最佳的公链。 在 Solana Testnet 的当前迭代中,由 200 个物理上不同的节点组成的网络支持使用 GPU 运行时每秒超过 50,000 个事务的持续吞吐量。 实现这一点需要实现多项优化和新技术,其结果是网络容量的突破,标志着区块链开发进入一个新阶段。

有 7 项关键创新使索拉纳网络成为可能:

在本博客文章中,我们将探讨管道VM,索拉纳的并行智能合约运行时。 在开始之前,需要考虑的一件事是 EVM 和 EOS 基于 WASM 的运行时都是单线程的。 这意味着一次一个合约修改区块链状态。 我们在 Solana 中构建的是一个运行时,它可以并行处理数以万计的协定,使用验证器可用的内核数量。

索拉纳能够并行处理事务的原因是,索拉纳事务描述了事务在执行时将读取或写入的所有状态。 这不仅允许非重叠事务同时执行,还允许只读取相同状态的事务同时执行。

程序和帐户

云中断,我们的帐户数据库,是公钥到帐户的映射。 帐户维护余额和数据,其中数据是字节的矢量。 帐户具有”所有者”字段。 所有者是管理帐户的状态转换的程序的公钥。 程序是代码,没有状态。 它们依赖于分配给它们的”帐户”中的数据矢量进行状态转换。

  1. 程序只能更改其拥有的帐户的数据。
  2. 程序只能借记他们拥有的帐户。
  3. 任何程序都可以贷记任何帐户。
  4. 任何程序都可以读取任何帐户。

默认情况下,所有帐户都从系统程序所有开始。

  1. 系统程序是唯一可以分配帐户所有权的程序。
  2. 系统程序是唯一可以分配零初始化数据的程序。
  3. 帐户所有权的分配只能在帐户的生存期内发生一次。

用户定义的程序由加载程序加载。 加载程序能够将帐户中的数据标记为可执行。 用户执行以下事务以加载自定义程序:

  1. 创建新公钥。
  2. 将硬币转移到钥匙上。
  3. 告诉系统程序分配内存。
  4. 告诉系统程序将帐户分配给加载程序。
  5. 将字节码分段上载到内存中。
  6. 告诉加载程序将内存标记为可执行。

此时,加载程序将验证字节码,并且字节码加载到的帐户可用作可执行程序。 可以将新帐户标记为由用户定义的程序拥有。

这里的关键见解是程序是代码,在我们的键值存储中,存在程序具有写入访问权限的一些密钥子集。

交易

事务指定指令矢量。 每个指令都包含程序、程序指令和事务要读取和写入的帐户列表。 此接口的灵感来自到设备的低电平操作系统接口:

大小t
readv(int d, covec ioov, int iovcnt);结构 iovec =
char iov_base;
/基本地址。/
大小t iov_len;/长度。/
};

诸如readv或writev等接口提前告知内核用户想要读取或写入的所有内存。 这允许操作系统预取、准备设备,并在设备允许时同时执行操作。

在 Solana 上,每个指令都告诉 VM 要提前读取和写入哪些帐户。 这是我们对 VM 进行优化的根。

  1. 对数百万个待处理事务进行排序。
  2. 并行计划所有非重叠事务。

更重要的是,我们可以利用 CPU 和 GPU 硬件的设计方式。

Solana, 以区块链为核心的规模性扩展平台

SIMD指令允许单个代码段在多个数据流上执行。 这意味着管道可以执行额外的优化,这是索拉纳设计所独有的:

  1. 按程序 ID 对所有说明进行排序。
  2. 对所有帐户同时运行同一程序。

要了解为什么这是如此强大的优化,请查看CUDA 开发人员指南:

“CUDA 架构是围绕多线程流式处理多处理器 (SM) 的可扩展阵列构建的。当主机 CPU 上的 CUDA 程序调用内核网格时,网格的块将枚举并分发到具有可用执行容量的多处理器。

现代 Nvidia GPU 具有 4000 个 CUDA 内核,但约有 50 个多处理器。 虽然多处理器一次只能执行单个程序指令,但它可以并行执行超过 80 个不同的输入。 因此,如果管道 VM 加载的传入事务都调用相同的程序指令,如加密Kitties::BreedCats,索拉纳可以同时在所有可用的 CUDA 内核上执行所有事务。

性能上没有免费的午餐,因此,对于 SIMD 优化是可行的,执行的指令应包含少量分支,并且应全部采用相同的分支。 多处理器受批处理中执行的最慢路径绑定。 即使考虑到这一点,通过管道 VM 的并行处理还是提供了一个基础开发,区块链网络与单线程运行时相比具有功能,实现了极高的吞吐量和可用性。

Solana, 以区块链为核心的规模性扩展平台

Solana 实施管道 VM,以及历史证明、复制证明和海湾流等创新技术,共同创建了世界上性能最优的区块链。 索拉纳的测试网今天就直播了。 你可以在https://testnet.https://solana.com/看到它。 出于成本目的,我们只运行少量节点。 但是,我们已经在许多实例上将其拆分为 AWS、GCE 和 Azure 上的 23 个数据中心的 200 多个物理上不同的节点(不在共享硬件上),以便进行基准测试。

运行时现在运行正常,开发人员现在可以在测试上部署代码。 开发人员现在可以在 C 中构建智能合约,我们正在积极开发 Rust 工具链。 锈将是索拉纳智能合约开发的主要语言。 Rust 工具链作为索拉纳 Javascript SDK 的一部分公开提供,我们正在进一步迭代软件开发工具包。

索拉纳将很快推出一个公共测试版激励验证器,通过Tour de SOL运行节点,类似于宇宙的赌注游戏,挑战广大公众测试索拉纳网络的极限,同时赚取令牌这样做。