theolaurent / ocaml-reagent

An implementation of reagents for multicore OCaml
ISC License
4 stars 0 forks source link

Livelocks and starvation #17

Closed kayceesrk closed 9 years ago

kayceesrk commented 9 years ago

With queue_test under move-based promotion multicore GC scheme [1], the program regularly suffers from livelocks. Here is a run:

$ time ./queue_test.byte 8 100000
items_per_domain = 12500
[7] production complete
[6] production complete
[2] production complete
[6] consumed=6523
[5] production complete
[1] production complete
[3] production complete
[4] production complete
[0] production complete
[1] consumed=3188
[3] consumed=7997
[7] consumed=43648
[2] consumed=20255
[0] consumed=188
[4] consumed=5824
[5] consumed=12377
FunQ: mean = 2.656480, sd = 0.000000 tp=37643.799313

real    1m10.501s
user    0m2.557s
sys     0m0.114s

Although the program took more than a minute to complete, the user time is just 2.5s. I suspect a problem with backoff mechanism in Backoff or kCAS.

[1] https://github.com/kayceesrk/ocaml-multicore/tree/nodup

kayceesrk commented 9 years ago

Fixed. See https://github.com/kayceesrk/ocaml-multicore/commit/c2e245c21549e18f0c57d3cad5d05f4e187ec60c.