Kishida Shouji | MISO https://alb-owned-https-576747877.ap-northeast-1.elb.amazonaws.com 未来を創造するITのミソ Mon, 25 Jul 2022 07:01:26 +0000 ja hourly 1 https://wordpress.org/?v=6.7.2 https://alb-owned-https-576747877.ap-northeast-1.elb.amazonaws.com/wp-content/uploads/2017/09/tdi_300-300-300x280.png Kishida Shouji | MISO https://alb-owned-https-576747877.ap-northeast-1.elb.amazonaws.com 32 32 NTPによるWindowsの時刻同期の方法 https://alb-owned-https-576747877.ap-northeast-1.elb.amazonaws.com/ntp-windows-time Mon, 25 Jul 2022 07:01:26 +0000 https://alb-owned-https-576747877.ap-northeast-1.elb.amazonaws.com/?p=13941 はじめに システムの時刻がばらばらに設定されていると、様々な不具合が生じてしまうため、正確に時刻を合わせておくことが重要です。 身近なところでは、電子メールが例に挙げられます。送信側の時刻が大幅に進んでいる場合、受信者は…

The post NTPによるWindowsの時刻同期の方法 first appeared on MISO.]]>
はじめに

システムの時刻がばらばらに設定されていると、様々な不具合が生じてしまうため、正確に時刻を合わせておくことが重要です。

身近なところでは、電子メールが例に挙げられます。送信側の時刻が大幅に進んでいる場合、受信者は未来からメールが来たと思ってしまいます。逆に遅れている場合、受信者は過去からメールを受信したと思い、システムに遅延があると勘違いしてしまいます。

また、システム運用の場面では、不具合対応のためにログ解析を行う際に時刻がずれていると、どの操作で不具合が発生したかなどが不明瞭になり、原因追及が難しくなる可能性があります。

その他にも、例えば受発注システムで、受注/発注の時刻がずれていると、当然大きな問題になりかねません。

このように、システムにおいて時刻を合わせることは必須事項です。そこで使われるのがNTPサーバーです。

 

NTPサーバーとは

NTPサーバーとは、TCP/IPネットワークを通じてNTP(Network Time Protocol)通信プロトコルを使用し,サーバーとクライアント間で正確な時刻情報を取得・配信しているサーバーのことです。

NTPサーバーは、階層構造で管理されています。最上位の原子時計やGPS時計に対し、下位のNTPサーバーが同期を行い、複数のNTPサーバーが同一の時刻を保持することで成り立っています。

NTPクライアントはこのNTPサーバーと時刻同期を行うことになります。

 

図1.NTP階層

 

Windows Serverの時刻同期の仕様

それでは、Windows Serverで時刻同期をする際の仕様を確認しましょう。

時刻同期の処理には、瞬時に時刻同期を行うStepモードと、徐々に時刻同期を行うSlewモードの2種類があります。

Slewモードが用意されている理由は、時刻の変更が瞬時に変更されてしまうと、JOB実行の時間が過ぎてしまったり、データベースのトランザクション処理が狂ってしまうといった弊害がおきる可能性があるためです。

また、ドメインに参加、不参加により同期先のNTPサーバーTypeの違いや、デフォルトでの設定値(レジストリ値)に差異があります。

  • ドメイン参加の場合:ADサーバーと時刻同期
  • Workgroupの場合:指定したNTPサーバーと時刻同期

図2.時刻同期に関するレジストリ値(一部)

 

ドメインメンバーのType規定値、NT5DSを変更するような場合には、ドメインコントローラーとの時刻差が発生し、認証等に影響が出る可能性があるため、注意が必要です。

また、デフォルト値では、ドメインメンバーとWorkgroupに差異があるため、時刻同期の動作が異なることになり、システムによって問題になる可能性が考えられるので、個々に設計を行う必要性があります。

 

Slewモードで動作させるための計算方法

レジストリの値だけでは、Slewモードで動作させるための条件がわからないので、レジストリ値から計算し、条件を導き出す必要があります。

Windows Server 2016から 時刻同期の仕様が変更されており、Slewモードで動作させる際の計算方法も異なっていますので、注意が必要です。

以下にOSのバージョンによる差異を記載します。

Slewモードの条件式

  • Windows  Server 2012以前
    • 条件1.
      AbsoluteValueOfCurrentTimeOffset / (PhaseCorrectRate * UpdateInterval)<= System Clock Rate / 2
    • 条件2.
      AbsoluteValueOfCurrentTimeOffset <= MaxAllowedPhaseOffset
  • Windows Server 2016以降
    • 条件1.
      AbsoluteValueOfCurrentTimeOffset <= MaxAllowedPhaseOffset
    • 条件2.
      AbsoluteValueOfCurrentTimeOffset ÷ (16 x PhaseCorrectRate x pollIntervalInSeconds)<= System Clock Rate/2

注)System Clock Rate はシングルプロセッサーの場合:0.010 / マルチプロセッサーの場合:0.015 で固定となります。

それでは、実際にWindows Server 2016以降の計算式で値を入れて計算してみます。

計算例

Windows Server 2016 Workgroupサーバー(マルチプロセッサー)の既定値を想定して、計算例を記載します。

    • MaxAllowedPhaseOffset:300
    • PhaseCorrectRate:1
    • pollIntervalInSeconds:2^6(MinPollInterval ) ~ 2^10(MaxPollInterval)
      ※なお、上記計算式における、pollIntervalInSeconds = ポーリング間隔は、MinPollInterval からMaxPollIntervalの間の変数となります。

そのためSlewモードとStepモードの判定条件においては、MinPollInterval 及び、MaxPollInterval の設定値によって揺らぎが発生します。

以下の計算例では、MinPollInterval(最小値)が利用されている場合と、MaxPollInterval(最大値)が、利用されている場合の2パターンで、記載します。

各条件式は以下の通り

  • 条件1.
    • AbsoluteValueOfCurrentTimeOffset <= MaxAllowedPhaseOffset
    • AbsoluteValueOfCurrentTimeOffset <= 300 秒
  • 条件2.

*pollIntervalInSeconds = 2^6 の場合 

    • AbsoluteValueOfCurrentTimeOffset ÷ (16 x PhaseCorrectRate x pollIntervalInSeconds) <= System Clock Rate/2
    • AbsoluteValueOfCurrentTimeOffset ÷ (16 x 1 x2^6) <= 0.015/2
    • AbsoluteValueOfCurrentTimeOffset <= 7.68

*pollIntervalInSeconds = 2^10 の場合

    • AbsoluteValueOfCurrentTimeOffset ÷ (16 x PhaseCorrectRate x pollIntervalInSeconds)<= System Clock Rate/2
    • AbsoluteValueOfCurrentTimeOffset ÷ (16 x 1 x2^10) <= 0.015/2
    • AbsoluteValueOfCurrentTimeOffset <= 122.88

以上によりNTP サーバーとの時刻差が約 7 秒 ~ 122 秒以下の場合は、 Slew モードで時刻同期が行われます。

設定をSlewモードを10秒未満、10秒以上はStepモードで動作させるには以下の設定となります。

設定例:

    • MaxAllowedPhaseOffset:10
    • PhaseCorrectRate:1
    • pollIntervalInSeconds:2^7(MinPollInterval ) ~ 2^7(MaxPollInterval)

上記設定値をベースに考えると条件は以下の通りとなります。

  • 条件 1.
    • AbsoluteValueOfCurrentTimeOffset <= MaxAllowedPhaseOffset
    • AbsoluteValueOfCurrentTimeOffset <= 10 秒
  • 条件 2.

* pollIntervalInSeconds = 2^7 の場合

    • AbsoluteValueOfCurrentTimeOffset ÷ (16 x PhaseCorrectRate x pollIntervalInSeconds) <= System Clock Rate/2
    • AbsoluteValueOfCurrentTimeOffset ÷ (16 x 1 x2^7) <= 0.015/2
    • AbsoluteValueOfCurrentTimeOffset <= 15.36

条件1及び2両方を満たす必要があるため、上記の場合には10秒未満はslew/10秒以上はstepという動作を実現可能です。

(pollIntervalInSecondsを2^6 とした場合 条件式2が7.68となり、約8秒以下となるため2^7に設定)

 

実際のStep,Slewモードにおける同期処理の確認

設定されている構成を確認します。

 

最終正常同期時刻が直近の日時として表示されていることを確認します。

 

NTPサーバーとの時刻差異を確認します。

 

手動で時刻を変更し、同期処理の動作を確認します。(Stepモード)

 

手動で時刻を変更し、同期処理の動作を確認します。(Slewモード)

 

時刻同期が完了したことが確認できます。

 

最後に

