I'm submitting this as closed approved automatic, it has already been reviewed by core ZFS and kernel scheduling teams. Given the taxonomy of the new interfaces I believe this is sufficient review and closed approved automatic is sufficient. If any member disagrees then I'll set a fast-track timer.
Template Version: @(#)sac_nextcase 1.68 02/23/09 SMI This information is Copyright 2009 Sun Microsystems 1. Introduction 1.1. Project/Component Working Name: System Duty Cycle Scheduling Class and ZFS IO Observability 1.2. Name of Document Author/Supplier: Author: Jonathan Adams 1.3 Date of This Document: 10 November, 2009 4. Technical Description This case covers two user-visible changes associated with the bug: 6806882 need a less brutal I/O scheduler The changes are: 1. A new kernel-thread-only scheduling class, SDC (System Duty Cycle) is introduced. Since the list of scheduling classes is user-visible through dispadmin(1M) and priocntl(1), we feel an ARC case is appropriate. The new scheduling class is only used by kernel threads, so the only manpage changes are a new SDC(7) page covering the existence of the new loadable module, and an update to the discussion of the SYS class in priocntl(2). A new function "sysdc_thread_enter()", puts a kernel thread into SDC. 2. In order to improve the observability of ZFS IO processing, we introduce a new system process per-zpool, with a u_comm and u_psargs of zpool-<poolname> (i.e. zpool-foo). The LWPs in the process are kernel threads associated with IO processing. Since these threads have LWPs, they get microstate accounting data. Thus, CPU usage associated with IO processing can be observed using prstat(1M) and ps(1). This process will always be in the global zone, even if the pool was imported into a local zone. These changes, while user-visible, are essentially implementation details, and are not committed interfaces. We've tried to make this clear in the manpage changes. Interface Table --------------- Interface Stability --------------------------------------- ----------------- SDC module and scheduling class Consolidation Private sysdc_thread_enter() Consolidation Private zpool-<poolname> process Volatile We seek Micro/Patch binding for these interfaces. See Also -------- 6806882 need a less brutal I/O scheduler Man Page Diffs -------------- SDC(7) +Device and Network Interfaces SDC(7) + + +NAME + SDC - System Duty Cycle scheduling class + +DESCRIPTION + The System Duty Cycle (SDC) scheduling class is used for some + CPU-intensive kernel thread workloads. Like the SYS class, + it cannot be used for user processes. + +ATTRIBUTES + See attributes(5) for descriptions of the following attri- + butes: + ____________________________________________________________ + | ATTRIBUTE TYPE | ATTRIBUTE VALUE | + |_____________________________|_____________________________| + +SEE ALSO + attributes(5) + priocntl(2) ... that class and/or when setting class-specific scheduling parameters. Two special scheduling classes, SYS and SDC, exist for the purpose of | scheduling the execution of certain special system processes (such as the swapper process). It is not possible to change the class of any LWP to SYS or SDC. In addition, any processes in | the SYS or SDC classes that are included in a specified set of | processes are disregarded by priocntl(). For example, an idtype of P_UID and an id value of 0 would specify all processes with a user ID of 0 except processes in the SYS and | SDC classes and (if changing the parameters using PC_SETPARMS or | PC_SETXPARMS) the init(1M) process. ... zpool(1M) --- zpool.1m.dist Tue Nov 3 14:00:53 2009 +++ zpool.1m Tue Nov 3 14:49:47 2009 @@ -947,6 +947,15 @@ version number, and only up to the most recent version supported by this software. +PROCESSES + Each imported pool has an associated process, named + zpool-poolname. The threads in this process are the + pool's IO processing threads, which handle the compression, + checksumming, and other tasks for all IO associated with the + pool. This process exists to provides visibility into the CPU + utilization of the system's storage pools. The existence + of this process is an unstable interface. + EXAMPLES Example 1 Creating a RAID-Z Storage Pool 6. Resources and Schedule 6.4. Steering Committee requested information 6.4.1. Consolidation C-team Name: On 6.5. ARC review type: Automatic 6.6. ARC Exposure: open