Hello,
   We  have  run  into  an issue running Percona with O_DIRECT when using
   boot2docker (which uses aufs). We have been able to work around this problem
   by forcing docker not to use aufs in this case, but thought you might be
   interested  in  case  there  is an underlying problem that needs to be
   resolved.Â
   * Observed behaviour:
   - The mysql process becoming unresponsive and all attempts to access (e.g.
   ls) /var/lib/mysql (the mysql data directory) hang indefinitely.
   - Attempts to access /var/lib/mysql inside the container, and also outside
   the container (navigating to the associated directory in /var/lib/docker)
   both hang.
   * Important info:
   -   This   percona  option  must  be  set  for  the  issue  to  occur:
   innodb_flush_method = O_DIRECT
   - This occurs when running Percona mysql in a docker container with using
   versions of boot2docker > 1.8.2, but versions <= 1.8.2 do not have the
   issue.
   - The boot2docker commit that introduced this issue is this commit where
   the kernel and aufs versions are
   bumped:Â [1]https://github.com/boot2docker/boot2docker/commit/7fb8d2d010e268
   2512b82c7cebd0f743d61b44aa
   - The problem does not occur if /var/lib/mysql is declared as a VOLUME when
   building the docker image (docker will create a volume on the host, not
   using aufs)
   - The problem does not occur if a directory on the host is mounted into
   /var/lib/mysql
   It looks like docker has explicitly added support for direct IO with aufs
   by default ([2]https://github.com/docker/docker/pull/10534) so it seems to
   me like the assumption is that this use case should work (even if the best
   practice is to declare /var/lib/mysql as a VOLUME).
   * Steps to reproduce:
   # Using latest boot2docker
   ([3]https://github.com/boot2docker/boot2docker/releases/tag/v1.10.2),orany
   version > 1.8.2, create a VM:
   docker-machine  create  --driver virtualbox --virtualbox-cpu-count "1"
   --virtualbox-memory "4096" repro
   # Build a percona image - with the O_DIRECT option set - using this VM:
   cat > ./my.cnf <<- EOM
   [client]
   socket = /var/lib/mysql/mysql.sock
   [mysqld_safe]
   socket = /var/lib/mysql/mysql.sock
   [mysqld]
   user = mysql
   pid-file = /var/lib/mysql/mysql.pid
   socket = /var/lib/mysql/mysql.sock
   datadir = /var/lib/mysql
   bind-address = 0.0.0.0
   innodb_flush_method = O_DIRECT
   EOM
   cat > Dockerfile <<- EOM
   FROM centos:6.6
   RUN yum install
   -y [4]http://www.percona.com/downloads/percona-release/redhat/0.1-3/percona
   -release-0.1-3.noarch.rpm
   RUN yum install -y Percona-Server-server-55
   ADD my.cnf /etc/my.cnf
   #VOLUME ["/var/lib/mysql"]
   ENTRYPOINT ["mysqld"]
   EXPOSE 3306
   EOM
   eval "$(docker-machine env repro)"
   docker build -t percona -f Dockerfile .
   # Run a container using this image
   docker run -d --name test_db percona
   # In one terminal window, exec into the container and watch /var/lib/mysql
   eval "$(docker-machine env repro)"
   docker exec -it test_db bash -c "TERM='xterm' watch ls -la /var/lib/mysql"
   # In another terminal window, run this command to attempt to create 20k
   tables in this container
   eval "$(docker-machine env repro)"
   docker exec -it test_db bash -c 'mysql -u root -e "create database testing"
   &&  date  &&  for  i in {1..20000}; do echo "create table table_$i (ID
   bigint(20) unsigned NOT NULL AUTO_INCREMENT, time timestamp NOT NULL DEFAULT
   CURRENT_TIMESTAMP, f1 varchar(16) COLLATE utf8_bin NOT NULL, f2 char(16)
   COLLATE utf8_bin NOT NULL, Â f11 varchar(16) COLLATE utf8_bin NOT NULL,
   Â f111 varchar(16) COLLATE utf8_bin NOT NULL, Â  f22 varchar(16) COLLATE
   utf8_bin NOT NULL, Â f222 varchar(16) COLLATE utf8_bin NOT NULL, PRIMARY KEY
   (ID));" | mysql -u root testing; echo -n "table_$i "; done'
   # At some point, usually less than a minute later, the watch command will
   hang, and any attempts to access /var/lib/mysql in the container or on the
   host will hang
   * Other info requested
   This is the info the aufs github README requests be included in this email:
   - /proc/mounts (instead of the output of mount(8))
   docker@repro:~$ cat /proc/mounts
   tmpfs / tmpfs rw,relatime,size=3641328k 0 0
   proc /proc proc rw,relatime 0 0
   sysfs /sys sysfs rw,relatime 0 0
   devpts /dev/pts devpts rw,relatime,mode=600,ptmxmode=000 0 0
   tmpfs /dev/shm tmpfs rw,relatime 0 0
   fusectl /sys/fs/fuse/connections fusectl rw,relatime 0 0
   /dev/sda1 /mnt/sda1 ext4 rw,relatime,data=ordered 0 0
   cgroup /sys/fs/cgroup tmpfs rw,relatime,mode=755 0 0
   cgroup /sys/fs/cgroup/cpuset cgroup rw,relatime,cpuset 0 0
   cgroup /sys/fs/cgroup/cpu cgroup rw,relatime,cpu 0 0
   cgroup /sys/fs/cgroup/cpuacct cgroup rw,relatime,cpuacct 0 0
   cgroup /sys/fs/cgroup/blkio cgroup rw,relatime,blkio 0 0
   cgroup /sys/fs/cgroup/memory cgroup rw,relatime,memory 0 0
   cgroup /sys/fs/cgroup/devices cgroup rw,relatime,devices 0 0
   cgroup /sys/fs/cgroup/freezer cgroup rw,relatime,freezer 0 0
   cgroup /sys/fs/cgroup/net_cls cgroup rw,relatime,net_cls 0 0
   cgroup /sys/fs/cgroup/perf_event cgroup rw,relatime,perf_event 0 0
   cgroup /sys/fs/cgroup/net_prio cgroup rw,relatime,net_prio 0 0
   cgroup /sys/fs/cgroup/hugetlb cgroup rw,relatime,hugetlb 0 0
   Users /Users vboxsf rw,nodev,relatime 0 0
   /dev/sda1 /mnt/sda1/var/lib/docker/aufs ext4 rw,relatime,data=ordered 0 0
   none
   /mnt/sda1/var/lib/docker/aufs/mnt/61519d5d301361fe9094a732a8e79168930311bbf7
   8298deda27f94665547a9d aufs rw,relatime,si=82437bd0fc319d67,dio,dirperm1 0 0
   shm
   /mnt/sda1/var/lib/docker/containers/065adec0e8ca3533546118cc0930bd28d0aaa213
   12f8442d2d4e5c6c4bc2dc56/shm tmpfs
   rw,nosuid,nodev,noexec,relatime,size=65536k 0 0
   nsfs /var/run/docker/netns/8fed2b224c57 nsfs rw 0 0
   - /sys/module/aufs/*
   root@repro:/sys/module/aufs# for f in `find . -type f`; do echo "$f:"; cat
   "$f"; done
   ./parameters/brs:
   1
   ./parameters/allow_userns:
   N
   ./version:
   4.1.13+-20160215
   ./uevent:
   cat: can't open './uevent': Permission denied
   - /sys/fs/aufs/* (if you have them)
   root@repro:/sys/fs/aufs# for f in `find . -type f`; do echo "$f:"; cat "$f";
   done
   ./si_82437bd0fc319d67/br0:
   /mnt/sda1/var/lib/docker/aufs/diff/61519d5d301361fe9094a732a8e79168930311bbf
   78298deda27f94665547a9d=rw
   ./si_82437bd0fc319d67/br1:
   /mnt/sda1/var/lib/docker/aufs/diff/61519d5d301361fe9094a732a8e79168930311bbf
   78298deda27f94665547a9d-init=ro+wh
   ./si_82437bd0fc319d67/br2:
   /mnt/sda1/var/lib/docker/aufs/diff/5e08725fc1388127a22c01345ba5d84dbb11511cb
   75d616b49d2ec848fb79792=ro+wh
   ./si_82437bd0fc319d67/br3:
   /mnt/sda1/var/lib/docker/aufs/diff/86e34d747e3ae936effd10b0059b178d56d33ad7f
   f4fb70a32d550e7b83f66a6=ro+wh
   ./si_82437bd0fc319d67/br4:
   /mnt/sda1/var/lib/docker/aufs/diff/5cc807e6634443dec30c3c22ae5b04e97e3d13170
   9df81d8cae67b86e4bb9bf1=ro+wh
   ./si_82437bd0fc319d67/br5:
   /mnt/sda1/var/lib/docker/aufs/diff/0d8442795212973eaae827f91c0c2547b0dc27a64
   1ddc7da30435fe6539a8b0d=ro+wh
   ./si_82437bd0fc319d67/br6:
   /mnt/sda1/var/lib/docker/aufs/diff/59f9ed479d38bfada4bb7af9c64874df256370870
   071a8c83098c9d7f4f4c2e5=ro+wh
   ./si_82437bd0fc319d67/xi_path:
   /dev/shm/aufs.xino
   ./si_82437bd0fc319d67/brid0:
   16384
   ./si_82437bd0fc319d67/brid1:
   16385
   ./si_82437bd0fc319d67/brid2:
   16386
   ./si_82437bd0fc319d67/brid3:
   16387
   ./si_82437bd0fc319d67/brid4:
   16388
   ./si_82437bd0fc319d67/brid5:
   16389
   ./si_82437bd0fc319d67/brid6:
   16390
   - /debug/aufs/* (if you have them)
   Does not exist
   - linux kernel version
   Â  if your kernel is not plain, for example modified by distributor,
   Â  the url where i can download its source is necessary too.
   root@repro:/sys/module/aufs# uname -a
   Linux repro 4.1.18-boot2docker #1 SMP Sat Feb 20 08:24:27 UTC 2016 x86_64
   GNU/Linux
   [5]https://github.com/boot2docker/boot2docker/releases/tag/v1.10.2
   - aufs version which was printed at loading the module or booting the
   Â  system, instead of the date you downloaded.
   This is the output of docker info:
   root@repro:/sys/module/aufs# docker info
   Containers: 1
   Â Running: 1
   Â Paused: 0
   Â Stopped: 0
   Images: 8
   Server Version: 1.10.2
   Storage Driver: aufs
   Â Root Dir: /mnt/sda1/var/lib/docker/aufs
   Â Backing Filesystem: extfs
   Â Dirs: 7
   Â Dirperm1 Supported: true
   Execution Driver: native-0.2
   Logging Driver: json-file
   Plugins:
   Â Volume: local
   Â Network: bridge null host
   Kernel Version: 4.1.18-boot2docker
   Operating System: Boot2Docker 1.10.2 (TCL 6.4.1); master : 611be10 - Mon Feb
   22 22:47:06 UTC 2016
   OSType: linux
   Architecture: x86_64
   CPUs: 1
   Total Memory: 3.858 GiB
   Name: repro
   ID: G2RW:EP4U:STXW:MP7M:255S:GUY4:YOXH:ZOPR:5UPB:KN3V:TT7D:DWQ2
   Debug mode (server): true
   Â File Descriptors: 23
   Â Goroutines: 48
   Â System Time: 2016-03-07T23:22:46.938269001Z
   Â EventsListeners: 0
   Â Init SHA1:
   Â Init Path: /usr/local/bin/docker
   Â Docker Root Dir: /mnt/sda1/var/lib/docker
   Labels:
   Â provider=virtualbox
   This  version  of  boot2docker  is  built  with  aufs  4.1.13+ (commit
   1aa8a143457147473edc97035a7f4b89f9d234ae).
   [6]https://github.com/boot2docker/boot2docker/blob/611be104ad81065b8d1cf71b7
   3346b59e7b2d7ed/Dockerfile#L29
   - configuration (define/undefine CONFIG_AUFS_xxx)
   [7]https://github.com/boot2docker/boot2docker/blob/611be104ad81065b8d1cf71b7
   3346b59e7b2d7ed/kernel_config#L4017
   CONFIG_AUFS_FS=y
   # CONFIG_AUFS_BRANCH_MAX_127 is not set
   # CONFIG_AUFS_BRANCH_MAX_511 is not set
   # CONFIG_AUFS_BRANCH_MAX_1023 is not set
   CONFIG_AUFS_BRANCH_MAX_32767=y
   CONFIG_AUFS_SBILIST=y
   # CONFIG_AUFS_HNOTIFY is not set
   # CONFIG_AUFS_EXPORT is not set
   CONFIG_AUFS_XATTR=y
   # CONFIG_AUFS_FHSM is not set
   # CONFIG_AUFS_RDU is not set
   # CONFIG_AUFS_SHWH is not set
   # CONFIG_AUFS_BR_RAMFS is not set
   # CONFIG_AUFS_BR_FUSE is not set
   CONFIG_AUFS_BR_HFSPLUS=y
   CONFIG_AUFS_BDEV_LOOP=y
   # CONFIG_AUFS_DEBUG is not set
   - kernel configuration or /proc/config.gz (if you have it)
   [8]https://github.com/boot2docker/boot2docker/blob/611be104ad81065b8d1cf71b7
   3346b59e7b2d7ed/kernel_config
   Thanks very much!
   --
   Christie Wilson
   Software Engineer
   Demonware

References

   1. 
https://github.com/boot2docker/boot2docker/commit/7fb8d2d010e2682512b82c7cebd0f743d61b44aa
   2. https://github.com/docker/docker/pull/10534
   3. https://github.com/boot2docker/boot2docker/releases/tag/v1.10.2
   4. 
http://www.percona.com/downloads/percona-release/redhat/0.1-3/percona-release-0.1-3.noarch.rpm
   5. https://github.com/boot2docker/boot2docker/releases/tag/v1.10.2
   6. 
https://github.com/boot2docker/boot2docker/blob/611be104ad81065b8d1cf71b73346b59e7b2d7ed/Dockerfile#L29
   7. 
https://github.com/boot2docker/boot2docker/blob/611be104ad81065b8d1cf71b73346b59e7b2d7ed/kernel_config#L4017
   8. 
https://github.com/boot2docker/boot2docker/blob/611be104ad81065b8d1cf71b73346b59e7b2d7ed/kernel_config
------------------------------------------------------------------------------
Transform Data into Opportunity.
Accelerate data analysis in your applications with
Intel Data Analytics Acceleration Library.
Click to learn more.
http://makebettercode.com/inteldaal-eval

Reply via email to