[pve-devel] vm stop tasks hanging
Alexandre DERUMIER
aderumier at odiso.com
Fri Apr 20 15:09:04 CEST 2012
what do you think about this:
only call lvm_lvs, once only, if storage is lvm.
sub deactivate_volumes {
my ($cfg, $vollist) = @_;
return if !($vollist && scalar(@$vollist));
>> my $lvs=undef;
my @errlist = ();
foreach my $volid (@$vollist) {
my ($storeid, $volname) = parse_volume_id ($volid);
my $scfg = storage_config ($cfg, $storeid);
if ($scfg->{type} eq 'lvm') {
my ($name) = parse_volname_lvm ($volname);
>> $lvs = lvm_lvs () if !$lvs;
if ($lvs->{$scfg->{vgname}}->{$name}) {
my $path = path ($cfg, $volid);
my $cmd = ['/sbin/lvchange', '-aln', $path];
eval { run_command($cmd, errmsg => "can't deactivate LV '$volid'"); };
if (my $err = $@) {
warn $err;
push @errlist, $volid;
}
}
}
}
die "volume deativation failed: " . join(' ', @errlist)
if scalar(@errlist);
}
----- Mail original -----
De: "Alexandre DERUMIER" <aderumier at odiso.com>
À: "Dietmar Maurer" <dietmar at proxmox.com>
Cc: pve-devel at pve.proxmox.com
Envoyé: Vendredi 20 Avril 2012 13:08:13
Objet: Re: [pve-devel] vm stop tasks hanging
I had launched the command
/sbin/lvs --separator : --noheadings --units b --unbuffered --nosuffix --options vg_name,lv_name,lv_size,uuid,tags
it take around 60sec to parse all my disks on a test server
But I don't understand why it hang when called on my production server.
Maybe I have a hanging disk lun on my production server...
Do we really need to rescan lvm before desactivate volumes ?
what happen if we remove:
my $lvs = lvm_lvs ()
if ($lvs->{$scfg->{vgname}}->{$name}) {
?
(I don't have lvm disks to test for the moment...)
----- Mail original -----
De: "Dietmar Maurer" <dietmar at proxmox.com>
À: "Alexandre DERUMIER" <aderumier at odiso.com>, "Stefan Priebe - Profihost AG" <s.priebe at profihost.ag>
Cc: pve-devel at pve.proxmox.com
Envoyé: Vendredi 20 Avril 2012 12:28:32
Objet: RE: [pve-devel] vm stop tasks hanging
Maybe. I do not have such setup, so its hard to test here.
> -----Original Message-----
> From: pve-devel-bounces at pve.proxmox.com [mailto:pve-devel-
> bounces at pve.proxmox.com] On Behalf Of Alexandre DERUMIER
> Sent: Freitag, 20. April 2012 12:23
> To: Stefan Priebe - Profihost AG
> Cc: pve-devel at pve.proxmox.com
> Subject: Re: [pve-devel] vm stop tasks hanging
>
> also, I have around 600luns, so maybe lvs try to scan each of them ?
>
> ----- Mail original -----
>
> De: "Alexandre DERUMIER" <aderumier at odiso.com>
> À: "Stefan Priebe - Profihost AG" <s.priebe at profihost.ag>
> Cc: pve-devel at pve.proxmox.com
> Envoyé: Vendredi 20 Avril 2012 12:03:43
> Objet: Re: [pve-devel] vm stop tasks hanging
>
> I think I found the problem:
>
> in Qemuserver.pm : vm_stop_cleanup sub
>
> -> PVE::Storage::deactivate_volumes($storecfg, $vollist);
>
>
> sub deactivate_volumes {
> my ($cfg, $vollist) = @_;
>
> return if !($vollist && scalar(@$vollist));
>
> my $lvs = lvm_lvs (); ------------------------------> this is called, but I don't use lvm
>
> my @errlist = ();
> foreach my $volid (@$vollist) {
> my ($storeid, $volname) = parse_volume_id ($volid);
>
> my $scfg = storage_config ($cfg, $storeid);
>
> if ($scfg->{type} eq 'lvm') {
> my ($name) = parse_volname_lvm ($volname);
>
> if ($lvs->{$scfg->{vgname}}->{$name}) {
> my $path = path ($cfg, $volid);
> my $cmd = ['/sbin/lvchange', '-aln', $path];
> eval { run_command($cmd, errmsg => "can't deactivate LV '$volid'"); };
> if (my $err = $@) {
> warn $err;
> push @errlist, $volid;
> }
> }
> }
> }
>
> die "volume deativation failed: " . join(' ', @errlist)
>
>
> sub lvm_lvs {
> my ($vgname) = @_;
>
> my $cmd = ['/sbin/lvs', '--separator', ':', '--noheadings', '--units', 'b',
> '--unbuffered', '--nosuffix', '--options',
> 'vg_name,lv_name,lv_size,uuid,tags'];
>
>
>
>
> maybe adding a
>
> return if $scfg->{type} ne 'lvm'
>
> at the begin of deactivate_volumes sub should help ?
>
>
> ----- Mail original -----
>
> De: "Alexandre DERUMIER" <aderumier at odiso.com>
> À: "Stefan Priebe - Profihost AG" <s.priebe at profihost.ag>
> Cc: pve-devel at pve.proxmox.com
> Envoyé: Vendredi 20 Avril 2012 10:39:13
> Objet: Re: [pve-devel] vm stop tasks hanging
>
> interesting: when I stop the process, I have this error:
>
>
> command '/sbin/lvs --separator : --noheadings --units b --unbuffered --
> nosuffix --options vg_name,lv_name,lv_size,uuid,tags' failed: received
> interrupt
> root at kvm6:~#
>
> I'm using scsi lun directly without lvm, maybe this is the cause of the problem
> ?
>
>
>
> ----- Mail original -----
>
> De: "Alexandre DERUMIER" <aderumier at odiso.com>
> À: "Stefan Priebe - Profihost AG" <s.priebe at profihost.ag>
> Cc: pve-devel at pve.proxmox.com
> Envoyé: Vendredi 20 Avril 2012 10:36:37
> Objet: Re: [pve-devel] vm stop tasks hanging
>
> Hi,
> console or proxmox gui, same problem.
>
> strace :
>
> Process 536632 attached - interrupt to quit
> select(8, [6], NULL, NULL, {0, 602921}) = 0 (Timeout)
> open("/proc/536638/stat", O_RDONLY) = 10
> ioctl(10, SNDCTL_TMR_TIMEBASE or TCGETS, 0x7fff4daca4b0) = -1 ENOTTY
> (Inappropriate ioctl for device)
> lseek(10, 0, SEEK_CUR) = 0
> fstat(10, {st_mode=S_IFREG|0444, st_size=0, ...}) = 0
> fcntl(10, F_SETFD, FD_CLOEXEC) = 0
> read(10, "536638 (qm) S 536632 536638 5366"..., 4096) = 263
> close(10) = 0
> select(8, [6], NULL, NULL, {1, 0}) = 0 (Timeout)
> open("/proc/536638/stat", O_RDONLY) = 10
> ioctl(10, SNDCTL_TMR_TIMEBASE or TCGETS, 0x7fff4daca4b0) = -1 ENOTTY
> (Inappropriate ioctl for device)
> lseek(10, 0, SEEK_CUR) = 0
> fstat(10, {st_mode=S_IFREG|0444, st_size=0, ...}) = 0
> fcntl(10, F_SETFD, FD_CLOEXEC) = 0
> read(10, "536638 (qm) S 536632 536638 5366"..., 4096) = 262
> close(10) = 0
> select(8, [6], NULL, NULL, {1, 0}) = 0 (Timeout)
> open("/proc/536638/stat", O_RDONLY) = 10
> ioctl(10, SNDCTL_TMR_TIMEBASE or TCGETS, 0x7fff4daca4b0) = -1 ENOTTY
> (Inappropriate ioctl for device)
> lseek(10, 0, SEEK_CUR) = 0
> fstat(10, {st_mode=S_IFREG|0444, st_size=0, ...}) = 0
> fcntl(10, F_SETFD, FD_CLOEXEC) = 0
> read(10, "536638 (qm) S 536632 536638 5366"..., 4096) = 262
> close(10) = 0
> select(8, [6], NULL, NULL, {1, 0}) = 0 (Timeout)
> open("/proc/536638/stat", O_RDONLY) = 10
> ioctl(10, SNDCTL_TMR_TIMEBASE or TCGETS, 0x7fff4daca4b0) = -1 ENOTTY
> (Inappropriate ioctl for device)
> lseek(10, 0, SEEK_CUR) = 0
> fstat(10, {st_mode=S_IFREG|0444, st_size=0, ...}) = 0
> fcntl(10, F_SETFD, FD_CLOEXEC) = 0
> read(10, "536638 (qm) S 536632 536638 5366"..., 4096) = 262
> close(10) = 0
> select(8, [6], NULL, NULL, {1, 0}) = 0 (Timeout)
> open("/proc/536638/stat", O_RDONLY) = 10
> ioctl(10, SNDCTL_TMR_TIMEBASE or TCGETS, 0x7fff4daca4b0) = -1 ENOTTY
> (Inappropriate ioctl for device)
> lseek(10, 0, SEEK_CUR) = 0
> fstat(10, {st_mode=S_IFREG|0444, st_size=0, ...}) = 0
> fcntl(10, F_SETFD, FD_CLOEXEC) = 0
> read(10, "536638 (qm) S 536632 536638 5366"..., 4096) = 262
> close(10) = 0
> select(8, [6], NULL, NULL, {1, 0}) = 0 (Timeout)
> open("/proc/536638/stat", O_RDONLY) = 10
> ioctl(10, SNDCTL_TMR_TIMEBASE or TCGETS, 0x7fff4daca4b0) = -1 ENOTTY
> (Inappropriate ioctl for device)
> lseek(10, 0, SEEK_CUR) = 0
> fstat(10, {st_mode=S_IFREG|0444, st_size=0, ...}) = 0
> fcntl(10, F_SETFD, FD_CLOEXEC) = 0
> read(10, "536638 (qm) S 536632 536638 5366"..., 4096) = 262
> close(10) = 0
> select(8, [6], NULL, NULL, {1, 0}) = 0 (Timeout)
> open("/proc/536638/stat", O_RDONLY) = 10
> ioctl(10, SNDCTL_TMR_TIMEBASE or TCGETS, 0x7fff4daca4b0) = -1 ENOTTY
> (Inappropriate ioctl for device)
> lseek(10, 0, SEEK_CUR) = 0
> fstat(10, {st_mode=S_IFREG|0444, st_size=0, ...}) = 0
> fcntl(10, F_SETFD, FD_CLOEXEC) = 0
> read(10, "536638 (qm) S 536632 536638 5366"..., 4096) = 263
> close(10) = 0
> select(8, [6], NULL, NULL, {1, 0}) = 0 (Timeout)
> open("/proc/536638/stat", O_RDONLY) = 10
> ioctl(10, SNDCTL_TMR_TIMEBASE or TCGETS, 0x7fff4daca4b0) = -1 ENOTTY
> (Inappropriate ioctl for device)
> lseek(10, 0, SEEK_CUR) = 0
> fstat(10, {st_mode=S_IFREG|0444, st_size=0, ...}) = 0
> fcntl(10, F_SETFD, FD_CLOEXEC) = 0
> read(10, "536638 (qm) S 536632 536638 5366"..., 4096) = 263
> close(10) = 0
> select(8, [6], NULL, NULL, {1, 0}) = 0 (Timeout)
> open("/proc/536638/stat", O_RDONLY) = 10
> ioctl(10, SNDCTL_TMR_TIMEBASE or TCGETS, 0x7fff4daca4b0) = -1 ENOTTY
> (Inappropriate ioctl for device)
> lseek(10, 0, SEEK_CUR) = 0
> fstat(10, {st_mode=S_IFREG|0444, st_size=0, ...}) = 0
> fcntl(10, F_SETFD, FD_CLOEXEC) = 0
> read(10, "536638 (qm) S 536632 536638 5366"..., 4096) = 262
> close(10) = 0
> select(8, [6], NULL, NULL, {1, 0}) = 0 (Timeout)
> open("/proc/536638/stat", O_RDONLY) = 10
> ioctl(10, SNDCTL_TMR_TIMEBASE or TCGETS, 0x7fff4daca4b0) = -1 ENOTTY
> (Inappropriate ioctl for device)
> lseek(10, 0, SEEK_CUR) = 0
> fstat(10, {st_mode=S_IFREG|0444, st_size=0, ...}) = 0
> fcntl(10, F_SETFD, FD_CLOEXEC) = 0
> read(10, "536638 (qm) S 536632 536638 5366"..., 4096) = 262
> close(10) = 0
> select(8, [6], NULL, NULL, {1, 0}) = 0 (Timeout)
> open("/proc/536638/stat", O_RDONLY) = 10
> ioctl(10, SNDCTL_TMR_TIMEBASE or TCGETS, 0x7fff4daca4b0) = -1 ENOTTY
> (Inappropriate ioctl for device)
> lseek(10, 0, SEEK_CUR) = 0
> fstat(10, {st_mode=S_IFREG|0444, st_size=0, ...}) = 0
> fcntl(10, F_SETFD, FD_CLOEXEC) = 0
> read(10, "536638 (qm) S 536632 536638 5366"..., 4096) = 262
> close(10) = 0
> select(8, [6], NULL, NULL, {1, 0}) = 0 (Timeout)
> open("/proc/536638/stat", O_RDONLY) = 10
> ioctl(10, SNDCTL_TMR_TIMEBASE or TCGETS, 0x7fff4daca4b0) = -1 ENOTTY
> (Inappropriate ioctl for device)
> lseek(10, 0, SEEK_CUR) = 0
> fstat(10, {st_mode=S_IFREG|0444, st_size=0, ...}) = 0
> fcntl(10, F_SETFD, FD_CLOEXEC) = 0
> read(10, "536638 (qm) S 536632 536638 5366"..., 4096) = 262
> close(10) = 0
> select(8, [6], NULL, NULL, {1, 0}) = 0 (Timeout)
> open("/proc/536638/stat", O_RDONLY) = 10
> ioctl(10, SNDCTL_TMR_TIMEBASE or TCGETS, 0x7fff4daca4b0) = -1 ENOTTY
> (Inappropriate ioctl for device)
> lseek(10, 0, SEEK_CUR) = 0
> fstat(10, {st_mode=S_IFREG|0444, st_size=0, ...}) = 0
> fcntl(10, F_SETFD, FD_CLOEXEC) = 0
> read(10, "536638 (qm) S 536632 536638 5366"..., 4096) = 262
> close(10) = 0
> select(8, [6], NULL, NULL, {1, 0}) = 0 (Timeout)
> open("/proc/536638/stat", O_RDONLY) = 10
> ioctl(10, SNDCTL_TMR_TIMEBASE or TCGETS, 0x7fff4daca4b0) = -1 ENOTTY
> (Inappropriate ioctl for device)
> lseek(10, 0, SEEK_CUR) = 0
> fstat(10, {st_mode=S_IFREG|0444, st_size=0, ...}) = 0
> fcntl(10, F_SETFD, FD_CLOEXEC) = 0
> read(10, "536638 (qm) S 536632 536638 5366"..., 4096) = 262
> close(10) = 0
> select(8, [6], NULL, NULL, {1, 0}) = 0 (Timeout)
> open("/proc/536638/stat", O_RDONLY) = 10
> ioctl(10, SNDCTL_TMR_TIMEBASE or TCGETS, 0x7fff4daca4b0) = -1 ENOTTY
> (Inappropriate ioctl for device)
> lseek(10, 0, SEEK_CUR) = 0
> fstat(10, {st_mode=S_IFREG|0444, st_size=0, ...}) = 0
> fcntl(10, F_SETFD, FD_CLOEXEC) = 0
> read(10, "536638 (qm) S 536632 536638 5366"..., 4096) = 262
> close(10) = 0
> select(8, [6], NULL, NULL, {1, 0}) = 0 (Timeout)
> open("/proc/536638/stat", O_RDONLY) = 10
> ioctl(10, SNDCTL_TMR_TIMEBASE or TCGETS, 0x7fff4daca4b0) = -1 ENOTTY
> (Inappropriate ioctl for device)
> lseek(10, 0, SEEK_CUR) = 0
> fstat(10, {st_mode=S_IFREG|0444, st_size=0, ...}) = 0
> fcntl(10, F_SETFD, FD_CLOEXEC) = 0
> read(10, "536638 (qm) S 536632 536638 5366"..., 4096) = 262
> close(10) = 0
> select(8, [6], NULL, NULL, {1, 0}^C <unfinished ...>
> Process 536632 detached
>
>
> ----- Mail original -----
>
> De: "Stefan Priebe - Profihost AG" <s.priebe at profihost.ag>
> À: pve-devel at pve.proxmox.com
> Envoyé: Vendredi 20 Avril 2012 10:00:50
> Objet: Re: [pve-devel] vm stop tasks hanging
>
> Am 20.04.2012 09:58, schrieb Alexandre DERUMIER:
> > Hi Dietmar,
> >
> > I have problems with kvm stopping task, which are hanging.
> >
> > vm stop correctly (icon in tree is black), but task continue to run. (so i need
> to stop the task manually).
> >
> > I can reproduce it 100%.
> >
> > Do you have an idea ?
>
> What does an strace -f -p PID of the vm stop command say? It should do
> or wait for something. Also does it only happen via Proxmox console or
> does it also happen when starting then command via shell?
>
> Greets
> Stefan
> _______________________________________________
> pve-devel mailing list
> pve-devel at pve.proxmox.com
> http://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
>
>
>
> --
>
> --
>
>
>
>
> Alexandre D erumier
> Ingénieur Système
> Fixe : 03 20 68 88 90
> Fax : 03 20 68 90 81
> 45 Bvd du Général Leclerc 59100 Roubaix - France
> 12 rue Marivaux 75002 Paris - France
>
>
>
>
> --
>
> --
>
>
>
>
> Alexandre D erumier
> Ingénieur Système
> Fixe : 03 20 68 88 90
> Fax : 03 20 68 90 81
> 45 Bvd du Général Leclerc 59100 Roubaix - France
> 12 rue Marivaux 75002 Paris - France
>
> _______________________________________________
> pve-devel mailing list
> pve-devel at pve.proxmox.com
> http://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
>
>
>
> --
>
> --
>
>
>
>
> Alexandre D erumier
> Ingénieur Système
> Fixe : 03 20 68 88 90
> Fax : 03 20 68 90 81
> 45 Bvd du Général Leclerc 59100 Roubaix - France
> 12 rue Marivaux 75002 Paris - France
>
> _______________________________________________
> pve-devel mailing list
> pve-devel at pve.proxmox.com
> http://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
>
>
>
> --
>
> --
>
>
>
>
> Alexandre D erumier
> Ingénieur Système
> Fixe : 03 20 68 88 90
> Fax : 03 20 68 90 81
> 45 Bvd du Général Leclerc 59100 Roubaix - France
> 12 rue Marivaux 75002 Paris - France
>
> _______________________________________________
> pve-devel mailing list
> pve-devel at pve.proxmox.com
> http://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
--
--
Alexandre D erumier
Ingénieur Système
Fixe : 03 20 68 88 90
Fax : 03 20 68 90 81
45 Bvd du Général Leclerc 59100 Roubaix - France
12 rue Marivaux 75002 Paris - France
_______________________________________________
pve-devel mailing list
pve-devel at pve.proxmox.com
http://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
--
--
Alexandre D erumier
Ingénieur Système
Fixe : 03 20 68 88 90
Fax : 03 20 68 90 81
45 Bvd du Général Leclerc 59100 Roubaix - France
12 rue Marivaux 75002 Paris - France
More information about the pve-devel
mailing list