[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: The Shepherd on Fibers
From: |
pelzflorian (Florian Pelz) |
Subject: |
Re: The Shepherd on Fibers |
Date: |
Sat, 26 Mar 2022 12:06:27 +0100 |
Hi Ludo! That you add fibers to Shepherd is great news.
On Wed, Mar 23, 2022 at 11:36:30PM +0100, Ludovic Courtès wrote:
> Fibers is used in a single-threaded fashion, which is the main
> constraint for shepherd since it forks. That also means that fibers
> cannot be preempted, so it’s fully cooperative scheduling.
To understand what you mean, I needed to read shepherd commit
934204fbd158aa9fbd42914b89aa960f99eef125
+ ;; Run Fibers in such a way that it does not create any POSIX thread,
+ ;; because POSIX threads and 'fork' cannot be used together
So shepherd service authors still cannot write blocking code but need
to yield?
> I’ve done some Guix System testing in VMs and didn’t notice any major
> issues. I’d like to merge that branch in ‘master’ and to eventually
> release it as 0.9.0 (with or without socket activation, we’ll see.)
> Hopefully, we could be running it within a couple of weeks.
I wanted to test too how much time it takes to boot to GDM on my slow
2010 dual-core Macbook, but I can’t quite figure out each shepherd-
service failing to build. How did you test the new shepherd in Guix?
florian@florianmacbook ~/git/guix [env]$ gzip -cd
/var/log/guix/drvs/f3/g9drzlg8vkzp6z81dcdsnfnaqa2anx-shepherd-avahi-daemon.go.drv.gz
Backtrace:
16 (primitive-load "/gnu/store/4qk3x8dl8hxnwry637kq4ahh2z2?")
In ice-9/eval.scm:
619:8 15 (_ #(#<directory (guile-user) 7ffff6fdec80> #<module ?>))
159:9 14 (_ #(#<directory (guile-user) 7ffff6fdec80> #<module ?>))
In ice-9/boot-9.scm:
3326:17 13 (resolve-interface (shepherd service) #:select _ #:hide ?)
In ice-9/threads.scm:
390:8 12 (_ _)
In ice-9/boot-9.scm:
3252:13 11 (_)
In ice-9/threads.scm:
390:8 10 (_ _)
In ice-9/boot-9.scm:
3536:20 9 (_)
2835:4 8 (save-module-excursion #<procedure 7ffff5f4ea50 at ice-?>)
3556:26 7 (_)
In unknown file:
6 (primitive-load-path "shepherd/service" #<procedure 7ff?>)
In shepherd/service.scm:
26:0 5 (_)
In ice-9/boot-9.scm:
3409:4 4 (define-module* _ #:filename _ #:pure _ #:version _ # _ ?)
2594:24 3 (call-with-deferred-observers #<procedure 7ffff5f3b410 ?>)
3422:24 2 (_)
222:17 1 (map1 (((fibers)) ((fibers scheduler) #:select (#)) # ?))
3329:6 0 (resolve-interface (fibers) #:select _ #:hide _ #:prefix ?)
ice-9/boot-9.scm:3329:6: In procedure resolve-interface:
no code for module (fibers)
Anyway, testing my boot time is not so important. I’d probably have
to change something in gnu/services/shepherd.scm. Or I should rebuild
shepherd in a less crude way.
Feel free to ignore me, though for completeness, here’s what I did:
* Pull shepherd wip-fibers commit
abbdd1e8b0f8bd4b3952efc5614f560aab9a79bf.
* I changed its Makefile.am and added -O1 to '$(GUILD) compile'
because Guix normally does likewise in an origin snippet.
* Then `guix shell -D shepherd autoconf automake guile-fibers help2man
texinfo -- sh -c 'autoreconf -vif && ./configure
--prefix=/home/florian/git/shepherd/out && make && make install'`.
* Then to Guix I added to gnu/packages/admin.scm:
(define-public new-shepherd
(package
(name "shepherd")
(version "0.9.0")
(source (local-file "/home/florian/git/shepherd/out" #:recursive? #t))
(build-system copy-build-system)
(propagated-inputs (list guile-fibers))
(arguments
`(#:install-plan '(("./" ""))))
…)) ;; and synopsis, description, license, homepage
and at the top #:use-module (gnu packages guile-xyz) to add
guile-fibers to new-shepherd’s propagated inputs. Also #:use-module
(guix build-system copy).
* Lastly I grafted
(define-public shepherd
(package
(name "shepherd")
(replacement new-shepherd)
…
* Compiled Guix and reconfigured. Building
/gnu/store/f3g9drzlg8vkzp6z81dcdsnfnaqa2anx-shepherd-avahi-daemon.go.drv
failed.
The same error happens when using new-shepherd as shepherd and
rebuilding the GNOME world.
Regards,
Florian
Re: The Shepherd on Fibers, Ludovic Courtès, 2022/03/29
Re: The Shepherd on Fibers, Maxime Devos, 2022/03/26