Author: Carl Friedrich Bolz <[email protected]>
Branch: extradoc
Changeset: r4313:be471c308a04
Date: 2012-07-19 11:04 +0200
http://bitbucket.org/pypy/extradoc/changeset/be471c308a04/

Log:    start writing a script that reverse-engineers the resume data size

diff --git a/talk/vmil2012/example/rdatasize.py 
b/talk/vmil2012/example/rdatasize.py
new file mode 100644
--- /dev/null
+++ b/talk/vmil2012/example/rdatasize.py
@@ -0,0 +1,66 @@
+import sys
+
+word_to_kib = 1024 / 4.
+
+def main(argv):
+    infile = argv[1]
+    seen = set()
+    seen_numbering = set()
+    # all in words
+    num_storages = 0
+    num_snapshots = 0
+    naive_num_snapshots = 0
+    size_estimate_numbering = 0
+    naive_estimate_numbering = 0
+    optimal_numbering = 0
+    size_estimate_virtuals = 0
+    num_consts = 0
+    naive_consts = 0
+    with file(infile) as f:
+        for line in f:
+            if line.startswith("Log storage"):
+                num_storages += 1
+                continue
+            if not line.startswith("\t"):
+                continue
+            line = line[1:]
+            if line.startswith("jitcode/pc"):
+                _, address = line.split(" at ")
+                if address not in seen:
+                    seen.add(address)
+                    num_snapshots += 1 # gc, jitcode, pc, prev
+                naive_num_snapshots += 1
+            elif line.startswith("numb"):
+                content, address = line.split(" at ")
+                size =  line.count("(") / 2.0 + 3 # gc, len, prev
+                if content not in seen_numbering:
+                    seen_numbering.add(content)
+                    optimal_numbering += size
+                if address not in seen:
+                    seen.add(address)
+                    size_estimate_numbering += size
+                naive_estimate_numbering += size
+            elif line.startswith("const "):
+                address, _ = line[len("const "):].split("/")
+                if address not in seen:
+                    seen.add(address)
+                    num_consts += 1
+                naive_consts += 1
+    kib_snapshots = num_snapshots * 4. / word_to_kib
+    naive_kib_snapshots = naive_num_snapshots * 4. / word_to_kib
+    kib_numbering = size_estimate_numbering / word_to_kib
+    naive_kib_numbering = naive_estimate_numbering / word_to_kib
+    kib_consts = num_consts * 4 / word_to_kib
+    naive_kib_consts = naive_consts * 4 / word_to_kib
+    print "storages:", num_storages
+    print "snapshots: %sKiB vs %sKiB" % (kib_snapshots, naive_kib_snapshots)
+    print "numberings: %sKiB vs %sKiB" % (kib_numbering, naive_kib_numbering)
+    print "optimal: %s" % (optimal_numbering / word_to_kib)
+    print "consts:  %sKiB vs %sKiB" % (kib_consts, naive_kib_consts)
+    print "--"
+    print "total:  %sKiB vs %sKiB" % (kib_snapshots+kib_numbering+kib_consts,
+                                      
naive_kib_snapshots+naive_kib_numbering+naive_kib_consts)
+
+
+if __name__ == '__main__':
+    main(sys.argv)
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to