kazubits のすべての投稿

DockerやOpenStackを使ったインフラの作り方

***本記事にはプロモーションが含まれています。***

DockerやOpenStackを使ってインフラを作るときの技術の変化が解説されています。

PaaS、Docker、OpenStack――すでにここまで実現できる“変化に強い”インフラの作り方 (1/3)

キーになるのは自動化により開発からサービスの提供までを簡単にしようということです。

市場の変化に対するスピードを上げるということが問題になっているんですね。

ハイブリッドスキル座談会

***本記事にはプロモーションが含まれています。***

日本を代表するハイブリッドクラウドにかかわる5社の座談会です。

ハイブリッドクラウド座談会(5):IT部門に求められるスキルが変化している

お話はとても面白いと感じます。

これからIT技術者に必要とされていることで、フルスタックエンジニアという言葉がまた出てきた。

言おうとしていることはとてもわかる気がする。でも実際に手を動かしてやってみることが大切だし、技術の未来を見通すのはとても大変なことです。

技術を見るには時間もかかるでしょう。でも少しずつやっていかなくてはできるようにはならないでしょうけれど。

そういうのアドバイスできる人が必要になってくる気がしますね。

OpenStack構成のコツ

***本記事にはプロモーションが含まれています。***

OpenStackを運用する時の構成のコツが解説されています。

OpenStack、インストール後につまずかない、考え方・使い方のコツ(その1)――OpenStackはどのように構成されているか (1/3)

OpenStackは多くのプロセスで構成されています。使うにはどこに何をおくのか決めるのが難しいのですね。

やっぱりこういうことを知らないとなかなか運用はできないですね。運用してみないとわからないこともあって卵と鶏の関係ですが。

Nested Hyper-V

***本記事にはプロモーションが含まれています。***

Windows 10の新しいビルドからNested Hyper-Vが使えるようになったそうです。

Hyper-Vの上でさらにHyper-Vを動かせるNested Hyper-V。Windows 10の新ビルドで登場

まだ、実装されていなかったんですね。これで、使い勝手がよくなるでしょうか。

記事ではcontainerのために必要とのことですが、どういうしくみになるのでしょうか。CPUの機能を使うとOS全体の仮想化をしたことと変わらなくなってしまうと思うのですが。

AWSのIoTサポート

***本記事にはプロモーションが含まれています。***

AWSのre:invent 2015でIoTのサポートが発表されましたね。

Amazon Web Servicesで膨大なIoTデバイスを司る「AWS IoT」発表

AWS IoT ButtonでAWS IoTを体験してみた! #reinvent

会場で配布されたデバイスでは、ボタンを押すと電圧値が送信される物のようです。

[速報]AWS re:Invent 2日目は、IoT、コンテナ―、Lambdaなどで発表が相次ぐ

かかる費用は100万メッセージあたり8ドルということです。これって安いのでしょうか。すごくたくさんメッセージをやり取りすることを想定しているようですね。

たとえば心拍数に応じてメッセージを送ることを想定しているのでしょうか。

IoTの数が多くなればこのくらいの値段でないとやっていけないのかな。

IoTのための通信の課金のしくみ

***本記事にはプロモーションが含まれています。***

格安SIMで通信の料金はずい分下がってきましたが、IoTのためにはもう1段下がらないといけないだろうなと思っていました。

そしたら、次のようなサービスが出てきました。

格安SIMによるドコモ回線をAmazonクラウド上でプログラマブルに制御。ソラコムがネットデバイス向けの新通信サービスを提供開始

基本使用量1日10円、1MBあたり0.2円ということでまさにIoT向けのものになっています。Amazon AWSを使うことで通信制御もできるそうです。これからこういうサービスが増えそうな気がします。

ティックレスLinuxカーネルと準仮想化クロック

***本記事にはプロモーションが含まれています。***

ゲストOSの時計の遅れにはティックレスLinuxカーネルが関係していた

このところVirtualBoxを契機として、準仮想化クロックについて調べてきました。
ところが、SUSEのマニュアルがゲストOSでNTPを使わないことを推奨していることの理由がどうしてもわかりませんでした。
昔QEMUにかかわったとき、Linuxの割り込み頻度が1000Hzから250Hzに変わったことを思い出しました。

すると、こんな記事が見つかりました。

仮想化しても時刻ずれが発生しないCentOS6

最近のLinuxカーネルはティックレスになっていて、仮想化しても時刻がずれないというのです。そこで、ティックレスカーネルについて調べてみました。

Linuxの割り込み頻度の変遷

VMwareのサイトにLinuxの割り込み頻度の変遷がまとめられています。

Linuxの2.4ではHZ=100Hzだったのが、2.6ではHZ=1000Hzに変わり、2.6.14以降はHZ=250Hzになっています。

ティックレスカーネルのサポートはLinux 2.6.18より始まっています。

ティックレスカーネルのしくみ

昔はPIT(Programmable Interval Timer)を使って定期的に割り込みをかけていました。100Hzなら10msに一度カーネルに割り込みが発生するようにプログラムします。割り込みが発生したら10msたったとして時計を進めていたわけです。

