Skip to content

Memory Usage Benchmark

Yasuhiro Yamada edited this page May 1, 2022 · 13 revisions

Memory Usage Benchmark

-e option result overview

As of teip v2.0

  • Combination of teip and general UNIX commands was the fastest of the commonly used text processing methods.
Method Processing Time
grep + sed + awk: The easy way to come up with 28448 seconds (approx 7.9 hours)
grep + sed + awk: Smarter way than above 469 seconds
Python3 script 48 seconds
Python3 script: Use memory aggressively 41 seconds
teip + grep + sed 32 seconds
  • However, -e requires approx 3 times as much memory as the standard input.
    • To process 100 MiB file, it requires approx 300 MiB memory
    • To process 500 MiB file, it requires approx 1.5 GiB memory

Prerequisites

  • Host: On GitHub Actions as of 28 April 2022
  • Version teip v2.0
  • Measured by Valgrind + massif
$ valgrind --tool=massif --time-unit=ms --massif-out-file={{RESULT}} {{COMMAND}} > /dev/null
  • 100 MiB file: test_secure
$ wget https://github.com/greymd/test_files/raw/v1.0.0/logs/test_secure.gz
$ gzip -d ./test_secure.gz
  • 500 MiB file: test_secure Concatinate 100 MiB file 5 times.
$ mv test_secure test_secure_tmp
$ cat test_secure_tmp test_secure_tmp test_secure_tmp test_secure_tmp test_secure_tmp > test_secure
  • Environment
$ cat /proc/meminfo
MemTotal:        7113128 kB
︙
$ cat /proc/cpuinfo
processor       : 0
vendor_id       : GenuineIntel
cpu family      : 6
model           : 85
model name      : Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz
stepping        : 7
microcode       : 0x5003103
cpu MHz         : 2499.998
cache size      : 36608 KB
︙
processor       : 1
vendor_id       : GenuineIntel
cpu family      : 6
model           : 85
model name      : Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz
stepping        : 7
microcode       : 0x5003103
cpu MHz         : 2499.998
cache size      : 36608 KB
$ uname -a
Linux fv-az190-149 5.13.0-1022-azure #26~20.04.1-Ubuntu SMP Thu Apr 7 19:42:45 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux
$ awk --version
GNU Awk 5.0.1, API: 2.0 (GNU MPFR 4.0.2, GNU MP 6.2.0)
︙
$ grep --version
grep (GNU grep) 3.4
︙
$ sed --version
sed (GNU sed) 4.7
︙
$ cat --version
cat (GNU coreutils) 8.30
︙
$ python3 --version
Python 3.6.9

Test cases

Case name: mem_usage_real

teip -e 'grep -n -C 3 admin' -- sed 's/./@/g' < test_secure

Case name: mem_usage_worst

teip -e 'awk "NR==1{print NR}"' -- sed 's/./@/g' < test_secure

Case name: mem_usage_best

teip -e 'cat -n' -- sed 's/./@/g' < test_secure

Case name: mem_usage_half

teip -e 'awk "NR % 2 == 0 {print NR}"' -- sed 's/./@/g' < test_secure

Case name: mem_usage_one_third

teip -e 'awk "NR % 3 == 0 {print NR}"' -- sed 's/./@/g' < test_secure

FYI: Try without teip

General GNU commands with intuitive approach

The result is same as test case mem_usage_real

$ grep -n -C 3 admin < test_secure | awk -F '[-:]' '{print $1}' | awk NF | awk '{print NR"s/./@/g"}' | sed -f- test_secure > /dev/null
--------------------------------------------------------------------------------
Command:            /home/ubuntu/repos/greymd/teip/tests/test_without_teip.sh
Massif arguments:   --time-unit=ms --peak-inaccuracy=0.5 --pages-as-heap=yes --massif-out-file=test_without_teip.txt
ms_print arguments: test_without_teip.txt
--------------------------------------------------------------------------------


    MB
14.29^:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::#
     |:                                                                      #
     |:                                                                      #
     |:                                                                      #
     |@                                                                      #
     |@                                                                      #
     |@                                                                      #
     |@                                                                      #
     |@                                                                      #
     |@                                                                      #
     |@                                                                      #
     |@                                                                      #
     |@                                                                      #
     |@                                                                      #
     |@                                                                      #
     |@                                                                      #
     |@                                                                      #
     |@                                                                      #
     |@                                                                      #
     |@                                                                      #
   0 +----------------------------------------------------------------------->h
     0                                                                   7.902

