Editing N900 software power management

Warning: You are not logged in. Your IP address will be recorded in this page's edit history.
The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then save the changes below to finish undoing the edit.
Latest revision Your text
Line 1: Line 1:
 +
This is a work in progress.
 +
It is not yet ready for public consumption.
 +
Please don't link it into wiki yet.
 +
 +
=Overview=
This page may be useful to application developers, as well as those interested in reducing power usage of software by configuring it correctly.
This page may be useful to application developers, as well as those interested in reducing power usage of software by configuring it correctly.
-
 
-
Also refer to http://www.lesswatts.org/projects/applications-power-management/
 
==Why software uses power==
==Why software uses power==
-
 
Software should use power to do what the user wants in the most battery efficient way, without letting the battery efficiency get in the way unless it's unavoidable.
Software should use power to do what the user wants in the most battery efficient way, without letting the battery efficiency get in the way unless it's unavoidable.
For example, it might be nice to always keep the backlight on but to get more than a few hours battery life the compromise of blanking the screen when inactive and on battery is usually made.
For example, it might be nice to always keep the backlight on but to get more than a few hours battery life the compromise of blanking the screen when inactive and on battery is usually made.
-
===Direct Use===
+
==Direct Use==
 +
Direct power use is quite simple.
 +
The intended function of the application uses power.
 +
For example, 'flashlight'.
-
Direct power use is quite simple. The intended function of the application uses power. For example, 'flashlight'. This application turns on the [[N900 Hardware Flash Torch|LED Flash]] so the user can see.
+
This application turns on the [[N900 Hardware Flash Torch|LED Flash]] so the user can see.
-
Once it is active, it needs no CPU, and the screen can be blanked. Almost all of the battery usage in this mode is to cause the desired effect. 'Flashlight' as an application could be viewed as 95% efficient - only 5% or so of the battery is used for stuff other than keeping the flash lit.
+
Once it is active, it needs no CPU, and the screen can be blanked.
 +
Almost all of the battery usage in this mode is to cause the desired effect.
-
===Indirect Use===
+
'Flashlight' as an application could be viewed as 95% efficient - only 5% or so of the battery is used for stuff other than keeping the flash lit.
-
Indirect is when there is no direct hardware way to perform an action, and some part of the system has to be made to do this without the user explicitly turning it on. For example, a task-list application might want to alert the user if they get within a certain distance of a task, so they could consider doing it. So, the application needs some means to get a notion of location. For example, it could run the GPS, or scan wifi networks in range.
+
==Indirect Use==
 +
Indirect is when there is no direct hardware way to perform an action, and some part of the system has to be made to do this without the user explicitly turning it on.
-
The user doesn't know or care about how the application does it, but how it is done may have a significant effect on battery life.
+
For example, a task-list application might want to alert the user if they get within a certain distance of a task, so they could consider doing it.
-
===Pathological===
+
So, the application needs some means to get a notion of location. For example, it could run the GPS, or scan wifi networks in range.
-
The application chooses - or the system software only permits - an inefficient way to perform a task.
+
The user doesn't know or care about how the application does it, but how it is done may have a significant effect on battery life.
-
For example, an alarm application that after it has been told to beep after 12 hours, turns on the audio system immediately to make that beep, then checks every second to see if the 12 hours is up yet.
 
-
==Details of each case, with examples==
 
-
===Direct===
+
==Pathological==
-
===Indirect===
+
The application chooses - or the system software only permits - an inefficient way to perform a task.
-
===Pathological===
+
For example, an alarm application that after it has been told to beep after 12 hours, turns on the audio system immediately to make that beep, then checks every second to see if the 12 hours is up yet.
-
 
+
-
====Avoidable====
+
 +
=Details of each case, with examples.=
 +
==Direct==
 +
==Indirect==
 +
==Pathological==
 +
