Bug 155150

Summary: bmalloc: Use List<T> instead of Vector<T> in some places
Product: WebKit Reporter: Geoffrey Garen <ggaren>
Component: New BugsAssignee: Geoffrey Garen <ggaren>
Status: RESOLVED FIXED    
Severity: Normal CC: barraclough, cgarcia, clopez, commit-queue, ggaren, gyuyoung.kim, jh718.park, kling, oliver, ossy, ryanhaddad, sam
Priority: P2    
Version: WebKit Nightly Build   
Hardware: Unspecified   
OS: Unspecified   
Bug Depends on: 155171    
Bug Blocks:    
Attachments:
Description Flags
Patch
none
Patch kling: review+

Description Geoffrey Garen 2016-03-07 17:04:48 PST
bmalloc: Use List<T> instead of Vector<T> in some places
Comment 1 Geoffrey Garen 2016-03-07 18:10:26 PST
Created attachment 273251 [details]
Patch
Comment 2 Geoffrey Garen 2016-03-07 18:11:17 PST
~/OpenSource/PerformanceTests/MallocBench> ./run-malloc-benchmarks Baseline:~/OpenSource/WebKitBuildBaseline/Release/ Patch:~/OpenSource/WebKitBuild/Release/
                                                                                
                                                      Baseline                          Patch                              Δ
Execution Time:
    churn                                                 84ms                           83ms                 ^ 1.01x faster
    list_allocate                                         74ms                           73ms                 ^ 1.01x faster
    tree_allocate                                         83ms                           80ms                 ^ 1.04x faster
    tree_churn                                            85ms                           86ms                 ! 1.01x slower
    fragment                                              76ms                           74ms                 ^ 1.03x faster
    fragment_iterate                                      61ms                           62ms                 ! 1.02x slower
    medium                                               197ms                          191ms                 ^ 1.03x faster
    big                                                  145ms                          145ms                               
    facebook                                             126ms                          122ms                 ^ 1.03x faster
    reddit                                               103ms                          101ms                 ^ 1.02x faster
    flickr                                               103ms                          104ms                 ! 1.01x slower
    theverge                                             137ms                          135ms                 ^ 1.01x faster
    nimlang                                               14ms                           13ms                 ^ 1.08x faster
    message_one                                          221ms                          212ms                 ^ 1.04x faster
    message_many                                         120ms                          115ms                 ^ 1.04x faster
    churn --parallel                                      39ms                           38ms                 ^ 1.03x faster
    list_allocate --parallel                              73ms                           66ms                 ^ 1.11x faster
    tree_allocate --parallel                              85ms                           87ms                 ! 1.02x slower
    tree_churn --parallel                                 87ms                           86ms                 ^ 1.01x faster
    fragment --parallel                                   53ms                           49ms                 ^ 1.08x faster
    fragment_iterate --parallel                           32ms                           31ms                 ^ 1.03x faster
    medium --parallel                                    187ms                          189ms                 ! 1.01x slower
    big --parallel                                       135ms                          134ms                 ^ 1.01x faster

    <geometric mean>                                      87ms                           85ms                 ^ 1.02x faster
    <arithmetic mean>                                    101ms                           99ms                 ^ 1.02x faster
    <harmonic mean>                                       69ms                           66ms                 ^ 1.04x faster

Peak Memory:
    churn                                                804kB                          788kB                ^ 1.02x smaller
    list_allocate                                      2,120kB                        2,088kB                ^ 1.02x smaller
    tree_allocate                                      5,492kB                        5,448kB                ^ 1.01x smaller
    tree_churn                                         4,800kB                        4,756kB                ^ 1.01x smaller
    fragment                                           7,004kB                        6,996kB                 ^ 1.0x smaller
    fragment_iterate                                  25,596kB                       25,576kB                 ^ 1.0x smaller
    medium                                         1,068,420kB                    1,068,416kB                 ^ 1.0x smaller
    big                                            1,060,464kB                    1,060,456kB                 ^ 1.0x smaller
    facebook                                          19,616kB                       19,212kB                ^ 1.02x smaller
    reddit                                             9,944kB                        9,460kB                ^ 1.05x smaller
    flickr                                            15,492kB                       15,028kB                ^ 1.03x smaller
    theverge                                          18,696kB                       18,280kB                ^ 1.02x smaller
    nimlang                                           18,872kB                       18,340kB                ^ 1.03x smaller
    message_one                                        4,776kB                        4,608kB                ^ 1.04x smaller
    message_many                                       4,904kB                        4,980kB                 ! 1.02x bigger
    churn --parallel                                     968kB                          936kB                ^ 1.03x smaller
    list_allocate --parallel                           2,176kB                        2,164kB                ^ 1.01x smaller
    tree_allocate --parallel                           3,360kB                        3,268kB                ^ 1.03x smaller
    tree_churn --parallel                              3,004kB                        2,992kB                 ^ 1.0x smaller
    fragment --parallel                                7,168kB                        7,164kB                 ^ 1.0x smaller
    fragment_iterate --parallel                       25,736kB                       25,736kB                               
    medium --parallel                              1,066,128kB                    1,067,544kB                  ! 1.0x bigger
    big --parallel                                 1,058,660kB                    1,054,484kB                 ^ 1.0x smaller

    <geometric mean>                                  14,931kB                       14,736kB                ^ 1.01x smaller
    <arithmetic mean>                                192,791kB                      192,553kB                 ^ 1.0x smaller
    <harmonic mean>                                    4,316kB                        4,237kB                ^ 1.02x smaller

