Commit Graph

56 Commits

Author SHA1 Message Date
dlee
6577781d47 Bug 1542744 - P2. Improve performance of MakePrefixSet by using different algorithm according to the number of prefixes. r=gcp
The goal of this patch is to reduce the number of memory reallocation during
|MakePrefixSet|[1].

Here is the number of nsTArray memory reallocation occur during |MakePrefixSet|
(test in my local platform):
googpub-phish-proto: 58k times
goog-malware-proto: 9k times
goog-unwanted-proto: 25k times
goog-badbinurl-proto: 6k times

This patch improves the performance by:
1. For tables whose prefixes are less than 128*1024(malware, unwanted,
badinurl).

Store prefixes directly without dividing allocation into smaller chunks.
Because the maximum size to store all the prefixes in a single array for
these tables will be less than 512k, we can avoid Bug 1046038.

This simplifies the internal prefixset data structure generation and total
memory usage is also saved:
goog-malware-proto  : 437K -> 163k
goog-unwanted-proto : 658k -> 446k
goog-badbinurl-proto: 320k -> 110k

The single largest allocated continuous memory size is:
goog-malware-proto  : 86k -> 163k
goog-unwanted-proto : 86k -> 446k
goog-badbinurl-proto: 77k -> 110k

A further improvement can be done for this part is for tables with fewer
prefixes, we can use an one-dimension delta array to reduce the size of a
single continuous memory allocation.

2. For tables with more prefixes:

According to experiment, when prefixes are more than 400k
the delta arrays have very high chance that are full, in the case of
phishing table, we can estimate the capacity accurately before
applying delta algorithm.

The shortcoming of this part is when prefixes are between 130k~400k,
the capacity estimation is not accurate.

[1] https://searchfox.org/mozilla-central/rev/b2015fdd464f598d645342614593d4ebda922d95/toolkit/components/url-classifier/nsUrlClassifierPrefixSet.cpp#99

Differential Revision: https://phabricator.services.mozilla.com/D30046
2019-05-15 11:17:43 +00:00
dlee
9b83882ba3 Bug 1542744 - P1. Remove calculating checksum for mIndexDelta array. r=gcp
The checksum calculating code is used to find the root cause of a crash
bug during update(Bug 1362761). Since the algorithm will be update in
these series of patches, we don't need to keep it.

Differential Revision: https://phabricator.services.mozilla.com/D26667
2019-05-14 22:42:31 +00:00
shindli
35dcb332ae Backed out 3 changesets (bug 1542744) for causing perma mochitest failures in /builds/worker/workspace/build/src/obj-firefox/dist/include/mozilla/StaticPrefList CLOSED TREE
Backed out changeset f94b6f3a7fff (bug 1542744)
Backed out changeset c51b622bb1fe (bug 1542744)
Backed out changeset aedbe6cdd06f (bug 1542744)
2019-05-15 01:41:06 +03:00
dlee
8fdf2aebfd Bug 1542744 - P2. Improve performance of MakePrefixSet by using different algorithm according to the number of prefixes. r=gcp
The goal of this patch is to reduce the number of memory reallocation during
|MakePrefixSet|[1].

Here is the number of nsTArray memory reallocation occur during |MakePrefixSet|
(test in my local platform):
googpub-phish-proto: 58k times
goog-malware-proto: 9k times
goog-unwanted-proto: 25k times
goog-badbinurl-proto: 6k times

This patch improves the performance by:
1. For tables whose prefixes are less than 128*1024(malware, unwanted,
badinurl).

Store prefixes directly without dividing allocation into smaller chunks.
Because the maximum size to store all the prefixes in a single array for
these tables will be less than 512k, we can avoid Bug 1046038.

This simplifies the internal prefixset data structure generation and total
memory usage is also saved:
goog-malware-proto  : 437K -> 163k
goog-unwanted-proto : 658k -> 446k
goog-badbinurl-proto: 320k -> 110k

