Here comes the result of benchmark with different databases. I pushed
the test code to the benchmark-databases:
https://github.com/bdrung/apport/tree/benchmark-databases You can
execute the test file or use `run_all` to execute them all.

## Creation and query time

Results on jammy Contents with a Ryzen 7 5700G:

```
$ ./contents_leveldb.py -jd
Creation duration: 39.186 s
Access duration: 1.529 ms
Total duration: 39.566 s

$ ./contents_lmdb.py -jd
Creation duration: 42.202 s
Access duration: 0.292 ms
Total duration: 42.746 s

$ ./contents_sqlite_v1.py -jd
Creation duration: 47.238 s
Access duration: 1.090 ms
Total duration: 47.734 s

$ ./contents_sqlite_v2.py -jd
Creation duration: 47.416 s
Access duration: 1.232 ms
Total duration: 48.882 s

$ ./contents_sqlite_v3.py -jds
Creation duration: 54.331 s
Entries in packages table: 72,036
Entries in directories table: 92,679
Total entries: 8,037,545
Access duration: 1.537 ms
Total duration: 54.657 s

$ ./contents_sqlite_v3b.py -jds
Creation duration: 53.860 s
Entries in packages table: 72,036
Entries in directories table: 30,219
Total entries: 8,037,545
Access duration: 1.606 ms
Total duration: 54.120 s

$ ./contents_ndbm.py -jd
Creation duration: 1 min 41.623 s (= 101.623 s)
Access duration: 0.274 ms
Total duration: 1 min 43.074 s (= 103.074 s)

$ ./contents_dbm.py -jd
Creation duration: 2 min 6.741 s (= 126.741 s)
Access duration: 0.364 ms
Total duration: 2 min 7.168 s (= 127.168 s)

$ ./contents_pickle.py -jd
Creation duration: 36.603 s
Save duration: 4.301 s
Access duration: 0.017 ms
Total duration: 41.456 s

$ ./contents_unoptimized_pickle.py -jd
Creation duration: 59.445 s
Save duration: 4.354 s
Access duration: 0.018 ms
Total duration: 1 min 4.296 s (= 64.296 s)
```

Results on a Raspberry Pi 2W on 2024-07-26 with jammy Contents (dbm and
ndbm were too slow):

```
$ ./contents_leveldb.py -dsj
Creation duration: 28 min 38.402 s (= 1718.402 s)
Total entries: 7,911,114
Access duration: 153.075 ms
Total duration: 32 min 17.500 s (= 1937.500 s)

$ ./contents_lmdb.py -dsj
Creation duration: 35 min 15.257 s (= 2115.257 s)
Total entries: 7,911,114
Access duration: 508.313 ms
Total duration: 36 min 47.932 s (= 2207.932 s)

$ ./contents_sqlite_v1.py -dsj
Creation duration: 14 min 32.801 s (= 872.801 s)
Total entries: 7,911,114
Access duration: 39.372 ms
Total duration: 16 min 0.188 s (= 960.188 s)

$ ./contents_sqlite_v2.py -dsj
Creation duration: 14 min 45.833 s (= 885.833 s)
Total entries: 7,911,114
Access duration: 37.519 ms
Total duration: 15 min 55.706 s (= 955.706 s)

$ ./contents_sqlite_v3.py -dsj
Creation duration: 16 min 20.365 s (= 980.365 s)
Entries in packages table: 72,036
Entries in directories table: 92,679
Total entries: 8,037,545
Access duration: 45.323 ms
Total duration: 18 min 6.704 s (= 1086.704 s)

$ ./contents_pickle.py -dsj
Creation duration: 24 min 36.127 s (= 1476.127 s)
Save duration: 4 h 9 min 1.947 s (= 14941.947 s)
Total entries: 7,911,114
Access duration: 33.207 ms
Total duration: 4 h 37 min 24.957 s (= 16644.957 s)
```

Results on a Raspberry Pi 2W on 2024-07-25 with noble (dbm and ndbm were
too slow):