Memory at End:
    churn                                                392kB                          380kB                ^ 1.03x smaller
    list_allocate                                        424kB                          396kB                ^ 1.07x smaller
    tree_allocate                                        468kB                          432kB                ^ 1.08x smaller
    tree_churn                                           452kB                          420kB                ^ 1.08x smaller
    fragment                                             456kB                          448kB                ^ 1.02x smaller
    fragment_iterate                                     640kB                          628kB                ^ 1.02x smaller
    medium                                             4,612kB                        4,612kB                               
    big                                                4,596kB                        4,592kB                 ^ 1.0x smaller
    facebook                                           3,028kB                        2,640kB                ^ 1.15x smaller
    reddit                                             2,164kB                        1,684kB                ^ 1.29x smaller
    flickr                                             3,148kB                        2,692kB                ^ 1.17x smaller
    theverge                                           3,168kB                        2,764kB                ^ 1.15x smaller
    nimlang                                           18,208kB                       17,684kB                ^ 1.03x smaller
    message_one                                          684kB                          768kB                 ! 1.12x bigger
    message_many                                       1,148kB                        1,104kB                ^ 1.04x smaller
    churn --parallel                                     556kB                          528kB                ^ 1.05x smaller
    list_allocate --parallel                             604kB                          576kB                ^ 1.05x smaller
    tree_allocate --parallel                             700kB                          672kB                ^ 1.04x smaller
    tree_churn --parallel                              1,136kB                        1,096kB                ^ 1.04x smaller
    fragment --parallel                                1,276kB                        1,280kB                  ! 1.0x bigger
    fragment_iterate --parallel                          844kB                          852kB                 ! 1.01x bigger
    medium --parallel                                  4,748kB                        4,752kB                  ! 1.0x bigger
    big --parallel                                     4,724kB                        4,712kB                 ^ 1.0x smaller

    <geometric mean>                                   1,366kB                        1,303kB                ^ 1.05x smaller
    <arithmetic mean>                                  2,529kB                        2,422kB                ^ 1.04x smaller
    <harmonic mean>                                      905kB                          868kB                ^ 1.04x smaller

=====
~/OpenSource/PerformanceTests/MallocBench> ./run-malloc-benchmarks Baseline:~/OpenSource/WebKitBuildBaseline/Release/ Patch:~/OpenSource/WebKitBuild/Release/
                                                                                     
                                                                Baseline                               Patch                                   Δ
Peak Memory:
    reddit_memory_warning --runs 0                               9,868kB                             9,340kB                     ^ 1.06x smaller
    flickr_memory_warning --runs 0                              15,428kB                            14,892kB                     ^ 1.04x smaller
    theverge_memory_warning --runs 0                            18,612kB                            18,200kB                     ^ 1.02x smaller

    <geometric mean>                                            14,151kB                            13,629kB                     ^ 1.04x smaller
    <arithmetic mean>                                           14,636kB                            14,144kB                     ^ 1.03x smaller
    <harmonic mean>                                             13,644kB                            13,091kB                     ^ 1.04x smaller

Memory at End:
    reddit_memory_warning --runs 0                               7,828kB                             7,304kB                     ^ 1.07x smaller
    flickr_memory_warning --runs 0                              10,312kB                             9,796kB                     ^ 1.05x smaller
    theverge_memory_warning --runs 0                            16,920kB                            16,520kB                     ^ 1.02x smaller

    <geometric mean>                                            11,095kB                            10,573kB                     ^ 1.05x smaller
    <arithmetic mean>                                           11,687kB                            11,207kB                     ^ 1.04x smaller
    <harmonic mean>                                             10,570kB                            10,016kB                     ^ 1.06x smaller
Comment 3 Geoffrey Garen 2016-03-07 18:12:45 PST
Created attachment 273252 [details]
Patch
Comment 4 Geoffrey Garen 2016-03-07 18:16:57 PST
The performance numbers posted above disable large allocations in recorded benchmarks.

Here are the results with large allocations enabled:

