Re: Event based scheduling and USB.
Alexander Motin wrote: Takanori Watanabe wrote: I updated my FreeBSD tree on laptop, to the current as of 18 Oct.2010, it works fine with CPU C3 state enabled, I think this is your achievement of event time scheduler, thanks! But when USB driver is enabled, the load average is considerablly high (0.6 to 1.0) if sysctl oid kern.eventtimer.periodic is set to 0. Then kern.eventtimer.periodic is set to 1, the load average goes to 0 quickly as before, but almost never transit to C3. Is this behavior expected, or something wrong? I noticed one of usb host controller device shares HPET irq. When I implement interrupt filter in uhci driver, the load average goes to 0 as before. % vmstat -i interrupt total rate irq1: atkbd0 398 2 irq9: acpi0 408 2 irq12: psm03 0 irq19: ehci1 37 0 irq20: hpet0 uhci0 35970230 irq22: ehci0 2 0 irq256: em04 0 irq257: ahci0 1692 10 Total 38514246 === I haven't noticed that issue and it is surely not expected for me. I will try to reproduce it. I've easily reproduced the problem. Scheduler tracing shows that problem is the result of aliasing between swi4: clock thread on one CPU (measuring load average) and irq21: hpet0 uhci1 thread on another. Those two events are aliased by definition due to shared interrupt source. Not sure what to do with it. Either we should change algorithm of load average calculation or exclude timer's interrupt threads from load average accounting. Adding interrupt filter for USB also reasonably helps, but it is only a partial solution for this specific sharing case. -- Alexander Motin ___ freebsd-current@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-current To unsubscribe, send any mail to freebsd-current-unsubscr...@freebsd.org
Re: Event based scheduling and USB.
By default USB devices are not suspended. You can use usbconfig power_save to enable automatic power save for all devices. --HPS ___ freebsd-current@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-current To unsubscribe, send any mail to freebsd-current-unsubscr...@freebsd.org
Re: Event based scheduling and USB.
Nate Lawson wrote: On 10/26/2010 12:57 PM, Alexander Motin wrote: Takanori Watanabe wrote: I updated my FreeBSD tree on laptop, to the current as of 18 Oct.2010, it works fine with CPU C3 state enabled, I think this is your achievement of event time scheduler, thanks! Ah, so mav@ implemented a tickless-scheduler? That is nice. Not exactly. I've only made system to delay empty ticks when idle and execute them later on wakeup in a batch. Scheduler work is still wanted. But when USB driver is enabled, the load average is considerablly high (0.6 to 1.0) if sysctl oid kern.eventtimer.periodic is set to 0. Then kern.eventtimer.periodic is set to 1, the load average goes to 0 quickly as before, but almost never transit to C3. Is this behavior expected, or something wrong? The USB controller often keeps the bus mastering bit set. This keeps the system out of C3. The way to fix this is to implement global suspend. Put a device in suspend mode and then turn off power to the USB port it is on. Then the USB controller will stop polling the bus. As I understand, if respective USB port is not used, USB stack should put it into power_save mode not poll so often to deny entering C3 state. I noticed one of usb host controller device shares HPET irq. When I implement interrupt filter in uhci driver, the load average goes to 0 as before. % vmstat -i interrupt total rate irq1: atkbd0 398 2 irq9: acpi0 408 2 irq12: psm03 0 irq19: ehci1 37 0 irq20: hpet0 uhci0 35970230 irq22: ehci0 2 0 irq256: em04 0 irq257: ahci0 1692 10 Total 38514246 === I haven't noticed that issue and it is surely not expected for me. I will try to reproduce it. Most likely you should be able to avoid interrupt sharing using some additional HPET options, described at hpet(4). This seems silly. The whole point of APIC is to avoid clustering on a single interrupt but the BIOS put the timer on the USB controller irq? HPET timer is not a regular ISA or PCI device. It allows several different interrupt configurations. In most cases I remember, BIOS setups interrupts 0 and 8, like for legacy_route mode. But this mode is not really suitable as default in our case ATM due to conflict with atrtc and attimer drivers. -- Alexander Motin ___ freebsd-current@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-current To unsubscribe, send any mail to freebsd-current-unsubscr...@freebsd.org
Re: Event based scheduling and USB.
Quoting Alexander Motin m...@freebsd.org (from Tue, 26 Oct 2010 22:57:59 +0300): Takanori Watanabe wrote: It's time to implement powertop for freebsd, isn't it? Surely it is. I was even thinking about possibility to port one from OpenSolaris, but other work distracted me. You may take it, it you wish. For the benefit of the people which didn't see my message with the URL (I don't know if I was sending the URL to mav@ personally or if it appeared also in the lists): http://hub.opensolaris.org/bin/view/Project+tesla/Powertop is a DTrace-ified version of PowerTop (at the end of the page is a description how to get the source). And for those which like plots of the values: http://hub.opensolaris.org/bin/view/Project+tesla/ptop-gtk Bye, Alexander. -- A RACF protected dataset is inaccessible. http://www.Leidinger.netAlexander @ Leidinger.net: PGP ID = B0063FE7 http://www.FreeBSD.org netchild @ FreeBSD.org : PGP ID = 72077137 ___ freebsd-current@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-current To unsubscribe, send any mail to freebsd-current-unsubscr...@freebsd.org
Re: Event based scheduling and USB.
On Wednesday 27 October 2010 10:14:18 Alexander Motin wrote: As I understand, if respective USB port is not used, USB stack should put it into power_save mode not poll so often to deny entering C3 state. USB will stop the hardware from polling RAM, but still a 4 second root HUB software timer/watchdog will be running. --HPS ___ freebsd-current@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-current To unsubscribe, send any mail to freebsd-current-unsubscr...@freebsd.org
Event based scheduling and USB.
I updated my FreeBSD tree on laptop, to the current as of 18 Oct.2010, it works fine with CPU C3 state enabled, I think this is your achievement of event time scheduler, thanks! But when USB driver is enabled, the load average is considerablly high (0.6 to 1.0) if sysctl oid kern.eventtimer.periodic is set to 0. Then kern.eventtimer.periodic is set to 1, the load average goes to 0 quickly as before, but almost never transit to C3. Is this behavior expected, or something wrong? I noticed one of usb host controller device shares HPET irq. When I implement interrupt filter in uhci driver, the load average goes to 0 as before. % vmstat -i interrupt total rate irq1: atkbd0 398 2 irq9: acpi0 408 2 irq12: psm03 0 irq19: ehci1 37 0 irq20: hpet0 uhci0 35970230 irq22: ehci0 2 0 irq256: em04 0 irq257: ahci0 1692 10 Total 38514246 === BTW, when USB port is enabled C3 transition rate gets lower. I think it is likely to occur. But how can I supress power consumption? It's time to implement powertop for freebsd, isn't it? ___ freebsd-current@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-current To unsubscribe, send any mail to freebsd-current-unsubscr...@freebsd.org
Re: Event based scheduling and USB.
Takanori Watanabe wrote: I updated my FreeBSD tree on laptop, to the current as of 18 Oct.2010, it works fine with CPU C3 state enabled, I think this is your achievement of event time scheduler, thanks! But when USB driver is enabled, the load average is considerablly high (0.6 to 1.0) if sysctl oid kern.eventtimer.periodic is set to 0. Then kern.eventtimer.periodic is set to 1, the load average goes to 0 quickly as before, but almost never transit to C3. Is this behavior expected, or something wrong? I noticed one of usb host controller device shares HPET irq. When I implement interrupt filter in uhci driver, the load average goes to 0 as before. % vmstat -i interrupt total rate irq1: atkbd0 398 2 irq9: acpi0 408 2 irq12: psm03 0 irq19: ehci1 37 0 irq20: hpet0 uhci0 35970230 irq22: ehci0 2 0 irq256: em04 0 irq257: ahci0 1692 10 Total 38514246 === I haven't noticed that issue and it is surely not expected for me. I will try to reproduce it. Most likely you should be able to avoid interrupt sharing using some additional HPET options, described at hpet(4). BTW, when USB port is enabled C3 transition rate gets lower. I think it is likely to occur. But how can I supress power consumption? I can't say about USB, but you may try this patch to optimize some other subsystems: http://people.freebsd.org/~mav/tm6292_idle.patch It's time to implement powertop for freebsd, isn't it? Surely it is. I was even thinking about possibility to port one from OpenSolaris, but other work distracted me. You may take it, it you wish. -- Alexander Motin ___ freebsd-current@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-current To unsubscribe, send any mail to freebsd-current-unsubscr...@freebsd.org
Re: Event based scheduling and USB.
On 10/26/2010 12:57 PM, Alexander Motin wrote: Takanori Watanabe wrote: I updated my FreeBSD tree on laptop, to the current as of 18 Oct.2010, it works fine with CPU C3 state enabled, I think this is your achievement of event time scheduler, thanks! Ah, so mav@ implemented a tickless-scheduler? That is nice. But when USB driver is enabled, the load average is considerablly high (0.6 to 1.0) if sysctl oid kern.eventtimer.periodic is set to 0. Then kern.eventtimer.periodic is set to 1, the load average goes to 0 quickly as before, but almost never transit to C3. Is this behavior expected, or something wrong? The USB controller often keeps the bus mastering bit set. This keeps the system out of C3. The way to fix this is to implement global suspend. Put a device in suspend mode and then turn off power to the USB port it is on. Then the USB controller will stop polling the bus. I noticed one of usb host controller device shares HPET irq. When I implement interrupt filter in uhci driver, the load average goes to 0 as before. % vmstat -i interrupt total rate irq1: atkbd0 398 2 irq9: acpi0 408 2 irq12: psm03 0 irq19: ehci1 37 0 irq20: hpet0 uhci0 35970230 irq22: ehci0 2 0 irq256: em04 0 irq257: ahci0 1692 10 Total 38514246 === I haven't noticed that issue and it is surely not expected for me. I will try to reproduce it. Most likely you should be able to avoid interrupt sharing using some additional HPET options, described at hpet(4). This seems silly. The whole point of APIC is to avoid clustering on a single interrupt but the BIOS put the timer on the USB controller irq? It's time to implement powertop for freebsd, isn't it? Surely it is. I was even thinking about possibility to port one from OpenSolaris, but other work distracted me. You may take it, it you wish. It seems worth doing the internals new, but maybe outputting information in a compatible format for reporting tools. -- Nate ___ freebsd-current@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-current To unsubscribe, send any mail to freebsd-current-unsubscr...@freebsd.org