Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 04bf7869 authored by Jens Axboe's avatar Jens Axboe
Browse files

Merge branch 'for-linus' into for-3.1/core



Conflicts:
	block/blk-throttle.c
	block/cfq-iosched.c

Signed-off-by: default avatarJens Axboe <jaxboe@fusionio.com>
parents d2f31a5f 7b28afe0
Loading
Loading
Loading
Loading
+8 −0
Original line number Original line Diff line number Diff line
@@ -518,6 +518,14 @@ N: Zach Brown
E: zab@zabbo.net
E: zab@zabbo.net
D: maestro pci sound
D: maestro pci sound


M: David Brownell
D: Kernel engineer, mentor, and friend.  Maintained USB EHCI and
D: gadget layers, SPI subsystem, GPIO subsystem, and more than a few
D: device drivers.  His encouragement also helped many engineers get
D: started working on the Linux kernel.  David passed away in early
D: 2011, and will be greatly missed.
W: https://lkml.org/lkml/2011/4/5/36

N: Gary Brubaker
N: Gary Brubaker
E: xavyer@ix.netcom.com
E: xavyer@ix.netcom.com
D: USB Serial Empeg Empeg-car Mark I/II Driver
D: USB Serial Empeg Empeg-car Mark I/II Driver
+56 −0
Original line number Original line Diff line number Diff line
What:		/sys/class/backlight/<backlight>/<ambient light zone>_max
What:		/sys/class/backlight/<backlight>/l1_daylight_max
What:		/sys/class/backlight/<backlight>/l2_bright_max
What:		/sys/class/backlight/<backlight>/l3_office_max
What:		/sys/class/backlight/<backlight>/l4_indoor_max
What:		/sys/class/backlight/<backlight>/l5_dark_max
Date:		Mai 2011
KernelVersion:	2.6.40
Contact:	device-drivers-devel@blackfin.uclinux.org
Description:
		Control the maximum brightness for <ambient light zone>
		on this <backlight>. Values are between 0 and 127. This file
		will also show the brightness level stored for this
		<ambient light zone>.

What:		/sys/class/backlight/<backlight>/<ambient light zone>_dim
What:		/sys/class/backlight/<backlight>/l2_bright_dim
What:		/sys/class/backlight/<backlight>/l3_office_dim
What:		/sys/class/backlight/<backlight>/l4_indoor_dim
What:		/sys/class/backlight/<backlight>/l5_dark_dim
Date:		Mai 2011
KernelVersion:	2.6.40
Contact:	device-drivers-devel@blackfin.uclinux.org
Description:
		Control the dim brightness for <ambient light zone>
		on this <backlight>. Values are between 0 and 127, typically
		set to 0. Full off when the backlight is disabled.
		This file will also show the dim brightness level stored for
		this <ambient light zone>.

What:		/sys/class/backlight/<backlight>/ambient_light_level
Date:		Mai 2011
KernelVersion:	2.6.40
Contact:	device-drivers-devel@blackfin.uclinux.org
Description:
		Get conversion value of the light sensor.
		This value is updated every 80 ms (when the light sensor
		is enabled). Returns integer between 0 (dark) and
		8000 (max ambient brightness)

What:		/sys/class/backlight/<backlight>/ambient_light_zone
Date:		Mai 2011
KernelVersion:	2.6.40
Contact:	device-drivers-devel@blackfin.uclinux.org
Description:
		Get/Set current ambient light zone. Reading returns
		integer between 1..5 (1 = daylight, 2 = bright, ..., 5 = dark).
		Writing a value between 1..5 forces the backlight controller
		to enter the corresponding ambient light zone.
		Writing 0 returns to normal/automatic ambient light level
		operation. The ambient light sensing feature on these devices
		is an extension to the API documented in
		Documentation/ABI/stable/sysfs-class-backlight.
		It can be enabled by writing the value stored in
		/sys/class/backlight/<backlight>/max_brightness to
		/sys/class/backlight/<backlight>/brightness.
 No newline at end of file
+2 −2
Original line number Original line Diff line number Diff line
@@ -21,7 +21,7 @@ information will not be available.
To extract cgroup statistics a utility very similar to getdelays.c
To extract cgroup statistics a utility very similar to getdelays.c
has been developed, the sample output of the utility is shown below
has been developed, the sample output of the utility is shown below