~/OpenSource/PerformanceTests/MallocBench> ./run-malloc-benchmarks Baseline:~/OpenSource/WebKitBuildBaseline/Release/ Patch:~/OpenSource/WebKitBuild/Release/
                                                                                
                                                      Baseline                          Patch                              Δ
Execution Time:
    churn                                                 85ms                           82ms                 ^ 1.04x faster
    list_allocate                                         73ms                           72ms                 ^ 1.01x faster
    tree_allocate                                         83ms                           81ms                 ^ 1.02x faster
    tree_churn                                            87ms                           84ms                 ^ 1.04x faster
    fragment                                              76ms                           71ms                 ^ 1.07x faster
    fragment_iterate                                      60ms                           60ms                               
    medium                                               206ms                          188ms                  ^ 1.1x faster
    big                                                  147ms                          141ms                 ^ 1.04x faster
    facebook                                             248ms                          251ms                 ! 1.01x slower
    reddit                                               120ms                          119ms                 ^ 1.01x faster
    flickr                                               126ms                          122ms                 ^ 1.03x faster
    theverge                                             156ms                          153ms                 ^ 1.02x faster
    nimlang                                              135ms                          136ms                 ! 1.01x slower
    message_one                                          223ms                          212ms                 ^ 1.05x faster
    message_many                                         127ms                          115ms                  ^ 1.1x faster
    churn --parallel                                      38ms                           38ms                               
    list_allocate --parallel                              77ms                           65ms                 ^ 1.18x faster
    tree_allocate --parallel                              86ms                           84ms                 ^ 1.02x faster
    tree_churn --parallel                                 85ms                           84ms                 ^ 1.01x faster
    fragment --parallel                                   51ms                           49ms                 ^ 1.04x faster
    fragment_iterate --parallel                           32ms                           32ms                               
    medium --parallel                                    191ms                          188ms                 ^ 1.02x faster
    big --parallel                                       133ms                          133ms                               

    <geometric mean>                                     101ms                           98ms                 ^ 1.03x faster
    <arithmetic mean>                                    115ms                          111ms                 ^ 1.03x faster
    <harmonic mean>                                       87ms                           85ms                 ^ 1.03x faster

Peak Memory:
    churn                                                804kB                          792kB                ^ 1.02x smaller
    list_allocate                                      2,104kB                        2,092kB                ^ 1.01x smaller
    tree_allocate                                      5,480kB                        5,456kB                 ^ 1.0x smaller
    tree_churn                                         4,800kB                        4,760kB                ^ 1.01x smaller
    fragment                                           7,004kB                        7,000kB                 ^ 1.0x smaller
    fragment_iterate                                  25,596kB                       25,580kB                 ^ 1.0x smaller
    medium                                         1,068,420kB                    1,068,416kB                 ^ 1.0x smaller
    big                                            1,060,464kB                    1,060,460kB                 ^ 1.0x smaller
    facebook                                          73,948kB                       73,428kB                ^ 1.01x smaller
    reddit                                            13,836kB                       13,368kB                ^ 1.04x smaller
    flickr                                            25,848kB                       25,316kB                ^ 1.02x smaller
    theverge                                          27,016kB                       26,436kB                ^ 1.02x smaller
    nimlang                                          217,332kB                      216,900kB                 ^ 1.0x smaller
    message_one                                        4,876kB                        4,636kB                ^ 1.05x smaller
    message_many                                      14,288kB                        4,956kB                ^ 2.88x smaller
    churn --parallel                                     956kB                          940kB                ^ 1.02x smaller
    list_allocate --parallel                           2,200kB                        2,200kB                               
    tree_allocate --parallel                           3,352kB                        3,296kB                ^ 1.02x smaller
    tree_churn --parallel                              3,004kB                        3,000kB                 ^ 1.0x smaller
    fragment --parallel                                7,168kB                        7,148kB                 ^ 1.0x smaller
    fragment_iterate --parallel                       25,760kB                       25,720kB                 ^ 1.0x smaller
    medium --parallel                              1,065,664kB                    1,064,996kB                 ^ 1.0x smaller
    big --parallel                                 1,051,744kB                    1,058,760kB                 ! 1.01x bigger

    <geometric mean>                                  19,424kB                       18,386kB                ^ 1.06x smaller
    <arithmetic mean>                                204,855kB                      204,594kB                 ^ 1.0x smaller
    <harmonic mean>                                    4,557kB                        4,388kB                ^ 1.04x smaller

