VirtualBox

Ticket #10987 (closed defect: fixed)

Opened 19 months ago

Last modified 14 months ago

(nano)sleep not interrupted by alarm (bug only with GA installed)

Reported by: krthie Owned by:
Priority: major Component: guest additions
Version: VirtualBox 4.1.22 Keywords: alarm interrupt sleep
Cc: Guest type: Linux
Host type: Windows

Description

This was first discussed on  https://forums.virtualbox.org/viewtopic.php?f=3&t=45395&p=236771#p236771

Symptom: on Ubuntu 11.10 64bit guest with guest additions installed, both nanosleep and sleep do not get interrupted by a scheduled alarm. The problem disappears after uninstalling guest additions (and reappears when reinstall GA).

A test program (based on a "configure" test from GNUlib) is attached. It schedules an alarm after 1sec and then calls nanosleep for 12sec. When running this program on Ubuntu running in VB, I get the correct behaviour:

$ gcc -o conftest conftest.c
$ time ./conftest

After nanosleep, but no interrupt

real	0m13.005s
user	0m0.000s
sys	0m0.000s

Running the same on Ubuntu directly (running on the same laptop but via a LiveCD, i.e. not under VB), I get

$ time ./conftest

After nanosleep and interrupted

real    0m1.198s
user    0m0.015s
sys     0m0.061s

I believe this to be a major problem, as this bug makes installing many packages impossible without code editing as "configure" hangs when testing for nanosleep and sleep behaviour, as the gnulib m4 test uses a very long sleep (+55 days...) period for this test.

My host: Windows 7 VB 4.1.22 Guest OS Ubuntu 11.10 $ uname -a Linux splinter-ubuntu64 3.0.0-19-generic #33-Ubuntu SMP Thu Apr 19 19:05:14 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux

On the forum, another user confirmed the same problem for 32bit and 64 bit Ubuntu 11.10 guest, MacOSX 10.7.3 host and VB 4.1.8 with Guest additions installed.

Attachments

conftest.c Download (1.5 KB) - added by krthie 19 months ago.
C test program that shows the bug
VBox.log Download (92.9 KB) - added by krthie 19 months ago.
vbox.log

Change History

Changed 19 months ago by krthie

C test program that shows the bug

Changed 19 months ago by krthie

vbox.log

comment:1 Changed 19 months ago by frank

I cannot reproduce your problem with Ubuntu 11.10 and 4.1.18 Additions installed. However, it could still be that the time synchronization has some influence. Is the program correctly executed after you stopped VBoxService in the guest (/etc/init.d/vboxadd-service stop)? If so, start the VBoxService process manually:

sudo /etc/init.d/vboxadd-service stop
sudo /usr/sbin/VBoxService -fvvv | tee log.txt

and leave it running while you execute the conftest example. Then check if there were any time synchronizations while running conftest.

comment:2 Changed 19 months ago by krthie

Hi Frank, the program still fails after stopping the service.

I followed your suggestion of running the service with verbose output anyway, just in case it'd be helpful. I get this