=> 28448 seconds

General GNU commands with smart approach

$ cat test_without_teip.sh
grep -n -C 3 admin < test_secure | awk -F '[-:]' '{print $1}' | awk NF | awk '{ do{ for(s=e=$1; (r=getline)>0 && $1<=e+1; e=$1); print s==e ? s : s","e }while(r>0) }'| awk '{print $0"s/./@/g"}' | sed -f- test_secure > tmp

result

--------------------------------------------------------------------------------
Command:            /home/ubuntu/repos/greymd/teip/tests/test_without_teip.sh
Massif arguments:   --time-unit=ms --peak-inaccuracy=0.5 --pages-as-heap=yes --massif-out-file=test_without_teip.txt
ms_print arguments: smart_awk.txt
--------------------------------------------------------------------------------


    MB
14.29^:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::#
     |:                                                                      #
     |:                                                                      #
     |:                                                                      #
     |@                                                                      #
     |@                                                                      #
     |@                                                                      #
     |@                                                                      #
     |@                                                                      #
     |@                                                                      #
     |@                                                                      #
     |@                                                                      #
     |@                                                                      #
     |@                                                                      #
     |@                                                                      #
     |@                                                                      #
     |@                                                                      #
     |@                                                                      #
     |@                                                                      #
     |@                                                                      #
   0 +----------------------------------------------------------------------->s
     0                                                                   469.2

Number of snapshots: 34
 Detailed snapshots: [9, 11, 21, 26, 31 (peak)]

=> 469 seconds

Python script

script:

import re
import sys
N = 3
before = sys.argv[1]
after = sys.argv[2]
q = list()
ac = 0
for line in sys.stdin:
    line = line.rstrip()
    if ac > 0:
        q.append(re.sub('.', after, line))
        ac -= 1
    else:
        q.append(line)
    if len(q) > (N + 1):
        print(q.pop(0))
    if re.search(before, line):
        for i in range(min((N+1), len(q))):
            q[-1 - i] = re.sub('.', after, q[-1 - i])
        ac = N
for i in range(len(q)):
    print(q[i])

executed command:

$ valgrind --tool=massif --time-unit=ms --trace-children=yes --peak-inaccuracy=0.5 --pages-as-heap=yes --massif-out-file=test_python.txt python3 ~/work/c3.py 'admin' '@' < test_secure > /dev/null

Result:

--------------------------------------------------------------------------------
Command:            python3 /home/ubuntu/work/c3.py admin @
Massif arguments:   --time-unit=ms --peak-inaccuracy=0.5 --pages-as-heap=yes --massif-out-file=test_python.txt
ms_print arguments: test_python.txt
--------------------------------------------------------------------------------


    MB
31.15^ #
     | #::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
     |@#                                                                     :
     |@#                                                                     :
     |@#                                                                     :
     |@#                                                                     :
     |@#                                                                     :
     |@#                                                                     :
     |@#                                                                     :
     |@#                                                                     :
     |@#                                                                     :
     |@#                                                                     :
     |@#                                                                     :
     |@#                                                                     :
     |@#                                                                     :
     |@#                                                                     :
     |@#                                                                     :
     |@#                                                                     :
     |@#                                                                     :
     |@#                                                                     :
   0 +----------------------------------------------------------------------->s
     0                                                                   47.81

=> 47.81 seconds

Python script (Use memory aggressively)

import re
import sys
N = 3
before = sys.argv[1]
after = sys.argv[2]
q = list()
ac = 0
for line in sys.stdin:
    line = line.rstrip()
    if ac > 0:
        q.append(re.sub('.', after, line))
        ac -= 1
    else:
        q.append(line)
    if re.search(before, line):
        for i in range(min((N+1), len(q))):
            q[-1 - i] = re.sub('.', after, q[-1 - i])
        ac = N
for i in range(len(q)):
    print(q[i])