Memory at End:
    churn                                                392kB                          380kB                ^ 1.03x smaller
    list_allocate                                        408kB                          396kB                ^ 1.03x smaller
    tree_allocate                                        456kB                          436kB                ^ 1.05x smaller
    tree_churn                                           452kB                          420kB                ^ 1.08x smaller
    fragment                                             456kB                          448kB                ^ 1.02x smaller
    fragment_iterate                                     640kB                          628kB                ^ 1.02x smaller
    medium                                             4,608kB                        4,608kB                               
    big                                                4,596kB                        4,592kB                 ^ 1.0x smaller
    facebook                                           3,320kB                        2,804kB                ^ 1.18x smaller
    reddit                                             2,212kB                        1,740kB                ^ 1.27x smaller
    flickr                                             3,248kB                        2,724kB                ^ 1.19x smaller
    theverge                                           3,324kB                        2,752kB                ^ 1.21x smaller
    nimlang                                           34,188kB                       33,788kB                ^ 1.01x smaller
    message_one                                          684kB                          672kB                ^ 1.02x smaller
    message_many                                       1,256kB                        1,080kB                ^ 1.16x smaller
    churn --parallel                                     544kB                          528kB                ^ 1.03x smaller
    list_allocate --parallel                             612kB                          564kB                ^ 1.09x smaller
    tree_allocate --parallel                             712kB                          660kB                ^ 1.08x smaller
    tree_churn --parallel                              1,136kB                        1,172kB                 ! 1.03x bigger
    fragment --parallel                                1,332kB                        1,328kB                 ^ 1.0x smaller
    fragment_iterate --parallel                          864kB                          836kB                ^ 1.03x smaller
    medium --parallel                                  4,736kB                        4,736kB                               
    big --parallel                                     4,684kB                        4,716kB                 ! 1.01x bigger

    <geometric mean>                                   1,422kB                        1,340kB                ^ 1.06x smaller
    <arithmetic mean>                                  3,255kB                        3,131kB                ^ 1.04x smaller
    <harmonic mean>                                      908kB                          865kB                ^ 1.05x smaller

=====
~/OpenSource/PerformanceTests/MallocBench> ./run-malloc-benchmarks Baseline:~/OpenSource/WebKitBuildBaseline/Release/ Patch:~/OpenSource/WebKitBuild/Release/
                                                                                     
                                                                Baseline                               Patch                                   Δ
Peak Memory:
    reddit_memory_warning --runs 0                              13,804kB                            13,360kB                     ^ 1.03x smaller
    flickr_memory_warning --runs 0                              26,032kB                            25,560kB                     ^ 1.02x smaller
    theverge_memory_warning --runs 0                            26,920kB                            26,468kB                     ^ 1.02x smaller

    <geometric mean>                                            21,307kB                            20,830kB                     ^ 1.02x smaller
    <arithmetic mean>                                           22,252kB                            21,796kB                     ^ 1.02x smaller
    <harmonic mean>                                             20,270kB                            19,769kB                     ^ 1.03x smaller

Memory at End:
    reddit_memory_warning --runs 0                               9,284kB                             8,828kB                     ^ 1.05x smaller
    flickr_memory_warning --runs 0                              12,320kB                            11,848kB                     ^ 1.04x smaller
    theverge_memory_warning --runs 0                            21,212kB                            20,740kB                     ^ 1.02x smaller

    <geometric mean>                                            13,437kB                            12,945kB                     ^ 1.04x smaller
    <arithmetic mean>                                           14,272kB                            13,805kB                     ^ 1.03x smaller
    <harmonic mean>                                             12,711kB                            12,200kB                     ^ 1.04x smaller
Comment 5 Andreas Kling 2016-03-07 18:22:01 PST
Comment on attachment 273252 [details]
Patch

r=me!
Comment 6 Geoffrey Garen 2016-03-07 19:00:48 PST
Committed r197722: <http://trac.webkit.org/changeset/197722>
Comment 7 Csaba Osztrogonác 2016-03-07 22:24:41 PST
(In reply to comment #6)
> Committed r197722: <http://trac.webkit.org/changeset/197722>

It made many JSC stress tests crash on 32 bit Linux platforms, see the X86 GTK and the EFL ARMv7 bots on build.webkit.org for details.
Comment 8 Csaba Osztrogonác 2016-03-08 00:54:50 PST
(In reply to comment #7)
> (In reply to comment #6)
> > Committed r197722: <http://trac.webkit.org/changeset/197722>
> 
> It made many JSC stress tests crash on 32 bit Linux platforms, see the X86
> GTK and the EFL ARMv7 bots on build.webkit.org for details.

and on the 32 bit x86 Apple Mac bots too
Comment 10 Csaba Osztrogonác 2016-03-08 08:54:54 PST
ping
Comment 11 WebKit Commit Bot 2016-03-08 09:34:04 PST
Re-opened since this is blocked by bug 155171
Comment 12 Geoffrey Garen 2016-03-08 13:21:56 PST
Committed r197797: <http://trac.webkit.org/changeset/197797>