```
$ ./run_all -ds
$ ./contents_leveldb.py -ds
Creation duration: 8 min 15.134 s (= 495.134 s)
Total entries: 4,267,770
Access duration: 28.648 ms
Total duration: 8 min 43.739 s (= 523.739 s)

$ ./contents_lmdb.py -ds
Creation duration: 10 min 5.755 s (= 605.755 s)
Total entries: 4,267,770
Access duration: 55.521 ms
Total duration: 11 min 42.699 s (= 702.699 s)

$ ./contents_sqlite_v1.py -ds
Creation duration: 4 min 37.866 s (= 277.866 s)
Total entries: 4,267,770
Access duration: 38.377 ms
Total duration: 5 min 14.372 s (= 314.372 s)

$ ./contents_sqlite_v2.py -ds
Creation duration: 4 min 41.446 s (= 281.446 s)
Total entries: 4,267,770
Access duration: 40.402 ms
Total duration: 5 min 14.173 s (= 314.173 s)

$ ./contents_sqlite_v3.py -ds
Creation duration: 5 min 27.911 s (= 327.911 s)
Entries in packages table: 66,602
Entries in directories table: 79,371
Total entries: 4,333,447
Access duration: 51.763 ms
Total duration: 5 min 56.019 s (= 356.019 s)

$ ./contents_sqlite_v3b.py -ds
Creation duration: 5 min 34.859 s (= 334.859 s)
Entries in packages table: 66,602
Entries in directories table: 26,298
Total entries: 4,333,447
Access duration: 46.310 ms
Total duration: 5 min 59.153 s (= 359.153 s)
```

## Results on low memory systems

Benchmark results on a Raspberry Pi 2W with swap disabled (so only 512
MB):

```
$ ./contents_leveldb.py -dsj
Killed
./contents_leveldb.py failed with 137

$ ./contents_lmdb.py -dsj
Killed
./contents_lmdb.py failed with 137

$ ./contents_sqlite_v1.py -dsj
Creation duration: 14 min 42.957 s (= 882.957 s)
Total entries: 8,037,545
Access duration: 36.858 ms
Total duration: 16 min 11.612 s (= 971.612 s)

$ ./contents_sqlite_v2.py -dsj
Creation duration: 15 min 2.569 s (= 902.569 s)
Entries in packages table: 72,036
Total entries: 8,037,545
Access duration: 38.994 ms
Total duration: 16 min 12.557 s (= 972.557 s)

$ ./contents_sqlite_v3.py -dsj
Creation duration: 16 min 26.629 s (= 986.629 s)
Entries in packages table: 72,036
Entries in directories table: 92,679
Total entries: 8,037,545
Access duration: 51.080 ms
Total duration: 17 min 6.754 s (= 1026.754 s)

$ ./contents_ndbm.py -dsj  # never ending

$ ./contents_pickle.py
Killed
./contents_pickle.py failed with 137

$ ./contents_unoptimized_pickle.py
Killed
./contents_unoptimized_pickle.py failed with 137
```

Only SQLite did not get OOM killed.


## Disk comsumption

```
$ du -s contents_cache/*jammy-amd* | sort -n
633772  contents_cache/contents_mapping-jammy-amd64.leveldb
637344  contents_cache/contents_mapping-jammy-amd64_disqualified3.sqlite3
710408  contents_cache/contents_mapping-jammy-amd64_v3.sqlite3
772936  contents_cache/contents_mapping-jammy-amd64.pickle_old
776824  contents_cache/contents_mapping-jammy-amd64.pickle
815944  contents_cache/contents_mapping-jammy-amd64_v3b.sqlite3
1125732 contents_cache/contents_mapping-jammy-amd64.ndbm.db
1164144 contents_cache/contents_mapping-jammy-amd64.dbm
1313036 contents_cache/contents_mapping-jammy-amd64_v2.sqlite3
1511080 contents_cache/contents_mapping-jammy-amd64_v1.sqlite3
2397832 contents_cache/contents_mapping-jammy-amd64.lmdb
```

```
$ du -s contents_cache/*noble-amd* | sort -n
80596   contents_cache/contents_mapping-noble-amd64.leveldb
365908  contents_cache/contents_mapping-noble-amd64.pickle_old
372064  contents_cache/contents_mapping-noble-amd64.pickle
399664  contents_cache/contents_mapping-noble-amd64_v3.sqlite3
562756  contents_cache/contents_mapping-noble-amd64.dbm
673468  contents_cache/contents_mapping-noble-amd64_v2.sqlite3
679064  contents_cache/contents_mapping-noble-amd64.ndbm.db
738288  contents_cache/contents_mapping-noble-amd64_v1.sqlite3
871544  contents_cache/contents_mapping-noble-amd64.lmdb
```

-- 
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/2073787

Title:
  apport-retrace needs more than 1 GB

To manage notifications about this bug go to:
https://bugs.launchpad.net/apport/+bug/2073787/+subscriptions


-- 
ubuntu-bugs mailing list
ubuntu-bugs@lists.ubuntu.com
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to