--------------------------------------------------------------------------------
Command:            python3 /home/ubuntu/work/c32.py admin @
Massif arguments:   --time-unit=ms --peak-inaccuracy=0.5 --pages-as-heap=yes --massif-out-file=test_python.txt
ms_print arguments: test_python.txt
--------------------------------------------------------------------------------


    MB
196.7^                                                                 ::::::#
     |                                                                ::     #
     |                                                           @@@@@::     #
     |                                                      @@@@@@@@@@::     #
     |                                                 @@@@@@@@@@@@@@@::     #
     |                                             @:@@@@@@@@@@@@@@@@@::     #
     |                                         ::@@@:@@@@@@@@@@@@@@@@@::     #
     |                                      :::::@@@:@@@@@@@@@@@@@@@@@::     #
     |                                  @@@::::::@@@:@@@@@@@@@@@@@@@@@::     #
     |                               :::@ @::::::@@@:@@@@@@@@@@@@@@@@@::     #
     |                            ::::::@ @::::::@@@:@@@@@@@@@@@@@@@@@::     #
     |                         :::::::::@ @::::::@@@:@@@@@@@@@@@@@@@@@::     #
     |                     @@:::::::::::@ @::::::@@@:@@@@@@@@@@@@@@@@@::     #
     |                 @::@@@: :::::::::@ @::::::@@@:@@@@@@@@@@@@@@@@@::     #
     |            :::::@::@@@: :::::::::@ @::::::@@@:@@@@@@@@@@@@@@@@@::     #
     |        @::::::::@::@@@: :::::::::@ @::::::@@@:@@@@@@@@@@@@@@@@@::     #
     |     ::@@::::::::@::@@@: :::::::::@ @::::::@@@:@@@@@@@@@@@@@@@@@::     #
     |  :::::@@::::::::@::@@@: :::::::::@ @::::::@@@:@@@@@@@@@@@@@@@@@::     #
     |:::::::@@::::::::@::@@@: :::::::::@ @::::::@@@:@@@@@@@@@@@@@@@@@::     #
     |: :::::@@::::::::@::@@@: :::::::::@ @::::::@@@:@@@@@@@@@@@@@@@@@::     #
   0 +----------------------------------------------------------------------->s
     0                                                                   40.91

=> 40.91 seconds

Result of teip

Result with 100 MiB file

$ du -s test_secure
102404	test_secure

mem_usage_real with 100 MiB input

--------------------------------------------------------------------------------
Command:            ./target/release/teip -e grep -n -C 3 admin -- sed s/./@/g
Massif arguments:   --time-unit=ms --massif-out-file=mem_usage_real.txt
ms_print arguments: ./mem_usage_real.txt
--------------------------------------------------------------------------------


    MB
320.5^                        #                                               
     |                        #:::                                            
     |                       @#:: ::                                          
     |                     ::@#:: ::::                                        
     |                     : @#:: :::::::                                     
     |                   ::: @#:: ::::: :::                                   
     |                   : : @#:: ::::: ::::::                                
     |                 @@: : @#:: ::::: ::::: ::::                            
     |                 @ : : @#:: ::::: ::::: : : ::                          
     |               @:@ : : @#:: ::::: ::::: : : : ::::                      
     |             @@@:@ : : @#:: ::::: ::::: : : : : : ::                    
     |             @ @:@ : : @#:: ::::: ::::: : : : : : :                     
     |           @@@ @:@ : : @#:: ::::: ::::: : : : : : : ::                  
     |           @ @ @:@ : : @#:: ::::: ::::: : : : : : : : :                 
     |          @@ @ @:@ : : @#:: ::::: ::::: : : : : : : : ::::              
     |         @@@ @ @:@ : : @#:: ::::: ::::: : : : : : : : ::::::::          
     |       @@@@@ @ @:@ : : @#:: ::::: ::::: : : : : : : : ::::::::::::::    
     |      :@ @@@ @ @:@ : : @#:: ::::: ::::: : : : : : : : ::::::::::: :::   
     |     @:@ @@@ @ @:@ : : @#:: ::::: ::::: : : : : : : : ::::::::::: ::::  
     |    :@:@ @@@ @ @:@ : : @#:: ::::: ::::: : : : : : : : ::::::::::: ::::: 
   0 +----------------------------------------------------------------------->s
     0                                                                   31.68

