guile-user
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Guile Potluck 2021


From: Dr. Arne Babenhauserheide
Subject: Re: Guile Potluck 2021
Date: Tue, 02 Mar 2021 08:08:50 +0100
User-agent: mu4e 1.4.15; emacs 27.1

Hi Linus,

I now created four profiles, one for the CSV import and three for the
trust calculation. They are generated with:

guile -L .
> (import (wispwot wispwot))
> ,profile (define changed-and-state (import-trust-csv 
> "trust-anonymized-2020-11-01-under-attack-sorted.csv"))
> ,profile ((@@(wispwot wispwot)import-trust-value) (cdr changed-and-state) 
> "OBSERVER" "OBSERVER" "15363" 100)
> ,profile ((@@(wispwot wispwot)import-trust-value) (cdr changed-and-state) 
> "OBSERVER" "OBSERVER" "242" 100)
> ,profile ((@@(wispwot wispwot)import-trust-value) (cdr changed-and-state) 
> "OBSERVER" "OBSERVER" "853" 100)

%     cumulative   self             
time   seconds     seconds  procedure
 21.92    286.68    286.68  wispwot/wispwot.scm:456:18
 21.14    276.46    276.46  wispwot/wispwot.scm:449:18
 20.86    292.23    272.82  vector->list
 13.26 2124682.83    173.39  srfi/srfi-1.scm:600:7:map2
  6.46     84.52     84.52  %after-gc-thunk
  4.04     55.03     52.83  wispwot/wispwot.scm:457:17
  3.96     54.41     51.81  wispwot/wispwot.scm:450:17
  2.27     29.69     29.63  make-srfi-4-vector
  2.25     29.43     29.43  length+
  1.01     16.43     13.24  wispwot/wispwot.scm:276:0:calculate-scores
  0.93     12.19     12.19  list-tail
  0.53      6.92      6.92  display
  0.23      3.10      3.01  write
  0.16   1295.52      2.12  wispwot/wispwot.scm:375:0:import-trust-value
  0.07      0.95      0.95  object->string
  0.06   1309.39      0.80  srfi/srfi-1.scm:452:2:fold
  0.06      0.78      0.78  srfi/srfi-4.scm:85:20:u16vector-set!
  0.06      0.98      0.75  ice-9/pretty-print.scm:273:0:pretty-print
  0.05     11.09      0.69  wispwot/wispwot.scm:513:8
  0.05      4.98      0.66  ice-9/pretty-print.scm:258:2:rev-string-append
  0.05      0.66      0.66  srfi/srfi-4.scm:85:20:s8vector-ref
  0.05      0.63      0.63  vector-move-left!
  0.03     16.75      0.45  ice-9/pretty-print.scm:37:0:generic-write
  0.03      4.38      0.45  wispwot/wispwot.scm:349:0:vector-append!
  0.03      0.45      0.45  srfi/srfi-4.scm:85:20:s8vector-set!
  0.03      0.39      0.39  srfi/srfi-4.scm:85:20:u16vector-ref
  0.03     29.90      0.33  srfi/srfi-1.scm:580:2:map
  0.03      9.09      0.33  ice-9/pretty-print.scm:62:4:loop
  0.03      0.66      0.33  make-vector
  0.02     32.59      0.27  wispwot/wispwot.scm:194:0:calculate-ranks
  0.02      0.92      0.27  
