Loading CREDITS +0 −1 Original line number Original line Diff line number Diff line Loading @@ -2166,7 +2166,6 @@ D: Initial implementation of VC's, pty's and select() N: Pavel Machek N: Pavel Machek E: pavel@ucw.cz E: pavel@ucw.cz E: pavel@suse.cz D: Softcursor for vga, hypertech cdrom support, vcsa bugfix, nbd D: Softcursor for vga, hypertech cdrom support, vcsa bugfix, nbd D: sun4/330 port, capabilities for elf, speedup for rm on ext2, USB, D: sun4/330 port, capabilities for elf, speedup for rm on ext2, USB, D: work on suspend-to-ram/disk, killing duplicates from ioctl32 D: work on suspend-to-ram/disk, killing duplicates from ioctl32 Loading Documentation/ABI/testing/sysfs-firmware-memmap +1 −1 Original line number Original line Diff line number Diff line What: /sys/firmware/memmap/ What: /sys/firmware/memmap/ Date: June 2008 Date: June 2008 Contact: Bernhard Walle <bwalle@suse.de> Contact: Bernhard Walle <bernhard.walle@gmx.de> Description: Description: On all platforms, the firmware provides a memory map which the On all platforms, the firmware provides a memory map which the kernel reads. The resources from that memory map are registered kernel reads. The resources from that memory map are registered Loading Documentation/PCI/PCIEBUS-HOWTO.txt +1 −1 Original line number Original line Diff line number Diff line Loading @@ -93,7 +93,7 @@ the PCI Express Port Bus driver from loading a service driver. int pcie_port_service_register(struct pcie_port_service_driver *new) int pcie_port_service_register(struct pcie_port_service_driver *new) This API replaces the Linux Driver Model's pci_module_init API. A This API replaces the Linux Driver Model's pci_register_driver API. A service driver should always calls pcie_port_service_register at service driver should always calls pcie_port_service_register at module init. Note that after service driver being loaded, calls module init. Note that after service driver being loaded, calls such as pci_enable_device(dev) and pci_set_master(dev) are no longer such as pci_enable_device(dev) and pci_set_master(dev) are no longer Loading Documentation/cgroups/cgroups.txt +2 −4 Original line number Original line Diff line number Diff line Loading @@ -252,10 +252,8 @@ cgroup file system directories. When a task is moved from one cgroup to another, it gets a new When a task is moved from one cgroup to another, it gets a new css_set pointer - if there's an already existing css_set with the css_set pointer - if there's an already existing css_set with the desired collection of cgroups then that group is reused, else a new desired collection of cgroups then that group is reused, else a new css_set is allocated. Note that the current implementation uses a css_set is allocated. The appropriate existing css_set is located by linear search to locate an appropriate existing css_set, so isn't looking into a hash table. very efficient. A future version will use a hash table for better performance. To allow access from a cgroup to the css_sets (and hence tasks) To allow access from a cgroup to the css_sets (and hence tasks) that comprise it, a set of cg_cgroup_link objects form a lattice; that comprise it, a set of cg_cgroup_link objects form a lattice; Loading Documentation/cgroups/cpusets.txt +37 −28 Original line number Original line Diff line number Diff line Loading @@ -142,7 +142,7 @@ into the rest of the kernel, none in performance critical paths: - in fork and exit, to attach and detach a task from its cpuset. - in fork and exit, to attach and detach a task from its cpuset. - in sched_setaffinity, to mask the requested CPUs by what's - in sched_setaffinity, to mask the requested CPUs by what's allowed in that tasks cpuset. allowed in that tasks cpuset. - in sched.c migrate_all_tasks(), to keep migrating tasks within - in sched.c migrate_live_tasks(), to keep migrating tasks within the CPUs allowed by their cpuset, if possible. the CPUs allowed by their cpuset, if possible. - in the mbind and set_mempolicy system calls, to mask the requested - in the mbind and set_mempolicy system calls, to mask the requested Memory Nodes by what's allowed in that tasks cpuset. Memory Nodes by what's allowed in that tasks cpuset. Loading Loading @@ -175,6 +175,10 @@ files describing that cpuset: - mem_exclusive flag: is memory placement exclusive? - mem_exclusive flag: is memory placement exclusive? - mem_hardwall flag: is memory allocation hardwalled - mem_hardwall flag: is memory allocation hardwalled - memory_pressure: measure of how much paging pressure in cpuset - memory_pressure: measure of how much paging pressure in cpuset - memory_spread_page flag: if set, spread page cache evenly on allowed nodes - memory_spread_slab flag: if set, spread slab cache evenly on allowed nodes - sched_load_balance flag: if set, load balance within CPUs on that cpuset - sched_relax_domain_level: the searching range when migrating tasks In addition, the root cpuset only has the following file: In addition, the root cpuset only has the following file: - memory_pressure_enabled flag: compute memory_pressure? - memory_pressure_enabled flag: compute memory_pressure? Loading Loading @@ -252,7 +256,7 @@ is causing. This is useful both on tightly managed systems running a wide mix of This is useful both on tightly managed systems running a wide mix of submitted jobs, which may choose to terminate or re-prioritize jobs that submitted jobs, which may choose to terminate or re-prioritize jobs that are trying to use more memory than allowed on the nodes assigned them, are trying to use more memory than allowed on the nodes assigned to them, and with tightly coupled, long running, massively parallel scientific and with tightly coupled, long running, massively parallel scientific computing jobs that will dramatically fail to meet required performance computing jobs that will dramatically fail to meet required performance goals if they start to use more memory than allowed to them. goals if they start to use more memory than allowed to them. Loading Loading @@ -485,17 +489,22 @@ of CPUs allowed to a cpuset having 'sched_load_balance' enabled. The internal kernel cpuset to scheduler interface passes from the The internal kernel cpuset to scheduler interface passes from the cpuset code to the scheduler code a partition of the load balanced cpuset code to the scheduler code a partition of the load balanced CPUs in the system. This partition is a set of subsets (represented CPUs in the system. This partition is a set of subsets (represented as an array of cpumask_t) of CPUs, pairwise disjoint, that cover all as an array of struct cpumask) of CPUs, pairwise disjoint, that cover the CPUs that must be load balanced. all the CPUs that must be load balanced. Whenever the 'sched_load_balance' flag changes, or CPUs come or go The cpuset code builds a new such partition and passes it to the from a cpuset with this flag enabled, or a cpuset with this flag scheduler sched domain setup code, to have the sched domains rebuilt enabled is removed, the cpuset code builds a new such partition and as necessary, whenever: passes it to the scheduler sched domain setup code, to have the sched - the 'sched_load_balance' flag of a cpuset with non-empty CPUs changes, domains rebuilt as necessary. - or CPUs come or go from a cpuset with this flag enabled, - or 'sched_relax_domain_level' value of a cpuset with non-empty CPUs and with this flag enabled changes, - or a cpuset with non-empty CPUs and with this flag enabled is removed, - or a cpu is offlined/onlined. This partition exactly defines what sched domains the scheduler should This partition exactly defines what sched domains the scheduler should setup - one sched domain for each element (cpumask_t) in the partition. setup - one sched domain for each element (struct cpumask) in the partition. The scheduler remembers the currently active sched domain partitions. The scheduler remembers the currently active sched domain partitions. When the scheduler routine partition_sched_domains() is invoked from When the scheduler routine partition_sched_domains() is invoked from Loading Loading @@ -559,7 +568,7 @@ domain, the largest value among those is used. Be careful, if one requests 0 and others are -1 then 0 is used. requests 0 and others are -1 then 0 is used. Note that modifying this file will have both good and bad effects, Note that modifying this file will have both good and bad effects, and whether it is acceptable or not will be depend on your situation. and whether it is acceptable or not depends on your situation. Don't modify this file if you are not sure. Don't modify this file if you are not sure. If your situation is: If your situation is: Loading Loading @@ -600,19 +609,15 @@ to allocate a page of memory for that task. If a cpuset has its 'cpus' modified, then each task in that cpuset If a cpuset has its 'cpus' modified, then each task in that cpuset will have its allowed CPU placement changed immediately. Similarly, will have its allowed CPU placement changed immediately. Similarly, if a tasks pid is written to a cpusets 'tasks' file, in either its if a tasks pid is written to another cpusets 'tasks' file, then its current cpuset or another cpuset, then its allowed CPU placement is allowed CPU placement is changed immediately. If such a task had been changed immediately. If such a task had been bound to some subset bound to some subset of its cpuset using the sched_setaffinity() call, of its cpuset using the sched_setaffinity() call, the task will be the task will be allowed to run on any CPU allowed in its new cpuset, allowed to run on any CPU allowed in its new cpuset, negating the negating the effect of the prior sched_setaffinity() call. affect of the prior sched_setaffinity() call. In summary, the memory placement of a task whose cpuset is changed is In summary, the memory placement of a task whose cpuset is changed is updated by the kernel, on the next allocation of a page for that task, updated by the kernel, on the next allocation of a page for that task, but the processor placement is not updated, until that tasks pid is and the processor placement is updated immediately. rewritten to the 'tasks' file of its cpuset. This is done to avoid impacting the scheduler code in the kernel with a check for changes in a tasks processor placement. Normally, once a page is allocated (given a physical page Normally, once a page is allocated (given a physical page of main memory) then that page stays on whatever node it of main memory) then that page stays on whatever node it Loading Loading @@ -681,10 +686,14 @@ and then start a subshell 'sh' in that cpuset: # The next line should display '/Charlie' # The next line should display '/Charlie' cat /proc/self/cpuset cat /proc/self/cpuset In the future, a C library interface to cpusets will likely be There are ways to query or modify cpusets: available. For now, the only way to query or modify cpusets is - via the cpuset file system directly, using the various cd, mkdir, echo, via the cpuset file system, using the various cd, mkdir, echo, cat, cat, rmdir commands from the shell, or their equivalent from C. rmdir commands from the shell, or their equivalent from C. - via the C library libcpuset. - via the C library libcgroup. (http://sourceforge.net/proects/libcg/) - via the python application cset. (http://developer.novell.com/wiki/index.php/Cpuset) The sched_setaffinity calls can also be done at the shell prompt using The sched_setaffinity calls can also be done at the shell prompt using SGI's runon or Robert Love's taskset. The mbind and set_mempolicy SGI's runon or Robert Love's taskset. The mbind and set_mempolicy Loading Loading @@ -756,7 +765,7 @@ mount -t cpuset X /dev/cpuset is equivalent to is equivalent to mount -t cgroup -ocpuset X /dev/cpuset mount -t cgroup -ocpuset,noprefix X /dev/cpuset echo "/sbin/cpuset_release_agent" > /dev/cpuset/release_agent echo "/sbin/cpuset_release_agent" > /dev/cpuset/release_agent 2.2 Adding/removing cpus 2.2 Adding/removing cpus Loading Loading
CREDITS +0 −1 Original line number Original line Diff line number Diff line Loading @@ -2166,7 +2166,6 @@ D: Initial implementation of VC's, pty's and select() N: Pavel Machek N: Pavel Machek E: pavel@ucw.cz E: pavel@ucw.cz E: pavel@suse.cz D: Softcursor for vga, hypertech cdrom support, vcsa bugfix, nbd D: Softcursor for vga, hypertech cdrom support, vcsa bugfix, nbd D: sun4/330 port, capabilities for elf, speedup for rm on ext2, USB, D: sun4/330 port, capabilities for elf, speedup for rm on ext2, USB, D: work on suspend-to-ram/disk, killing duplicates from ioctl32 D: work on suspend-to-ram/disk, killing duplicates from ioctl32 Loading
Documentation/ABI/testing/sysfs-firmware-memmap +1 −1 Original line number Original line Diff line number Diff line What: /sys/firmware/memmap/ What: /sys/firmware/memmap/ Date: June 2008 Date: June 2008 Contact: Bernhard Walle <bwalle@suse.de> Contact: Bernhard Walle <bernhard.walle@gmx.de> Description: Description: On all platforms, the firmware provides a memory map which the On all platforms, the firmware provides a memory map which the kernel reads. The resources from that memory map are registered kernel reads. The resources from that memory map are registered Loading
Documentation/PCI/PCIEBUS-HOWTO.txt +1 −1 Original line number Original line Diff line number Diff line Loading @@ -93,7 +93,7 @@ the PCI Express Port Bus driver from loading a service driver. int pcie_port_service_register(struct pcie_port_service_driver *new) int pcie_port_service_register(struct pcie_port_service_driver *new) This API replaces the Linux Driver Model's pci_module_init API. A This API replaces the Linux Driver Model's pci_register_driver API. A service driver should always calls pcie_port_service_register at service driver should always calls pcie_port_service_register at module init. Note that after service driver being loaded, calls module init. Note that after service driver being loaded, calls such as pci_enable_device(dev) and pci_set_master(dev) are no longer such as pci_enable_device(dev) and pci_set_master(dev) are no longer Loading
Documentation/cgroups/cgroups.txt +2 −4 Original line number Original line Diff line number Diff line Loading @@ -252,10 +252,8 @@ cgroup file system directories. When a task is moved from one cgroup to another, it gets a new When a task is moved from one cgroup to another, it gets a new css_set pointer - if there's an already existing css_set with the css_set pointer - if there's an already existing css_set with the desired collection of cgroups then that group is reused, else a new desired collection of cgroups then that group is reused, else a new css_set is allocated. Note that the current implementation uses a css_set is allocated. The appropriate existing css_set is located by linear search to locate an appropriate existing css_set, so isn't looking into a hash table. very efficient. A future version will use a hash table for better performance. To allow access from a cgroup to the css_sets (and hence tasks) To allow access from a cgroup to the css_sets (and hence tasks) that comprise it, a set of cg_cgroup_link objects form a lattice; that comprise it, a set of cg_cgroup_link objects form a lattice; Loading
Documentation/cgroups/cpusets.txt +37 −28 Original line number Original line Diff line number Diff line Loading @@ -142,7 +142,7 @@ into the rest of the kernel, none in performance critical paths: - in fork and exit, to attach and detach a task from its cpuset. - in fork and exit, to attach and detach a task from its cpuset. - in sched_setaffinity, to mask the requested CPUs by what's - in sched_setaffinity, to mask the requested CPUs by what's allowed in that tasks cpuset. allowed in that tasks cpuset. - in sched.c migrate_all_tasks(), to keep migrating tasks within - in sched.c migrate_live_tasks(), to keep migrating tasks within the CPUs allowed by their cpuset, if possible. the CPUs allowed by their cpuset, if possible. - in the mbind and set_mempolicy system calls, to mask the requested - in the mbind and set_mempolicy system calls, to mask the requested Memory Nodes by what's allowed in that tasks cpuset. Memory Nodes by what's allowed in that tasks cpuset. Loading Loading @@ -175,6 +175,10 @@ files describing that cpuset: - mem_exclusive flag: is memory placement exclusive? - mem_exclusive flag: is memory placement exclusive? - mem_hardwall flag: is memory allocation hardwalled - mem_hardwall flag: is memory allocation hardwalled - memory_pressure: measure of how much paging pressure in cpuset - memory_pressure: measure of how much paging pressure in cpuset - memory_spread_page flag: if set, spread page cache evenly on allowed nodes - memory_spread_slab flag: if set, spread slab cache evenly on allowed nodes - sched_load_balance flag: if set, load balance within CPUs on that cpuset - sched_relax_domain_level: the searching range when migrating tasks In addition, the root cpuset only has the following file: In addition, the root cpuset only has the following file: - memory_pressure_enabled flag: compute memory_pressure? - memory_pressure_enabled flag: compute memory_pressure? Loading Loading @@ -252,7 +256,7 @@ is causing. This is useful both on tightly managed systems running a wide mix of This is useful both on tightly managed systems running a wide mix of submitted jobs, which may choose to terminate or re-prioritize jobs that submitted jobs, which may choose to terminate or re-prioritize jobs that are trying to use more memory than allowed on the nodes assigned them, are trying to use more memory than allowed on the nodes assigned to them, and with tightly coupled, long running, massively parallel scientific and with tightly coupled, long running, massively parallel scientific computing jobs that will dramatically fail to meet required performance computing jobs that will dramatically fail to meet required performance goals if they start to use more memory than allowed to them. goals if they start to use more memory than allowed to them. Loading Loading @@ -485,17 +489,22 @@ of CPUs allowed to a cpuset having 'sched_load_balance' enabled. The internal kernel cpuset to scheduler interface passes from the The internal kernel cpuset to scheduler interface passes from the cpuset code to the scheduler code a partition of the load balanced cpuset code to the scheduler code a partition of the load balanced CPUs in the system. This partition is a set of subsets (represented CPUs in the system. This partition is a set of subsets (represented as an array of cpumask_t) of CPUs, pairwise disjoint, that cover all as an array of struct cpumask) of CPUs, pairwise disjoint, that cover the CPUs that must be load balanced. all the CPUs that must be load balanced. Whenever the 'sched_load_balance' flag changes, or CPUs come or go The cpuset code builds a new such partition and passes it to the from a cpuset with this flag enabled, or a cpuset with this flag scheduler sched domain setup code, to have the sched domains rebuilt enabled is removed, the cpuset code builds a new such partition and as necessary, whenever: passes it to the scheduler sched domain setup code, to have the sched - the 'sched_load_balance' flag of a cpuset with non-empty CPUs changes, domains rebuilt as necessary. - or CPUs come or go from a cpuset with this flag enabled, - or 'sched_relax_domain_level' value of a cpuset with non-empty CPUs and with this flag enabled changes, - or a cpuset with non-empty CPUs and with this flag enabled is removed, - or a cpu is offlined/onlined. This partition exactly defines what sched domains the scheduler should This partition exactly defines what sched domains the scheduler should setup - one sched domain for each element (cpumask_t) in the partition. setup - one sched domain for each element (struct cpumask) in the partition. The scheduler remembers the currently active sched domain partitions. The scheduler remembers the currently active sched domain partitions. When the scheduler routine partition_sched_domains() is invoked from When the scheduler routine partition_sched_domains() is invoked from Loading Loading @@ -559,7 +568,7 @@ domain, the largest value among those is used. Be careful, if one requests 0 and others are -1 then 0 is used. requests 0 and others are -1 then 0 is used. Note that modifying this file will have both good and bad effects, Note that modifying this file will have both good and bad effects, and whether it is acceptable or not will be depend on your situation. and whether it is acceptable or not depends on your situation. Don't modify this file if you are not sure. Don't modify this file if you are not sure. If your situation is: If your situation is: Loading Loading @@ -600,19 +609,15 @@ to allocate a page of memory for that task. If a cpuset has its 'cpus' modified, then each task in that cpuset If a cpuset has its 'cpus' modified, then each task in that cpuset will have its allowed CPU placement changed immediately. Similarly, will have its allowed CPU placement changed immediately. Similarly, if a tasks pid is written to a cpusets 'tasks' file, in either its if a tasks pid is written to another cpusets 'tasks' file, then its current cpuset or another cpuset, then its allowed CPU placement is allowed CPU placement is changed immediately. If such a task had been changed immediately. If such a task had been bound to some subset bound to some subset of its cpuset using the sched_setaffinity() call, of its cpuset using the sched_setaffinity() call, the task will be the task will be allowed to run on any CPU allowed in its new cpuset, allowed to run on any CPU allowed in its new cpuset, negating the negating the effect of the prior sched_setaffinity() call. affect of the prior sched_setaffinity() call. In summary, the memory placement of a task whose cpuset is changed is In summary, the memory placement of a task whose cpuset is changed is updated by the kernel, on the next allocation of a page for that task, updated by the kernel, on the next allocation of a page for that task, but the processor placement is not updated, until that tasks pid is and the processor placement is updated immediately. rewritten to the 'tasks' file of its cpuset. This is done to avoid impacting the scheduler code in the kernel with a check for changes in a tasks processor placement. Normally, once a page is allocated (given a physical page Normally, once a page is allocated (given a physical page of main memory) then that page stays on whatever node it of main memory) then that page stays on whatever node it Loading Loading @@ -681,10 +686,14 @@ and then start a subshell 'sh' in that cpuset: # The next line should display '/Charlie' # The next line should display '/Charlie' cat /proc/self/cpuset cat /proc/self/cpuset In the future, a C library interface to cpusets will likely be There are ways to query or modify cpusets: available. For now, the only way to query or modify cpusets is - via the cpuset file system directly, using the various cd, mkdir, echo, via the cpuset file system, using the various cd, mkdir, echo, cat, cat, rmdir commands from the shell, or their equivalent from C. rmdir commands from the shell, or their equivalent from C. - via the C library libcpuset. - via the C library libcgroup. (http://sourceforge.net/proects/libcg/) - via the python application cset. (http://developer.novell.com/wiki/index.php/Cpuset) The sched_setaffinity calls can also be done at the shell prompt using The sched_setaffinity calls can also be done at the shell prompt using SGI's runon or Robert Love's taskset. The mbind and set_mempolicy SGI's runon or Robert Love's taskset. The mbind and set_mempolicy Loading Loading @@ -756,7 +765,7 @@ mount -t cpuset X /dev/cpuset is equivalent to is equivalent to mount -t cgroup -ocpuset X /dev/cpuset mount -t cgroup -ocpuset,noprefix X /dev/cpuset echo "/sbin/cpuset_release_agent" > /dev/cpuset/release_agent echo "/sbin/cpuset_release_agent" > /dev/cpuset/release_agent 2.2 Adding/removing cpus 2.2 Adding/removing cpus Loading