EVM Paralelleştirme Optimizasyonu: Performans Darboğazını Aşmanın Anahtarı
Herkesin bildiği gibi, EVM Ethereum'un en önemli çekirdek bileşenlerinden biridir ve "uygulama motoru" ve "akıllı sözleşme yürütme ortamı" olarak konumlandırılmıştır. Kamu blok zinciri, çok sayıda düğüm içeren açık bir ağ olduğundan, farklı düğümlerin donanım parametreleri arasında büyük farklılıklar vardır. Akıllı sözleşmelerin birden fazla düğümde aynı sonuçları elde edebilmesi için "tutarlılık" gereksinimlerini karşılamak üzere, sanal makine teknolojisi farklı cihazlarda aynı ortamın inşa edilmesine olanak tanır.
EVM, akıllı sözleşmeleri çeşitli işletim sistemlerinde ve cihazlarda aynı şekilde çalıştırabilir. Bu çapraz platform uyumluluğu, her bir düğüm sözleşmeyi yürüttükten sonra tutarlı sonuçlar almasını sağlar. Bu, Java sanal makinesi JVM'in prensibiyle benzerdir.
Blockchain gezgini üzerinde gördüğümüz akıllı sözleşmeler, önce EVM bayt koduna derlenir ve ardından zincire kaydedilir. EVM sözleşmeyi yürütürken, bu bayt kodunu sırayla okur; her bir talimatın belirli bir Gas maliyeti vardır. EVM, her talimatın yürütülmesi sırasında Gas tüketimini takip eder; tüketim miktarı işlemin karmaşıklığına bağlıdır.
Ethereum'in temel yürütme motoru olarak EVM, işlemleri seri bir şekilde işler, tüm işlemler tek bir kuyrukta sıraya alınır ve belirli bir sırayla yürütülür. Paralel işleme yöntemi kullanılmamasının nedeni, blok zincirinin tutarlılığı kesin bir şekilde sağlaması gerektiğidir; bir grup işlem tüm düğümlerde aynı sırayla işlenmelidir. İşlem işleme paralel hale getirilirse, işlem sırasını tam olarak tahmin etmek zor olur, karmaşık bir zamanlama algoritması getirilmedikçe.
Ethereum kurucu ekibi, 2014-2015 yıllarında zamanın kısıtlı olması nedeniyle, basit ve bakımının kolay olduğu seri yürütme yöntemini seçti. Ancak, blockchain teknolojisinin evrimi ve kullanıcı grubunun genişlemesiyle birlikte, TPS ve işlem hacmi talepleri giderek artmıştır. Rollup teknolojisinin olgunlaşmasıyla birlikte, EVM'nin seri yürütmesinin getirdiği performans darboğazları Ethereum ikinci katman ağında bariz hale gelmiştir.
Sequencer, Layer2'nin ana bileşeni olarak, tüm hesaplama görevlerini tek bir sunucu şeklinde üstlenir. Eğer Sequencer ile birlikte çalışan dış modüllerin verimliliği yeterince yüksekse, nihai darboğaz Sequencer'ın kendisinin verimliliğine bağlı olacaktır; bu durumda seri yürütme büyük bir engel haline gelecektir.
Bir takım, DA katmanı ve veri okuma/yazma modülünü aşırı optimize ederek, Sequencer'ın saniyede yaklaşık 2000'den fazla ERC-20 transferi gerçekleştirebilmesini sağladı. Bu sayı oldukça yüksek görünse de, işlenen işlemler ERC-20 transferlerinden çok daha karmaşık olursa, TPS değeri mutlaka büyük oranda düşecektir. Bu nedenle, işlem işlemenin paralelleştirilmesi gelecekte kaçınılmaz bir trend haline gelecektir.
Sonrasında, geleneksel EVM'nin sınırlılıklarını ve paralel EVM'nin avantajlarını derinlemesine inceleyeceğiz.
Ethereum İşlemi Gerçekleştirmenin İki Temel Bileşeni
Kod modülü seviyesinde, EVM dışında go-ethereum'da işlem yürütme ile ilgili diğer bir temel bileşen stateDB'dir ve Ethereum'daki hesap durumunu ve veri depolamasını yönetmek için kullanılır. Ethereum, veritabanı indekslemesi için Merkle Patricia Trie adı verilen ağaç yapısını benimsemektedir. EVM her işlem yürütme sırasında stateDB'deki bazı verileri değiştirir, bu değişiklikler nihayetinde küresel durum ağacında yansıtılır.
stateDB, tüm Ethereum hesaplarının durumunu, EOA hesapları ve sözleşme hesapları dahil olmak üzere, hesap bakiyeleri, akıllı sözleşme kodları gibi verileri saklayarak yönetir. İşlem gerçekleştirme sürecinde, stateDB ilgili hesapların verilerine okuma ve yazma işlemleri yapar. İşlem tamamlandığında, stateDB yeni durumu kalıcı işleme için alt veritabanına göndermesi gerekir.
Genel olarak, EVM akıllı sözleşme talimatlarını yorumlamak ve yürütmekten sorumludur, hesaplama sonuçlarına göre blok zincirindeki durumu değiştirirken, stateDB ise küresel durum depolama işlevi görerek tüm hesapların ve sözleşmelerin durum değişikliklerini yönetir. İkisi, Ethereum'un işlem yürütme ortamını oluşturmak için işbirliği yapar.
seri yürütme süreci
Ethereum işlemleri iki ana kategoriye ayrılır: EOA transferleri ve akıllı sözleşme işlemleri. EOA transferleri, sözleşme çağrısı içermeyen, normal hesaplar arasında ETH transferi yapılan en basit işlem türüdür, işleme hızı çok hızlıdır ve alınan gas ücreti son derece düşüktür.
Sözleşme ticareti, akıllı sözleşmelerin çağrılması ve yürütülmesini içerir. EVM, sözleşme ticaretini işlerken, akıllı sözleşmedeki bayt kodu komutlarını tek tek yorumlamak ve yürütmek zorundadır. Sözleşme mantığı ne kadar karmaşık olursa, ilgili komut sayısı o kadar fazla olur ve harcanan kaynak da o kadar artar.
Örneğin, ERC-20 transferlerinin işlenme süresi EOA transferlerinin yaklaşık 2 katıdır, ayrıca daha karmaşık bir akıllı sözleşme ( gibi bir DEX üzerindeki işlem ) daha uzun sürmektedir, EOA transferlerinden on kat daha yavaş olabilir. Bunun nedeni, DeFi protokollerinin işlem sırasında likidite havuzlarını, fiyat hesaplamalarını, token değişimlerini gibi karmaşık mantıkları işlemesi gerektiğidir, bu da büyük miktarda hesaplama gerektirir.
Seri yürütme modunda, EVM ile stateDB'nin işlem işleme süreci aşağıdaki gibidir:
Ethereum tasarımında, bir blok içindeki işlemler sırayla işlenir, her işlem bağımsız bir örnekte belirli işlemleri gerçekleştirir. Her işlem farklı EVM örnekleri kullanmasına rağmen, tüm işlemler aynı durum veritabanı stateDB'yi paylaşır.
İşlem yürütme sürecinde, EVM sürekli olarak stateDB ile etkileşimde bulunmalı, ilgili verileri okumalı ve değiştirilen verileri stateDB'ye yazmalıdır.
Kod açısından bakıldığında, EVM ve stateDB'nin birlikte işlem yürütme süreci genel olarak aşağıdaki gibidir:
processBlock() fonksiyonu, bir bloktaki işlemleri işlemek için Process() fonksiyonunu çağırır.
Process() fonksiyonunda bir for döngüsü tanımlanmıştır, işlemler teker teker gerçekleştirilir.
Tüm işlemler tamamlandıktan sonra, processBlock() fonksiyonu writeBlockWithState() fonksiyonunu çağırır, ardından statedb.Commit() fonksiyonunu çağırarak durum değişikliği sonuçlarını gönderir.
Bir bloktaki tüm işlemler tamamlandığında, stateDB'deki veriler küresel durum ağacına gönderilir ve yeni bir durum kökü oluşturulur. Durum kökü, her blokta önemli bir parametredir ve blok yürütüldükten sonra yeni küresel durumun "sıkıştırılmış sonucunu" kaydeder.
EVM'nin seri yürütme modunun dar boğazı belirgindir: işlemler sırayla yürütülmek zorundadır, eğer uzun süre alan bir akıllı sözleşme işlemi gerçekleşirse, diğer işlemler sadece beklemek zorundadır, CPU gibi donanım kaynakları yeterince kullanılamaz ve verimlilik büyük ölçüde sınırlıdır.
EVM'nin çoklu iş parçacığı paralel optimizasyon çözümü
Sıralı yürütmeyi ve paralel yürütmeyi karşılaştırdığımızda, ilki sadece bir gişesi olan bir bankaya benzerken, paralel EVM çoklu gişesi olan bir bankaya benzer. Paralel modda birçok iş parçacığı açarak birden fazla işlemi aynı anda işleme alabiliriz, verimlilik birkaç kat artabilir, ancak karşılaşılan zorluk durum çatışması sorunudur.
Eğer birçok işlem belirli bir hesabın verilerini değiştirmek için talepte bulunuyorsa, aynı anda işlenirken çakışmalar ortaya çıkacaktır. Örneğin, bir NFT yalnızca 1 kez basılabilirken, işlem 1 ve işlem 2 bu NFT'yi basmak istiyorsa, her iki talebin de karşılanması açıkça bir hataya yol açacaktır. Gerçek uygulamada, durum çakışmaları genellikle daha sık görülür, bu nedenle işlemlerin paralel işlenmesi için durum çakışmalarına karşı önlemler alınmalıdır.
Bir projenin EVM'nin paralel optimizasyon prensibi
Bir ZKRollup projesinin EVM için paralel optimizasyon yaklaşımı, her bir iş parçacığına bir işlem tahsis etmek ve her iş parçacığında geçici bir durum veritabanı sağlamak, buna pending-stateDB denir. Ayrıntılar aşağıdadır:
Çoklu iş parçacığı ile paralel işlem gerçekleştirme: Farklı işlemleri aynı anda işlemek için birden fazla iş parçacığı ayarlayın, iş parçacıkları arasında etkileşim yoktur, işlem işleme hızını kat kat artırabilir.
Her iş parçacığı için geçici durum veritabanı ayırın: Her iş parçacığına bağımsız bir geçici durum veritabanı (pending-stateDB) atanır. İş parçacığı işlem gerçekleştirdiğinde, doğrudan global stateDB'yi değiştirmez, bunun yerine durum değişikliği sonuçlarını geçici olarak pending-stateDB'de kaydeder.
Eşzamanlı Durum Değişiklikleri: Bir blok içindeki tüm işlemler tamamlandıktan sonra, EVM her bir pending-stateDB'de kaydedilen durum değişikliklerini sırasıyla global stateDB'ye senkronize eder. Eğer farklı işlemlerin yürütülmesi sırasında durum çakışması yoksa, pending-stateDB'deki kayıtlar sorunsuz bir şekilde global stateDB'ye birleştirilebilir.
Bu proje, işlemelerin durum verilerine doğru erişmesini sağlamak ve çakışmaları önlemek için okuma-yazma işlemlerinin işlenmesini optimize etti:
Okuma işlemi: İşlem durumu okuma gerektirdiğinde, EVM önce Pending-state'in ReadSet'ini kontrol eder. Eğer ReadSet gerekli verileri içeriyorsa, doğrudan pending-stateDB'den okur. Eğer ReadSet'de karşılık gelen anahtar-değer çifti yoksa, bir önceki bloğun karşılık gelen global stateDB'sinden tarihsel durum verilerini okur.
Yazma işlemi: Tüm yazma işlemleri ( yani durum değişikliği ) doğrudan global stateDB'ye yazılmaz, bunun yerine önce Pending-state'in WriteSet'ine kaydedilir. İşlem tamamlandıktan sonra, çakışma tespiti ile durum değişikliklerinin sonuçlarını global stateDB'ye birleştirmeye çalışılır.
Paralel yürütmenin ana sorunu durum çatışmasıdır; birden fazla işlem aynı hesap durumunu okumaya veya yazmaya çalıştığında özellikle belirgin hale gelir. Bunun için bir çatışma tespit mekanizması getirildi:
Çatışma tespiti: İşlem yürütme sürecinde, EVM farklı işlemlerin ReadSet ve WriteSet'ini izler. Eğer birden fazla işlem aynı durum öğesini okumaya veya yazmaya çalışıyorsa, bu bir çatışma olarak değerlendirilir.
Çatışma Yönetimi: Çatışma tespit edildiğinde, çatışma işlemi yeniden yürütülmesi gereken olarak işaretlenir.
Tüm işlemler tamamlandığında, birden fazla pending-stateDB'deki değişiklik kayıtları global stateDB'ye birleştirilecektir. Eğer birleştirme başarılı olursa, EVM nihai durumu global durum ağacına teslim edecek ve yeni bir durum kökü oluşturacaktır.
Çoklu iş parçacığı paralel optimizasyonu, özellikle karmaşık akıllı sözleşme işlemleriyle çalışırken performans artışında belirgin bir etkiye sahiptir. Araştırmalar, düşük çatışma yükünde, referans testlerinin TPS'sinin geleneksel seri yürütmeye göre 3-5 kat arttığını göstermektedir. Yüksek çatışma yükünde, teorik olarak tüm optimizasyon yöntemleri kullanıldığında, bu artışın 60 katına kadar ulaşabileceği öngörülmektedir.
Özet
Yukarıdaki EVM çoklu iş parçacığı paralel optimizasyon çözümü, her bir işlem için geçici durum deposu tahsis ederek ve farklı iş parçacıklarında paralel olarak işlemleri yürüterek, EVM'nin işlem işleme yeteneğini önemli ölçüde artırmıştır. Okuma/yazma işlemlerinin optimize edilmesi ve çelişki tespit mekanizmasının tanıtılması sayesinde, EVM tabanlı halka zincir, durum tutarlılığını sağlarken, işlemlerin büyük ölçekli paralelizasyonunu gerçekleştirebilmekte ve geleneksel seri yürütme modelinin getirdiği performans darboğazlarını çözmektedir. Bu, Ethereum Rollup'un gelecekteki gelişimi için önemli bir temel oluşturmaktadır.
Gelecek araştırma yönleri şunları içermektedir: performansı artırmak için depolama verimliliğinin daha da optimize edilmesi, yüksek çakışma durumlarına yönelik optimize edici çözümler ve GPU'dan yararlanarak optimizasyon yöntemleri.
This page may contain third-party content, which is provided for information purposes only (not representations/warranties) and should not be considered as an endorsement of its views by Gate, nor as financial or professional advice. See Disclaimer for details.
EVM Paralelleştirme Atılımı: Layer2 Performansını 60 Kat Artıran Anahtar Teknoloji
EVM Paralelleştirme Optimizasyonu: Performans Darboğazını Aşmanın Anahtarı
Herkesin bildiği gibi, EVM Ethereum'un en önemli çekirdek bileşenlerinden biridir ve "uygulama motoru" ve "akıllı sözleşme yürütme ortamı" olarak konumlandırılmıştır. Kamu blok zinciri, çok sayıda düğüm içeren açık bir ağ olduğundan, farklı düğümlerin donanım parametreleri arasında büyük farklılıklar vardır. Akıllı sözleşmelerin birden fazla düğümde aynı sonuçları elde edebilmesi için "tutarlılık" gereksinimlerini karşılamak üzere, sanal makine teknolojisi farklı cihazlarda aynı ortamın inşa edilmesine olanak tanır.
EVM, akıllı sözleşmeleri çeşitli işletim sistemlerinde ve cihazlarda aynı şekilde çalıştırabilir. Bu çapraz platform uyumluluğu, her bir düğüm sözleşmeyi yürüttükten sonra tutarlı sonuçlar almasını sağlar. Bu, Java sanal makinesi JVM'in prensibiyle benzerdir.
Blockchain gezgini üzerinde gördüğümüz akıllı sözleşmeler, önce EVM bayt koduna derlenir ve ardından zincire kaydedilir. EVM sözleşmeyi yürütürken, bu bayt kodunu sırayla okur; her bir talimatın belirli bir Gas maliyeti vardır. EVM, her talimatın yürütülmesi sırasında Gas tüketimini takip eder; tüketim miktarı işlemin karmaşıklığına bağlıdır.
Ethereum'in temel yürütme motoru olarak EVM, işlemleri seri bir şekilde işler, tüm işlemler tek bir kuyrukta sıraya alınır ve belirli bir sırayla yürütülür. Paralel işleme yöntemi kullanılmamasının nedeni, blok zincirinin tutarlılığı kesin bir şekilde sağlaması gerektiğidir; bir grup işlem tüm düğümlerde aynı sırayla işlenmelidir. İşlem işleme paralel hale getirilirse, işlem sırasını tam olarak tahmin etmek zor olur, karmaşık bir zamanlama algoritması getirilmedikçe.
Ethereum kurucu ekibi, 2014-2015 yıllarında zamanın kısıtlı olması nedeniyle, basit ve bakımının kolay olduğu seri yürütme yöntemini seçti. Ancak, blockchain teknolojisinin evrimi ve kullanıcı grubunun genişlemesiyle birlikte, TPS ve işlem hacmi talepleri giderek artmıştır. Rollup teknolojisinin olgunlaşmasıyla birlikte, EVM'nin seri yürütmesinin getirdiği performans darboğazları Ethereum ikinci katman ağında bariz hale gelmiştir.
Sequencer, Layer2'nin ana bileşeni olarak, tüm hesaplama görevlerini tek bir sunucu şeklinde üstlenir. Eğer Sequencer ile birlikte çalışan dış modüllerin verimliliği yeterince yüksekse, nihai darboğaz Sequencer'ın kendisinin verimliliğine bağlı olacaktır; bu durumda seri yürütme büyük bir engel haline gelecektir.
Bir takım, DA katmanı ve veri okuma/yazma modülünü aşırı optimize ederek, Sequencer'ın saniyede yaklaşık 2000'den fazla ERC-20 transferi gerçekleştirebilmesini sağladı. Bu sayı oldukça yüksek görünse de, işlenen işlemler ERC-20 transferlerinden çok daha karmaşık olursa, TPS değeri mutlaka büyük oranda düşecektir. Bu nedenle, işlem işlemenin paralelleştirilmesi gelecekte kaçınılmaz bir trend haline gelecektir.
Sonrasında, geleneksel EVM'nin sınırlılıklarını ve paralel EVM'nin avantajlarını derinlemesine inceleyeceğiz.
Ethereum İşlemi Gerçekleştirmenin İki Temel Bileşeni
Kod modülü seviyesinde, EVM dışında go-ethereum'da işlem yürütme ile ilgili diğer bir temel bileşen stateDB'dir ve Ethereum'daki hesap durumunu ve veri depolamasını yönetmek için kullanılır. Ethereum, veritabanı indekslemesi için Merkle Patricia Trie adı verilen ağaç yapısını benimsemektedir. EVM her işlem yürütme sırasında stateDB'deki bazı verileri değiştirir, bu değişiklikler nihayetinde küresel durum ağacında yansıtılır.
stateDB, tüm Ethereum hesaplarının durumunu, EOA hesapları ve sözleşme hesapları dahil olmak üzere, hesap bakiyeleri, akıllı sözleşme kodları gibi verileri saklayarak yönetir. İşlem gerçekleştirme sürecinde, stateDB ilgili hesapların verilerine okuma ve yazma işlemleri yapar. İşlem tamamlandığında, stateDB yeni durumu kalıcı işleme için alt veritabanına göndermesi gerekir.
Genel olarak, EVM akıllı sözleşme talimatlarını yorumlamak ve yürütmekten sorumludur, hesaplama sonuçlarına göre blok zincirindeki durumu değiştirirken, stateDB ise küresel durum depolama işlevi görerek tüm hesapların ve sözleşmelerin durum değişikliklerini yönetir. İkisi, Ethereum'un işlem yürütme ortamını oluşturmak için işbirliği yapar.
seri yürütme süreci
Ethereum işlemleri iki ana kategoriye ayrılır: EOA transferleri ve akıllı sözleşme işlemleri. EOA transferleri, sözleşme çağrısı içermeyen, normal hesaplar arasında ETH transferi yapılan en basit işlem türüdür, işleme hızı çok hızlıdır ve alınan gas ücreti son derece düşüktür.
Sözleşme ticareti, akıllı sözleşmelerin çağrılması ve yürütülmesini içerir. EVM, sözleşme ticaretini işlerken, akıllı sözleşmedeki bayt kodu komutlarını tek tek yorumlamak ve yürütmek zorundadır. Sözleşme mantığı ne kadar karmaşık olursa, ilgili komut sayısı o kadar fazla olur ve harcanan kaynak da o kadar artar.
Örneğin, ERC-20 transferlerinin işlenme süresi EOA transferlerinin yaklaşık 2 katıdır, ayrıca daha karmaşık bir akıllı sözleşme ( gibi bir DEX üzerindeki işlem ) daha uzun sürmektedir, EOA transferlerinden on kat daha yavaş olabilir. Bunun nedeni, DeFi protokollerinin işlem sırasında likidite havuzlarını, fiyat hesaplamalarını, token değişimlerini gibi karmaşık mantıkları işlemesi gerektiğidir, bu da büyük miktarda hesaplama gerektirir.
Seri yürütme modunda, EVM ile stateDB'nin işlem işleme süreci aşağıdaki gibidir:
Ethereum tasarımında, bir blok içindeki işlemler sırayla işlenir, her işlem bağımsız bir örnekte belirli işlemleri gerçekleştirir. Her işlem farklı EVM örnekleri kullanmasına rağmen, tüm işlemler aynı durum veritabanı stateDB'yi paylaşır.
İşlem yürütme sürecinde, EVM sürekli olarak stateDB ile etkileşimde bulunmalı, ilgili verileri okumalı ve değiştirilen verileri stateDB'ye yazmalıdır.
Kod açısından bakıldığında, EVM ve stateDB'nin birlikte işlem yürütme süreci genel olarak aşağıdaki gibidir:
processBlock() fonksiyonu, bir bloktaki işlemleri işlemek için Process() fonksiyonunu çağırır.
Process() fonksiyonunda bir for döngüsü tanımlanmıştır, işlemler teker teker gerçekleştirilir.
Tüm işlemler tamamlandıktan sonra, processBlock() fonksiyonu writeBlockWithState() fonksiyonunu çağırır, ardından statedb.Commit() fonksiyonunu çağırarak durum değişikliği sonuçlarını gönderir.
Bir bloktaki tüm işlemler tamamlandığında, stateDB'deki veriler küresel durum ağacına gönderilir ve yeni bir durum kökü oluşturulur. Durum kökü, her blokta önemli bir parametredir ve blok yürütüldükten sonra yeni küresel durumun "sıkıştırılmış sonucunu" kaydeder.
EVM'nin seri yürütme modunun dar boğazı belirgindir: işlemler sırayla yürütülmek zorundadır, eğer uzun süre alan bir akıllı sözleşme işlemi gerçekleşirse, diğer işlemler sadece beklemek zorundadır, CPU gibi donanım kaynakları yeterince kullanılamaz ve verimlilik büyük ölçüde sınırlıdır.
EVM'nin çoklu iş parçacığı paralel optimizasyon çözümü
Sıralı yürütmeyi ve paralel yürütmeyi karşılaştırdığımızda, ilki sadece bir gişesi olan bir bankaya benzerken, paralel EVM çoklu gişesi olan bir bankaya benzer. Paralel modda birçok iş parçacığı açarak birden fazla işlemi aynı anda işleme alabiliriz, verimlilik birkaç kat artabilir, ancak karşılaşılan zorluk durum çatışması sorunudur.
Eğer birçok işlem belirli bir hesabın verilerini değiştirmek için talepte bulunuyorsa, aynı anda işlenirken çakışmalar ortaya çıkacaktır. Örneğin, bir NFT yalnızca 1 kez basılabilirken, işlem 1 ve işlem 2 bu NFT'yi basmak istiyorsa, her iki talebin de karşılanması açıkça bir hataya yol açacaktır. Gerçek uygulamada, durum çakışmaları genellikle daha sık görülür, bu nedenle işlemlerin paralel işlenmesi için durum çakışmalarına karşı önlemler alınmalıdır.
Bir projenin EVM'nin paralel optimizasyon prensibi
Bir ZKRollup projesinin EVM için paralel optimizasyon yaklaşımı, her bir iş parçacığına bir işlem tahsis etmek ve her iş parçacığında geçici bir durum veritabanı sağlamak, buna pending-stateDB denir. Ayrıntılar aşağıdadır:
Çoklu iş parçacığı ile paralel işlem gerçekleştirme: Farklı işlemleri aynı anda işlemek için birden fazla iş parçacığı ayarlayın, iş parçacıkları arasında etkileşim yoktur, işlem işleme hızını kat kat artırabilir.
Her iş parçacığı için geçici durum veritabanı ayırın: Her iş parçacığına bağımsız bir geçici durum veritabanı (pending-stateDB) atanır. İş parçacığı işlem gerçekleştirdiğinde, doğrudan global stateDB'yi değiştirmez, bunun yerine durum değişikliği sonuçlarını geçici olarak pending-stateDB'de kaydeder.
Eşzamanlı Durum Değişiklikleri: Bir blok içindeki tüm işlemler tamamlandıktan sonra, EVM her bir pending-stateDB'de kaydedilen durum değişikliklerini sırasıyla global stateDB'ye senkronize eder. Eğer farklı işlemlerin yürütülmesi sırasında durum çakışması yoksa, pending-stateDB'deki kayıtlar sorunsuz bir şekilde global stateDB'ye birleştirilebilir.
Bu proje, işlemelerin durum verilerine doğru erişmesini sağlamak ve çakışmaları önlemek için okuma-yazma işlemlerinin işlenmesini optimize etti:
Okuma işlemi: İşlem durumu okuma gerektirdiğinde, EVM önce Pending-state'in ReadSet'ini kontrol eder. Eğer ReadSet gerekli verileri içeriyorsa, doğrudan pending-stateDB'den okur. Eğer ReadSet'de karşılık gelen anahtar-değer çifti yoksa, bir önceki bloğun karşılık gelen global stateDB'sinden tarihsel durum verilerini okur.
Yazma işlemi: Tüm yazma işlemleri ( yani durum değişikliği ) doğrudan global stateDB'ye yazılmaz, bunun yerine önce Pending-state'in WriteSet'ine kaydedilir. İşlem tamamlandıktan sonra, çakışma tespiti ile durum değişikliklerinin sonuçlarını global stateDB'ye birleştirmeye çalışılır.
Paralel yürütmenin ana sorunu durum çatışmasıdır; birden fazla işlem aynı hesap durumunu okumaya veya yazmaya çalıştığında özellikle belirgin hale gelir. Bunun için bir çatışma tespit mekanizması getirildi:
Çatışma tespiti: İşlem yürütme sürecinde, EVM farklı işlemlerin ReadSet ve WriteSet'ini izler. Eğer birden fazla işlem aynı durum öğesini okumaya veya yazmaya çalışıyorsa, bu bir çatışma olarak değerlendirilir.
Çatışma Yönetimi: Çatışma tespit edildiğinde, çatışma işlemi yeniden yürütülmesi gereken olarak işaretlenir.
Tüm işlemler tamamlandığında, birden fazla pending-stateDB'deki değişiklik kayıtları global stateDB'ye birleştirilecektir. Eğer birleştirme başarılı olursa, EVM nihai durumu global durum ağacına teslim edecek ve yeni bir durum kökü oluşturacaktır.
Çoklu iş parçacığı paralel optimizasyonu, özellikle karmaşık akıllı sözleşme işlemleriyle çalışırken performans artışında belirgin bir etkiye sahiptir. Araştırmalar, düşük çatışma yükünde, referans testlerinin TPS'sinin geleneksel seri yürütmeye göre 3-5 kat arttığını göstermektedir. Yüksek çatışma yükünde, teorik olarak tüm optimizasyon yöntemleri kullanıldığında, bu artışın 60 katına kadar ulaşabileceği öngörülmektedir.
Özet
Yukarıdaki EVM çoklu iş parçacığı paralel optimizasyon çözümü, her bir işlem için geçici durum deposu tahsis ederek ve farklı iş parçacıklarında paralel olarak işlemleri yürüterek, EVM'nin işlem işleme yeteneğini önemli ölçüde artırmıştır. Okuma/yazma işlemlerinin optimize edilmesi ve çelişki tespit mekanizmasının tanıtılması sayesinde, EVM tabanlı halka zincir, durum tutarlılığını sağlarken, işlemlerin büyük ölçekli paralelizasyonunu gerçekleştirebilmekte ve geleneksel seri yürütme modelinin getirdiği performans darboğazlarını çözmektedir. Bu, Ethereum Rollup'un gelecekteki gelişimi için önemli bir temel oluşturmaktadır.
Gelecek araştırma yönleri şunları içermektedir: performansı artırmak için depolama verimliliğinin daha da optimize edilmesi, yüksek çakışma durumlarına yönelik optimize edici çözümler ve GPU'dan yararlanarak optimizasyon yöntemleri.