Number of snapshots: 59
 Detailed snapshots: [3, 5, 7, 8, 9, 10, 11, 12, 14, 17, 18 (peak), 58]

mem_usage_worst with 100 MiB input

--------------------------------------------------------------------------------
Command:            ./target/release/teip -e awk "NR==1{print NR}" -- sed s/./@/g
Massif arguments:   --time-unit=ms --massif-out-file=mem_usage_worst.txt
ms_print arguments: ./mem_usage_worst.txt
--------------------------------------------------------------------------------


    MB
352.3^                                                  ##                    
     |                                                ::#                     
     |                   @::                        ::::# :::                 
     |                 @@@:                       ::: ::# :                   
     |                 @ @:                    :::: : ::# :  ::               
     |                @@ @: :                ::: :: : ::# :  :                
     |               @@@ @: :               :::: :: : ::# :  : ::             
     |               @@@ @: :@@          ::::::: :: : ::# :  : :              
     |             @@@@@ @: :@        ::::: :::: :: : ::# :  : : :            
     |           ::@ @@@ @: :@ ::    :: ::: :::: :: : ::# :  : : ::           
     |           : @ @@@ @: :@ : :::::: ::: :::: :: : ::# :  : : ::@          
     |         @@: @ @@@ @: :@ : :: ::: ::: :::: :: : ::# :  : : ::@:         
     |         @ : @ @@@ @: :@ : :: ::: ::: :::: :: : ::# :  : : ::@::        
     |        @@ : @ @@@ @: :@ : :: ::: ::: :::: :: : ::# :  : : ::@::::      
     |       @@@ : @ @@@ @: :@ : :: ::: ::: :::: :: : ::# :  : : ::@::: :     
     |       @@@ : @ @@@ @: :@ : :: ::: ::: :::: :: : ::# :  : : ::@::: :@    
     |     @@@@@ : @ @@@ @: :@ : :: ::: ::: :::: :: : ::# :  : : ::@::: :@:   
     |     @ @@@ : @ @@@ @: :@ : :: ::: ::: :::: :: : ::# :  : : ::@::: :@::  
     |   @@@ @@@ : @ @@@ @: :@ : :: ::: ::: :::: :: : ::# :  : : ::@::: :@::: 
     |   @ @ @@@ : @ @@@ @: :@ : :: ::: ::: :::: :: : ::# :  : : ::@::: :@::: 
   0 +----------------------------------------------------------------------->s
     0                                                                   41.99

Number of snapshots: 50
 Detailed snapshots: [1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 15, 34 (peak), 40, 45]

mem_usage_best with 100 MiB input

--------------------------------------------------------------------------------
Command:            ./target/release/teip -e cat -n -- sed s/./@/g
Massif arguments:   --time-unit=ms --massif-out-file=mem_usage_best.txt
ms_print arguments: ./mem_usage_best.txt
--------------------------------------------------------------------------------


    MB
328.9^               #                                                        
     |               #:::@:                                                   
     |               #: :@:::::                                               
     |              @#: :@::::::::::                                          
     |             @@#: :@::::::::: :@:                                       
     |            @@@#: :@::::::::: :@::::::                                  
     |            @@@#: :@::::::::: :@:::::::::::                             
     |           @@@@#: :@::::::::: :@:::::::::::::::                         
     |           @@@@#: :@::::::::: :@:::::::::::::::::                       
     |          @@@@@#: :@::::::::: :@::::::::::::::::::                      
     |          @@@@@#: :@::::::::: :@:::::::::::::::::::                     
     |        @@@@@@@#: :@::::::::: :@::::::::::::::::::::                    
     |       :@ @@@@@#: :@::::::::: :@:::::::::::::::::::::@:::               
     |      @:@ @@@@@#: :@::::::::: :@:::::::::::::::::::::@::::::@           
     |      @:@ @@@@@#: :@::::::::: :@:::::::::::::::::::::@::::::@:::::      
     |     @@:@ @@@@@#: :@::::::::: :@:::::::::::::::::::::@::::::@:::::@::   
     |    @@@:@ @@@@@#: :@::::::::: :@:::::::::::::::::::::@::::::@:::::@:::  
     |   @@@@:@ @@@@@#: :@::::::::: :@:::::::::::::::::::::@::::::@:::::@:::: 
     |   @@@@:@ @@@@@#: :@::::::::: :@:::::::::::::::::::::@::::::@:::::@:::: 
     |  @@@@@:@ @@@@@#: :@::::::::: :@:::::::::::::::::::::@::::::@:::::@:::::
   0 +----------------------------------------------------------------------->s
     0                                                                   57.37