===Avoidable===
* Not properly becoming idle when the screen is locked.
* Not properly becoming idle when the screen is locked.
* Leaving GPS on when screen is locked, when it does not aid the application. (for example, if the application gets a GPS fix, displays location related data, and does not turn off the GPS, even when the screen is locked).
* Leaving GPS on when screen is locked, when it does not aid the application. (for example, if the application gets a GPS fix, displays location related data, and does not turn off the GPS, even when the screen is locked).
Line 44: Line 52:
* Listening to events that are irrelevant. When you got a mainloop with a central wait like e.g pause() (2), then you should not create a situation where irrelevant events cause signals sent to the waiting process and cause "active discarding" of the signal. Generally whenever there's a test in a signal handler subroutine that discards certain classes of signalled events, you should check if there's no way to disable the signals from being sent to your process at all. (Example: a widget that doesn't react to any touchscreen events is maybe better off not to receive any X events at all. Especially applicable if this property not to care about touchscreen events is just temporary - don't make the process use CPU time just to decide it's been an event that doesn't matter)
* Listening to events that are irrelevant. When you got a mainloop with a central wait like e.g pause() (2), then you should not create a situation where irrelevant events cause signals sent to the waiting process and cause "active discarding" of the signal. Generally whenever there's a test in a signal handler subroutine that discards certain classes of signalled events, you should check if there's no way to disable the signals from being sent to your process at all. (Example: a widget that doesn't react to any touchscreen events is maybe better off not to receive any X events at all. Especially applicable if this property not to care about touchscreen events is just temporary - don't make the process use CPU time just to decide it's been an event that doesn't matter)
-
====By Design====
+
===By Design===
 +
===Unavoidable===
-
====Unavoidable====
+
=Measuring power usage=
-
==User Training==
+
=Tools=
 +
==Power Measurement==
 +
===What is power?===
 +
The battery stores an amount of energy enough to lift the phone around 10km in the air.
-
User training is very important, in some ways more important than the rest of this guide. In some cases, there is no way for the user to avoid battery use. They need to see - they turn on 'flashlight'. In others, minor changes to their behaviour, that might even make their experience better, may greatly change battery life.
+
Power is the rate of use of that energy.
-
For example, when listening to audio, if the user knows that instead of streaming programs from their local radio station over 3G, both FM radio or downloading a podcast over wifi would use a tiny fraction of the power, they can make that choice.
+
The battery is charged or discharged by electrical current flowing into or out of it.
-
==Measuring power usage==
+
Current*Battery voltage = power.
-
===Tools===
+
The below tools directly measure electrical current usage by the phone.
-
==Power Measurement==
+
They should be run with the device unplugged from USB.
-
===What is power?===
+
Battery capacity is measured in Amp-Hours.
 +
The BL-5J in the N900 has a capacity of 1.4Ah.
 +
