Closes #104: improve readability of memory comparison
This commit is contained in:
parent
069e66aa91
commit
8156b9f7e9
20
README.md
20
README.md
@ -152,7 +152,7 @@ GolangCI-Lint was created to fix the following issues with `gometalinter`:
|
|||||||
1. Slow work: `gometalinter` usually works for minutes in average projects.
|
1. Slow work: `gometalinter` usually works for minutes in average projects.
|
||||||
**GolangCI-Lint works [2-7x times faster](#performance)** by [reusing work](#internals).
|
**GolangCI-Lint works [2-7x times faster](#performance)** by [reusing work](#internals).
|
||||||
2. Huge memory consumption: parallel linters don't share the same program representation and can consume
|
2. Huge memory consumption: parallel linters don't share the same program representation and can consume
|
||||||
`n` times more memory (`n` - concurrency). GolangCI-Lint fixes it by sharing representation and **consumes 1.35x less memory**.
|
`n` times more memory (`n` - concurrency). GolangCI-Lint fixes it by sharing representation and **consumes 26% less memory**.
|
||||||
3. Doesn't use real bounded concurrency: if you set it to `n` it can take up to `n*n` threads because of
|
3. Doesn't use real bounded concurrency: if you set it to `n` it can take up to `n*n` threads because of
|
||||||
forced threads in specific linters. `gometalinter` can't do anything about it because it runs linters as
|
forced threads in specific linters. `gometalinter` can't do anything about it because it runs linters as
|
||||||
black boxes in forked processes. In GolangCI-Lint we run all linters in one process and completely control
|
black boxes in forked processes. In GolangCI-Lint we run all linters in one process and completely control
|
||||||
@ -202,20 +202,20 @@ $ gometalinter --deadline=30m --vendor --cyclo-over=30 --dupl-threshold=150 \
|
|||||||
|
|
||||||
| Repository | GolangCI Time | GolangCI Is Faster than Gometalinter | GolangCI Memory | GolangCI eats less memory than Gometalinter |
|
| Repository | GolangCI Time | GolangCI Is Faster than Gometalinter | GolangCI Memory | GolangCI eats less memory than Gometalinter |
|
||||||
| ---------- | ------------- | ------------------------------------ | --------------- | ------------------------------------------- |
|
| ---------- | ------------- | ------------------------------------ | --------------- | ------------------------------------------- |
|
||||||
| gometalinter repo, 4 kLoC | 6s | **6.4x** | 0.7GB | 1.5x |
|
| gometalinter repo, 4 kLoC | 6s | **6.4x** | 0.7GB | 33% |
|
||||||
| self-repo, 4 kLoC | 12s | **7.5x** | 1.2GB | 1.7x |
|
| self-repo, 4 kLoC | 12s | **7.5x** | 1.2GB | 41% |
|
||||||
| beego, 50 kLoC | 10s | **4.2x** | 1.4GB | 1.1x |
|
| beego, 50 kLoC | 10s | **4.2x** | 1.4GB | 9% |
|
||||||
| hugo, 70 kLoC | 15s | **6.1x** | 1.6GB | 1.8x |
|
| hugo, 70 kLoC | 15s | **6.1x** | 1.6GB | 44% |
|
||||||
| consul, 127 kLoC | 58s | **4x** | 2.7GB | 1.7x |
|
| consul, 127 kLoC | 58s | **4x** | 2.7GB | 41% |
|
||||||
| terraform, 190 kLoC | 2m13s | **1.6x** | 4.8GB | 1x |
|
| terraform, 190 kLoC | 2m13s | **1.6x** | 4.8GB | 0% |
|
||||||
| go-ethereum, 250 kLoC | 33s | **5x** | 3.6GB | 1x |
|
| go-ethereum, 250 kLoC | 33s | **5x** | 3.6GB | 0% |
|
||||||
| go source (`$GOROOT/src`), 1300 kLoC | 2m45s | **2x** | 4.7GB | 1x |
|
| go source (`$GOROOT/src`), 1300 kLoC | 2m45s | **2x** | 4.7GB | 0% |
|
||||||
|
|
||||||
|
|
||||||
**On average golangci-lint is 4.6 times faster** than gometalinter. Maximum difference is in the
|
**On average golangci-lint is 4.6 times faster** than gometalinter. Maximum difference is in the
|
||||||
self-repo: **7.5 times faster**, minimum difference is in terraform source code repo: 1.8 times faster.
|
self-repo: **7.5 times faster**, minimum difference is in terraform source code repo: 1.8 times faster.
|
||||||
|
|
||||||
On average golangci-lint consumes 1.35 times less memory.
|
On average golangci-lint consumes 26% less memory.
|
||||||
|
|
||||||
## Why golangci-lint is faster
|
## Why golangci-lint is faster
|
||||||
|
|
||||||
|
@ -125,7 +125,7 @@ GolangCI-Lint was created to fix the following issues with `gometalinter`:
|
|||||||
1. Slow work: `gometalinter` usually works for minutes in average projects.
|
1. Slow work: `gometalinter` usually works for minutes in average projects.
|
||||||
**GolangCI-Lint works [2-7x times faster](#performance)** by [reusing work](#internals).
|
**GolangCI-Lint works [2-7x times faster](#performance)** by [reusing work](#internals).
|
||||||
2. Huge memory consumption: parallel linters don't share the same program representation and can consume
|
2. Huge memory consumption: parallel linters don't share the same program representation and can consume
|
||||||
`n` times more memory (`n` - concurrency). GolangCI-Lint fixes it by sharing representation and **consumes 1.35x less memory**.
|
`n` times more memory (`n` - concurrency). GolangCI-Lint fixes it by sharing representation and **consumes 26% less memory**.
|
||||||
3. Doesn't use real bounded concurrency: if you set it to `n` it can take up to `n*n` threads because of
|
3. Doesn't use real bounded concurrency: if you set it to `n` it can take up to `n*n` threads because of
|
||||||
forced threads in specific linters. `gometalinter` can't do anything about it because it runs linters as
|
forced threads in specific linters. `gometalinter` can't do anything about it because it runs linters as
|
||||||
black boxes in forked processes. In GolangCI-Lint we run all linters in one process and completely control
|
black boxes in forked processes. In GolangCI-Lint we run all linters in one process and completely control
|
||||||
@ -175,20 +175,20 @@ $ gometalinter --deadline=30m --vendor --cyclo-over=30 --dupl-threshold=150 \
|
|||||||
|
|
||||||
| Repository | GolangCI Time | GolangCI Is Faster than Gometalinter | GolangCI Memory | GolangCI eats less memory than Gometalinter |
|
| Repository | GolangCI Time | GolangCI Is Faster than Gometalinter | GolangCI Memory | GolangCI eats less memory than Gometalinter |
|
||||||
| ---------- | ------------- | ------------------------------------ | --------------- | ------------------------------------------- |
|
| ---------- | ------------- | ------------------------------------ | --------------- | ------------------------------------------- |
|
||||||
| gometalinter repo, 4 kLoC | 6s | **6.4x** | 0.7GB | 1.5x |
|
| gometalinter repo, 4 kLoC | 6s | **6.4x** | 0.7GB | 33% |
|
||||||
| self-repo, 4 kLoC | 12s | **7.5x** | 1.2GB | 1.7x |
|
| self-repo, 4 kLoC | 12s | **7.5x** | 1.2GB | 41% |
|
||||||
| beego, 50 kLoC | 10s | **4.2x** | 1.4GB | 1.1x |
|
| beego, 50 kLoC | 10s | **4.2x** | 1.4GB | 9% |
|
||||||
| hugo, 70 kLoC | 15s | **6.1x** | 1.6GB | 1.8x |
|
| hugo, 70 kLoC | 15s | **6.1x** | 1.6GB | 44% |
|
||||||
| consul, 127 kLoC | 58s | **4x** | 2.7GB | 1.7x |
|
| consul, 127 kLoC | 58s | **4x** | 2.7GB | 41% |
|
||||||
| terraform, 190 kLoC | 2m13s | **1.6x** | 4.8GB | 1x |
|
| terraform, 190 kLoC | 2m13s | **1.6x** | 4.8GB | 0% |
|
||||||
| go-ethereum, 250 kLoC | 33s | **5x** | 3.6GB | 1x |
|
| go-ethereum, 250 kLoC | 33s | **5x** | 3.6GB | 0% |
|
||||||
| go source (`$GOROOT/src`), 1300 kLoC | 2m45s | **2x** | 4.7GB | 1x |
|
| go source (`$GOROOT/src`), 1300 kLoC | 2m45s | **2x** | 4.7GB | 0% |
|
||||||
|
|
||||||
|
|
||||||
**On average golangci-lint is 4.6 times faster** than gometalinter. Maximum difference is in the
|
**On average golangci-lint is 4.6 times faster** than gometalinter. Maximum difference is in the
|
||||||
self-repo: **7.5 times faster**, minimum difference is in terraform source code repo: 1.8 times faster.
|
self-repo: **7.5 times faster**, minimum difference is in terraform source code repo: 1.8 times faster.
|
||||||
|
|
||||||
On average golangci-lint consumes 1.35 times less memory.
|
On average golangci-lint consumes 26% less memory.
|
||||||
|
|
||||||
## Why golangci-lint is faster
|
## Why golangci-lint is faster
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user