wispwot/wispwot.scm:415:2:find-index-record-if-needed
  0.02      0.27      0.27  procedure?
  0.02      0.24      0.24  ice-9/boot-9.scm:1345:3
  0.02      0.24      0.24  make-string
  0.01      0.18      0.18  ice-9/pretty-print.scm:100:12
  0.01      0.18      0.18  min
  0.01      6.14      0.15  ice-9/pretty-print.scm:293:17
  0.01      0.21      0.15  ice-9/pretty-print.scm:72:22
  0.01      0.15      0.15  srfi/srfi-4.scm:85:20:u16vector->list
  0.01      0.15      0.15  remove
  0.01      0.12      0.12  length
  0.01      0.12      0.12  srfi/srfi-4.scm:76:2:make-u8vector
  0.01      0.12      0.12  random
  0.01      0.12      0.12  srfi/srfi-4.scm:85:20:s8vector-length
  0.01      0.15      0.09  srfi/srfi-4.scm:85:20:u16vector-length
  0.01      0.12      0.09  %read-line
  0.01      0.09      0.09  srfi/srfi-4.scm:85:20:list->u8vector
  0.01      0.09      0.09  srfi/srfi-4.scm:85:20:u8vector-set!
  0.01      0.09      0.09  hash-ref
  0.01      0.09      0.09  ice-9/pretty-print.scm:61:2:wr
  0.01      0.09      0.09  cdr
  0.00      1.40      0.06  ice-9/pretty-print.scm:58:2:out
  0.00      0.39      0.06  wispwot/wispwot.scm:504:4
  0.00      0.06      0.06  integer?
  0.00      0.06      0.06  ice-9/boot-9.scm:806:0:and=>
  0.00      8.08      0.03  ice-9/pretty-print.scm:95:4:pr
  0.00      0.24      0.03  srfi/srfi-4.scm:85:20:list->u8vector
  0.00      0.09      0.03  string-split
  0.00      0.03      0.03  srfi/srfi-4.scm:85:20:make-u16vector
  0.00      0.03      0.03  car
  0.00      0.03      0.03  srfi/srfi-4.scm:85:20:make-s8vector
  0.00      0.03      0.03  eof-object?
  0.00      0.03      0.03  srfi/srfi-4.scm:85:20:s8vector->list
  0.00      0.03      0.03  ice-9/pretty-print.scm:256:0:reverse-string-append
  0.00      0.03      0.03  list?
  0.00      0.03      0.03  ice-9/boot-9.scm:888:0:iota
  0.00      0.03      0.03  reverse!
  0.00      0.03      0.03  append
  0.00      0.03      0.03  list-head
  0.00      0.03      0.03  srfi/srfi-1.scm:584:5:map1
  0.00   1307.69      0.00  ice-9/ports.scm:428:0:call-with-input-file
  0.00   1307.69      0.00  <current input>:2:9
  0.00   1307.69      0.00  ice-9/ports.scm:492:3
  0.00    563.14      0.00  remove
  0.00     84.52      0.00  anon #x7a24b0
  0.00     54.83      0.00  gc
  0.00      3.10      0.00  object->string
  0.00      0.12      0.00  ice-9/rdelim.scm:193:0:read-line
  0.00      0.03      0.00  inexact->exact
---
Sample count: 43863
Total time: 1307.687229447 seconds (726.756595442 seconds in GC)


%     cumulative   self             
time   seconds     seconds  procedure
 57.35     21.72     21.56  wispwot/wispwot.scm:194:0:calculate-ranks
 11.35      4.27      4.27  wispwot/wispwot.scm:324:10:discard
  4.91      3.43      1.85  wispwot/wispwot.scm:313:10:add-to-score
  4.17      1.59      1.57  truncate/
  2.96      1.11      1.11  ice-9/boot-9.scm:888:0:iota
  2.57     15.87      0.96  wispwot/wispwot.scm:276:0:calculate-scores
  2.43    226.03      0.92  srfi/srfi-1.scm:600:7:map2
  2.13      0.90      0.80  srfi/srfi-4.scm:85:20:u16vector->list
  1.74      0.65      0.65  srfi/srfi-4.scm:85:20:u8vector-set!
  1.65      0.67      0.62  srfi/srfi-4.scm:85:20:s8vector->list
  0.96      0.85      0.36  srfi/srfi-1.scm:580:2:map
  0.91      0.34      0.34  make-srfi-4-vector
  0.87      0.33      0.33  append
  0.74      1.34      0.28  srfi/srfi-4.scm:85:20:list->u8vector
  0.70      0.31      0.26  srfi/srfi-4.scm:85:20:s8vector-length
  0.70      0.26      0.26  remove
  0.61      0.23      0.23  length+
  0.48      0.18      0.18  integer?
  0.39     21.17      0.15  srfi/srfi-1.scm:584:5:map1
  0.39      0.15      0.15  reverse!
  0.35      0.13      0.13  car
  0.30      0.11      0.11  wispwot/wispwot.scm:338:19
  0.26      0.10      0.10  procedure?
  0.26      0.10      0.10  min
  0.17      0.07      0.07  %after-gc-thunk
  0.17      0.07      0.07  list?
  0.17      0.07      0.07  length
  0.13      0.05      0.05  srfi/srfi-4.scm:85:20:list->u8vector
  0.09      0.03      0.03  delete-duplicates
  0.09      0.03      0.03  wispwot/wispwot.scm:236:10:discard
  0.00     37.59      0.00  wispwot/wispwot.scm:375:0:import-trust-value
  0.00      4.30      0.00  remove
  0.00      0.07      0.00  anon #x7a24b0