~/balbir/cgroupstats # ./getdelays  -C "/cgroup/a"
~/balbir/cgroupstats # ./getdelays  -C "/sys/fs/cgroup/a"
sleeping 1, blocked 0, running 1, stopped 0, uninterruptible 0
sleeping 1, blocked 0, running 1, stopped 0, uninterruptible 0
~/balbir/cgroupstats # ./getdelays  -C "/cgroup"
~/balbir/cgroupstats # ./getdelays  -C "/sys/fs/cgroup"
sleeping 155, blocked 0, running 1, stopped 0, uninterruptible 2
sleeping 155, blocked 0, running 1, stopped 0, uninterruptible 2
+17 −14
Original line number Original line Diff line number Diff line
@@ -28,16 +28,19 @@ cgroups. Here is what you can do.
- Enable group scheduling in CFQ
- Enable group scheduling in CFQ
	CONFIG_CFQ_GROUP_IOSCHED=y
	CONFIG_CFQ_GROUP_IOSCHED=y


- Compile and boot into kernel and mount IO controller (blkio).
- Compile and boot into kernel and mount IO controller (blkio); see
  cgroups.txt, Why are cgroups needed?.


	mount -t cgroup -o blkio none /cgroup
	mount -t tmpfs cgroup_root /sys/fs/cgroup
	mkdir /sys/fs/cgroup/blkio
	mount -t cgroup -o blkio none /sys/fs/cgroup/blkio


- Create two cgroups
- Create two cgroups
	mkdir -p /cgroup/test1/ /cgroup/test2
	mkdir -p /sys/fs/cgroup/blkio/test1/ /sys/fs/cgroup/blkio/test2


- Set weights of group test1 and test2
- Set weights of group test1 and test2
	echo 1000 > /cgroup/test1/blkio.weight
	echo 1000 > /sys/fs/cgroup/blkio/test1/blkio.weight
	echo 500 > /cgroup/test2/blkio.weight
	echo 500 > /sys/fs/cgroup/blkio/test2/blkio.weight


- Create two same size files (say 512MB each) on same disk (file1, file2) and
- Create two same size files (say 512MB each) on same disk (file1, file2) and
  launch two dd threads in different cgroup to read those files.
  launch two dd threads in different cgroup to read those files.
@@ -46,12 +49,12 @@ cgroups. Here is what you can do.
	echo 3 > /proc/sys/vm/drop_caches
	echo 3 > /proc/sys/vm/drop_caches


	dd if=/mnt/sdb/zerofile1 of=/dev/null &
	dd if=/mnt/sdb/zerofile1 of=/dev/null &
	echo $! > /cgroup/test1/tasks
	echo $! > /sys/fs/cgroup/blkio/test1/tasks
	cat /cgroup/test1/tasks
	cat /sys/fs/cgroup/blkio/test1/tasks


	dd if=/mnt/sdb/zerofile2 of=/dev/null &
	dd if=/mnt/sdb/zerofile2 of=/dev/null &
	echo $! > /cgroup/test2/tasks
	echo $! > /sys/fs/cgroup/blkio/test2/tasks
	cat /cgroup/test2/tasks
	cat /sys/fs/cgroup/blkio/test2/tasks


- At macro level, first dd should finish first. To get more precise data, keep
- At macro level, first dd should finish first. To get more precise data, keep
  on looking at (with the help of script), at blkio.disk_time and
  on looking at (with the help of script), at blkio.disk_time and
@@ -68,13 +71,13 @@ Throttling/Upper Limit policy
- Enable throttling in block layer
- Enable throttling in block layer
	CONFIG_BLK_DEV_THROTTLING=y
	CONFIG_BLK_DEV_THROTTLING=y


- Mount blkio controller
- Mount blkio controller (see cgroups.txt, Why are cgroups needed?)
        mount -t cgroup -o blkio none /cgroup/blkio
        mount -t cgroup -o blkio none /sys/fs/cgroup/blkio


- Specify a bandwidth rate on particular device for root group. The format
- Specify a bandwidth rate on particular device for root group. The format
  for policy is "<major>:<minor>  <byes_per_second>".
  for policy is "<major>:<minor>  <byes_per_second>".


        echo "8:16  1048576" > /cgroup/blkio/blkio.read_bps_device
        echo "8:16  1048576" > /sys/fs/cgroup/blkio/blkio.read_bps_device


  Above will put a limit of 1MB/second on reads happening for root group
  Above will put a limit of 1MB/second on reads happening for root group
  on device having major/minor number 8:16.
  on device having major/minor number 8:16.