Number of snapshots: 86
 Detailed snapshots: [1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14 (peak), 17, 29, 57, 67, 77]

mem_usage_half with 100 MiB input

--------------------------------------------------------------------------------
Command:            ./target/release/teip -e awk "NR % 2 == 0 {print NR}" -- sed s/./@/g
Massif arguments:   --time-unit=ms --massif-out-file=mem_usage_half.txt
ms_print arguments: ./mem_usage_half.txt
--------------------------------------------------------------------------------


    MB
330.5^                   #                                                    
     |                   #:::                                                 
     |                  @#::::@:                                              
     |                @@@#::::@::::                                           
     |               @@@@#::::@::::@@:                                        
     |              @@@@@#::::@::::@ ::::                                     
     |             :@@@@@#::::@::::@ ::: :@                                   
     |            @:@@@@@#::::@::::@ ::: :@                                   
     |            @:@@@@@#::::@::::@ ::: :@::                                 
     |           @@:@@@@@#::::@::::@ ::: :@:::@                               
     |          :@@:@@@@@#::::@::::@ ::: :@:::@::@:                           
     |         @:@@:@@@@@#::::@::::@ ::: :@:::@::@:::@::                      
     |        :@:@@:@@@@@#::::@::::@ ::: :@:::@::@:::@::::::                  
     |       @:@:@@:@@@@@#::::@::::@ ::: :@:::@::@:::@:::::@::::              
     |      @@:@:@@:@@@@@#::::@::::@ ::: :@:::@::@:::@:::::@:::::@:::         
     |     @@@:@:@@:@@@@@#::::@::::@ ::: :@:::@::@:::@:::::@:::::@:::::@:     
     |    @@@@:@:@@:@@@@@#::::@::::@ ::: :@:::@::@:::@:::::@:::::@:::::@::    
     |    @@@@:@:@@:@@@@@#::::@::::@ ::: :@:::@::@:::@:::::@:::::@:::::@::::  
     |   @@@@@:@:@@:@@@@@#::::@::::@ ::: :@:::@::@:::@:::::@:::::@:::::@::::  
     | @@@@@@@:@:@@:@@@@@#::::@::::@ ::: :@:::@::@:::@:::::@:::::@:::::@::::: 
   0 +----------------------------------------------------------------------->s
     0                                                                   34.54

mem_usage_one_third with 100 MiB input

--------------------------------------------------------------------------------
Command:            ./target/release/teip -e awk "NR % 3 == 0 {print NR}" -- sed s/./@/g
Massif arguments:   --time-unit=ms --massif-out-file=mem_usage_one_third.txt
ms_print arguments: ./mem_usage_one_third.txt
--------------------------------------------------------------------------------


    MB
315.6^                      #                                                 
     |                     @#::                                               
     |                     @#::::                                             
     |                    @@#::::@:                                           
     |                  @@@@#::::@:::                                         
     |                 @@ @@#::::@::::@:                                      
     |                @@@ @@#::::@::::@::::                                   
     |               @@@@ @@#::::@::::@:: :                                   
     |             @@@@@@ @@#::::@::::@:: :::                                 
     |            @@@@@@@ @@#::::@::::@:: ::                                  
     |           @@@@@@@@ @@#::::@::::@:: :: ::::                             
     |           @@@@@@@@ @@#::::@::::@:: :: :: ::::::                        
     |          @@@@@@@@@ @@#::::@::::@:: :: :: :: :: ::::                    
     |         @@@@@@@@@@ @@#::::@::::@:: :: :: :: :: : :::::::               
     |        @@@@@@@@@@@ @@#::::@::::@:: :: :: :: :: : ::::::::::@:          
     |       @@@@@@@@@@@@ @@#::::@::::@:: :: :: :: :: : ::::::::::@:::::      
     |      @@@@@@@@@@@@@ @@#::::@::::@:: :: :: :: :: : ::::::::::@:::::@:    
     |     @@@@@@@@@@@@@@ @@#::::@::::@:: :: :: :: :: : ::::::::::@:::::@::   
     |     @@@@@@@@@@@@@@ @@#::::@::::@:: :: :: :: :: : ::::::::::@:::::@:::: 
     |  @::@@@@@@@@@@@@@@ @@#::::@::::@:: :: :: :: :: : ::::::::::@:::::@:::: 
   0 +----------------------------------------------------------------------->s
     0                                                                   31.74