The single largest allocated continuous memory size is:
goog-malware-proto  : 86k -> 163k
goog-unwanted-proto : 86k -> 446k
goog-badbinurl-proto: 77k -> 110k

A further improvement can be done for this part is for tables with fewer
prefixes, we can use an one-dimension delta array to reduce the size of a
single continuous memory allocation.

2. For tables with more prefixes:

According to experiment, when prefixes are more than 400k
the delta arrays have very high chance that are full, in the case of
phishing table, we can estimate the capacity accurately before
applying delta algorithm.

The shortcoming of this part is when prefixes are between 130k~400k,
the capacity estimation is not accurate.

[1] https://searchfox.org/mozilla-central/rev/b2015fdd464f598d645342614593d4ebda922d95/toolkit/components/url-classifier/nsUrlClassifierPrefixSet.cpp#99

Differential Revision: https://phabricator.services.mozilla.com/D30046
2019-05-14 21:05:41 +00:00
dlee
be3ab07d04 Bug 1542744 - P1. Remove calculating checksum for mIndexDelta array. r=gcp
The checksum calculating code is used to find the root cause of a crash
bug during update(Bug 1362761). Since the algorithm will be update in
these series of patches, we don't need to keep it.

Differential Revision: https://phabricator.services.mozilla.com/D26667
2019-05-08 08:35:06 +00:00
Dimi Lee
e1ed95ebdf Bug 1353956 - P3. Separate file processing and prefix data processing for SafeBrowsing prefix set. r=gcp
SafeBrowsing prefix files LOAD/SAVE operations are handled in xxxPrefixSet.cpp.
It would be more clear if xxxPrefixSet.cpp only processes prefix data,
while LookupCacheV2/LookupCacheV4 which use prefix set process file.

This patch doesn't change any behavior, testcases need to update because
the LookupCache & xxxPrefixSet APIs are changed.

Differential Revision: https://phabricator.services.mozilla.com/D21462
2019-03-07 14:40:56 +00:00
Dorel Luca
688429d9d6 Backed out 6 changesets (bug 1353956) for Linux Build bustage
Backed out changeset 71dafccc22ae (bug 1353956)
Backed out changeset f1f29fe519cf (bug 1353956)
Backed out changeset 4978556a66f6 (bug 1353956)
Backed out changeset bc0b91abce9b (bug 1353956)
Backed out changeset 6b8412db5a05 (bug 1353956)
Backed out changeset 3d326cfcd002 (bug 1353956)
2019-03-07 01:49:03 +02:00
Dimi Lee
82b58b495d Bug 1353956 - P3. Separate file processing and prefix data processing for SafeBrowsing prefix set. r=gcp
SafeBrowsing prefix files LOAD/SAVE operations are handled in xxxPrefixSet.cpp.
It would be more clear if xxxPrefixSet.cpp only processes prefix data,
while LookupCacheV2/LookupCacheV4 which use prefix set process file.

This patch doesn't change any behavior, testcases need to update because
the LookupCache & xxxPrefixSet APIs are changed.

Differential Revision: https://phabricator.services.mozilla.com/D21462
2019-03-04 21:22:46 +00:00
Sylvestre Ledru
e5a134f73a Bug 1511181 - Reformat everything to the Google coding style r=ehsan a=clang-format
# ignore-this-changeset
2018-11-30 11:46:48 +01:00
Francois Marier
6f7879d6d8 Bug 1362761 - Safer Clean() and IsEmpty() handling in PrefixSet. r=dimi
This simplifies the logic around clearing the prefix set and also adds
the clearing of the mIndexDeltasChecksum which should have been done
as part of 3a00711bb0e6.

Additionally, the checks for whether or not the prefix set is empty
include some sanity-checking asserts.

Finally, mTotalPrefixes could be out of sync with mIndexPrefixes
and mIndexDeltas if LoadPrefixes() or MakePrefixSet() fail so we
now only update it once all elements have been added successfully.