Linuxの割り込み頻度は、多いほうが時計の精度が高いように思います。しかし割り込みの時間内に処理が終わらず次の割り込みが起こってしまうと割り込みが失われた状態になり時計が狂ってきます。

仮想化環境で時計の狂いが大きかったのはこれが大きな原因です。

ティックレスカーネルは時間を決めて定期的に割り込みをかけることをやめてしまうものです。その代わり1度きりのone shot timerというタイマーを使って割り込みまでの時間を設定して割り込みをかけます。動いているプロセスが少ないときは長い時間割り込まないようにします。動いているときは、定期的に割り込みます。

時間があらかじめ決まっていないので、カーネルがsleepしてどれくらい時間がかかったかを毎度ハードウェアをチェックする必要があります。それをクロックソースと呼んでいます。

クロックソースとして代表的なものが、TSC(Time Stamp Counter)、ACPI PM(ACPI Power Management timer)、HPET(High Precision Event Timer)などがあります。

ティックレスカーネルの適用状況

Linuxのディストリビューションがティックレスカーネルを採用した時期はまちまちです。以下にまとめてみました。

ディストリビューション バージョン 時期
Red Hat Enterprise Linux 6 2010-11-09
CentOS 6 2011-07-10
Fedora 7 x86 2007-05-31
Fedora 8 x86_64 2007-11-8
Ubuntu 7.10 2007-10-18
SUSE Linux Enterprise Server 12 2014-10-28

UbuntuとFedoraが同時期で、Red HatとCentOSが次で、SUSEの順番です。

使っている人が多いと思われるCentOSは6からのサポートです。最近になって時計の話題を見かけることが少なくなったことはこのためだと思われます。

また、Ubuntuの方が時計が正確だという報告があったのですがティックレスカーネルの採用時期が早かったためでしょう。

SUSEは本当に最近のサポートですね。

ティックレスカーネルと準仮想化クロックと組み合わせると

ティックレスカーネルになってクロックソースを指定できるようになりました。最近のディストリビューションでは準仮想化クロックを採用しているところばかりです。準仮想化クロックといってもこれまで調べたようにその中身はTSCを使っています。ゲストOSの時計が正確になったのは、CPUの周波数の変化によってTSCの周波数が変化しなくなっていることも大きいと思います。

Linuxカーネルの進化とCPUの進化によって時計の正確さが増したということでしょう。

VirtualBoxのゲストの時計の補正を停止する方法

***本記事にはプロモーションが含まれています。***

ゲストの時計の補正を止める

VirtualBoxは、準仮想化インターフェースが”なし”のとき、ゲストOSとホストOSの時計は同期しています。でも、何かのときにゲストとホストの時計の同期を止めたいことがあると思います。

こちらを参考に紹介します。ゲストOSがWindowsの場合が載っています。

なお、TSCTiedToExecutionというのはTSCに関する別の設定ですので今回は設定しません。

VirtualBoxがホストの時計をゲストに供給するのを止める

時計の補正を止めたいゲストOSをシャットダウンします。

設定でシステム―>アクセラレーション―>準仮想化インターフェースで”なし”を選びます。

Legacyを選んでも”なし”と同じです。他を選ぶと自動的に補正されなくなります。

VirtualBoxのインストールされているフォルダに行きます。

cd "C:\Program Files\Oracle\VirtualBox"

次のコマンドでゲストOSのリストを見ることができます。

C:\Program Files\Oracle\VirtualBox> VBoxManage list vms

その名前を使って次のようにするとゲストがホストの時計を参照することを止めることができます。"Guest Name"というのは自分の設定したいゲストの名前です。

C:\Program Files\Oracle\VirtualBox> VBoxManage setextradata "Guest Name" "VBoxInternal/Devices/VMMDev/0/Config/GetHostTimeDisabled" "1"

このコマンドで、ゲストOSのところにある設定ファイル"Guest Name".vboxに設定が書き込まれます。

この後で、ゲストOSを再起動するとゲストOSの時計ががホストに同期するのは停止されます。

GuestAdditionsの時計の同期を止める

上記だけでも時計が同期しなくなります。
ゲストOS上でも、Guest Additionsが同期しようとしていますので、念のためそれを止める方法です。

ゲストOSがUbuntu 12.04 x64の場合です。

現在動いているVBoxServiceを止めます。

sudo service vboxadd-service stop

タイマーの同期をとめたままGuest Additionsを動かします。

sudo /usr/sbin/VBoxService --disable-timesync

これでゲストとホストの時計の同期は止まるはずです。この方法だと、ゲストOSを再起動するとまた--disable-timesyncなしでサービスが動きます。

ゲストとホストの時計の同期を再開する

VBoxManageの最後の"1"をなくして実行することで設定のエントリーをなくすことができます。"0"とすることでも再開できます。

C:\Program Files\Oracle\VirtualBox> VBoxManage setextradata "Guest Name" "VBoxInternal/Devices/VMMDev/0/Config/GetHostTimeDisabled"

ゲストの実行中でもコマンドを実行できますが、再起動しないと有効になりません。