@@ -108,7 +111,7 @@ Hierarchical Cgroups
  CFQ and throttling will practically treat all groups at same level.
  CFQ and throttling will practically treat all groups at same level.


				pivot
				pivot
			     /  |   \  \
			     /  /   \  \
			root  test1 test2  test3
			root  test1 test2  test3


  Down the line we can implement hierarchical accounting/control support
  Down the line we can implement hierarchical accounting/control support
@@ -149,7 +152,7 @@ Proportional weight policy files


	  Following is the format.
	  Following is the format.


	  #echo dev_maj:dev_minor weight > /path/to/cgroup/blkio.weight_device
	  # echo dev_maj:dev_minor weight > blkio.weight_device
	  Configure weight=300 on /dev/sdb (8:16) in this cgroup
	  Configure weight=300 on /dev/sdb (8:16) in this cgroup
	  # echo 8:16 300 > blkio.weight_device
	  # echo 8:16 300 > blkio.weight_device
	  # cat blkio.weight_device
	  # cat blkio.weight_device
+36 −24
Original line number Original line Diff line number Diff line
@@ -138,11 +138,11 @@ With the ability to classify tasks differently for different resources
the admin can easily set up a script which receives exec notifications
the admin can easily set up a script which receives exec notifications
and depending on who is launching the browser he can
and depending on who is launching the browser he can


       # echo browser_pid > /mnt/<restype>/<userclass>/tasks
    # echo browser_pid > /sys/fs/cgroup/<restype>/<userclass>/tasks


With only a single hierarchy, he now would potentially have to create
With only a single hierarchy, he now would potentially have to create
a separate cgroup for every browser launched and associate it with
a separate cgroup for every browser launched and associate it with
approp network and other resource class.  This may lead to
appropriate network and other resource class.  This may lead to
proliferation of such cgroups.
proliferation of such cgroups.


Also lets say that the administrator would like to give enhanced network
Also lets say that the administrator would like to give enhanced network
@@ -153,9 +153,9 @@ apps enhanced CPU power,
With ability to write pids directly to resource classes, it's just a
With ability to write pids directly to resource classes, it's just a
matter of :
matter of :


       # echo pid > /mnt/network/<new_class>/tasks
       # echo pid > /sys/fs/cgroup/network/<new_class>/tasks
       (after some time)
       (after some time)
       # echo pid > /mnt/network/<orig_class>/tasks
       # echo pid > /sys/fs/cgroup/network/<orig_class>/tasks


Without this ability, he would have to split the cgroup into
Without this ability, he would have to split the cgroup into
multiple separate ones and then associate the new cgroups with the
multiple separate ones and then associate the new cgroups with the
@@ -310,21 +310,24 @@ subsystem, this is the case for the cpuset.
To start a new job that is to be contained within a cgroup, using
To start a new job that is to be contained within a cgroup, using
the "cpuset" cgroup subsystem, the steps are something like:
the "cpuset" cgroup subsystem, the steps are something like:


 1) mkdir /dev/cgroup
 1) mount -t tmpfs cgroup_root /sys/fs/cgroup
 2) mount -t cgroup -ocpuset cpuset /dev/cgroup
 2) mkdir /sys/fs/cgroup/cpuset
 3) Create the new cgroup by doing mkdir's and write's (or echo's) in
 3) mount -t cgroup -ocpuset cpuset /sys/fs/cgroup/cpuset
    the /dev/cgroup virtual file system.
 4) Create the new cgroup by doing mkdir's and write's (or echo's) in
 4) Start a task that will be the "founding father" of the new job.
    the /sys/fs/cgroup virtual file system.
 5) Attach that task to the new cgroup by writing its pid to the
 5) Start a task that will be the "founding father" of the new job.
    /dev/cgroup tasks file for that cgroup.
 6) Attach that task to the new cgroup by writing its pid to the
 6) fork, exec or clone the job tasks from this founding father task.
    /sys/fs/cgroup/cpuset/tasks file for that cgroup.
 7) fork, exec or clone the job tasks from this founding father task.


For example, the following sequence of commands will setup a cgroup
For example, the following sequence of commands will setup a cgroup
named "Charlie", containing just CPUs 2 and 3, and Memory Node 1,
named "Charlie", containing just CPUs 2 and 3, and Memory Node 1,
and then start a subshell 'sh' in that cgroup:
and then start a subshell 'sh' in that cgroup:


  mount -t cgroup cpuset -ocpuset /dev/cgroup
  mount -t tmpfs cgroup_root /sys/fs/cgroup
  cd /dev/cgroup
  mkdir /sys/fs/cgroup/cpuset
  mount -t cgroup cpuset -ocpuset /sys/fs/cgroup/cpuset
  cd /sys/fs/cgroup/cpuset
  mkdir Charlie
  mkdir Charlie
  cd Charlie
  cd Charlie
  /bin/echo 2-3 > cpuset.cpus
  /bin/echo 2-3 > cpuset.cpus
