guile-user
[Top][All Lists]
Advanced

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

Performance issue with guile-2.2


From: Vijay Pratap Chaurasia
Subject: Performance issue with guile-2.2
Date: Tue, 11 Apr 2017 15:58:10 +0530

Hi,
     I have a tool which compares live data between two sources. I found
that the program runs more than 3 times slower than the same with
guile-2.0.11 . I have done profiling but there was nothing special to point
out. All most all calls were taking more than double the time compare to
guile-2.0.11. It is contrary to the claim of 30% performance boost with
guile-2.2 release. Can some one point the possible reason for slowness?

I have created a simple test program which reports the diff of two alist.

*time  /home/guile-2.2/bin/guile -s ./performanceTest.scm*
real    0m34.375s
user    0m37.616s
sys     0m0.361s

*time /home/guile-2.0/bin/guile -s ./performanceTest.scm*
real    0m18.939s
user    0m18.829s
sys     0m0.104s


*Test Code:*

*(use-modules (ice-9 eval-string)  (ice-9 common-list)  (ice-9 hash-table)
 *
*                     (srfi srfi-1)  (ice-9 rdelim))*

*(define *obj-string-cache* (make-hash-table 500))*
*(define (fast-obj-string obj)*
*  (let ((entry (hashq-ref *obj-string-cache* obj #f)))*
*    (unless entry*
*        (set! entry (if (symbol? obj) (symbol->string obj) (object->string
obj)))*
*        (hashq-set! *obj-string-cache* obj entry))*
*    entry))*

*(define (sort-tuples tuples)*
*  (sort-list tuples (lambda (x y) (string<? (fast-obj-string (car x))
(fast-obj-string (car y))))))*

*(define (report-diff type tuple1 tuple2)*
*  (let ((tuple (if tuple1 tuple1 tuple2)))*
*     (cond ((eq? type '-) `((- . (,tuple1))))*
*              ((eq? type '+) `((+ . (,tuple2))))*
*              ((eq? type '!) `((! . (,tuple1 . (,tuple2))))))))*

*(define (diff-sorted-tuples tuples1 tuples2 diff)*
*  (cond ((and (null? tuples1) (null? tuples2)) diff)*
*        ((null? tuples1) (append (map (lambda (x) (report-diff '+ #f x))
tuples2) diff))*
*        ((null? tuples2) (append (map (lambda (x) (report-diff '- x #f))
tuples1) diff))*
*        (else*
*         (let* ((tuple1 (car tuples1))*
*                (tuple2 (car tuples2)))*
*           (cond ((equal? (car tuple1) (car tuple2))*
*                  (diff-sorted-tuples (cdr tuples1) (cdr tuples2)*
*                                      (if (equal? tuple1 tuple2) diff
(append! diff (report-diff '! tuple1 tuple2)))))*
*                 ((string<? (fast-obj-string (car tuple1))*
*                            (fast-obj-string (car tuple2)))*
*                  (diff-sorted-tuples (cdr tuples1) tuples2 (append! diff
(report-diff '- tuple1 #f))))*
*                 (else*
*                  (diff-sorted-tuples tuples1 (cdr tuples2) (append! diff
(report-diff '+ #f tuple2)))))))))*

*(define-inlinable (diff-tuples tuples1 tuples2)*
*  (diff-sorted-tuples (sort-tuples tuples1) (sort-tuples tuples2) '()))*

*(define compare*
*  (let ((count 0))*
*     (lambda (port)*
*           (let ((msg  (eval-string (read-line port))))*
*               (diff-tuples msg msg)*
*               (seek port 0 SEEK_SET)*
*               (set! count (1+ count))*
*               (if (< count 10000) *
*                  (compare port))))))*

*(compare (open-input-file "data.txt"))*

*File data.txt*


*'(  (IDN_PROD_PERM 98) (RDNDISPLAY 120) (DSPLY_NAME "MINI GOLD JUN7")
(RDN_EXCHID 23) (TIMACT "2017-03-20 10:33:06") (FID_TRD_PRC 1235.2)
(FID_TRD_PREV1_PRC 1234.7) (FID_TRD_PREV2_PRC 1234.8) (TRDPRC_4 1234.7)
(TRDPRC_5 1234.7) (FID_NET_CHG 2.0) (FID_HI 1237.2) (FID_LO 1233.0)
(FID_TICK 1) (CURRENCY 840) (TRADE_DATE "3/20/2017") (ACTIV_DATE
"3/20/2017") (TRDTIM_1 "2017-03-20 10:17:32") (OPEN_PRC 1233.3)
(FID_YSET_PRC 1233.2) (FID_BID 1235.1) (FID_ASK 1235.6) (NEWS "YYYY")
(NEWS_TIME " 7:53:07") (FID_BID_SIZE 5) (FID_ASK_SIZE 1) (FID_CUM_VOL 30)
(CONTR_MNTH "JUN7") (BLKVOLUM null) (FID_SRC_PRC_FMT_CODE 1) (LOTSZUNITS
32) (FID_PCNT_CHG 0.16) (OPEN_BID 1220.7) (OPEN_ASK 1234.0) (CLOSE_BID
1231.4) (CLOSE_ASK 1232.9) (LOCHIGH 1365.3) (LOCLOW 1098.0) (FID_OPN_INT
165) (OPINTNC 23) (FID_EXPR "6/28/2017") (FID_SET_PRC 1233.2) (UPLIMIT
null) (LOLIMIT null) (FID_NO_OF_TRDS 26) (OFFCL_CODE "5050169")
(FID_IDN_HSTCLSDATE "3/17/2017") (LIMIT_IND null) (TURNOVER 32109.0)
(YCHIGH_IND null) (YCLOW_IND null) (DAYS_MAT 101) (PRC_QL_CD 160)
(TDY_UN_CLS null) (TDY_OF_CLS null) (FID_TRD_VOL 1) (LOT_SIZE_A 32.15)
(RECORDTYPE 178) (FID_SET_DATE "3/17/2017") (BID_TONE "i") (ASK_TONE "i")
(OPINT_2 142) (OPINT_DATE "3/17/2017") (IRGVOL null) (INSPRC null) (INSVOL
null) (FID_TRD_TIME "2017-03-20 10:17:32") (TNOVER_SC null) (HST_VOL null)
(EXERCISED null) (BCAST_REF "GOL") (HST_SESVOL 56) (ACT_FLAG1 "s")
(ACT_FLAG2 "s") (ACT_FLAG3 "b") (ACT_FLAG4 "b") (ACT_FLAG5 " ") (GEN_VAL1
1235.4) (GEN_VAL2 1.0) (GEN_VAL3 1233.4) (GEN_VAL4 101) (GV1_TEXT "SPLTrd")
(GV2_TEXT "SPLVol") (GV3_TEXT "SYS") (SEQNUM 52690211) (QUOTIM "2017-03-20
10:33:06") (GV1_DATE "3/20/2017") (GEN_VAL5 null) (GV1_TIME "2017-03-20
10:19:15") (EXCHTIM "2017-03-20 10:33:06") (CONV_FAC 0) (PREF_DISP 5391)
(VOL_X_PRC1 1234.96) (DSO_ID null) (BIG_VOL null) (RDN_EXCHD2 759)
(THEO_OPEN 1233.4) (LSTTRDDATE null) (OPINT_DAT2 "3/16/2017") (PREV_DISP
3491) (MPV null) (OFF_CLOSE null) (QUOTE_DATE "3/20/2017") (TRDVOL_2 1)
(TRDVOL_3 1) (TRDVOL_4 1) (TRDVOL_5 1) (VWAP 1234.96) (PROV_SYMB "5050169")
(BID_ASK_DT "3/17/2017") (ISIN_CODE null) (LST_TRD_PR 1232.1) (MNEMONIC
"YG") (UNDERLYING null) (PERIOD_CDE "O") (TRDTIM_MS 51452672) (SALTIM_MS
51452672) (QUOTIM_MS 52386000) )*


*Profile output comparison*

*GUILE 2.0.11*

*%     cumulative   self*

*time   seconds     seconds      name*

 62.15     11.87     11.87  read

  7.56      1.44      1.44  string<?

  6.91      3.55      1.32  #<procedure b60d8b0 at
./performanceTest1.scm:23:20 (x y)>

  6.51      1.24      1.24  %read-line

  5.86      2.23      1.12  fast-obj-string

  5.80      1.11      1.11  hashq-ref

  1.50      5.28      0.29  sort-list

  0.91      0.17      0.17  diff-sorted-tuples

  0.46      0.09      0.09  #<procedure b786438 at
ice-9/eval-string.scm:73:5 (port)>

  0.20     12.09      0.04  read-and-eval

  0.20      0.09      0.04  #<procedure aa992a0 at ice-9/boot-9.scm:2777:4
(name #:optional autoload version #:key ensure)>

  0.13     19.11      0.02  #<procedure b60d650 at
./performanceTest1.scm:56:5 (port)>

  0.13      0.09      0.02  scan

  0.13      0.05      0.02  nested-ref-module

  0.13      0.05      0.02  #<procedure b6ce410 at
language/scheme/spec.scm:34:16 (port env)>

  0.13      0.02      0.02  module-variable

  0.13      0.02      0.02  seek

  0.07     19.11      0.01  save-module-excursion

  0.07      1.26      0.01  read-line

  0.07      0.12      0.01  #<procedure aa39470 at ice-9/eval.scm:499:4
(exp)>

  0.07      0.10      0.01  expand-top-sequence

  0.07      0.06      0.01  lookup-language

  0.07      0.06      0.01  syntax-type

  0.07      0.02      0.01  module-ref-submodule

  0.07      0.01      0.01  #<procedure eeb2050>

  0.07      0.01      0.01  #<procedure aa93090 at ice-9/boot-9.scm:2004:2
(module)>

  0.07      0.01      0.01  #<procedure aadab00>

  0.07      0.01      0.01  variable-ref

  0.07      0.01      0.01  #<procedure d11b650>

  0.07      0.01      0.01  current-module

  0.07      0.01      0.01  assq

  0.07      0.01      0.01  #<procedure b591cf0 at ice-9/boot-9.scm:1380:4
(obj)>

  0.07      0.01      0.01  #<procedure b988120>

  0.07      0.01      0.01  memoize-expression

  0.07      0.01      0.01  #<procedure ba84230>

  0.00     19.11      0.00  eval

  0.00     19.11      0.00  load-compiled/vm

  0.00     19.11      0.00  #<procedure b60da20 ()>

  0.00     19.11      0.00  call-with-prompt

  0.00     19.11      0.00  #<procedure b584ce0 at ice-9/boot-9.scm:4045:3
()>

  0.00     12.27      0.00  call-with-input-string

  0.00      0.12      0.00  lp

  0.00      0.07      0.00  eval-string

  0.00      0.04      0.00  get-global-definition-hook

  0.00      0.01      0.00  #<procedure aa59280 at
ice-9/eval-string.scm:76:8 ()>

  0.00      0.01      0.00  module-ref

---

Sample count: 1535

Total time: 19.106 seconds (0.865 seconds in GC)

*GUILE 2.2*

*%     cumulative   self*

*time   seconds     seconds  procedure*

 35.62     13.04     13.02  read

 16.47     10.41      6.02  ./performanceTest1.scm:13:0:fast-obj-string

 12.06     14.82      4.41  ./performanceTest1.scm:23:20

 12.02      4.39      4.39  hashq-ref

  9.20      3.36      3.36  string<?

  5.64      2.10      2.06  %read-line

  5.12     36.54      1.87  ./performanceTest1.scm:56:5

  1.11      0.41      0.41  open-input-string

  0.96      0.35      0.35  ./performanceTest1.scm:34:0:diff-sorted-tuples

  0.19      0.07      0.07  %after-gc-thunk

  0.15     13.40      0.05  ice-9/eval-string.scm:33:0:read-and-eval

  0.15      0.05      0.05  module-variable

  0.11      0.07      0.04  ice-9/boot-9.scm:2485:0:nested-ref-module

  0.11      0.04      0.04  set-current-module

  0.07      0.09      0.03  ice-9/psyntax.scm:1083:10:parse

  0.07      0.07      0.03  language/scheme/spec.scm:34:16

  0.07      0.05      0.03  ice-9/eval-string.scm:77:8

  0.07      0.03      0.03  ice-9/psyntax.scm:2944:8:match

  0.04     50.02      0.01  ice-9/boot-9.scm:2306:0:save-module-excursion

  0.04     18.20      0.01  sort-list

  0.04      0.42      0.01  ice-9/ports.scm:526:0:call-with-input-string

  0.04      0.20      0.01  ice-9/eval.scm:40:0:primitive-eval

  0.04      0.18      0.01  ice-9/psyntax.scm:1054:6:expand-top-sequence

  0.04      0.12      0.01  ice-9/eval-string.scm:56:0:eval-string

  0.04      0.09      0.01  ice-9/boot-9.scm:2699:4

  0.04      0.07      0.01  ice-9/psyntax.scm:872:4:resolve-identifier

  0.04      0.05      0.01  ice-9/boot-9.scm:228:5:map1

  0.04      0.03      0.01  ice-9/boot-9.scm:2293:0:module-ref-submodule

  0.04      0.03      0.01  ice-9/eval-string.scm:28:0:ensure-language

  0.04      0.01      0.01  memq

  0.04      0.01      0.01  ice-9/boot-9.scm:1975:2

  0.04      0.01      0.01  ice-9/boot-9.scm:1293:2

  0.04      0.01      0.01  variable-ref

  0.04      0.01      0.01  list?

  0.04      0.01      0.01  ice-9/psyntax.scm:767:10:search

  0.04      0.01      0.01  ice-9/boot-9.scm:1371:17

  0.04      0.01      0.01  variable-bound?

  0.04      0.01      0.01  ice-9/boot-9.scm:1975:2

  0.04      0.01      0.01  ice-9/boot-9.scm:1306:4

  0.00     36.54      0.00  apply-smob/1

  0.00     36.54      0.00  ice-9/eval.scm:618:6

  0.00     36.54      0.00  ice-9/boot-9.scm:709:0:call-with-prompt

  0.00     36.54      0.00  ice-9/boot-9.scm:3821:3

  0.00     36.54      0.00  anon #xec651098

  0.00      2.10      0.00  ice-9/rdelim.scm:193:0:read-line

  0.00      0.14      0.00  ice-9/psyntax.scm:1289:6:syntax-type

  0.00      0.09      0.00  system/base/language.scm:61:0:lookup-language

  0.00      0.07      0.00  anon #xfce2f8

  0.00      0.03      0.00  ice-9/psyntax.scm:2043:19

  0.00      0.03      0.00  ice-9/psyntax.scm:2907:8:match*

  0.00      0.01      0.00  ice-9/psyntax.scm:1950:6:strip

  0.00      0.01      0.00  ice-9/boot-9.scm:223:2:map

  0.00      0.01      0.00  ice-9/psyntax.scm:762:6:id-var-name

  0.00      0.01      0.00  ice-9/eval-string.scm:66:9

  0.00      0.01      0.00  ice-9/psyntax.scm:2695:10:macroexpand

  0.00      0.01      0.00  ice-9/psyntax.scm:2046:26

  0.00      0.01      0.00  ice-9/boot-9.scm:2611:4

---

Sample count: 2695

Total time: 36.543 seconds (0.539 seconds in GC)



Thanks
- vijay


reply via email to

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