VBoxService 4.1.22 r80657 (verbosity: 2) linux.amd64 (Sep  7 2012 18:17:31) release log
00:00:00.001 main     Log opened 2012-09-27T21:58:04.368848000Z
00:00:00.001 main     OS Product: Linux
00:00:00.001 main     OS Release: 3.0.0-26-generic
00:00:00.001 main     OS Version: #42-Ubuntu SMP Wed Sep 5 08:37:08 UTC 2012
00:00:00.001 main     OS Service Pack: #42-Ubuntu SMP Wed Sep 5 08:37:08 UTC 2012
00:00:00.001 main     Executable: /opt/VBoxGuestAdditions-4.1.22/sbin/VBoxService
00:00:00.001 main     Process ID: 18908
00:00:00.001 main     Package type: LINUX_64BITS_GENERIC
00:00:00.001 main     Guest Property: /VirtualBox/GuestAdd/VBoxService/--control-procs-max-kept not found
00:00:00.002 main     Guest Property: /VirtualBox/GuestAdd/VBoxService/--timesync-interval not found
00:00:00.002 main     Guest Property: /VirtualBox/GuestAdd/VBoxService/--timesync-min-adjust not found
00:00:00.002 main     Guest Property: /VirtualBox/GuestAdd/VBoxService/--timesync-latency-factor not found
00:00:00.002 main     Guest Property: /VirtualBox/GuestAdd/VBoxService/--timesync-max-latency not found
00:00:00.003 main     Guest Property: /VirtualBox/GuestAdd/VBoxService/--timesync-set-threshold not found
00:00:00.003 main     Guest Property: /VirtualBox/GuestAdd/VBoxService/--timesync-set-start not found
00:00:00.003 main     Guest Property: /VirtualBox/GuestAdd/VBoxService/--timesync-set-on-restore not found
00:00:00.003 main     4.1.22 r80657 started. Verbose level = 2
00:00:00.003 main     Initializing services ...
00:00:00.004 main     Starting services ...
00:00:00.004 main     Starting service     'control' ...
00:00:00.004 main     Starting service     'timesync' ...
00:00:00.005 main     Starting service     'vminfo' ...
00:00:00.005 main     Starting service     'cpuhotplug' ...
00:00:00.006 main     Starting service     'memballoon' ...
00:00:00.006 main     Starting service     'vmstats' ...
00:00:00.007 main     Starting service     'automount' ...
00:00:00.007 main     All services started.
^C00:00:42.856 main     Waiting for service 'control' to stop ...
00:00:42.856 main     Shutting down ...
00:00:42.857 main     Shutting down complete
00:00:42.859 main     Waiting for service 'timesync' to stop ...
00:00:42.859 main     Waiting for service 'vminfo' to stop ...
00:00:42.877 main     Waiting for service 'cpuhotplug' to stop ...
00:00:42.877 main     Waiting for service 'memballoon' to stop ...
00:00:42.877 main     Waiting for service 'vmstats' to stop ...
00:00:42.877 main     Waiting for service 'automount' to stop ...
00:00:43.056 main     Stopping services returning: VINF_SUCCESS
00:00:43.057 main     Ended.

where I started the service as you suggested, ran conftest in another terminal, waited for 13secs for it to finish, and then switched back to the terminal with vboxservice running and stopped it by pressed control-C.

I can't see anything useful here. For good measure, I killed the following 3 processes as well

kris      1445  0.0  0.0  48940  1016 ?        Sl   09:26   0:00 /usr/bin/VBoxClient --clipboard
kris      1453  0.0  0.0  51096   936 ?        Sl   09:26   0:00 /usr/bin/VBoxClient --display
kris      1457  0.0  0.0  46864   672 ?        Sl   09:26   0:00 /usr/bin/VBoxClient --seamless

but that doesn't help either of course.

Any other suggestions?

comment:3 Changed 19 months ago by frank

Did you really pass '-fvvv'? Looking at your log file it seems that you forgot at least one 'v' (loglevel only '2' when it should be '3'). Perhaps there is some misunderstanding: I assume that the guest/host time synchronization is responsible for the failing test. So if you stop the VBoxService at all and execute the test application, it should not fail. If you now start '/usr/sbin/VBoxService -fvvv' then it will also log when the time is synchronized with the host. If your test app works fine with VBoxService stopped but does not work with VBoxService started and the log entries show that the time was synchronized in a bigger step (which can happen if the difference between guest and host is too big to adapt smoothly) then my assumption was correct.

comment:4 Changed 19 months ago by krthie

Hi Frank, apologies, I did indeed forget one v (not sure how I could do that!). New log is below. However, you might have missed the start of my previous comment: after stopping the service, the program still fails. As far as I understand that means that your assumption that this has to do with time syncing is incorrect.

Here's the log anyway. Thanks for your help.

