http://www.7klian.com

TechatKlaytn技能系列:确认发生Cache问题的原因

TechatKlaytn技术系列:确认产生Cache问题的原因

Klaytn State Trie Cache Series #1:?确认发生Cache问题的原因

Klaytn为了提高区块链平台的机能,做了很多方面的尽力。我们将通过下列文章先容 state trie cache机能改进进程。

??确认Cache问题的原因

??寻找最佳的Cache

??计较State trie cache miss

??举办?Cache Size Tuning

本篇将先容举办Klaytn有关测试时呈现的问题以及这些问题的来历-Go语言GC(Garbage Collector)。在举办Klaytn有关测试时,呈现了下列问题。

TechatKlaytn技术系列:确认产生Cache问题的原因

<img alt="Image for post"?src="https://miro.medium.com/max/964/0*KSFKadBeRExUlkA6" srcSet="https://miro.medium.com/max/552/0*KSFKadBeRExUlkA6 276w, https://miro.medium.com/max/964/0*KSFKadBeRExUlkA6 482w" sizes="482px"/>

操作Prometheus提供的API测试内存利用量

在Klaytn binary中,以3500 TPS处理惩罚transaction时,约莫需要用到100G的内存。我们为了确认详细是那边在耗损大量内存,操作 Go语言所提供的内存阐明东西,举办了确认。

??go tool pprof cn-mem0.prof

File: kcn

Build ID: 7b45b11c163a99518095ffb64083e4aa61fd321f

Type: inuse_space

Time: Mar 26, 2020 at 8:56am (KST)

Entering interactive mode (type "help" for commands, "o" for options)

(pprof) top

Showing nodes accounting for 41.91GB, 96.33% of 43.50GB total

Dropped 382 nodes (cum <= 0.22GB)

Showing top 10 nodes out of 77

flat flat% sum% cum cum%

30GB 68.97% 68.97% 30GB 68.97% github.com/allegro/bigcache/queue.NewBytesQueue

5.65GB 12.98% 81.95% 5.65GB 12.99% github.com/allegro/bigcache.(*cacheShard).set

1.53GB 3.52% 85.47% 1.53GB 3.52% reflect.New

1.25GB 2.87% 88.35% 2.60GB 5.97% github.com/klaytn/klaytn/ser/rlp.decodeBigInt

通过内存阐明东西,我们可以看到每个部门所耗损的内存。在上述功效中,可以通过?Showing nodes accounting for 41.91GB, 96.33% of 43.50GB total看到kcn binary占了43.5GB,还可以看到个中的96.33%,即41.91GB详细用在那边。不只如此,通过30GB 68.97% github.com/allegro/bigcache/queue.NewBytesQueue,可以看到有30GB(68.97%)用于bigcache上。

这两个测试功效中,我们发明白问题。按照Prometheus所提供的内存利用library,kcn约莫占了100GB,但内存阐明功效(43.50GB total)表白,kcn binary只占了43.5GB。我们无法确认其余56.5GB(=100GB - 43.5GB)的内存去了那边。

于是我们揣摩应该是Bigcache占据了大部门内存。为了确认Bigcache是否占据了内存,我们在沟通情况的2台处事器上配置了差异的cache size举办测试,配置别离为30GB和0GB。2台处事器的top和内存阐明功效如下。

(Top呼吁功效是GiB,Prometheus所提供的library的功效是GB,两者为沟通的量)

Cypress sync test

AWS Instance : m5.8xlarge

memory size: 128G

cache size: 30G, 0G

TechatKlaytn技术系列:确认产生Cache问题的原因

<img alt="Image for post" src="https://miro.medium.com/max/1484/1*BUBXxboSlBArnNSfLo4KDw.png" srcSet="https://miro.medium.com/max/552/1*BUBXxboSlBArnNSfLo4KDw.png 276w, https://miro.medium.com/max/1000/1*BUBXxboSlBArnNSfLo4KDw.png 500w" sizes="500px"/>

TechatKlaytn技术系列:确认产生Cache问题的原因

<img alt="Image for post" src="https://miro.medium.com/max/1484/1*KydRE8pnP0G5-3s5h9KVSw.png" srcSet="https://miro.medium.com/max/552/1*KydRE8pnP0G5-3s5h9KVSw.png 276w, https://miro.medium.com/max/1000/1*KydRE8pnP0G5-3s5h9KVSw.png 500w" sizes="500px"/>

top呼吁功效(左:cache 30G;右:cache 0GB)

TechatKlaytn技术系列:确认产生Cache问题的原因

<img alt="Image for post" src="https://miro.medium.com/max/2156/1*pKdGJgwuIBTPgAjBH_JLNQ.png" srcSet="https://miro.medium.com/max/552/1*pKdGJgwuIBTPgAjBH_JLNQ.png 276w, https://miro.medium.com/max/1000/1*pKdGJgwuIBTPgAjBH_JLNQ.png 500w" sizes="500px"/>

TechatKlaytn技术系列:确认产生Cache问题的原因

<img alt="Image for post" src="https://miro.medium.com/max/2156/1*0VudYV4vE8HnwT0bXF6CiQ.png" srcSet="https://miro.medium.com/max/552/1*0VudYV4vE8HnwT0bXF6CiQ.png 276w, https://miro.medium.com/max/1000/1*0VudYV4vE8HnwT0bXF6CiQ.png 500w" sizes="500px"/>

Go Memory Profiling功效(左:cache 30G;右:cache 0GB)

我们可以看到,被分派Bigcache的处事器其Top和内存阐明功效中内存利用量别离为70GB和35GB,有35GB的内存追踪不到。而没有分派Bigcache的处事器其 Top和内存阐明功效中内存利用量别离为5GB和2GB,有3GB 的内存追踪不到。

通过以上测试,我们可以揣度,若利用Bigcache,会占用大于分派额的内存。而就算不利用Bigcache,也会呈现3GB阁下的漏掉。虽然,GC(Garbage Collector)的运作,大概令不管利用什么样的Go措施都有时机呈现内存阐明功效和实际利用量的误差。

并且,,我们通过这篇文章可以得知,长时间占据大量的heap内存,并在分派时利用pointer的话,会耗损很是大的内存。

TechatKlaytn技术系列:确认产生Cache问题的原因

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

相关文章阅读