Pokazywanie postów oznaczonych etykietą power management. Pokaż wszystkie posty
Pokazywanie postów oznaczonych etykietą power management. Pokaż wszystkie posty
poniedziałek, listopada 14, 2011
poniedziałek, czerwca 27, 2011
Linux power drain resolved
Po pierwsze: wstyd, że żaden z producentów linuksowych dystrybucji nie zainteresował się rozwiązaniem problemu, no ale płatny Linux jest na serwer lub na stację roboczą, kto by się tam przejmował tymi frajerami, co instalują darmowego Linuksa na laptopach. Po drugie: na nowoczesnych laptopach z energooszczędnymi Intelami pod Windowsem daje się swobodnie uzyskać 8 godzin pracy na baterii, o takim czasie pod Linuksem można tylko pomarzyć (w optymistycznym przypadku można wyciągnąć ledwie połowę). Po trzecie: BIOSy są tak fatalnie napisane, że trzymanie się standardów przez producentów OSów, jak widać, nie ma sensu.niedziela, lutego 20, 2011
Atom + VBox + SuSE

Nowe kernele linuksowe mają dedykowany sterownik do obsługi bezczynności procesora - intel_idle. W przypadku uruchomienia OpenSUSE 11.4 RC1 na wirtualizowanym atomie instrukcja MWAIT próbuje czytać nieodpowiedni adres pamięci (odczyt portu I/O powoduje przejście procesora w stan niskiego poboru energii C1-C6). Adresy do MWAIT powinny być pobrane z DSDT, natomiast intel_idle ma je określone na sztywno. Obejście to wyłączenie sterownika przez podanie w linii poleceń jądra intel_idle.max_cstate=0.
sobota, października 09, 2010
czwartek, czerwca 25, 2009
Workaround na wieszające się serwery Della
Wygląda na to, że serwery Della z 8-mioma rdzeniami Intel Xeon przegrzewają się pod Linuksem. Teoretycznie Xeony mają Thermal Circuit Control, który przy nadmiernym wzroście temperatury powinien spowalniać procesor, ale pod Linuksem nie widać jego działania, widać za to, że serwer wiesza się sprzętowo. Workaround to unikanie niepotrzebnych migracji procesów między rdzeniami, co przy ciągłym (wielodniowym) obciążeniu ~5% załatwia problem:echo 1 > /sys/devices/system/cpu/sched_mc_power_savings.
piątek, maja 08, 2009
17W zużycia energii na mobilnym Athlonie i z GeForce 9100