---
Sample count: 2300
Total time: 37.593051451 seconds (0.998694416 seconds in GC)

%     cumulative   self             
time   seconds     seconds  procedure
 69.60     47.03     46.98  wispwot/wispwot.scm:194:0:calculate-ranks
  9.26      6.25      6.25  wispwot/wispwot.scm:324:10:discard
  3.14      2.12      2.12  truncate/
  3.11      4.22      2.10  wispwot/wispwot.scm:313:10:add-to-score
  2.36    241.68      1.60  srfi/srfi-1.scm:600:7:map2
  1.91      1.38      1.29  ice-9/boot-9.scm:888:0:iota
  1.62     20.47      1.09  wispwot/wispwot.scm:276:0:calculate-scores
  1.30      0.93      0.88  srfi/srfi-4.scm:85:20:u16vector->list
  1.18      0.81      0.80  srfi/srfi-4.scm:85:20:s8vector->list
  1.06      0.72      0.72  srfi/srfi-4.scm:85:20:u8vector-set!
  0.63      0.54      0.42  srfi/srfi-4.scm:85:20:s8vector-length
  0.58      0.39      0.39  remove
  0.53      0.36      0.36  append
  0.46      0.31      0.31  make-srfi-4-vector
  0.46      0.31      0.31  length+
  0.41      0.28      0.28  integer?
  0.39      0.98      0.26  srfi/srfi-1.scm:580:2:map
  0.36      0.24      0.24  procedure?
  0.34      1.35      0.23  srfi/srfi-4.scm:85:20:list->u8vector
  0.31      0.21      0.21  reverse!
  0.22     16.14      0.15  srfi/srfi-1.scm:584:5:map1
  0.19      0.13      0.13  car
  0.17      0.11      0.11  wispwot/wispwot.scm:338:19
  0.14      0.10      0.10  min
  0.14      0.10      0.10  length
  0.10      0.07      0.07  list?
  0.02      0.02      0.02  srfi/srfi-4.scm:85:20:list->u8vector
  0.00     67.50      0.00  wispwot/wispwot.scm:375:0:import-trust-value
  0.00      6.25      0.00  remove
---
Sample count: 4145
Total time: 67.498343877 seconds (1.476365885 seconds in GC)


