* [Qemu-devel] Strange problems with lseek in qemu-img map @ 2015-06-02 12:54 David Weber 2015-06-03 14:06 ` Stefan Hajnoczi 2015-06-04 1:19 ` Wen Congyang 0 siblings, 2 replies; 4+ messages in thread From: David Weber @ 2015-06-02 12:54 UTC (permalink / raw) To: qemu-devel Hello, I'm currently evaluating to switch our virtualization servers to a newer OS. This includes a switch from qemu 1.7 to 2.2 or 2.3. Our system heavily relies on big sparse images and drive_mirror. While testing, I experienced some problems with that combination. The strange thing is, that everything works flawlessly on my workstation but fails on my servers. Testcase: # qemu-img create test 500G # time qemu-img map test Systems: O3-3: Kubuntu 15.04 Workstation with stock-kernel 3.19.0-18-generic and stock qemu 2.2.0 Dinah: Ubuntu Server 15.04 with stock-kernel 3.19.0-18-generic and stock qemu 2.2.0 Result on O3-3: root@o3-3:~# qemu-img create test 500G Formatting 'test', fmt=raw size=536870912000 root@o3-3:~# time qemu-img map test Offset Length Mapped to File real 0m0.049s user 0m0.048s sys 0m0.000s Result on dinah: root@dinah:~# qemu-img create test 500G Formatting 'test', fmt=raw size=536870912000 root@dinah:~# time qemu-img map test Offset Length Mapped to File ^C real 0m41.862s user 0m0.004s sys 0m0.068s (Stopped with ^C) Strace on O3-3: https://gist.github.com/anonymous/f221035e9176f7c71c74 Strace on dinah: https://gist.github.com/anonymous/40b42888a65478c90b32 A git bisect between 1.7 and master revealed 7c15903789953ead14a417882657d52dc0c19a24 "block/raw-posix: use seek_hole ahead of fiemap" as bad but this is not the real problem. I also tried to switch from btrfs to ext4 but it didn't change anything. At this point, I was pretty sure that was just stupit and missing something trivial. I then startet a fedora 22 live system and I saw the same problem. It happens on both the ramdisk and a ext4 filesystem. Any ideas on this? I'm pretty much stuck at this point. Please ask if you need more information. Cheers, David ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [Qemu-devel] Strange problems with lseek in qemu-img map 2015-06-02 12:54 [Qemu-devel] Strange problems with lseek in qemu-img map David Weber @ 2015-06-03 14:06 ` Stefan Hajnoczi 2015-06-04 3:52 ` Wen Congyang 2015-06-04 1:19 ` Wen Congyang 1 sibling, 1 reply; 4+ messages in thread From: Stefan Hajnoczi @ 2015-06-03 14:06 UTC (permalink / raw) To: David Weber; +Cc: qemu-devel [-- Attachment #1: Type: text/plain, Size: 2052 bytes --] On Tue, Jun 02, 2015 at 02:54:17PM +0200, David Weber wrote: > Testcase: > # qemu-img create test 500G > # time qemu-img map test > > Systems: > O3-3: Kubuntu 15.04 Workstation with stock-kernel 3.19.0-18-generic and stock > qemu 2.2.0 > Dinah: Ubuntu Server 15.04 with stock-kernel 3.19.0-18-generic and stock qemu > 2.2.0 These systems have the same kernel but for some reason O3-3 completes quickly while Dinah takes a long time in lseek(fd, offset, SEEK_DATA). It looks like the file is empty (the syscall keeps returning ENXIO because there are no allocated blocks in the file where qemu-img probes). > Result on O3-3: > root@o3-3:~# qemu-img create test 500G > Formatting 'test', fmt=raw size=536870912000 > root@o3-3:~# time qemu-img map test > Offset Length Mapped to File > > real 0m0.049s > user 0m0.048s > sys 0m0.000s > > Result on dinah: > root@dinah:~# qemu-img create test 500G > Formatting 'test', fmt=raw size=536870912000 > root@dinah:~# time qemu-img map test > Offset Length Mapped to File > ^C > > real 0m41.862s > user 0m0.004s > sys 0m0.068s > (Stopped with ^C) > > Strace on O3-3: > https://gist.github.com/anonymous/f221035e9176f7c71c74 > > Strace on dinah: > https://gist.github.com/anonymous/40b42888a65478c90b32 > > A git bisect between 1.7 and master revealed > 7c15903789953ead14a417882657d52dc0c19a24 "block/raw-posix: use seek_hole ahead > of fiemap" as bad but this is not the real problem. > I also tried to switch from btrfs to ext4 but it didn't change anything. > > At this point, I was pretty sure that was just stupit and missing something > trivial. > I then startet a fedora 22 live system and I saw the same problem. It happens > on both the ramdisk and a ext4 filesystem. "it" == qemu-img map hangs or takes a very long time? Can you post a shell script that reproduces this with a ramdisk? That seems like the easiest way to get people debugging it. Stefan [-- Attachment #2: Type: application/pgp-signature, Size: 473 bytes --] ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [Qemu-devel] Strange problems with lseek in qemu-img map 2015-06-03 14:06 ` Stefan Hajnoczi @ 2015-06-04 3:52 ` Wen Congyang 0 siblings, 0 replies; 4+ messages in thread From: Wen Congyang @ 2015-06-04 3:52 UTC (permalink / raw) To: Stefan Hajnoczi, David Weber; +Cc: linux-ext4, qemu-devel Cc: ext4 maillist On 06/03/2015 10:06 PM, Stefan Hajnoczi wrote: > On Tue, Jun 02, 2015 at 02:54:17PM +0200, David Weber wrote: >> Testcase: >> # qemu-img create test 500G >> # time qemu-img map test >> >> Systems: >> O3-3: Kubuntu 15.04 Workstation with stock-kernel 3.19.0-18-generic and stock >> qemu 2.2.0 >> Dinah: Ubuntu Server 15.04 with stock-kernel 3.19.0-18-generic and stock qemu >> 2.2.0 > > These systems have the same kernel but for some reason O3-3 completes > quickly while Dinah takes a long time in lseek(fd, offset, SEEK_DATA). > It looks like the file is empty (the syscall keeps returning ENXIO > because there are no allocated blocks in the file where qemu-img > probes). > >> Result on O3-3: >> root@o3-3:~# qemu-img create test 500G >> Formatting 'test', fmt=raw size=536870912000 >> root@o3-3:~# time qemu-img map test >> Offset Length Mapped to File >> >> real 0m0.049s >> user 0m0.048s >> sys 0m0.000s >> >> Result on dinah: >> root@dinah:~# qemu-img create test 500G >> Formatting 'test', fmt=raw size=536870912000 >> root@dinah:~# time qemu-img map test >> Offset Length Mapped to File >> ^C >> >> real 0m41.862s >> user 0m0.004s >> sys 0m0.068s >> (Stopped with ^C) >> >> Strace on O3-3: >> https://gist.github.com/anonymous/f221035e9176f7c71c74 >> >> Strace on dinah: >> https://gist.github.com/anonymous/40b42888a65478c90b32 >> >> A git bisect between 1.7 and master revealed >> 7c15903789953ead14a417882657d52dc0c19a24 "block/raw-posix: use seek_hole ahead >> of fiemap" as bad but this is not the real problem. >> I also tried to switch from btrfs to ext4 but it didn't change anything. >> >> At this point, I was pretty sure that was just stupit and missing something >> trivial. >> I then startet a fedora 22 live system and I saw the same problem. It happens >> on both the ramdisk and a ext4 filesystem. > > "it" == qemu-img map hangs or takes a very long time? > > Can you post a shell script that reproduces this with a ramdisk? That > seems like the easiest way to get people debugging it. I think it is ext4's problem. I add some printk in ext4_seek_data(): [ 335.579506] ext4_seek_data(): isize: 7d00000000, offset: 0, maxsize: ffffffff000 [ 335.579512] ext4_seek_data(): blkbits: 12, start: 0, end: 7d00000 [ 340.672400] ext4_seek_data(): loop count: 131072001 [ 340.672402] ext4_seek_data() returns -ENXIO [ 340.672447] ext4_seek_data(): isize: 7d00000000, offset: 40000000, maxsize: ffffffff000 [ 340.672449] ext4_seek_data(): blkbits: 12, start: 40000, end: 7d00000 [ 345.701852] ext4_seek_data(): loop count: 130809857 [ 345.701853] ext4_seek_data() returns -ENXIO [ 345.701891] ext4_seek_data(): isize: 7d00000000, offset: 80000000, maxsize: ffffffff000 [ 345.701893] ext4_seek_data(): blkbits: 12, start: 80000, end: 7d00000 [ 350.718479] ext4_seek_data(): loop count: 130547713 [ 350.718480] ext4_seek_data() returns -ENXIO [ 350.718507] ext4_seek_data(): isize: 7d00000000, offset: c0000000, maxsize: ffffffff000 [ 350.718508] ext4_seek_data(): blkbits: 12, start: c0000, end: 7d00000 [ 355.729692] ext4_seek_data(): loop count: 130285569 [ 355.729693] ext4_seek_data() returns -ENXIO [ 355.729732] ext4_seek_data(): isize: 7d00000000, offset: 100000000, maxsize: ffffffff000 [ 355.729734] ext4_seek_data(): blkbits: 12, start: 100000, end: 7d00000 [ 360.728206] ext4_seek_data(): loop count: 130023425 [ 360.728207] ext4_seek_data() returns -ENXIO The diff: diff --git a/fs/ext4/file.c b/fs/ext4/file.c index 0613c25..9b334cc 100644 --- a/fs/ext4/file.c +++ b/fs/ext4/file.c @@ -453,12 +453,16 @@ static loff_t ext4_seek_data(struct file *file, loff_t offset, loff_t maxsize) loff_t dataoff, isize; int blkbits; int ret = 0; + unsigned long count = 0; mutex_lock(&inode->i_mutex); isize = i_size_read(inode); + pr_info("%s(): isize: %llx, offset: %llx, maxsize: %llx\n", + __func__, isize, offset, maxsize); if (offset >= isize) { mutex_unlock(&inode->i_mutex); + pr_info("%s() returns -ENXIO(offset is too large)\n", __func__); return -ENXIO; } @@ -467,8 +471,11 @@ static loff_t ext4_seek_data(struct file *file, loff_t offset, loff_t maxsize) last = start; end = isize >> blkbits; dataoff = offset; + pr_info("%s(): blkbits: %d, start: %x, end: %x\n", + __func__, blkbits, start, end); do { + count++; map.m_lblk = last; map.m_len = end - last + 1; ret = ext4_map_blocks(NULL, inode, &map, 0); @@ -508,8 +515,12 @@ static loff_t ext4_seek_data(struct file *file, loff_t offset, loff_t maxsize) mutex_unlock(&inode->i_mutex); - if (dataoff > isize) + pr_info("%s(): loop count: %ld\n", __func__, count); + + if (dataoff > isize) { + pr_info("%s() returns -ENXIO\n", __func__); return -ENXIO; + } return vfs_setpos(file, dataoff, maxsize); } We will call the syscall lseek(..., SEEK_DATA) 500 times. Thanks Wen Congyang > > Stefan > ^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [Qemu-devel] Strange problems with lseek in qemu-img map 2015-06-02 12:54 [Qemu-devel] Strange problems with lseek in qemu-img map David Weber 2015-06-03 14:06 ` Stefan Hajnoczi @ 2015-06-04 1:19 ` Wen Congyang 1 sibling, 0 replies; 4+ messages in thread From: Wen Congyang @ 2015-06-04 1:19 UTC (permalink / raw) To: David Weber, qemu-devel On 06/02/2015 08:54 PM, David Weber wrote: > Hello, > > I'm currently evaluating to switch our virtualization servers to a newer OS. > This includes a switch from qemu 1.7 to 2.2 or 2.3. > Our system heavily relies on big sparse images and drive_mirror. While > testing, I experienced some problems with that combination. > The strange thing is, that everything works flawlessly on my workstation but > fails on my servers. > > Testcase: > # qemu-img create test 500G > # time qemu-img map test > > Systems: > O3-3: Kubuntu 15.04 Workstation with stock-kernel 3.19.0-18-generic and stock > qemu 2.2.0 > Dinah: Ubuntu Server 15.04 with stock-kernel 3.19.0-18-generic and stock qemu > 2.2.0 > > Result on O3-3: > root@o3-3:~# qemu-img create test 500G > Formatting 'test', fmt=raw size=536870912000 > root@o3-3:~# time qemu-img map test > Offset Length Mapped to File > > real 0m0.049s > user 0m0.048s > sys 0m0.000s > > Result on dinah: > root@dinah:~# qemu-img create test 500G > Formatting 'test', fmt=raw size=536870912000 > root@dinah:~# time qemu-img map test > Offset Length Mapped to File > ^C > > real 0m41.862s > user 0m0.004s > sys 0m0.068s > (Stopped with ^C) Do you use the same filesystem? Thanks Wen Congyang > > Strace on O3-3: > https://gist.github.com/anonymous/f221035e9176f7c71c74 > > Strace on dinah: > https://gist.github.com/anonymous/40b42888a65478c90b32 > > A git bisect between 1.7 and master revealed > 7c15903789953ead14a417882657d52dc0c19a24 "block/raw-posix: use seek_hole ahead > of fiemap" as bad but this is not the real problem. > I also tried to switch from btrfs to ext4 but it didn't change anything. > > At this point, I was pretty sure that was just stupit and missing something > trivial. > I then startet a fedora 22 live system and I saw the same problem. It happens > on both the ramdisk and a ext4 filesystem. > > Any ideas on this? I'm pretty much stuck at this point. Please ask if you need > more information. > > Cheers, > David > > > ^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2015-06-04 3:48 UTC | newest] Thread overview: 4+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2015-06-02 12:54 [Qemu-devel] Strange problems with lseek in qemu-img map David Weber 2015-06-03 14:06 ` Stefan Hajnoczi 2015-06-04 3:52 ` Wen Congyang 2015-06-04 1:19 ` Wen Congyang
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).