$ sudo /usr/sbin/VBoxService -fvvv
[sudo] password for kris: 
VBoxService 4.1.22 r80657 (verbosity: 3) linux.amd64 (Sep  7 2012 18:17:31) release log
00:00:00.000 main     Log opened 2012-09-28T09:24:30.339300000Z
00:00:00.000 main     OS Product: Linux
00:00:00.000 main     OS Release: 3.0.0-26-generic
00:00:00.000 main     OS Version: #42-Ubuntu SMP Wed Sep 5 08:37:08 UTC 2012
00:00:00.000 main     OS Service Pack: #42-Ubuntu SMP Wed Sep 5 08:37:08 UTC 2012
00:00:00.000 main     Executable: /opt/VBoxGuestAdditions-4.1.22/sbin/VBoxService
00:00:00.000 main     Process ID: 19082
00:00:00.000 main     Package type: LINUX_64BITS_GENERIC
00:00:00.001 main     Guest Property: /VirtualBox/GuestAdd/VBoxService/--control-procs-max-kept not found
00:00:00.002 main     Guest Property: /VirtualBox/GuestAdd/VBoxService/--timesync-interval not found
00:00:00.002 main     Guest Property: /VirtualBox/GuestAdd/VBoxService/--timesync-min-adjust not found
00:00:00.002 main     Guest Property: /VirtualBox/GuestAdd/VBoxService/--timesync-latency-factor not found
00:00:00.002 main     Guest Property: /VirtualBox/GuestAdd/VBoxService/--timesync-max-latency not found
00:00:00.003 main     Guest Property: /VirtualBox/GuestAdd/VBoxService/--timesync-set-threshold not found
00:00:00.003 main     Guest Property: /VirtualBox/GuestAdd/VBoxService/--timesync-set-start not found
00:00:00.003 main     Guest Property: /VirtualBox/GuestAdd/VBoxService/--timesync-set-on-restore not found
00:00:00.004 main     4.1.22 r80657 started. Verbose level = 3
00:00:00.004 main     Initializing services ...
00:00:00.005 main     Service client ID: 0x35
00:00:00.005 main     VMInfo: Property Service Client ID: 0x36
00:00:00.005 main     VBoxServiceBalloonInit
00:00:00.005 main     MemBalloon: New balloon size 0 MB (R0 memory)
00:00:00.005 main     VBoxServiceVMStatsInit
00:00:00.005 main     VBoxStatsInit: New statistics interval 0 seconds
00:00:00.006 main     VBoxServiceAutoMountInit
00:00:00.006 main     VBoxServiceAutoMountInit: Service Client ID: 0x37
00:00:00.006 main     Starting services ...
00:00:00.006 main     Starting service     'control' ...
00:00:00.006 control  Waiting for host msg ...
00:00:00.006 main     Starting service     'timesync' ...
00:00:00.007 main     Starting service     'vminfo' ...
00:00:00.008 timesync VBoxServiceTimeSyncWorker: Host:    2012-09-28T09:24:30.401000000Z    (MinAdjust: 100 ms)
00:00:00.008 timesync VBoxServiceTimeSyncWorker: Guest: - 2012-09-28T09:24:30.346601000Z => 54 399 000 ns drift
00:00:00.009 vminfo   Writing guest property "/VirtualBox/GuestInfo/OS/Product" = "Linux"
00:00:00.009 main     Starting service     'cpuhotplug' ...
00:00:00.010 vminfo   Writing guest property "/VirtualBox/GuestInfo/OS/Release" = "3.0.0-26-generic"
00:00:00.010 main     Starting service     'memballoon' ...
00:00:00.011 vminfo   Writing guest property "/VirtualBox/GuestInfo/OS/Version" = "#42-Ubuntu SMP Wed Sep 5 08:37:08 UTC 2012"
00:00:00.011 main     Starting service     'vmstats' ...
00:00:00.012 vminfo   Writing guest property "/VirtualBox/GuestInfo/OS/ServicePack" = ""
00:00:00.012 main     Starting service     'automount' ...
00:00:00.013 vminfo   Writing guest property "/VirtualBox/GuestAdd/Version" = "4.1.22"
00:00:00.013 automount VBoxServiceAutoMountWorker: No shared folder mappings fouund
00:00:00.014 vminfo   Writing guest property "/VirtualBox/GuestAdd/VersionExt" = "4.1.22"
00:00:00.014 main     All services started.
00:00:00.014 vminfo   Writing guest property "/VirtualBox/GuestAdd/Revision" = "80657"
00:00:10.009 timesync VBoxServiceTimeSyncWorker: Host:    2012-09-28T09:24:40.398000000Z    (MinAdjust: 100 ms)
00:00:10.009 timesync VBoxServiceTimeSyncWorker: Guest: - 2012-09-28T09:24:40.348434000Z => 49 566 000 ns drift
00:00:20.009 timesync VBoxServiceTimeSyncWorker: Host:    2012-09-28T09:24:50.393000000Z    (MinAdjust: 100 ms)
00:00:20.009 timesync VBoxServiceTimeSyncWorker: Guest: - 2012-09-28T09:24:50.348763000Z => 44 237 000 ns drift
^C00:00:27.430 main     VBoxServiceMainWait: Received signal 2 (rc=0)
00:00:27.431 main     Calling stop function for service 'control' ...
00:00:27.431 main     Stopping ...
00:00:27.431 main     Cancelling pending waits (client ID=53) ...
00:00:27.432 control  Msg=0 (0 parms) retrieved
00:00:27.432 control  Host asked us to quit ...
00:00:27.432 main     Calling stop function for service 'timesync' ...
00:00:27.432 main     Calling stop function for service 'vminfo' ...
00:00:27.432 main     Calling stop function for service 'cpuhotplug' ...
00:00:27.432 main     Calling stop function for service 'memballoon' ...
00:00:27.432 main     Calling stop function for service 'vmstats' ...
00:00:27.432 main     Calling stop function for service 'automount' ...
00:00:27.432 main     Waiting for service 'control' to stop ...
00:00:27.432 main     Terminating service 'control' (0) ...
00:00:27.433 main     Terminating ...
00:00:27.433 main     Shutting down ...
00:00:27.433 main     Shutting down complete
00:00:27.433 main     Disconnecting client ID=53 ...
00:00:27.433 memballoon VBoxServiceBalloonWorker: finished mem balloon change request thread
00:00:27.433 vmstats  VBoxStatsThread: finished statistics change request thread
00:00:27.433 main     Waiting for service 'timesync' to stop ...
00:00:27.433 main     Terminating service 'timesync' (1) ...
00:00:27.433 main     Waiting for service 'vminfo' to stop ...
00:00:27.433 main     Terminating service 'vminfo' (2) ...
00:00:27.437 main     Waiting for service 'cpuhotplug' to stop ...
00:00:27.437 main     Terminating service 'cpuhotplug' (3) ...
00:00:27.437 main     Waiting for service 'memballoon' to stop ...
00:00:27.437 main     Terminating service 'memballoon' (4) ...
00:00:27.437 main     VBoxServiceBalloonTerm
00:00:27.437 main     Waiting for service 'vmstats' to stop ...
00:00:27.437 main     Terminating service 'vmstats' (5) ...
00:00:27.437 main     VBoxServiceVMStatsTerm
00:00:27.437 main     Waiting for service 'automount' to stop ...
00:00:27.544 automount VBoxServiceAutoMountWorker: Finished with rc=VINF_SUCCESS
00:00:27.544 main     Terminating service 'automount' (6) ...
00:00:27.544 main     VBoxServiceAutoMountTerm
00:00:27.545 main     Stopping services returning: VINF_SUCCESS
00:00:27.545 main     Ended.