Number of snapshots: 77
 Detailed snapshots: [3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21 (peak), 26, 31, 58, 68]

Result with 500 MiB file

$ du -hs
501M	test_secure

mem_usage_real with 500 MiB input

--------------------------------------------------------------------------------
Command:            ./target/release/teip -e grep -n -C 3 admin -- sed s/./@/g
Massif arguments:   --time-unit=ms --massif-out-file=mem_usage_real.txt
ms_print arguments: ./mem_usage_real.txt
--------------------------------------------------------------------------------


    GB
1.547^                       #                                                
     |                      :#:::                                             
     |                     @:#: :::                                           
     |                    :@:#: ::::::                                        
     |                   @:@:#: :::::::::::                                   
     |                 @@@:@:#: :::::::: : :                                  
     |                @@@@:@:#: :::::::: : :@@:                               
     |               @@@@@:@:#: :::::::: : :@ ::::                            
     |             ::@@@@@:@:#: :::::::: : :@ :: ::::                         
     |             : @@@@@:@:#: :::::::: : :@ :: :::::::                      
     |           @@: @@@@@:@:#: :::::::: : :@ :: ::::::::::                   
     |           @@: @@@@@:@:#: :::::::: : :@ :: ::::::::::::@                
     |         @:@@: @@@@@:@:#: :::::::: : :@ :: ::::::::::: @::              
     |         @:@@: @@@@@:@:#: :::::::: : :@ :: ::::::::::: @:::             
     |       ::@:@@: @@@@@:@:#: :::::::: : :@ :: ::::::::::: @::::            
     |      @: @:@@: @@@@@:@:#: :::::::: : :@ :: ::::::::::: @:::::@          
     |     @@: @:@@: @@@@@:@:#: :::::::: : :@ :: ::::::::::: @:::::@::::      
     |     @@: @:@@: @@@@@:@:#: :::::::: : :@ :: ::::::::::: @:::::@::::::@   
     |   @@@@: @:@@: @@@@@:@:#: :::::::: : :@ :: ::::::::::: @:::::@::::::@:  
     | @@@ @@: @:@@: @@@@@:@:#: :::::::: : :@ :: ::::::::::: @:::::@::::::@:: 
   0 +----------------------------------------------------------------------->s
     0                                                                   177.8

Number of snapshots: 75
 Detailed snapshots: [1, 2, 3, 4, 5, 7, 9, 10, 13, 14, 15, 16, 17, 19, 21 (peak), 33, 49, 59, 69]

mem_usage_worst with 500 MiB input

--------------------------------------------------------------------------------
Command:            ./target/release/teip -e awk "NR==1{print NR}" -- sed s/./@/g
Massif arguments:   --time-unit=ms --massif-out-file=mem_usage_worst.txt
ms_print arguments: ./mem_usage_worst.txt
--------------------------------------------------------------------------------


    GB