%     cumulative   self             
time   seconds     seconds  procedure
 57.04     35.87     35.81  wispwot/wispwot.scm:194:0:calculate-ranks
 12.43      7.81      7.81  wispwot/wispwot.scm:324:10:discard
  4.84      5.95      3.04  wispwot/wispwot.scm:313:10:add-to-score
  4.61      2.91      2.89  truncate/
  3.30    367.72      2.07  srfi/srfi-1.scm:600:7:map2
  2.96     26.90      1.86  wispwot/wispwot.scm:276:0:calculate-scores
  2.72      1.73      1.71  ice-9/boot-9.scm:888:0:iota
  1.81      1.13      1.13  srfi/srfi-4.scm:85:20:u8vector-set!
  1.60      1.04      1.00  srfi/srfi-4.scm:85:20:u16vector->list
  1.13      0.74      0.71  srfi/srfi-4.scm:85:20:s8vector->list
  0.99      0.62      0.62  make-srfi-4-vector
  0.84      2.35      0.53  srfi/srfi-4.scm:85:20:list->u8vector
  0.73      1.46      0.46  srfi/srfi-1.scm:580:2:map
  0.68      0.43      0.43  length+
  0.68      0.43      0.43  remove
  0.60      0.51      0.38  srfi/srfi-4.scm:85:20:s8vector-length
  0.58      0.36      0.36  append
  0.50      0.31      0.31  procedure?
  0.42      0.26      0.26  reverse!
  0.34      0.21      0.21  integer?
  0.29      0.18      0.18  list?
  0.24      0.15      0.15  wispwot/wispwot.scm:338:19
  0.18      0.12      0.12  car
  0.13      0.08      0.08  min
  0.10     22.56      0.07  srfi/srfi-1.scm:584:5:map1
  0.10      0.07      0.07  srfi/srfi-4.scm:85:20:list->u8vector
  0.10      0.07      0.07  length
  0.03      0.02      0.02  %after-gc-thunk
  0.03      0.02      0.02  wispwot/wispwot.scm:236:10:discard
  0.00     62.77      0.00  wispwot/wispwot.scm:375:0:import-trust-value
  0.00      7.82      0.00  remove
  0.00      0.02      0.00  anon #x7a24b0
---
Sample count: 3820
Total time: 62.773351245 seconds (2.013414284 seconds in GC)


(I see here that the GC time during actual trust calculation is much
lower than I had expected)


I hope they help! (you’ll have to pull again — with `hg pull -u` — to
get import-trust-csv exported)

Best wishes,
Arne


Dr. Arne Babenhauserheide <arne_bab@web.de> writes:

> PS: Still it is important to get this code fast, because it is the
>     fallback for all situations where I cannot cheat and only calculate
>     a subset of the trust, and it is required at startup.
>
> Dr. Arne Babenhauserheide <arne_bab@web.de> writes:
>
>> Hi Linus,
>>
>> Linus Björnstam <linus.bjornstam@veryfast.biz> writes:
>>> I had a look and there is quite a lot you can do. Just out of
>>> curiosity: how much is GC time? You are generating a lot of
>>> intermediate data. Instead of vector-append! maybe use something like
>>> the new vectorlist srfi? If you show me a flame graph and give me some
>>> test data I can have a go!
>>
>> Thank you!
>>
>> I expect GC time to be roughly half during the trust calculation (much
>> more during import), because this fills up two cores.
>>
>> I can’t easily give you a flame graph (except if you can tell me how to
>> generate it), but I now pushed a version in pure Scheme (instead of
>> wisp) that runs a huge test:
>>
>> hg clone https://hg.sr.ht/~arnebab/wispwot
>> cd wispwot
>> ./run-wispwot.scm --test
>>
>> This imports 200k trust edges (which takes a lot of time) and then does
>> three full trust calculations (which each take around 70s).
>>
>> The most important limitation for optimization is that the memory use
>> must stay reasonable with 64k IDs which each have 1000 trust edges. This
>> memory use is what the current code is optimized for (that’s why there
>> are all those u8vectors and u16vectors).
>>
>> For the math: at 64 million trust edges, this should currently require
>> (in theory) less than 200MiB of memory for the actual trust structure (2
>> byte for the id, 1 byte for the trust).
>>
>> Going up to 300MiB for time-optimization would still be viable, but it
>> shouldn’t go beyond that (there are algorithmic options to reduce the
>> amount of work done per update, so the runtime of the current code is
>> important but it is not a life-and-death situation).
>>
>> Best wishes,
>> Arne


-- 
Unpolitisch sein
heißt politisch sein
ohne es zu merken

Attachment: signature.asc
Description: PGP signature


reply via email to

[Prev in Thread] Current Thread [Next in Thread]