comment:5 Changed 19 months ago by frank

Thanks. Just to make sure, your test program still fails if no VBoxService application is running (you checked this with 'ps aux|grep VBoxService' or similar, right?

In that case, could you do some more tests? After each step, run your test application and check if it still fails:

  • stop VBoxService (you already did that)
  • stop all other VBox* applications, I think there are only VBoxClient apps left
  • stop your guest X session
  • unload the vboxvideo guest kernel module
  • unload the vboxsf guest kernel module
  • unload the vboxguest guest kernel module

After you unloaded the vboxguest kernel module, the state is similar to when the VBox Additions are not installed at all. Does your test application still fails then?

comment:6 Changed 19 months ago by krthie

yes. I checked that VBoxService was no longer running after stopping it. I had also called the other VBox apps (see first post) without avail. However, stopping my X client (Ctrl-Alt-F1, log in, "stop lightdm") makes the problem go away! In fact, the program still works if I then start the VBoxService. And the problem reappears as soon as I start lightdm again.

If you want me to unload some modules, I'll need help on how to do that. Sorry.

comment:7 Changed 19 months ago by michael

Normally stopping the X server and executing "$ sudo /etc/init.d/vboxadd stop" should do the trick. I would be interested to know if this happens if you stop the modules and restart the X server.

comment:8 Changed 19 months ago by krthie

hi Michael, I wasn't so sure what you meant, so here's what I did.

1. ctrl-alt-f1, stop lightdm;/etc/init.d/vboxadd-service stop
2. time conftest -> ok
3. start lightdm
4. go to a terminal in the X session and time conftest -> problem
5. ctrl-alt-f1, time conftest -> ok
6. in non-X session, /etc/init.d/vboxadd-service start; time conftest -> ok

so... it appears that the test always fails in X, while it always succeeds in the non-X session. That doesn't make sense to me, but there you go...

comment:9 follow-up: ↓ 10 Changed 19 months ago by michael

Nearly right - I meant doing "$ sudo /etc/init.d/vboxadd stop", not "$ sudo /etc/init.d/vboxadd-service stop" - note the absence of "-service". After stopping that, doing "$ lsmod | grep box" should not show any VirtualBox-related lines if it stopped successfully.

Out of interest you might try the Guest Additions from VirtualBox 4.1.2 ( https://download.virtualbox.org/virtualbox/4.1.2/VBoxGuestAdditions_4.1.2.iso) as there was a change made in 4.1.4 which might just be related.

comment:10 in reply to: ↑ 9 Changed 19 months ago by krthie

ok.

1. ctrl-alt-f1, stop lightdm;sudo /etc/init.d/vboxadd-service stop; sudo /etc/init.d/vboxadd stop
2. time conftest -> ok
3. start lightdm
4. lsmod |grep box -> vboxvideo still alive
5. go to a X terminal (ctrl-Alt-T). time conftest -> ok!

I think that's what you expected. I then did the following

6. sudo /etc/init.d/vboxadd start; /etc/init.d/vboxadd-service start
7. lsmod |grep box -> vboxsf, vboxguest, vboxvideo
8. time conftest -> ok! (even in X terminal)

I don't understand that but I guess X didn't pick up the vbox services (as I didn't restart X after starting vbox GA). Indeed, the X session is not resizable, copy-from-X-to-host doesn't work etc

Out of interest you might try the Guest Additions from VirtualBox 4.1.2

I'm confused about your version numbers. You mean, installing GA from 4.2 on VB 4.1.22? Scary. Maybe I'll just install VB 4.2. That'll be over the weekend.

comment:11 Changed 19 months ago by michael

Thanks for testing that, and your guess about X not picking up the VBox services is right (I plan to fix that sometime, but for now it works that way). While the 4.2 Additions should work fine on a 4.1.22 host (I do that sort of mixing often enough!) I actually pointed you to the 4.1.2 Additions - note the additional .1 in there.

comment:12 Changed 19 months ago by krthie

sorry for the delay. Installed 4.1.2 Additions. Problem remains. Anything else I should try?

comment:13 Changed 19 months ago by krthie

just to confirm that the problem persists with VB 4.2.0

comment:14 Changed 18 months ago by michael

Sorry for the delay on my side this time! Another test to try then. In an X session which is affected by the problem, try killing all VBoxClient processes (this will stop dynamic resizing, shared clipboard, seamless and drag and drop) and see if that makes a difference. Thanks!

comment:15 follow-up: ↓ 16 Changed 17 months ago by krthie

Hi Michael, the problem persists after killing all VBoxClient processes (I only now notice, I had actually reported that earlier. sorry ). If there's anything else I can do, let me know.

(Just tested with VBox 4.2.4 as well. still same problem)

comment:16 in reply to: ↑ 15 Changed 16 months ago by achi

An extra piece of information, in case it helps. I've reproduced this problem on VBox 4.2.6 with the corresponding guest additions, Windows 7 32-bit host, Ubuntu 12.10 guest.

Under X, the default login environment:

$ time timeout 1 sleep 4  # should kill after 1 second

real    0m4.006s
user    0m0.000s
sys     0m0.000s

Without X (I did not touch VBox GA; I simply switched to tty1 via Ctrl-Alt-F1):

$ time timeout 1 sleep 4  # should kill after 1 second

real    0m1.007s
user    0m0.000s
sys     0m0.008s

It seems that some combination of X and VBox Guest Additions is preventing the interrupt from working.

Last edited 16 months ago by achi (previous) (diff)

comment:17 Changed 15 months ago by michael

I notice that this only seems to happen when 3D is active (at least unloading vboxvideo.ko before starting the X server prevents it) and when the X terminal is started from within the X session (when it is started from a VT the problem doesn't trigger).

comment:18 Changed 15 months ago by michael

As far as I can see, our run-time library blocks SIGALARM in order to make timers work more reliably. Our DRI module loads the run-time library, and I think that the display manager loads our DRI module. So I will try changing the run-time library not to do this if it is initialised from a process we do not own to see if that fixes the issue.

comment:19 Changed 15 months ago by michael

I hope that the Additions build linked to here will fix the issue.

 http://www.virtualbox.org/download/testcase/VBoxGuestAdditions_4.2.7-83464.iso

comment:20 Changed 15 months ago by frank

Did you have a chance to test this build yet?

comment:21 Changed 14 months ago by frank

  • Status changed from new to closed
  • Resolution set to fixed

Fixed in VBox 4.2.8.

Note: See TracTickets for help on using tickets.

www.oracle.com
ContactPrivacy policyTerms of Use