There is now a release assert to catch grossly out-of-sync (or
corrupt) values of mTotalPrefixes.

MozReview-Commit-ID: BSbyD2dGsUY

Differential Revision: https://phabricator.services.mozilla.com/D2062
2018-07-11 12:40:34 +00:00
Francois Marier
70a9e6972b Bug 1362761 - Force file and streams to use smart pointers. r=dimi
MozReview-Commit-ID: GscB9PaaN02

Differential Revision: https://phabricator.services.mozilla.com/D2060
2018-07-12 22:19:40 +00:00
Francois Marier
a0ae6bcf01 Bug 1362761 - Make prefix and chunk sets as const as possible. r=dimi
MozReview-Commit-ID: JdnNOxnBAgC

Differential Revision: https://phabricator.services.mozilla.com/D2058
2018-07-11 12:52:37 +00:00
Francois Marier
044210d9e9 Bug 1362761 - Improve logging in PrefixSet. r=gcp
In addition to including the name of the prefix set in all of the
LOG messages, the VariablePrefixSet class now initializes its
dependent fixed-size prefix set correctly.

MozReview-Commit-ID: C7c78HLcXY3
2018-02-21 17:55:12 -08:00
Francois Marier
d0cede8611 Bug 1362761 - Add checksum to nsUrlClassifierPrefixSet::mIndexDeltas array. r=gcp
Adding a checksum to an array in the URL classifier to test our
theory that the crashes are due to memory corruption.

This patch also restores the Compact() calls that were #ifdef'd
out in bug 1362761 to test a different theory.

MozReview-Commit-ID: IkLduLO3IXb
2018-02-15 16:59:14 -08:00
Thomas Nguyen
cf69fcf897 Bug 1401066 - Add poison canary to check for errors. r=francois
MozReview-Commit-ID: GpTDMR5Ni3e
2017-09-25 10:57:20 +08:00
Dimi Lee
62bb662f25 Bug 1305801 - Part 1: Implement variable length PrefixSet class for Safe Browsing v4. r=francois, r=gcp
MozReview-Commit-ID: FahurMd1KGe
2016-10-04 21:43:08 +08:00
Phil Ringnalda
81e623a5b4 Backed out 5 changesets (bug 1305801) for ASan gtest bustage
Backed out changeset 0c95d5dec6d9 (bug 1305801)
Backed out changeset bca0e706dbc5 (bug 1305801)
Backed out changeset def8da367beb (bug 1305801)
Backed out changeset 56ceae52d847 (bug 1305801)
Backed out changeset 14457cc4c325 (bug 1305801)
2016-10-03 22:14:49 -07:00
Dimi Lee
348bf34d70 Bug 1305801 - Part 1: Implement variable length PrefixSet class for Safe Browsing v4. r=francois, r=gcp
MozReview-Commit-ID: 49XX1Gu1XqX
2016-09-14 14:49:26 +08:00
Gian-Carlo Pascutto
8a77625ec5 Bug 1244259 - Limit PrefixSet read and write buffer sizes to file size. r=froydnj 2016-02-12 08:54:12 +01:00
Nicholas Nethercote
f852416a40 Bug 1205358 - Fix up nsUrlClassifierPrefixSet memory reporting. r=gcp.
This patch reverts the "measure-in-advance" approach added in part 1 of bug
1050108 -- because that doesn't interact well with DMD -- and adds locking to
avoid races between the url-classifier thread and the main thread.
2016-02-10 08:30:48 +11:00
Gian-Carlo Pascutto
ddb08d4e7b Bug 1211090 - Use Buffered IO for PrefixSet load/store. r=froydnj 2015-12-21 17:50:46 +01:00
Ehsan Akhgari
ea41d8de48 Bug 1145631 - Part 1: Replace MOZ_OVERRIDE and MOZ_FINAL with override and final in the tree; r=froydnj
This patch was automatically generated using the following script:

function convert() {
echo "Converting $1 to $2..."
find . \
       ! -wholename "*/.git*" \
       ! -wholename "obj-ff-dbg*" \
         -type f \
      \( -iname "*.cpp" \
         -o -iname "*.h" \
         -o -iname "*.c" \
         -o -iname "*.cc" \
         -o -iname "*.idl" \
         -o -iname "*.ipdl" \
         -o -iname "*.ipdlh" \
         -o -iname "*.mm" \) | \
    xargs -n 1 sed -i -e "s/\b$1\b/$2/g"
}

convert MOZ_OVERRIDE override
convert MOZ_FINAL final
2015-03-21 12:28:04 -04:00
Ehsan Akhgari
eae7356800 Bug 1119258 - Mark virtual overridden functions as MOZ_OVERRIDE in toolkit; r=Mossop 2015-01-08 23:12:19 -05:00
Gian-Carlo Pascutto
f658b688a1 Bug 1102687 - Remove legacy includes from nsUrlClassifierPrefixSet and friends. r=dmajor 2014-11-24 08:39:02 +01:00
Gian-Carlo Pascutto
fe253223fe Bug 1102687 - Avoid copying and allocating 3 times in GetPrefixes. r=dmajor 2014-11-24 08:38:29 +01:00
Gian-Carlo Pascutto
0f52b5e676 Bug 1050108 - Remove superfluous member variables in PrefixSet. r=mmc 2014-10-14 13:16:11 +02:00
Gian-Carlo Pascutto
1c2e1c79d2 Bug 1050108 - Avoid race condition during memory report collection. r=njn 2014-10-14 13:15:50 +02:00
Trevor Saunders
b131fddd60 bug 1059490 - mark more classes MOZ_FINAL r=froydnj 2014-08-27 14:26:48 -04:00
Gian-Carlo Pascutto
c465ee5c65 Bug 1046038 - Replace linear prefix array by array of arrays. r=mmc 2014-08-04 12:12:02 +02:00
Gian-Carlo Pascutto
f06a394661 Bug 1046038 - Make essential arrays for SafeBrowsing infallible. r=mmc 2014-08-04 12:11:51 +02:00
Benoit Jacob
029e0e533d Bug 1028588 - Fix dangerous public destructors in toolkit/ - r=ehsan 2014-06-23 18:40:02 -04:00
Nicholas Nethercote
0d8c64efcc Bug 936964 (part 7, attempt 2) - Make lots of classes report their own memory consumption, instead of using a separate reporter class. r=mccr8,sr=bz.
* * *
Bug 936964 (part 7b) - Fix a use-after-free found by ASan.
2013-11-07 16:35:30 +11:00
Ehsan Akhgari
65aaebab72 Backed out 9 changesets (bug 943660, bug 936964) because of ASAN use-after-free crashes on browser-chrome and mochitest-other
Backed out changeset 85486c4aa3d8 (bug 936964)
Backed out changeset 25312eb71998 (bug 936964)
Backed out changeset 6dbb8333960c (bug 936964)
Backed out changeset da6465ad476f (bug 936964)
Backed out changeset a87ffc992f38 (bug 936964)
Backed out changeset 4ae3a61182db (bug 936964)
Backed out changeset 34e9c3137804 (bug 936964)
Backed out changeset fd1459e71585 (bug 936964)
Backed out changeset 3e8a701d8bdc (bug 943660)

Landed on a CLOSED TREE
2013-11-27 20:05:00 -05:00
Nicholas Nethercote
c363b9d028 Bug 936964 (part 7) - Make lots of classes report their own memory consumption, instead of using a separate reporter class. r=mccr8,sr=bz. 2013-11-07 16:35:30 +11:00
Nicholas Nethercote
e3cc8be643 Bug 831193 (part 20) - Make nsPrefixSetReporter a subclass of MemoryReporterBase. r=gcp. 2013-01-17 21:43:21 -08:00
Catalin Iacob
f88cdc0744 Bug 798914 (part 5) - Use newly introduced mozilla::MallocSizeOf instead of nsMallocSizeOfFun. r=njn. 2013-06-23 14:03:39 +02:00
Ms2ger
a51b70238f Bug 845374 - Part s: Stop including nsTArray.h in nsContentUtils.h; r=khuey 2013-03-17 08:55:16 +01:00
Ehsan Akhgari
243c878d26 Bug 579517 - Part 1: Automated conversion of NSPR numeric types to stdint types in Gecko; r=bsmedberg
This patch was generated by a script.  Here's the source of the script for
future reference:

function convert() {
echo "Converting $1 to $2..."
find . ! -wholename "*nsprpub*" \
       ! -wholename "*security/nss*" \
       ! -wholename "*/.hg*" \
       ! -wholename "obj-ff-dbg*" \
       ! -name nsXPCOMCID.h \
       ! -name prtypes.h \
         -type f \
      \( -iname "*.cpp" \
         -o -iname "*.h" \
         -o -iname "*.c" \
         -o -iname "*.cc" \
         -o -iname "*.idl" \
         -o -iname "*.ipdl" \
         -o -iname "*.ipdlh" \
         -o -iname "*.mm" \) | \
    xargs -n 1 sed -i -e "s/\b$1\b/$2/g"
}

convert PRInt8 int8_t
convert PRUint8 uint8_t
convert PRInt16 int16_t
convert PRUint16 uint16_t
convert PRInt32 int32_t
convert PRUint32 uint32_t
convert PRInt64 int64_t
convert PRUint64 uint64_t

convert PRIntn int
convert PRUintn unsigned

convert PRSize size_t

convert PROffset32 int32_t
convert PROffset64 int64_t

convert PRPtrdiff ptrdiff_t

convert PRFloat64 double
2012-08-22 11:56:38 -04:00
Gian-Carlo Pascutto
36e135e1d7 Bug 673470 - Simplify PrefixSet by removing (unneeded) thread safety. r=dcamp 2012-08-15 09:10:24 +02:00
Gian-Carlo Pascutto
1c0ff29874 Bug 673470 - Replace the sqlite safeb store with a flat file. r=dcamp 2012-08-15 09:04:19 +02:00
Gervase Markham
cb6a072c2a Bug 716478 - update licence to MPL 2. 2012-05-21 12:12:37 +01:00
Gian-Carlo Pascutto
10acc9e06e Backout 173f90d397a8 (Bug 673470). rs=dcamp a=mfinkle 2012-04-20 07:46:47 +02:00
Gian-Carlo Pascutto
724fb285e2 Bug 673470 - Replace the SQLite SafeBrowsing store with an optimized store. r=dcamp 2011-12-06 19:03:05 +01:00
Gian-Carlo Pascutto
056c10da3c Backout 44a0dc4fb9ff (Bug 673470) for Talos regression. 2012-02-01 20:10:02 +01:00
Gian-Carlo Pascutto
3b9f32d92d Bug 673470 - Replace the SQLite SafeBrowsing store with an optimized store. r=dcamp 2011-12-06 19:03:05 +01:00
Gian-Carlo Pascutto
2bb82902d1 Bug 702217 - Avoid double allocation in UrlClassifier. Handle OOM conditions. r=dcamp 2012-01-10 17:09:32 +01:00
Nicholas Nethercote
cb524624bc Bug 705602 - Use mallocSizeOf in prefixset memory reporter. r=gpc. 2011-12-13 20:54:18 -08:00
Gian-Carlo Pascutto
18c11b2972 Bug 698326 - Remove countMe argument to SizeOf in UrlClassifier. r= 2011-11-15 18:51:06 +01:00
Gian-Carlo Pascutto
8f61f0e297 Bug 698326 - Add memory reporter for the url-classifier. r=njn,jlebar 2011-11-13 11:25:48 +01:00
Marco Bonardo
8583f20728 Backout 38abb03271de (bug 698326) due to xpcshell tests failure 2011-11-11 20:12:12 +01:00