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

Linux power drain solved

Phoronix should be happy.

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

Linux i Acer Aspire Timeline





Niestety pod Linuksem włączone są obie karty graficzne, stąd takie duże zużycie energii. Próba wyłączenia radeona poprzez /sys/bus/pci/devices okazuje się nieskuteczna.

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



Section "Device"
Identifier "Device0"
Driver "nvidia"
VendorName "NVIDIA Corporation"
Option "RegistryDwords" "PowerMizerLevel=0x1"
Option "Coolbits" "1"
EndSection
Sterowniki to 185.18.08 beta. Czyli poprzedni krótki czas pracy na baterii to była wina NVidii.

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.