I am working on transitioning my day-to-day software development work to
Qubes. The primary challenge that I face is widespread use of Vagrant
for provisioning development environments. I am aware of the challenges
and concerns around hacking Qubes to achieve nested virtualization, so I
am trying to avoid going down that road.

A potential alternative is to use Docker, because there are no inherent
issues with using Linux containers inside virtual machines. Vagrant
supports using Docker as a "provider," so this seems like a viable
solution that could allow me to use my existing Vagrant-based
development environments on Qubes with only minor modifications.

I set up a new TemplateVM (based on Fedora 24) and AppVM to experiment
with setting up a Vagrant+Docker-based development environment. It was
surprisingly easy; however, after some initial testing, I realized an
unfortunate truth: operations inside the Docker container are *very
slow* - so slow as to create an unacceptable level of overhead for
day-to-day development work.

The slowdown appears to be due to slow disk IO. Running htop shows that
processes in the container have status "D", meaning "disk sleep
(uninterruptible)", for long periods of time. I tried switching the
Docker storage backend to "overlay" instead of the Fedora default of
devicemapper with loopback devices, which is a well-known technique for
improving Docker performance on Fedora. This was an improvement, based
on my experience as well as some simple dd-based IO benchmarks, but
overall performance is still much too slow--borderline unusable.

My gut feeling is that this is due to the combination of Qubes' overlay
filesystem with Docker's overlay filesystem - I imagine that nesting COW
filesystems is naturally a prescription for degraded performance.
Unfortunately, I do not know enough about Qubes/Docker/filesystems to
know of the best way to test this hypothesis.
My questions for the list are:

1. Is anybody else successfully using Vagrant and/or Docker on Qubes? Do
you have any tips/tricks to share?
2. Does anybody know or have any alternative theories as to what might
be causing these performance problems? 3. Even better: does anybody have
good advice for how to experimentally analyze these problems? Good ideas
for how to analyze the source of the slowdown, ideas for benchmarks,
useful analysis tools or techniques, etc.?

I have some notes on my experience and a Docker environment for basic IO
benchmarking, which I am happy to share if anybody's interested.

Thanks,
Garrett

-- 
You received this message because you are subscribed to the Google Groups 
"qubes-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to qubes-users+unsubscr...@googlegroups.com.
To post to this group, send email to qubes-users@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/qubes-users/8065ddd4-8153-3d13-dd15-edb7aafca62f%40freedom.press.
For more options, visit https://groups.google.com/d/optout.

Reply via email to