Closed Bug 843999 Opened 11 years ago Closed 11 years ago

Shrink the property cache

Categories

(Core :: JavaScript Engine, defect)

defect
Not set
normal

Tracking

()

RESOLVED FIXED
mozilla22
Tracking Status
firefox20 --- wontfix
firefox21 --- wontfix
firefox22 --- fixed
b2g18 --- fixed
b2g18-v1.0.0 --- wontfix
b2g18-v1.0.1 --- wontfix

People

(Reporter: n.nethercote, Assigned: n.nethercote)

References

Details

(Whiteboard: [MemShrink:P2])

Attachments

(1 file)

In bug 704356 I tried removing the property cache.  It hurt the speed of the interpreter significantly, enough to make me leery.  But I found that shrinking it greatly doesn't cause the same problems.
This patch reduces the size of the property cache from 4096 entries to 256
entries.  On 32-bit this reduces its size from 80 KiB to 5 KiB;  on 64-bit it
reduces the size from 160 KiB to 10 KiB.

Sunspider is barely affected when using the JITS:

---------------------------------------------------------------
| millions of instructions executed                           |
| total                        | compiled (may overestimate)  |
---------------------------------------------------------------
|    62.723    62.752 (------) |    10.261    10.261 (------) | 3d-cube
|    41.070    41.036 (1.001x) |    14.800    14.800 (------) | 3d-morph
|    78.849    78.836 (------) |    16.267    16.267 (------) | 3d-raytrace
|    25.605    25.591 (1.001x) |     6.162     6.162 (------) | access-binary-
|    49.802    49.770 (1.001x) |    25.392    25.392 (------) | access-fannkuc
|    26.817    26.790 (1.001x) |     6.979     6.979 (------) | access-nbody
|    26.219    26.253 (0.999x) |    10.594    10.594 (------) | access-nsieve
|    18.476    18.443 (1.002x) |     4.344     4.344 (------) | bitops-3bit-bi
|    28.969    28.935 (1.001x) |    14.866    14.866 (------) | bitops-bits-in
|    25.333    25.301 (1.001x) |    11.642    11.642 (------) | bitops-bitwise
|    32.833    32.800 (1.001x) |    17.619    17.619 (------) | bitops-nsieve-
|    25.417    25.382 (1.001x) |     8.558     8.558 (------) | controlflow-re
|    59.398    59.366 (1.001x) |     7.985     7.985 (------) | crypto-md5
|    32.178    32.144 (1.001x) |     8.255     8.255 (------) | crypto-sha1
|    83.562    83.935 (0.996x) |    14.159    14.159 (------) | date-format-to
|    73.765    73.729 (------) |    11.081    11.081 (------) | date-format-xp
|    27.589    27.556 (1.001x) |    12.268    12.268 (------) | math-cordic
|    41.401    41.367 (1.001x) |     7.671     7.671 (------) | math-partial-s
|    23.754    23.721 (1.001x) |     6.521     6.521 (------) | math-spectral-
|    62.566    62.512 (1.001x) |    35.228    35.228 (------) | regexp-dna
|    40.332    40.297 (1.001x) |     7.902     7.902 (------) | string-base64
|    48.257    48.225 (1.001x) |    18.199    18.199 (------) | string-fasta
|   109.707   109.651 (1.001x) |    17.870    17.870 (------) | string-tagclou
|   125.195   125.159 (------) |    11.920    11.920 (------) | string-unpack-
|    50.791    50.758 (1.001x) |     9.333     9.333 (------) | string-validat
-------
|  1220.619  1220.321 (------) |   315.887   315.887 (------) | all


nor when running just the interpreter:

---------------------------------------------------------------
| millions of instructions executed                           |
| total                        | compiled (may overestimate)  |
---------------------------------------------------------------
|   647.540   647.685 (------) |         0         0 (------) | 3d-cube
|   810.068   810.069 (------) |         0         0 (------) | 3d-morph
|   617.472   619.206 (0.997x) |         0         0 (------) | 3d-raytrace
|   336.932   339.950 (0.991x) |         0         0 (------) | access-binary-
|  1877.117  1877.084 (------) |         0         0 (------) | access-fannkuc
|   702.417   699.019 (1.005x) |         0         0 (------) | access-nbody
|   662.342   662.377 (------) |         0         0 (------) | access-nsieve
|   379.797   379.764 (------) |         0         0 (------) | bitops-3bit-bi
|   633.762   633.729 (------) |         0         0 (------) | bitops-bits-in
|  1966.864  1966.831 (------) |         0         0 (------) | bitops-bitwise
|   839.141   839.109 (------) |         0         0 (------) | bitops-nsieve-
|   424.850   424.817 (------) |         0         0 (------) | controlflow-re
|   350.294   350.253 (------) |         0         0 (------) | crypto-md5
|   347.119   347.080 (------) |         0         0 (------) | crypto-sha1
|   468.866   469.381 (0.999x) |         0         0 (------) | date-format-to
|   240.213   240.170 (------) |         0         0 (------) | date-format-xp
|   830.113   830.079 (------) |         0         0 (------) | math-cordic
|   642.885   642.851 (------) |         0         0 (------) | math-partial-s
|   451.234   451.200 (------) |         0         0 (------) | math-spectral-
|    62.563    62.510 (1.001x) |    35.228    35.228 (------) | regexp-dna
|   381.030   380.901 (------) |         0         0 (------) | string-base64
|   594.365   594.315 (------) |         0         0 (------) | string-fasta
|   276.747   276.675 (------) |     7.498     7.498 (------) | string-tagclou
|   182.859   182.843 (------) |     7.202     7.202 (------) | string-unpack-
|   296.136   296.079 (------) |    915264    915264 (------) | string-validat
-------
| 15022.741 15023.989 (------) |    52.264    52.264 (------) | all
Attachment #717002 - Flags: review?(bhackett1024)
jlebar: can memory reduction patches still be taken on B2G branches?  I know it's late, but this is a trivial change that saves 75 KiB per runtime without any downside.

The main B2G process usually has 5 runtimes (one main + four workers) and then each additional process usually has 1 runtime.  Given that there are usually 3 processes at start-up (I think?) that's a 525 KiB saving at start-up.
Attachment #717002 - Flags: review?(bhackett1024) → review+
(In reply to Nicholas Nethercote [:njn] from comment #2)
> jlebar: can memory reduction patches still be taken on B2G branches?  I know
> it's late, but this is a trivial change that saves 75 KiB per runtime
> without any downside.

We can likely take this on b2g18, but probably not b2g18_v1.0.1.

I'll follow up to your e-mail, but the two metrics we care about on b2g, I think, are:

 * How much memory can a fg app use, and
 * How many bg apps can we have running simultaneously.

We have explicitly asked partners not to measure memory usage at startup; it's not interesting for a variety of reasons, but in particular it does not necessarily correlate with the criteria above.  At startup we have various processes which will be killed when we're running low on memory, for example.

Anyway, the main process has four workers, iirc, so this is a savings of 300kb there alone (each worker gets its own runtime, right?).  I'd certainly like that.
Comment on attachment 717002 [details] [diff] [review]
Shrink the property cache.

NOTE: Please see https://wiki.mozilla.org/Release_Management/B2G_Landing to better understand the B2G approval process and landings.

[Approval Request Comment]
Bug caused by (feature/regressing bug #): N/A

User impact if declined: Higher memory consumption: over 500 KiB at start-up, and at least 75 KiB per additional process.

Testing completed: just landed on mozilla-inbound.

Risk to taking this patch (and alternatives if risky): negligible.  The patch is trivial, it shrinks a single hash table.

String or UUID changes made by this patch: none.
Attachment #717002 - Flags: approval-mozilla-b2g18?
> Anyway, the main process has four workers, iirc, so this is a savings of
> 300kb there alone (each worker gets its own runtime, right?).

As per comment 3: each process has N+1 runtimes, where N is the number of workers.  So, 375 KiB saved for the main process.
https://hg.mozilla.org/mozilla-central/rev/e48e1afb1899
Status: NEW → RESOLVED
Closed: 11 years ago
Resolution: --- → FIXED
Target Milestone: --- → mozilla22
Comment on attachment 717002 [details] [diff] [review]
Shrink the property cache.

This looks safe, as long as we don't have code elsewhere that uses 12 instead of SIZE_LOG2...
Attachment #717002 - Flags: approval-mozilla-b2g18? → approval-mozilla-b2g18+
> Is this something we'd consider uplifting to Aurora/Beta as well?

I don't think it's necessary.  It's just a small memory consumption improvement (though it's bigger on B2G because of multi-process) and so is not a typical candidate for Aurora/Beta uplift.
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: