rpc.kstatd: Remote Kstat Access Service [PSARC/2008/502 FastTrack timeout 08/13/2008]
Nicolas Williams
nw141292 at sac.sfbay.sun.com
Tue Aug 5 13:46:59 PDT 2008
Template Version: @(#)sac_nextcase 1.66 04/17/08 SMI
This information is Copyright 2008 Sun Microsystems
1. Introduction
1.1. Project/Component Working Name:
rpc.kstatd: Remote Kstat Access Service
1.2. Name of Document Author/Supplier:
Author: Nicolas Williams
1.3 Date of This Document:
05 August, 2008
4. Technical Description
1. Introduction
1.1. Project/Component Working Name:
rpc.kstatd: Remote Kstat Access Service
1.2. Name of Document Author/Supplier:
Erik O'Shaughnessy
1.3. Date of This Document:
08/05/08
2. Project Summary
2.1. Project Description:
This project introduces a new RPC service which enables remote
read-only access to kernel statistics (kstats). The project
consists of: a RPC protocol description and header file, a RPC
daemon, and extensions to libkstat(3LIB), Kstat(3perl) and
kstat(1m) to utilize the service.
4. Technical Description:
4.1. Details:
This project has several dimensions: a new RPC protocol definition,
a new RPC daemon, additions to the libkstat API and finally changes
to the perl kstat tools to take advantage of the new service.
Future projects may wish to extend other kstat-based observation
tools to take advantage of this new feature (vmstat, iostat,
mpstat, etc).
RPC Kstat Protocol
------------------
The RPC kstat protocol seeks to emulate the interfaces
offered by /dev/kstat, specifically:
KSTAT_IOC_CHAINID
KSTAT_IOC_READ
KSTAT_IOC_WRITE
This approach is desirable so that libkstat does not require
extensive retooling to take advantage of the new service.
The RPC cognates are:
KSTAT_RPC_CHAINID
KSTAT_RPC_READ
KSTAT_RPC_WRITE
It should be noted that while the write interface is offered
by the protocol, the daemon which implements the service does
not support the remote writing of kstat data.
The protocol definition and header files will be shipped as:
/usr/include/rpcsvc/kstat.x
/usr/include/rpcsvc/kstat.h
The RPC program number has been allocated and is recorded as
100149.
The protocol definition also supplies XDR routines for kstat
specific data:
bool_t xdr_kstat_t(XDR *, kstat_t *)
bool_t xdr_kstat_hdr(XDR *, kstat_t *)
bool_t xdr_kstat_data(XDR *, kstat *)
bool_t xdr_kstat_named(XDR *, kstat_named_t *, char *)
bool_t xdr_kstat_intr(XDR *, kstat_intr_t *)
bool_t xdr_kstat_io(XDR *, kstat_io_t *)
bool_t xdr_kstat_timer(XDR *, kstat_timer_t *)
These routines are not automatically generated and future
changes/additions to the kstat pantheon of data structures
will need to be tracked here. A comment should be placed in
/usr/include/sys/kstat.h to warn future developers of the
need to update kstat.x if data structures change or are added.
rpc.kstatd
----------
The daemon which implements the protocol will be located at:
/usr/lib/netsvc/kstatd/rpc.kstatd
The daemon uses RPC automatic multi-threading, spawning a maximum
number of threads equal or less than the number of configured CPUs
discovered upon daemon start-up. Changes in CPU availability during
the lifetime of the daemon are not tracked. Threads are allocated
and released as client request load dictates, starting with the
minimum number of threads required.
The daemon uses syslog to report error conditions.
libkstat API additions
----------------------
In order to utilize the RPC service, libkstat will get a new
flavor of kstat_open:
kstat_ctl_t *kstat_open_host(char *)
This new function is similar to the existing kstat_open(),
except that it allows the caller to supply a string which
can be used to locate a suitable remote source of kstats. The
current proposed implementation interprets the string as a
hostname or IPv[4|6] address which is passed to RPC for resolution.
Future enhancements could include support of URIs using
alternate RPC mechanisms (SOAP, XML-RPC, etc) or any other
new technology which may be deemed appropriate.
All other libkstat API usage will remain the same.
kstat(1m) and Kstat(3perl)
--------------------------
The final change introduced by this project is to enhance kstat(1m)
and the Sun supplied kstat perl library module, Kstat(3perl), to
take advantage of the alternate open interface.
This project proposes adding a new command-line option to
kstat(1m) which takes a hostname or IPv[4|6] address as an
argument. The author recommends "-H" but will bow to the wishes
of the command-line UI deities.
Subsequent output from a non-localhost source will have the
source identifier embedded so as to be able to disambiguate
output from different sources. This will have the side-effect
of disrupting tools which parse kstat(1m) output.
Given that perl function calling conventions are very flexible,
this project proposes to add a new "host=>hostname" argument to
the new() method in Kstat.pm. The XS component which implements
the new method will be updated to process the new argument and
call kstat_open_host() with the requested hostname.
4.2. Bug/RFE Number(s):
6733853 RPC Service for Remote Access to Kstat Data
4.4. Out of Scope:
Updating other kstat-based observation tools (vmstat, mpstat,
iostat, etc) is desirable but not necessary for this project
to move forward.
4.5. Interfaces:
Exported Interfaces
===================
/usr/include/rpcsvc/kstat.x Committed
/usr/include/rpcsvc/kstat.h Committed
KSTATPROG = 100149 Committed
KSTATVER = 1 Committed
KSTAT_RPC_CHAINDID = 1 Committed
KSTAT_RPC_READ = 2 Committed
KSTAT_RPC_WRITE = 3 Committed
kstat_rpc_chainid_1() Committed
kstat_rpc_chainid_1_svc() Committed
kstat_rpc_read_1() Committed
kstat_rpc_read_1_svc() Committed
kstat_rpc_write_1() Committed
kstat_rpc_write_1_svc() Committed
kstatprog_1_freeresult() Committed
xdr_kstat_t() Committed
xdr_kstat_hdr() Committed
xdr_kstat_data() Committed
xdr_kstat_named() Committed
xdr_kstat_intr() Committed
xdr_kstat_io() Committed
xdr_kstat_timer() Committed
xdr_size_t() Committed
kstat_ctl_t *kstat_open_host(char *) Committed
/usr/bin/kstat .. [-H hostname] Committed
Imported Interfaces
===================
/dev/kstat
/usr/include/sys/kstat.h
KSTAT_IOC_CHAIN_ID
KSTAT_IOC_READ
4.6. Doc Impact:
New: /usr/share/man/man1m/rpc.kstatd.1m
New: /usr/share/man/man3rpc/kstat.3rpc
Updated: /usr/share/man/man1m/kstat.1m
Updated: /usr/share/man/man3lib/libkstat.3lib
Updated: /usr/share/man/man3kstat/kstat_open.3kstat
4.7. Admin/Config Impact:
Responsibility for initiating and restarting the daemon will
be delegated to inetd(1m). Administrative control will be
performed using svcadm(1m) and svcs(1). The daemon's SMF
service identifier will be:
svc:/network/rpc/kstat:default
The service currently has no configurable attributes.
4.11. Security Impact:
This service will be shipped unconfigured by default and will
require an administrator to explicitly enable it. Given that
/dev/kstat does not require any specific priviledge for
read-only access, no authentication or authorization of RPC
requests is performed. This behavior is in keeping with the
rest of the other RPC-based APIs currently shipped with Solaris
( rstat, rusers, rwall, etc ).
4.12. Dependencies:
/dev/kstat - kernel driver which provides data to user space
5. Reference Documents:
PSARC 1999/495 kstat(1m) and kstat(3perl)
RFE 1099474 Need a more powerful kernel statistics
6. Resources and Schedule
6.4. Steering Committee requested information
6.4.1. Consolidation C-team Name:
ON
6.5. ARC review type: FastTrack
6.6. ARC Exposure: open
More information about the opensolaris-arc
mailing list