1.726^                                                  #                     
     |                                                @@#:                    
     |                  @:                         :::@@#::                   
     |                 @@:                      :::: :@@#:::                  
     |                @@@:@                    @: :: :@@#:::@                 
     |               @@@@:@                 :::@: :: :@@#:::@::               
     |              @@@@@:@:             :::: :@: :: :@@#:::@:::              
     |             @@@@@@:@::          :@: :: :@: :: :@@#:::@::::             
     |            @@@@@@@:@:::       :::@: :: :@: :: :@@#:::@:::::            
     |           :@@@@@@@:@:::@    @::::@: :: :@: :: :@@#:::@:::::@           
     |          @:@@@@@@@:@:::@: ::@::::@: :: :@: :: :@@#:::@:::::@:          
     |         @@:@@@@@@@:@:::@::::@::::@: :: :@: :: :@@#:::@:::::@::         
     |        @@@:@@@@@@@:@:::@::::@::::@: :: :@: :: :@@#:::@:::::@:::        
     |        @@@:@@@@@@@:@:::@::::@::::@: :: :@: :: :@@#:::@:::::@:::::      
     |       @@@@:@@@@@@@:@:::@::::@::::@: :: :@: :: :@@#:::@:::::@::::@:     
     |     @@@@@@:@@@@@@@:@:::@::::@::::@: :: :@: :: :@@#:::@:::::@::::@::    
     |    @@@@@@@:@@@@@@@:@:::@::::@::::@: :: :@: :: :@@#:::@:::::@::::@:::   
     |   @@@@@@@@:@@@@@@@:@:::@::::@::::@: :: :@: :: :@@#:::@:::::@::::@::::  
     |  @@@@@@@@@:@@@@@@@:@:::@::::@::::@: :: :@: :: :@@#:::@:::::@::::@::::: 
     | @@@@@@@@@@:@@@@@@@:@:::@::::@::::@: :: :@: :: :@@#:::@:::::@::::@::::@ 
   0 +----------------------------------------------------------------------->s
     0                                                                   179.1

Number of snapshots: 88
 Detailed snapshots: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 15, 16, 17, 18, 19, 20, 22, 26, 31, 36, 41, 46, 47, 48 (peak), 55, 65, 75, 85]

mem_usage_best with 500 MiB input

--------------------------------------------------------------------------------
Command:            ./target/release/teip -e cat -n -- sed s/./@/g
Massif arguments:   --time-unit=ms --massif-out-file=mem_usage_best.txt
ms_print arguments: ./mem_usage_best.txt
--------------------------------------------------------------------------------


    GB
1.637^              #                                                         
     |              #::::                                                     
     |              #::::::::                                                 
     |             @#::::::::::::                                             
     |             @#::::::::::::::::                                         
     |           @@@#:::::::::::::: ::::::                                    
     |           @ @#:::::::::::::: :: :: ::::                                
     |          :@ @#:::::::::::::: :: :: ::::::::                            
     |          :@ @#:::::::::::::: :: :: ::::::::::::                        
     |        @@:@ @#:::::::::::::: :: :: ::::::::::::::::                    
     |        @ :@ @#:::::::::::::: :: :: :::::::::::::::::@:                 
     |       @@ :@ @#:::::::::::::: :: :: :::::::::::::::::@:                 
     |       @@ :@ @#:::::::::::::: :: :: :::::::::::::::::@::                
     |     @@@@ :@ @#:::::::::::::: :: :: :::::::::::::::::@::::              
     |     @ @@ :@ @#:::::::::::::: :: :: :::::::::::::::::@:::::@:::         
     |     @ @@ :@ @#:::::::::::::: :: :: :::::::::::::::::@:::::@:::::@::    
     |    @@ @@ :@ @#:::::::::::::: :: :: :::::::::::::::::@:::::@:::::@:::   
     |  ::@@ @@ :@ @#:::::::::::::: :: :: :::::::::::::::::@:::::@:::::@::::  
     |  : @@ @@ :@ @#:::::::::::::: :: :: :::::::::::::::::@:::::@:::::@::::: 
     | @: @@ @@ :@ @#:::::::::::::: :: :: :::::::::::::::::@:::::@:::::@::::::
   0 +----------------------------------------------------------------------->s
     0                                                                   242.0

Number of snapshots: 87
 Detailed snapshots: [1, 2, 4, 5, 6, 7, 8, 9, 12, 13, 14 (peak), 56, 66, 76, 86]

mem_usage_half with 500 MiB input

--------------------------------------------------------------------------------
Command:            ./target/release/teip -e awk "NR % 2 == 0 {print NR}" -- sed s/./@/g
Massif arguments:   --time-unit=ms --massif-out-file=mem_usage_half.txt
ms_print arguments: ./mem_usage_half.txt
--------------------------------------------------------------------------------


    GB