Sterowniki to 185.18.08 beta. Czyli poprzedni krótki czas pracy na baterii to była wina NVidii.
Section "Device"
Identifier "Device0"
Driver "nvidia"
VendorName "NVIDIA Corporation"
Option "RegistryDwords" "PowerMizerLevel=0x1"
Option "Coolbits" "1"
EndSection
sobota, października 11, 2008
Powertop on linux 2.6.27-rc7 before and after enabling C1 accounting, CPU is AMD Athlon X2 QL60
USB and WiFi drivers were unloaded, every powertop's hint was executed.And still only 2 hours with almost everything disabled comparing to 3:11h on Vista while browsing Internet.
--- kernels/linux-2.6.27-rc8/drivers/acpi/processor_idle.c 2008-09-30
00:24:02.000000000 +0200
+++ linux/drivers/acpi/processor_idle.c 2008-10-06 00:24:19.000000000 +0200
@@ -501,7 +501,7 @@
* ------
* Invoke the current Cx state to put the processor to sleep.
*/
- if (cx->type == ACPI_STATE_C2 || cx->type == ACPI_STATE_C3) {
+ if (cx->type >= ACPI_STATE_C1) {
current_thread_info()->status &= ~TS_POLLING;
/*
* TS_POLLING-cleared state must be visible before we
@@ -523,12 +523,17 @@
* Use the appropriate idle routine, the one that would
* be used without acpi C-states.
*/
+
+ t1 = jiffies;
+
if (pm_idle_save) {
pm_idle_save(); /* enables IRQs */
} else {
acpi_safe_halt();
local_irq_enable();
}
+
+ t2 = jiffies;
/*
* TBD: Can't get time duration while in C1, as resumes
@@ -538,8 +543,7 @@
* Note: the TSC better not stop in C1, sched_clock() will
* skew otherwise.
*/
- sleep_ticks = 0xFFFFFFFF;
-
+ sleep_ticks = ticks_elapsed(t1, t2);
break;
case ACPI_STATE_C2:
@@ -642,12 +646,13 @@
return;
}
cx->usage++;
- if ((cx->type != ACPI_STATE_C1) && (sleep_ticks > 0))
+ if (sleep_ticks > 0)
cx->time += sleep_ticks;
next_state = pr->power.state;
#ifdef CONFIG_HOTPLUG_CPU
+
/* Don't do promotion/demotion */
if ((cx->type == ACPI_STATE_C1) && (num_online_cpus() > 1) &&
!pr->flags.has_cst && !(acpi_gbl_FADT.flags &
ACPI_FADT_C2_MP_SUPPORTED)) {
@@ -811,8 +816,11 @@
if (!pr)
return -EINVAL;
+ /* Newer dual-core CPUs use C1E instead of C2 and C3 and
+ * usually do not have _CST definitions or PBLK entries.
+ * ACPI specification allows for that so return zero here */
if (!pr->pblk)
- return -ENODEV;
+ return 0;
/* if info is obtained from pblk/fadt, type equals state */
pr->power.states[ACPI_STATE_C2].type = ACPI_STATE_C2;
@@ -852,6 +860,11 @@
pr->power.states[ACPI_STATE_C1].type = ACPI_STATE_C1;
pr->power.states[ACPI_STATE_C1].valid = 1;
pr->power.states[ACPI_STATE_C1].entry_method =
ACPI_CSTATE_HALT;
+ snprintf(pr->power.states[ACPI_STATE_C1].desc,
ACPI_CX_DESC_LEN, "ACPI HLT");
+ if (!pr->power.states[ACPI_STATE_C1].latency)
+ pr->power.states[ACPI_STATE_C1].latency = 1;
+ if (!pr->power.states[ACPI_STATE_C1].power)
+ pr->power.states[ACPI_STATE_C1].power = 1000;
}
/* the C0 state only exists as a filler in our array */
pr->power.states[ACPI_STATE_C0].valid = 1;
@@ -1191,12 +1204,11 @@
memset(pr->power.states, 0, sizeof(pr->power.states));
result = acpi_processor_get_power_info_cst(pr);
- if (result == -ENODEV)
- result = acpi_processor_get_power_info_fadt(pr);
-
if (result)
- return result;
+ result = acpi_processor_get_power_info_fadt(pr);
+ /* No valid _CST and FADT, but C1 must be supported,
+ * so here we go */
acpi_processor_get_power_info_default(pr);
pr->power.count = acpi_processor_power_verify(pr);
@@ -1216,13 +1228,13 @@
#endif
/*
- * if one state of type C2 or C3 is available, mark this
+ * if one state of type C1(e), C2 or C3 is available, mark this
* CPU as being "idle manageable"
*/
for (i = 1; i < ACPI_PROCESSOR_MAX_POWER; i++) {
if (pr->power.states[i].valid) {
pr->power.count = i;
- if (pr->power.states[i].type >= ACPI_STATE_C2)
+ if (pr->power.states[i].type >= ACPI_STATE_C1)
pr->flags.power = 1;
}
}
@@ -1455,7 +1467,7 @@
static int acpi_idle_enter_c1(struct cpuidle_device *dev,
struct cpuidle_state *state)
{
- u32 t1, t2;
+ u32 t1, t2, elapsed;
struct acpi_processor *pr;
struct acpi_processor_cx *cx = cpuidle_get_statedata(state);
@@ -1482,7 +1494,10 @@
local_irq_enable();
cx->usage++;
-
+ elapsed = ticks_elapsed(t1, t2);
+ if (elapsed > 0)
+ cx->time += elapsed;
+
return ticks_elapsed_in_us(t1, t2);
}
piątek, lipca 25, 2008
Oszczędzanie energii
- Przyciemniony ekran
- Czarne tło pulpitu
- Wyładowane sterowniki od USB, WiFI, LAN-u i dźwięku
- Wyłączony NetworkManager, dhcdbd, arts, dbus
- acpi_osi="Windows 2006" /*w laptopie mam BIOS do Visty*/
- notsc clocksource=hpet
- kernel 2.6.25 z NOHZ i WMI

Na koniec trzeba dodać, że przedmiotem eksperymentu był Acer Aspire 3680 z Celeronem M 420, w konsoli udało się zjechać nawet do 14,8W i 11 wybudzeń. Przy standardowej pracy z użyciem myszki USB i włączonym WiFi laptop pobiera 18W.
Subskrybuj:
Posty (Atom)