時刻同期は、初期に時刻を合わせていても、少しずつ時間がずれていくため、先に記載したような同期方法を設計し、設定することが重要です。

いずれにせよ、時刻同期はシステムにおいて重要であるため、設定することをお勧めします。

The post NTPによるWindowsの時刻同期の方法 first appeared on MISO.]]>
Gridに参加してみよう https://alb-owned-https-576747877.ap-northeast-1.elb.amazonaws.com/join-grid Thu, 04 Oct 2018 00:00:27 +0000 https://alb-owned-https-576747877.ap-northeast-1.elb.amazonaws.com/?p=3413 はじめに Gridという言葉を最近耳にしなくなった気がします。仮想化は標準になり、仮想化技術をベースにしているクラウドも当たり前になってきていますが、Gridはいつのまにか聞かなくなってしまいました。しかし、最近流行り?…

The post Gridに参加してみよう first appeared on MISO.]]>
はじめに

Gridという言葉を最近耳にしなくなった気がします。仮想化は標準になり、仮想化技術をベースにしているクラウドも当たり前になってきていますが、Gridはいつのまにか聞かなくなってしまいました。しかし、最近流行り?の仮想通貨における技術の元にはGridがかかわっています。

Gridとは

Gridコンピューティングとは、Internet上のリソース(CPU)を紐づけて、1つのコンピュータシステムとして動作させる仕組みです。最近では、DataGridという考えもあり、こちらは大容量データを分散して保存し、データの冗長化などを行うものです。一般的なシステムには、まだGridの技術は活用されていませんが、Gridを基にしたHadoopやブロックチェーンなどを用いる企業も増えていることからこの技術を基にした、システムは今後増えていくだろうと思われます。

利用状況

Gridの技術は、一部の科学技術計算などでは使用・研究が続けられています。仮想化やクラウドといった技術は企業や個人などでも利用されていますが、Gridは未だに特殊な環境でのみしか利用されていないのが現実です。

Gridコンピューティングへの参加

もしGridに興味があれば、Gridで行われている計算にあなた自身のパソコンや、今では携帯電話でも参加することができます。但し、参加しても結果を期待してはいけません。参加形態のほとんどは慈善事業的なものとなり、参加することで得られる対価などはありません。

以下に私が参加したプロジェクトの内容を記載します。

  PCへのアプリ導入方法

  (注意:会社のPCには導入しないようにお願いします。
  電源、CPUのリソースを使用しますので自宅での個人端末で行いましょう。)

1.Berkeley Open Infrastructure for Network Computing (BOINC) にアクセスして、アカウントを作成・登録します。

   

必要事項を記載します。

2.自分が参加するProjectを選択します。

   

アンドロイドアイコンのあるものは、携帯端末からも参加可能です。

3.モジュールをダウンロードし、インストールします。

   

インスール画面で、上記のように4項目表示されますが、順にクリックしていきます。

  1.Locate BOINC      モジュールをダウンロードします。

  2.Install      モジュールをインストールします。

  3.Login  to BOINC   最初に登録したアカウント名でログインします。

  4.Start contributing GRIDの開始です。

4.インスール

画面に従い、モジュールをインストールします。

   

   

   

インストール完了

5.モジュールの起動

いよいよ、GRIDへの参加です。

  

参加するGRIDプロジェクトへの接続待ち

  

プロジェクトに参加しました!

  

で?

終わりです。当然なのですが、何もおきません。ただ単に、マシンのリソースが使われているだけです。先にも記載しましたが、慈善事業であり、プロジェクト自体の結果報告など含め、何もないのが実情です。

最後に

モジュールを起動していても、特にマシンの動作が極端に遅くなるということもありませんでした。動作が重いと感じたらプロジェクトの一時停止で対処できます。携帯端末でも導入して起動してみましたが、こちらはバッテリーの減りが早くなるため、注意が必要かと思います。

私が参加したProjectは「小児がん治療薬の検索Project」です。このProjectは2009年から活動しており、単一コンピュータで5万年かかる処理を2年で終えるというレスポンスを持っています。社会貢献というものには、いろいろな種類があるかと思いますが、自宅のPCで特に何の操作もなく、簡単にこのような社会貢献ができるものはなかなかないと思います。

参加型のGridは他にもいろいろあるので、興味のある方は一度参加されてみてはいかがでしょうか。

The post Gridに参加してみよう first appeared on MISO.]]>