1.432^                      #                                                 
     |                      #:::                                              
     |                     :#:::@::                                           
     |                   :@:#:::@: :::                                        
     |                   :@:#:::@: :: :                                       
     |                  @:@:#:::@: :: :@::                                    
     |                 @@:@:#:::@: :: :@:::@:                                 
     |               @@@@:@:#:::@: :: :@:::@::                                
     |              @@@@@:@:#:::@: :: :@:::@::                                
     |             @@@@@@:@:#:::@: :: :@:::@::@:                              
     |            :@@@@@@:@:#:::@: :: :@:::@::@:::@::                         
     |           @:@@@@@@:@:#:::@: :: :@:::@::@:::@::::@:                     
     |          @@:@@@@@@:@:#:::@: :: :@:::@::@:::@::::@:::::                 
     |          @@:@@@@@@:@:#:::@: :: :@:::@::@:::@::::@::::::@:::            
     |        ::@@:@@@@@@:@:#:::@: :: :@:::@::@:::@::::@::::::@:::::@::       
     |       @: @@:@@@@@@:@:#:::@: :: :@:::@::@:::@::::@::::::@:::::@::::::   
     |     @@@: @@:@@@@@@:@:#:::@: :: :@:::@::@:::@::::@::::::@:::::@::::::   
     |     @@@: @@:@@@@@@:@:#:::@: :: :@:::@::@:::@::::@::::::@:::::@::::::@  
     |   :@@@@: @@:@@@@@@:@:#:::@: :: :@:::@::@:::@::::@::::::@:::::@::::::@: 
     |  @:@@@@: @@:@@@@@@:@:#:::@: :: :@:::@::@:::@::::@::::::@:::::@::::::@::
   0 +----------------------------------------------------------------------->s
     0                                                                   185.4

Number of snapshots: 90
 Detailed snapshots: [1, 2, 4, 5, 6, 7, 9, 10, 11, 13, 14, 15, 16, 17, 18, 20, 22 (peak), 27, 32, 37, 42, 47, 55, 65, 75, 85]

mem_usage_one_third with 500 MiB input

--------------------------------------------------------------------------------
Command:            ./target/release/teip -e awk "NR % 3 == 0 {print NR}" -- sed s/./@/g
Massif arguments:   --time-unit=ms --massif-out-file=mem_usage_one_third.txt
ms_print arguments: ./mem_usage_one_third.txt
--------------------------------------------------------------------------------


    GB
1.561^                    ##                                                  
     |                    # :                                                 
     |                    # ::@                                               
     |                  @@# ::@::@                                            
     |                 @@ # ::@: @:::                                         
     |               @@@@ # ::@: @: ::::                                      
     |               @ @@ # ::@: @: ::: @:                                    
     |              @@ @@ # ::@: @: ::: @::::                                 
     |             :@@ @@ # ::@: @: ::: @:: :::                               
     |            @:@@ @@ # ::@: @: ::: @:: :: ::                             
     |           @@:@@ @@ # ::@: @: ::: @:: :: :                              
     |           @@:@@ @@ # ::@: @: ::: @:: :: : ::@@                         
     |        @@@@@:@@ @@ # ::@: @: ::: @:: :: : : @ ::::                     
     |       @@@ @@:@@ @@ # ::@: @: ::: @:: :: : : @ : : ::::@                
     |       @@@ @@:@@ @@ # ::@: @: ::: @:: :: : : @ : : : : @:::             
     |      @@@@ @@:@@ @@ # ::@: @: ::: @:: :: : : @ : : : : @:::@::::        
     |     :@@@@ @@:@@ @@ # ::@: @: ::: @:: :: : : @ : : : : @:::@::::@:::    
     |   @@:@@@@ @@:@@ @@ # ::@: @: ::: @:: :: : : @ : : : : @:::@::::@::::   
     |   @ :@@@@ @@:@@ @@ # ::@: @: ::: @:: :: : : @ : : : : @:::@::::@:::::  
     | @@@ :@@@@ @@:@@ @@ # ::@: @: ::: @:: :: : : @ : : : : @:::@::::@:::::: 
   0 +----------------------------------------------------------------------->s
     0                                                                   215.1

Number of snapshots: 55
 Detailed snapshots: [1, 2, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15 (peak), 18, 20, 25, 32, 37, 41, 46, 53]