FFCLOCK(2) | FreeBSD System Calls Manual | FFCLOCK(2) |
名称
ffclock_getcounter, ffclock_getestimate, ffclock_setestimate — フィードフォワード (feed-forward) カウンタを検索して、フィードフォワード (feed-forward) クロック評価を取得して設定するライブラリ
Standard C Library (libc, -lc)書式
#include < sys/timeffc.h> int
ffclock_getcounter( ffcounter *ffcount);
int
ffclock_getestimate( struct ffclock_estimate *cest);
int
ffclock_setestimate( struct ffclock_estimate *cest);
解説
ffclock は、システムクロックを同期させるために代替方法です。 ffclock は、フィードフォワード (feed-forward) パラダイムを実装し、タイムスタンピングとタイムキーピングカーネル関数を切り離します。これは、過去のクロックエラーが、システムクロックを調節するとき、 ntpd デーモンによって実装されたフィードバックの代わりの方法と根本的に異なるアプローチである、現在のタイムキーピングに影響しないことを保証します。フィードフォワードアプローチは、ネットワークで同期するとき、フィードバックのアプローチより、よりよい性能とより高い堅牢性を実証しました。フィードフォワードコンテキストでは、 タイムスタンプ は、フィードフォワード クロック評価 (clock estimate) を使用することによって秒に変換することができる、タイムカウンタ (timecounter) のチック (tick) の累積された値です。
ffclock_getcounter() システムコールによって、呼び出しているプロセスは、カーネルによって維持されたフィードフォワードカウンタの現在の値を検索することができます。
ffclock_getestimate() と ffclock_setestimate() システムコールによって、呼び出し側は、それぞれカーネルのフィードフォワードクロックのパラメータの評価を取得して設定することができます。 ffclock_setestimate() システムコールは、フィードフォワード同期デーモンの単一のインスタンスによって呼び出されるべきです。 ffclock_getestimate() システムコールは、フィードフォワードクロック評価を検索するために任意のプロセスによって呼び出すことができます。
フィードフォワードアプローチは、タイムスタンプが秒に変換されるたびにクロック評価が検索されることを必要としません。したがって、呼び出しているプロセスが代わりにクロック同期デーモンからクロック評価を検索するなら、システムコールの数を大幅に減少することができます。 ffclock_getestimate() は、フィードフォワード同期デーモンが実行していないとき、 (下記の 「使用法」を参照) 使用されなければなりません。
クロックパラメータは、次のように < sys/timeffc.h> で定義されている cest によって指される構造体を評価します:
struct ffclock_estimate { struct bintime update_time; /* 更新された最後の評価の時間. */ ffcounter update_ffcount; /* 最後に更新されたカウンタ値. */ ffcounter leapsec_next; /* 次の閏秒のカウンタ値. */ uint64_t period; /* カウンタの期間の評価. */ uint32_t errb_abs; /* 絶対的なクロックエラーの境界 [ns]. */ uint32_t errb_rate; /* カウンタの速度エラーの境界 [ps/s]. */ uint32_t status; /* クロック状態. */ int16_t leapsec_total; /* 今まで見られたすべての閏秒. */ int8_t leapsec; /* 次の閏秒 (in {-1,0,1}). */ };
スーパユーザだけがフィードフォワードクロックの評価を設定することができます。
戻り値
Upon successful completion, the value 0 is returned; otherwise the value -1 is returned and the global variable errno is set to indicate the error.エラー
次のエラーコードが、 errno に設定されます:- [ EFAULT]
- ffcount または cest ポインタが無効のメモリを参照しています。
- [ EPERM]
- スーパユーザ以外のユーザが、フィードフォワードクロックのパラメータの評価を設定しようとしました。
使用法
フィードフォワードパラダイムは、専門化したクロック関数の定義を有効にします。最も単純な形式で、イベント間の厳重な順序で確立するか、または最小の実行コストでたいへん正確に小さな時間の間隔を測定するために ffclock_getcounter() を使用することができます。
異なる方法は、ffclock によって追跡された絶対時間 (または“実測時間”) にアクセスするために存在します。最も単純な方法は、システムクロックに ffclock 時間を返させるために ffclock インタフェース kern.ffclock を使用します。次に、フィードフォワードクロックによって見られる現在の時刻を検索するために clock_gettime(2) システムコールを使用することができます。この設定は、すべてのシステムに影響し、フィードフォワード同期デーモンが実行されているべきであることに注意してください。
より少ない自動化の方法は、カーネルからフィードフォワードカウンタのタイムスタンプを検索し、タイムスタンプを秒に変換するためにフィードフォワードクロックのパラメータ評価を使用することから成ります。カーネルまたは (好まれる) 直接同期デーモンからフィードフォワードクロックのパラメータ評価を検索することができます。この方法は、現在のクロックエラーで意味のある上限を集めている間に、アプリケーションによって必要とされる異なるクロックモデルを使用してタイムスタンプを変換することを可能にします。
歴史
フィードフォワードクロックのサポートは、 FreeBSD 10.0 ではじめて登場しました。作者
フィードフォワードクロックのサポートは、 FreeBSD 財団の資金提供の下で University of Melbourne にて <dveitch@unimelb.edu.au>と共同して <jridoux@unimelb.edu.au>によって書かれました。November 21, 2011 | FreeBSD |