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

Reply via email to