@@ -345,7 +348,7 @@ Creating, modifying, using the cgroups can be done through the cgroup
virtual filesystem.
virtual filesystem.


To mount a cgroup hierarchy with all available subsystems, type:
To mount a cgroup hierarchy with all available subsystems, type:
# mount -t cgroup xxx /dev/cgroup
# mount -t cgroup xxx /sys/fs/cgroup


The "xxx" is not interpreted by the cgroup code, but will appear in
The "xxx" is not interpreted by the cgroup code, but will appear in
/proc/mounts so may be any useful identifying string that you like.
/proc/mounts so may be any useful identifying string that you like.
@@ -354,23 +357,32 @@ Note: Some subsystems do not work without some user input first. For instance,
if cpusets are enabled the user will have to populate the cpus and mems files
if cpusets are enabled the user will have to populate the cpus and mems files
for each new cgroup created before that group can be used.
for each new cgroup created before that group can be used.


As explained in section `1.2 Why are cgroups needed?' you should create
different hierarchies of cgroups for each single resource or group of
resources you want to control. Therefore, you should mount a tmpfs on
/sys/fs/cgroup and create directories for each cgroup resource or resource
group.

# mount -t tmpfs cgroup_root /sys/fs/cgroup
# mkdir /sys/fs/cgroup/rg1

To mount a cgroup hierarchy with just the cpuset and memory
To mount a cgroup hierarchy with just the cpuset and memory
subsystems, type:
subsystems, type:
# mount -t cgroup -o cpuset,memory hier1 /dev/cgroup
# mount -t cgroup -o cpuset,memory hier1 /sys/fs/cgroup/rg1


To change the set of subsystems bound to a mounted hierarchy, just
To change the set of subsystems bound to a mounted hierarchy, just
remount with different options:
remount with different options:
# mount -o remount,cpuset,blkio hier1 /dev/cgroup
# mount -o remount,cpuset,blkio hier1 /sys/fs/cgroup/rg1


Now memory is removed from the hierarchy and blkio is added.
Now memory is removed from the hierarchy and blkio is added.


Note this will add blkio to the hierarchy but won't remove memory or
Note this will add blkio to the hierarchy but won't remove memory or
cpuset, because the new options are appended to the old ones:
cpuset, because the new options are appended to the old ones:
# mount -o remount,blkio /dev/cgroup
# mount -o remount,blkio /sys/fs/cgroup/rg1


To Specify a hierarchy's release_agent:
To Specify a hierarchy's release_agent:
# mount -t cgroup -o cpuset,release_agent="/sbin/cpuset_release_agent" \
# mount -t cgroup -o cpuset,release_agent="/sbin/cpuset_release_agent" \
  xxx /dev/cgroup
  xxx /sys/fs/cgroup/rg1


Note that specifying 'release_agent' more than once will return failure.
Note that specifying 'release_agent' more than once will return failure.


@@ -379,17 +391,17 @@ when the hierarchy consists of a single (root) cgroup. Supporting
the ability to arbitrarily bind/unbind subsystems from an existing
the ability to arbitrarily bind/unbind subsystems from an existing
cgroup hierarchy is intended to be implemented in the future.
cgroup hierarchy is intended to be implemented in the future.


Then under /dev/cgroup you can find a tree that corresponds to the
Then under /sys/fs/cgroup/rg1 you can find a tree that corresponds to the
tree of the cgroups in the system. For instance, /dev/cgroup
tree of the cgroups in the system. For instance, /sys/fs/cgroup/rg1
is the cgroup that holds the whole system.
is the cgroup that holds the whole system.


If you want to change the value of release_agent:
If you want to change the value of release_agent:
# echo "/sbin/new_release_agent" > /dev/cgroup/release_agent
# echo "/sbin/new_release_agent" > /sys/fs/cgroup/rg1/release_agent


It can also be changed via remount.
It can also be changed via remount.


If you want to create a new cgroup under /dev/cgroup:
If you want to create a new cgroup under /sys/fs/cgroup/rg1:
# cd /dev/cgroup
# cd /sys/fs/cgroup/rg1
# mkdir my_cgroup
# mkdir my_cgroup


Now you want to do something with this cgroup.
Now you want to do something with this cgroup.
Loading