It can provide 1A for a little over an hour, but it's very hard to get it to use that much.
-
The battery stores an amount of energy enough to lift the phone around 10 km in the air. Power is the rate of use of that energy. The battery is charged or discharged by electrical current flowing into or out of it.
+
If the current drops, the time rises.
-
Current*Battery voltage = power.
+
For example, in standby with wifi and phone active but idle, the current usage is around .006A, leading to a standby life of around 10 days. (1.4Ah/.006A = 220h = 10 days.
-
The below tools directly measure electrical current usage by the phone. They should be run with the device unplugged from USB. Battery capacity is measured in Amp-Hours. The BL-5J in the N900 has a capacity of 1.4 Ah. It can provide 1 A for a little over an hour, but it's very hard to get it to use that much. If the current drops, the time rises.
+
0.006A is a cumbersome figure, so the unit 'Milliamp' - mA - 1/1000th of an amp is used.
-
 
+
-
For example, in standby with wifi and phone enabled but idle, the current usage is around .006 A, leading to a standby life of around 10 days. (1.4 Ah/.006 A = 220 h = 10 days. 0.006 A is a cumbersome figure, so the unit 'Milliamp' - mA - 1/1000th of an amp is used. 6 mA when idle is great, but it is easy if everything does not go right to use lots more than this when idle. For example, if the CPU is constantly active, it will use over 100 mA - draining the battery in around 12 hours.
+
 +
6mA when idle is great, but it is easy if everything does not go right to use lots more than this when idle.
 +
For example, if the CPU is constantly active, it will use over 100mA - draining the battery in around 12 hours.
==Debugging==
==Debugging==
-
If the wireless router, and the N900 are setup correctly, then wifi is a very useful aid to debugging. The [http://maemo.org/packages/view/openssh/ ssh package]] installable from extras allows you to login to the mobile, and run software to debug power usage, with very little additional consumption.
+
If the wireless router, and the n900 are setup correctly, then wifi is a very useful aid to debugging.
 +
The [http://maemo.org/packages/view/openssh/ ssh package]] installable from extras allows you to login to the mobile, and run software to debug power usage, with very little additional consumption.
The package [http://maemo.org/packages/package_instance/view/fremantle_sdk-tools_free_armel/screen/4.0.3-0.3osso4+0m5/ screen] allows you to run command line programs that would normally output lots to screen, without causing any wifi traffic (or consuming any power) when you are not looking at them.
The package [http://maemo.org/packages/package_instance/view/fremantle_sdk-tools_free_armel/screen/4.0.3-0.3osso4+0m5/ screen] allows you to run command line programs that would normally output lots to screen, without causing any wifi traffic (or consuming any power) when you are not looking at them.
Line 78: Line 93:
===Powerscript===
===Powerscript===
-
The below is a simple script to read the bq27200 battery meter, and output instantanous current, as well as wakeups/second. It outputs once per 5 seconds a summary of the activity in the preceding period. Install i2c-tools from extras-devel, or the power-kernel from extras.
+
The below is a simple script to read the bq27200 battery meter, and output instantanous current, as well as wakeups/second.  
 +
 
 +
It outputs once per 5 seconds a summary of the activity in the preceding period.
 +
 
 +
Install i2c-tools from extras-devel, or the power-kernel from extras.
Please note the warning, experimenting with the tools in this package may cause hardware damage. Know what the [[N900 Hardware Bus I2C|I2C]] bus and device you are accessing is, before making any changes to the below.
Please note the warning, experimenting with the tools in this package may cause hardware damage. Know what the [[N900 Hardware Bus I2C|I2C]] bus and device you are accessing is, before making any changes to the below.
-
<source lang="c">
+
<pre>
#!/bin/sh
#!/bin/sh
modprobe -q bq27x00_battery
modprobe -q bq27x00_battery
Line 88: Line 107:
if [[ -e /sys/class/power_supply/bq27200-0/current_now ]]
if [[ -e /sys/class/power_supply/bq27200-0/current_now ]]
then
then
-
  current_read='cat /sys/class/power_supply/bq27200-0/current_now'
+
current_read='cat /sys/class/power_supply/bq27200-0/current_now'
-
  echo Using kernel battery driver to read current.
+
echo Using kernel battery driver to read current.
else
else
-
  if  command -v i2cget >/dev/null
+
if  command -v i2cget >/dev/null
-
  then
+
then
-
    current_read='i2cget -y 2 0x55 0x14 w'
+
current_read='i2cget -y 2 0x55 0x14 w'
-
    echo "Using I2C to read charge meter directly"
+
echo Using I2C to read charge meter directly
-
  else
+
else
-
    echo "Cannot find a way to read the charge meter."
+
echo Cannot find a way to read the charge meter.
-
    echo "Either i2ctools from extras-devel must be installed, or the power kernel with the bq27x00_battery module which normally accompanies it."
+
echo Either i2ctools from extras-devel must be installed, or the power kernel with the bq27x00_battery module which normally accompanies it.
-
    echo "Exiting."
+
echo Exiting.
-
    exit
+
exit
-
  fi
+
fi
fi
fi
#                                      Reset timer stats.
#                                      Reset timer stats.
Line 106: Line 125:
while true        #                    Loop while printing stats
while true        #                    Loop while printing stats
do
do
-
  echo 1 >/proc/timer_stats  #          Start gathering stats
+
echo 1 >/proc/timer_stats  #          Start gathering stats
-
  sleep 5                    #          Sleep 5s
+
sleep 5                    #          Sleep 5s
-
  echo 0 >/proc/timer_stats  #          Finish stats.
+
echo 0 >/proc/timer_stats  #          Finish stats.
-
#                                       Print output, assuming sense resistor is 22 milliohms.
+
#                                     Print output, assuming sense resistor is 22 milliohms.
-
  echo `date` $((`$current_read` * 3570 / 22 / 1000))mA `tail -1 /proc/timer_stats`
+
echo `date` $((`$current_read` * 3570 / 22 / 1000))mA `tail -1 /proc/timer_stats`
done
done
-
</source>
+
</pre>
 +
 
 +
 
-
The output of the above is quite simple. The below is the result of sshing into the N900, and running the script.
+
The output of the above is quite simple.
 +
The below is the result of sshing into the n900, and running the script.
  ./powermeter  
  ./powermeter  
Line 123: Line 145:
  ...
  ...
-
This shows that immediately after starting, the script measured over the first 5 s (actually for the 5s window that ended before script started) a power consumption of 25 mA. This will discharge in one hour the battery by 25 milliamp-hours. It has a total capacity of around 1200 mAh - so will last about 1200 mAh/25 mA = 75 hours (roughly).
+
This shows that immediately after starting, the script measured over the first 5s a power consumption of 25mA. This will discharge in one hour the battery by 25milliamp-hours. It has a total capacity of around 1200mAh - so will last about 1200mAh/25mA = 75h (roughly.
-
Wifi however uses a significant amount of power. By comparison, this is the result when redirecting the output to a file.
+
Wifi however uses a significant amount of power.
 +
 
 +
By comparison, this is the result when redirecting the output to a file.
  Sat Aug 7 21:34:56 BST 2010 66mA 30 total events, 5.983 events/sec
  Sat Aug 7 21:34:56 BST 2010 66mA 30 total events, 5.983 events/sec
Line 132: Line 156:
  ...
  ...
-
Again, there is an initial burst of current consumption, but this time it levels out to 6 mA - or around 200 hours. What does the rest of the line mean? It's simply a very abbreviated output as provided by [[#Powertop|powertop]].
+
Again, there is an initial burst of current consumption, but this time it levels out to 6mA - or around 200 hours.
 +
 
 +
What does the rest of the line mean? It's simply a very abbreviated output as provided by powertop.
 +
See that section.
==Analysis tools==
==Analysis tools==
-
 
If you've found that the system is using too much power when an application is running or idle, the tools below help to diagnose why.
If you've found that the system is using too much power when an application is running or idle, the tools below help to diagnose why.
===Powertop===
===Powertop===
-
 
+
The output of powertop, when run as root, is shown below, with some comments.
-
Obsolete by http://maemo.org/packages/view/zzztop/
+
Much of the output is probably not directly useful for you.
-
 
+
-
The output of powertop, when run as root, is shown below, with some comments. Much of the output is probably not directly useful for you.
+
-
<pre>
+
  Powertop 1.13.3
  Powertop 1.13.3
  status: Unknown job: pmtrackerdaemon
  status: Unknown job: pmtrackerdaemon
Line 149: Line 172:
  Collecting data for 30 seconds
  Collecting data for 30 seconds
  Sample interval was 00m 30s 18921us
  Sample interval was 00m 30s 18921us
-
</pre>
+
 
Initial block, with normal error.
Initial block, with normal error.
-
<pre>
+
C#      | Ratio  | Avg/dura | Frequency | Ratio
-
C#      | Ratio  | Avg/dura | Frequency | Ratio
+
--------+--------+----------+-----------+--------+
-
--------+--------+----------+-----------+--------+
+
      C0 |  0.3% |          |  600 MHz |  0.0% |
-
    C0 |  0.3% |          |  600 MHz |  0.0% |
+
      C1 |  0.0% |    0.2ms |  550 MHz |  0.0% |
-
    C1 |  0.0% |    0.2ms |  550 MHz |  0.0% |
+
      C2 |  0.4% |    4.7ms |  500 MHz |  0.0% |
-
    C2 |  0.4% |    4.7ms |  500 MHz |  0.0% |
+
      C3 |  4.5% |  134.6ms |  250 MHz | 100.0% |
-
    C3 |  4.5% |  134.6ms |  250 MHz | 100.0% |
+
      C4 |  94.8% | 2032.8ms |  
-
    C4 |  94.8% | 2032.8ms |  
+
-
</pre>
+
-
During this period, the CPU was active 0.3% of the time (in the C0 state). Of this 0.3% of the time, 100% of it - so 0.3% total - was spent at 250 MHz. It spent very little time in the C1 through C3 states, which are increasing depths of sleep, and the majority of the time (94% of the 30s - or about 28s) in the C4 state  which is the deepest state that uses least power. The Average duration is how long it typically spent in each state. In this case the C4 duration indicates that it's spending typically over 2 seconds asleep at a time - this is the most efficient power state.
+
During this period, the CPU was active 0.3% of the time (in the C0 state). Of this 0.3% of the time, 100% of it - so 0.3% total - was spent at 250MHz.
 +
 
 +
It spent very little time in the C1 through C3 states, which are increasing depths of sleep, and the majority of the time (94% of the 30s - or about 28s) in the C4 state  which is the deepest state that uses least power.
 +
 
 +
The Average duration is how long it typically spent in each state. In this case the C4 duration indicates that it's spending typically over 2 seconds asleep at a time - this is the most efficient power state.
If you are testing an application, and when idle you get numbers close to these, then battery life is unlikely to be affected by the application. (though there may be ways to make it use power when idle that you've missed).
If you are testing an application, and when idle you get numbers close to these, then battery life is unlikely to be affected by the application. (though there may be ways to make it use power when idle that you've missed).
-
<pre>
+
IRQ#    | Activity  | Type          | Name
-
IRQ#    | Activity  | Type          | Name
+
--------+------------+----------------+---------------------------
-
--------+------------+----------------+---------------------------
+
      56 |        129 |          INTC | i2c_omap
-
    56 |        129 |          INTC | i2c_omap
+
      12 |        59 |          INTC | DMA
-
    12 |        59 |          INTC | DMA
+
      37 |        48 |          INTC | gp
-
    37 |        48 |          INTC | gp
+
      11 |        39 |          INTC | prcm
-
    11 |        39 |          INTC | prcm
+
      57 |        28 |          INTC | i2c_omap
-
    57 |        28 |          INTC | i2c_omap
+
    202 |          3 |          GPIO | wl1251
-
    202 |          3 |          GPIO | wl1251
+
-
</pre>
+
This shows how many interrupts occurred in the period. Most of these are not influenced directly by user software. The exception may be wl1251 - this is the wireless card.
This shows how many interrupts occurred in the period. Most of these are not influenced directly by user software. The exception may be wl1251 - this is the wireless card.
-
<pre>
+
PID#    | Activity  | Name          | Function Entry (Expire)
-
PID#    | Activity  | Name          | Function Entry (Expire)
+
--------+------------+----------------+---------------------------
-
--------+------------+----------------+---------------------------
+
      0 |        20 |  <kernel core> | tick_nohz_restart_sched_tick (tick_sched_timer)
-
      0 |        20 |  <kernel core> | tick_nohz_restart_sched_tick (tick_sched_timer)
+
      37 |        14D|            awk | cpufreq_governor_dbs (delayed_work_timer_fn)
-
    37 |        14D|            awk | cpufreq_governor_dbs (delayed_work_timer_fn)
+
      0 |        12 |  <kernel core> | hrtimer_start (tick_sched_timer)
-
      0 |        12 |  <kernel core> | hrtimer_start (tick_sched_timer)
+
    753 |          7 |      bme_RX-51 | sys_timer_settime (posix_timer_fn)
-
    753 |          7 |      bme_RX-51 | sys_timer_settime (posix_timer_fn)
+
      0 |          6 |  <kernel core> | queue_delayed_work (delayed_work_timer_fn)
-
      0 |          6 |  <kernel core> | queue_delayed_work (delayed_work_timer_fn)
+
    470 |          3 |        wl12xx | schedule_timeout (process_timeout)
-
    470 |          3 |        wl12xx | schedule_timeout (process_timeout)
+
(30 lines deleted)
(30 lines deleted)
-
</pre>
 
-
This is one important bit. It lists process ID (0 is internal kernel), how many times in the 30 s it was woken, and what the name of the system waking it up was, as well as what timer ran out.
+
This is one important bit.
 +
It lists process ID (0 is internal kernel), how many times in the 30s it was woken, and what the name of the system waking it up was, as well as what timer ran out.
The 'awk' here is a [https://bugs.maemo.org/show_bug.cgi?id=11091 a kernel bug], it should read '<kernel core>' as this is really the kernel checking if it needs to change CPU speeds.
The 'awk' here is a [https://bugs.maemo.org/show_bug.cgi?id=11091 a kernel bug], it should read '<kernel core>' as this is really the kernel checking if it needs to change CPU speeds.
Line 197: Line 219:
This shows the only user process is bme_RX-51 - this is [[N900 Software BME|BME]] - the battery managment entity - which wakes every few seconds to monitor the battery.
This shows the only user process is bme_RX-51 - this is [[N900 Software BME|BME]] - the battery managment entity - which wakes every few seconds to monitor the battery.
-
<pre>
+
 
-
Power domain activity breakdown
+
 
-
Domain  | % of time spent in states
+
 
-
--------+---------+---------+---------+---------+----------
+
Power domain activity breakdown
-
usbhost |OFF: 100%|RET:  0%|INA:  0%| ON:  0%| now:(OFF)
+
Domain  | % of time spent in states
-
    sgx |OFF: 100%|RET:  0%|INA:  0%| ON:  0%| now:(OFF)
+
--------+---------+---------+---------+---------+----------
-
    per |OFF:  99%|RET:  0%|INA:  0%| ON:  0%| now:(ON)
+
usbhost |OFF: 100%|RET:  0%|INA:  0%| ON:  0%| now:(OFF)
-
    dss |OFF: 100%|RET:  0%|INA:  0%| ON:  0%| now:(OFF)
+
    sgx |OFF: 100%|RET:  0%|INA:  0%| ON:  0%| now:(OFF)
-
    cam |OFF: 100%|RET:  0%|INA:  0%| ON:  0%| now:(OFF)
+
    per |OFF:  99%|RET:  0%|INA:  0%| ON:  0%| now:(ON)
-
  core |OFF:  94%|RET:  4%|INA:  0%| ON:  0%| now:(ON)
+
    dss |OFF: 100%|RET:  0%|INA:  0%| ON:  0%| now:(OFF)
-
  neon |OFF:  94%|RET:  4%|INA:  0%| ON:  0%| now:(ON)
+
    cam |OFF: 100%|RET:  0%|INA:  0%| ON:  0%| now:(OFF)
-
    mpu |OFF:  94%|RET:  4%|INA:  0%| ON:  0%| now:(ON)
+
    core |OFF:  94%|RET:  4%|INA:  0%| ON:  0%| now:(ON)
-
  iva2 |OFF: 100%|RET:  0%|INA:  0%| ON:  0%| now:(OFF)
+
    neon |OFF:  94%|RET:  4%|INA:  0%| ON:  0%| now:(ON)
-
</pre>
+
    mpu |OFF:  94%|RET:  4%|INA:  0%| ON:  0%| now:(ON)
 +
    iva2 |OFF: 100%|RET:  0%|INA:  0%| ON:  0%| now:(OFF)
This shows how often various parts of the chip were switched on/off - this will normally not be useful.
This shows how often various parts of the chip were switched on/off - this will normally not be useful.
-
<pre>
+
Clock activity breakdown at end of period
-
Clock activity breakdown at end of period
+
Domain  | Active clocks
-
Domain  | Active clocks
+
--------+---------------+---------------+------------------
-
--------+---------------+---------------+------------------
+
    core |          SDRC | HSOTGUSB_IDLE |      OMAPCTRL  
-
  core |          SDRC | HSOTGUSB_IDLE |      OMAPCTRL  
+
        |    MAILBOXES |
-
        |    MAILBOXES |
+
    wkup |          GPT1 |      32KSYNC |        GPIO1  
-
  wkup |          GPT1 |      32KSYNC |        GPIO1  
+
        |          WDT1 |
-
        |          WDT1 |
+
  ckgen |          CORE |          PERI |          96M  
-
  ckgen |          CORE |          PERI |          96M  
+
        |          48M |          12M |          54M  
-
        |          48M |          12M |          54M  
+
        |      EMU_CORE |
-
        |      EMU_CORE |
+
    per |        GPIO2 |        GPIO3 |        GPIO4  
-
    per |        GPIO2 |        GPIO3 |        GPIO4  
+
        |        GPIO5 |        GPIO6 |
-
        |        GPIO5 |        GPIO6 |
+
-
</pre>
+
This is also not usually useful.
This is also not usually useful.
Line 233: Line 254:
  Total wakeups  394,  13.1/s | IRQ  306,  10.2/s | Timers  88,  2.9/s
  Total wakeups  394,  13.1/s | IRQ  306,  10.2/s | Timers  88,  2.9/s
  HW wakeups      39,  1.3/s |    Real gp_timers expired  48,  1.6/s
  HW wakeups      39,  1.3/s |    Real gp_timers expired  48,  1.6/s
 +
 +
 +
===Strace===
===Strace===
Line 240: Line 264:
  apt-get install strace
  apt-get install strace
-
strace shows what system calls the process is making. [http://linux.die.net/man/1/strace The manpage] has more information.
+
 
 +
 
 +
strace shows what system calls the process is making.
 +
[http://linux.die.net/man/1/strace The manpage] has more information.
The most basic usage is:
The most basic usage is:
Line 251: Line 278:
===Htop===
===Htop===
-
 
[http://maemo.org/packages/view/htop/ Htop] is a much more flexible tool than the installed version of top.
[http://maemo.org/packages/view/htop/ Htop] is a much more flexible tool than the installed version of top.
Line 258: Line 284:
  apt-get install htop
  apt-get install htop
-
Full documentation can be found [http://htop.sourceforge.net/ at the htop project pages on sourceforge] (in case you wonder: the F(n)-keys can get typed on N900 as ESC-<n>, so ESC + "1" for F1)
+
Full documentation can be found [http://htop.sourceforge.net/ at the htop project pages on sourceforge]
-
[[image:htop.png]]
 
-
[[Category:N900]]
+
[[image:htop.png]]
-
[[Category:Software]]
+

Learn more about Contributing to the wiki.


Please note that all contributions to maemo.org wiki may be edited, altered, or removed by other contributors. If you do not want your writing to be edited mercilessly, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource (see maemo.org wiki:Copyrights for details). Do not submit copyrighted work without permission!


Cancel | Editing help (opens in new window)