月曜日 9 10, 2012

Oracle Solaris ナイトセミナー #6 開催します!

8 月はお休みを頂いてしまいましたが。。。お待たせしました、Oracle Solaris ナイトセミナー第 6 回目の告知です!

今回は、サービスの実行を超えた新しいサービス管理アーキテクチャ「Service Management Facility (SMF)」特集です。 SMF は、Solaris 10 から提供されている特徴的な機能である「予測的セルフヒーリング技術」の一機能となり、Solaris 上で動作している様々なソフトウェアサービスを管理する機能です。

今回は、この SMF の概要や Solaris 11 で更新された機能などを紹介致します!

そして、好評の Solaris 3 分クッキングでは、Solaris 11 におけるネットワーク設定に関する特集となります。 Solaris 11 では、ネットワーク設定についても大きく変更されていますが、基本のコマンドとなる ipadm, dladm, netadm コマンドを取り上げてみます。 お待ちしております。

勉強会としてゆる~くやっていますので、Solaris 初心者の方や単なる情報収集でも、お気軽にご参加ください!
参加登録はこちらからっ!

みなさま、お待ちしています!


来月は・・・ふふふ・・・

--
過去のセミナー資料は、slideshare.net/SolarisJPNight にて公開中です。
日中に行われている Solaris ディープダイブの資料はこちら slideshare.net/SolarisJP

月曜日 7 02, 2012

Oracle VM Server for SPARC (旧称 LDoms) 2.2 リリース!

SPARC T シリーズサーバーで利用できるファームウェアベースのハイパーバイザー型仮想化ソフトウェアである Oracle VM Server for SPARC の最新バージョン 2.2 がリリースされました! OVM for SPARC 2.2 は前バージョン同様に、UltraSPARC T2, T2+, SPARC T3, SPARC T4 プロセッサが搭載される SPARC T シリーズサーバーにて利用可能です!

OVM for SPARC 2.2 は 2012 年 5 月 24 日にリリースが発表されたのですが、このときには Oracle Solaris 10 版のみが実際に利用可能でした。 Oracle Solaris 11 版は、SRU8.5 に含まれてリリースされることになったため、その利用は 6 月 22 日の SRU8.5 のリリースを待たなければいけませんでした。 ついに Solaris 10, Solaris 11 とも OVM for SPARC 2.2 が利用可能となりましたので、その新機能を (OTN のウェブサイト(英語)マニュアル (Release Note)にも紹介がありますが) 本 Blog にて簡単に紹介したいと思います。
  • SR-IOV サポート
    • 1つの物理 I/O インタフェースを仮想的に複数のゲストドメインへ割当てることが可能です。OVM for SPARC 2.2 の場合、まずはネットワークインタフェースで利用可能になります。同じことは、OVM for SPARC のもつ、vsw と vnet で構成する仮想ネットワークでも可能ですが、SR-IOV を使うことで、CPU やハイパーバイザソフトウェアのオーバーヘッドなしで I/O を実行できるところが魅力となります。
    • 現時点では制御ドメインとして Solaris 11 が必要、サポートされる NIC としては SPARC T3/T4 サーバーラインナップのオンボードネットワークポートおよび 10Gb Ethernet カード ((X)1109A-Z, (X)1110A-Z, (X)4871A-Z)) となります。
  • 異なる CPU を搭載するシステム間でのライブマイグレーションのサポート
    • Oracle VM Server for SPARC 2.1 でライブマイグレーションがサポートされましたが、このときは同じ種類かつ同じ周波数の CPU を搭載するシステムでのみサポートという制限事項がありました。今回 OVM for SPARC 2.2 では、この制限を取り除く機構が実装されました。ドメインに対して cpu-arch プロパティが用意され、generic に設定したときにゲストドメインが CPU タイプに依存しないマイグレーションを実行できるようになります。
    •  Solaris 11 がゲストドメインとして構成されている場合にこの機能がサポートされます。
  • 仮想ネットワークの Rx Dring モードのサポート
    • ドメインのプロパティとして extended-mapin-space を on にすると、さらなる LDC 共有メモリスペースを使用することで、仮想ネットワークのパフォーマンスとスケーラビリティを向上させます。
    •  こちらは Solaris 10 8/11 (Update 10) および Solaris 11 で利用可能です。
以下は、前バージョンの OVM for SPARC 2.1 でもパッチや SRU を適用することで可能なものでしたが、OVM for SPARC 2.2 のリリースのタイミングで改めて紹介されています。
  • 名前付き CPU コアおよびメモリーブロックの割当
    • この機能により管理者が明示的にこのコアをゲストドメインに割当てる、ということや、この物理メモリアドレスからどれだけのサイズをゲストドメインに割当てる、ということが可能になりました。これは上級者向けの機能ということになります。
    •  この機能は Solaris 11 SRU4 の OVM for SPARC 2.1 から追加された機能です。
    •  この機能は制御ドメインが Solaris 11 の場合にのみ利用可能です。
  •  CPU threading モード
    • UltraSPARC T2 以降の CPU は、コアあたり 8 CPU thread が動作しますが、ドメインに対する CPU threading モードを max-ipc に設定することで コアあたり 1 thread でのみ動作するようにすることができます。これは基本的に SPARC T4 CPU 向けに使用する機能として実装されました。
    • この機能は Solaris 10 の OVM for SPARC 2.1 に対して Patch ID 147507-01 以降のパッチを適用することでサポートされた機能です。Solaris 11 の場合には SRU4 以降の OVM for SPARC 2.1 からサポートということになっています。
最後に、OVM for SPARC は 昨年(2011年) 12 月に Oracle ソフトウェアのライセンスにおいて Hard Partitioning ライセンスとしてみなされ、その場合の構成方法がホワイトペーパーとしてリリースされましたが、OVM for SPARC 2.2 では、CPU のコア全体の割当を ldm set-core/add-core でできるようになっているため、それをベースにマニュアル (管理ガイド) 内に記載され、これも改めてこのリリースの最新情報としてリストされています。

火曜日 4 10, 2012

Oracle Solaris ナイトセミナー #2 開催!

復活!! Oracle Solaris ナイトセミナー #1 に参加頂きありがとうございました。
途中、「お前誰だよっ!」的なサプライズがあったり困惑した方も多かったかと思いますが、大きな声で年齢をばらされたりなど不本意ながらも本人は大変喜んでおりました。
この場を借りて、お礼を申し上げます。

さて、そんな喜びを今頃になって噛み締めている担当者ですが、#1 でお約束したとおり、Mr. Solaris の下に集う Solaris を愛してやまない中の人たちが、手作りでお届けするセミナー 2 回目となる「Oracle Solaris ナイトセミナー #2」開催のお知らせを、やっとお届けできることとなりました!

今回は、参加登録に利用するのはイベント開催支援ツール:ATND(アテンド)が提供するイベント ATND です。
こちらでは、チケットを利用した申し込みとなり、会員登録せずに申し込みも可能となりました。
本セミナー自体は、無料セミナーですのでお気軽にご参加頂ければと思います。

第ニ弾となる「Oracle Solaris ナイトセミナー # 2」は、2012/04/20 (金) 18:30 開催です。

今回の内容も、昨年行われた「Oracle Solaris 11テクニカル・ディープ・ダイブ第 1 弾」の内容を、ナイトセミナー風にアレンジした、「Oracle Solaris 11テクニカル・ディープ・ダイブ第 1 弾 ナイトセミナー風」となり、ZFS にフォーカスした内容となっています。

セッション 1 は、Solaris エバンジェリストである野崎が、「ZFS はストレージをどう仮想化できるのか? Solaris 11 は、なぜ ZFS を必要としたのか? 」を解説する「ZFSによるストレージ仮想化」です!

セッション 2 は、「もう一つストレージの仮想化機能 “COMSTAR”概要」です。こちらは、この記事を書いている人が担当しますので、軽く流してください。

そして、衣装がパワーアップしてしまった「ナイトセミナーでおなじみ! – Solaris 3 分クッキング」!
調理にも節約は大事です。というわけで、ZFS と節約といったら圧縮か?と思わせて重複排除を持ってきた「ZFS, dedup で節約してみる」です!

また、ここまで読んでしまいましたね。参加するしかないですよね?というわけで、参加申し込みは下記の ATND でお願い致します!


みなさまのご参加をお待ちしております。

あ。。。サブタイトルついてない。。。Solaris 11 深掘り #1 の 2 です!

Oracle Develop セッション資料公開

先週行われました、Oracle OpenWorld Tokyo 2012には、ご来場いただけましたでしょうか。

実はOpenWorldと同時開催の形で、4月6日(金)に「Oracle Develop」と題しました、技術者向けのセッションを実施いたしました。
Oracleのイベントではありますが、SolarisからもSolaris 11に関するセッションをいくつか実施しております。
Solaris 11での変更点やIPSパッケージの作成、それから移行関連の情報を盛り込みました。

その際に使用したセッション資料を早速公開しております。
久しぶりにSolaris関連でまとまった資料が出来上がりましたので、下記のリンクよりご覧ください。

Oracle Develop セッション資料

月曜日 3 26, 2012

Solaris 11 に対応! Oracle Solaris Cluster 4.0

2011 年 11 月 9 日に発表された Oracle Solaris 11 に続き、2011 年 12 月 6 日にOracle Solaris 11 に対応した Oracle Solaris Cluster 4.0 がリリースされました。

Oracle Solaris Cluster は Solaris 用の高可用性クラスタソフトウェアのことで、Sun 時代は Sun Cluster と呼ばれていた製品です。 オラクルとなり、Oracle Solaris Cluster とリブランディングされました。ライセンスも Oracle データベースのように、プロセッサライセンスとなり、Oracle Solaris Cluster のバージョンに依存せずに、使用するプロセッサ数分のライセンスを購入することにより、Oracle Solaris Cluster のコアコンポーネント、すべてのエージェント、ディザスタ・リカバリ向けの Geographic Edition のすべてが使えるようになりました。現在 Solaris 10 に対応する最新の Oracle Solaris Cluster は 3.3 5/11 (Update 1) となり、Solaris 11 に対応するバージョンが 4.0 ということになります。Oracle Solaris Cluster 4.0 の特長は以下のようになります。
  • Solaris 11 IPS / AI をサポート
  • Solaris 仮想化環境 (Solaris Zones, Oracle VM Server for SPARC) をサポート
  • Oracle Solaris Cluster Geographic Edition によりディザスタ・リカバリ機能をサポート
Oracle Solaris Cluster の詳細は今後、本ブログでも取り上げていきたいとおもいますが、Oracle Solaris Cluster の特長は、やはり Solaris のカーネルモジュールとして提供され、Solaris の特長的な機能を Solaris Cluster 環境においても融合され利用できるところにあります。

Solaris 11 では、Solaris のさらなる進化が IPS や 仮想化に見られます。そんな Solaris 11 の特長を、Oracle OpenWorld Tokyo 2012 開催期間中の 4/6(金) に六本木アカデミーヒルズ49 で行われる Oracle Develop にて詳細を聞いてみませんか?
  • 4/6(金) D3-03 「Oracle Solaris 11デベロッパーが押さえておきたい機能」(13:00 - 13:45)
  • 4/6(金) D3-13 「世界新記録を次々と達成する本人が語る Oracle DatabaseをSPARC/Solarisで高性能かつ高いセキュリティで構築するノウハウ」 (14:00 - 14:45)
  • 4/6(金) S2-53 「Oracle Solaris 11 でパッケージ管理をシンプルに-IPS パッケージ作成」(16:00 - 17:30)
これは絶対見逃せません!! (Oracle Develop の Solaris 関連セッションですでに満席のものについては上記リストから除いています)

Oracle OpenWorld Tokyo 2012 お申込み URL
http://www.oracle.com/openworld/jp-ja/index.html
招待コードは 7264 を記載してお申し込みください。

水曜日 3 21, 2012

Oracle/Sun の技術を結集 - SPARC SuperCluster T4-4

SPARC SuperCluster T4-4 をご存知でしょうか?

SPARC SuperCluster は 2010年12月にラリー・エリソンによりそのコンセプトが発表され、 2011 年 9 月に SPARC T4 サーバーシリーズとともに SPARC SuperCluster T4-4 としてリリースが発表されました。SPARC SuperCluster は、汎用エンジニアド・システムとしてラインナップされ、劇的な性能向上をとげた SPARC T4 CPU を 4 台搭載する SPARC T4-4 をコンピュートノードとして、同じエンジニアド・システムの、データベースの最高性能を求めた Exadata のキーコンポーネントである Oracle Exadata Storage Server が利用でき、ミドルウェアや Java の最高性能を求めた Exalogic のキーコンポーネントである Exalogic Software を構成して利用することができます。それに加えて Solaris 10 または 11 をサポートする一般的なアプリケーションも、この SPARC SuperCluster に 搭載して使用することを可能としています。

以下の搭載製品群をご覧いただくとわかるように、SPARC SuperCluster は Oracle/Sun の技術を結集させた製品であることがご理解いただけるのではないでしょうか。
  • SPARC SuperCluster のハードウェア構成概要
    • 2(Half Rack 時) or 4(Full Rack 時) x SPARC T4-4 サーバー
    • 3 (Half Rack 時) or 6 (Full Rack 時) x Exadata Storage Server X2-2
    • 1 x ZFS Storage Appliance 7320 クラスタ構成
    • 3 x Sun DataCenter InfiniBand Switch 36
    • 1 x Ethernet Management Switch
    • 42U Rack (2 x PDU)
  • SPARC SuperCluster にて利用可能なソフトウェア
    • OS: Oracle Solaris 11 および 10
    • 仮想化: Oracle VM Server for SPARC および Oracle Solaris Zones
    • 管理: Oracle Enterprise Manager Ops Center および Grid Control
    • クラスタリング: Oracle Solaris Cluster および Oracle Clusterware
    • データベース: Oracle データベース 11g R2 (11.2.0.3) およびその他データベース
    • ミドルウェア: Exalogic Software とともに Oracle WebLogic Server, Coherence
    • アプリケーション: Oracle Solaris 11 および 10 にてサポートされる Oracle もしくは ISV、カスタマアプリケーション
SPARC SuperCluster はエンジニアド・システムのため、仮想環境を各ワークロードに対し どのように設計するかといった非常に複雑で製品知識を必要とされる点について、事前に オラクルのエンジニアによって十分に考えぬかれ、オラクルによってサポートされテストされた 最適な構成をお客様に提供することになります。その結果として、高性能なシステムを 迅速に導入することが可能となっています。

SPARC SuperCluster には関しては、本ブログにて、その詳細を今後話題にしていきたいと 思いますが、もっと早く SuperCluster について把握されたい方は、Oracle OpenWorld Tokyo 2012 の講演にご参加いただくことをお勧めします!

4 月 5 日にベルサール六本木またはグランドハイアット東京を会場とする Oracle OpenWorld Tokyo 2012 の以下のセッションでは SPARC SuperCluster の技術面だけではなく、ビジネス面 やその利点など幅広く話があります。
  • 4/5(木) ゼネラルセッション G2-01 「ビッグデータ&クラウド時代を勝ち抜くITプラットフォーム戦略」(11:50 - 13:20)
  • 4/5(木) S2-42 「最新UNIX統合プラットフォーム - SPARC SuperCluster」 (16:30 - 17:15)
  • 4/5(木) S2-53 「Oracle E-Business Suiteのパフォーマンスと可用性を最大化し、 導入/運用コストを劇的に削減する最新のシステム基盤”SPARC SuperCluster”」(17:40 - 18:25)
これは絶対見逃せません!!

Oracle OpenWorld Tokyo 2012 お申込み URL
http://www.oracle.com/openworld/jp-ja/index.html
招待コードは 7264 を記載してお申し込みください。

金曜日 4 23, 2010

ローカルゾーン上での特権 sys_time の設定例

今回は、Solaris ゾーン(non-global zone)上でシステムの時刻を変更することについて考えてみます。
デフォルトではシステムの時刻設定はグローバルゾーン上で行いますが、Solaris ゾーン上で同じ事が出来るでしょうか。もしそれが出来れば、インタネット上の NTP サーバ と時刻を同期するのにグローバルゾーンを隠す一つの方法になると思います。

Solaris ゾーンでは、特権(privilege)の割り当てにより、ゾーン上で使用されるリソースを制限しています。例えば、今回の場合ではシステム時刻を変更するには、sys_time 特権が必要となります。
Solaris のシステム管理 (Solaris コンテナ : 資源管理と Solaris ゾーン)を確認すると、この sys_time 特権は Solaris ゾーン内の状態は「任意」です。これは、個別に Solaris ゾーンへ指定することが可能なことを意味します。また、sys_time 特権の内容は次のようにして確認することが可能です。
global# ppriv -lv sys_time
sys_time
        適切なシステムコール (stime、adjtime、ntp_adjtime) と x86 固有の
        RTC 呼び出しのいずれかを使用して、システム時刻を操作できるように
        します。
それでは実際に sys_time 特権を Solaris ゾーンへ割り当ててみます。
デフォルトでは sys_time 特権は Solaris ゾーンに割り当てられていませんので、時刻を変更しようとするとエラーとなります。
下記の例では、ppriv(1M) コマンドを使用して特権の不足も合わせて確認しています。ppriv(1M) コマンドがない場合は最初の一行目は出力されません。
global# ppriv -l zone | grep sys_time   <=== グローバルゾーンで指定できる特権
sys_time
zone0# ppriv -l zone | grep sys_time    <=== Solaris ゾーンで指定できる特権
zone0#                                     <=== デフォルトでは特権 sys_time なし
zone0# ppriv -D -e date 021818502010
date[29958]: missing privilege "sys_time" (euid = 0, syscall = 25) needed at stime+0x21
date: Not owner
usage:  date [-u] mmddHHMM[[cc]yy][.SS]
        date [-u] [+format]
        date -a [-]sss[.fff]
上記出力から sys_time 特権が date(1) コマンドの実行に不足していることが確認できます。
Solaris ゾーンでは、不足している特権をグローバルゾーンから zonecfg(1M) コマンドで limitpriv プロパティを指定することで追加できます。このプロパティに、sys_time 特権を指定します。
global# zoneadm -z zone0 halt
global# zonecfg -z zone0 set limitpriv="default,sys_time"
global# zonecfg -z zone0 info
zonename: zone0
zonepath: /zfs/zpool0/zone0
brand: native
autoboot: false
bootargs:
pool:
limitpriv: default,sys_time   <=== ここ
scheduling-class:
ip-type: shared
inherit-pkg-dir:
        dir: /lib
inherit-pkg-dir:
        dir: /platform
inherit-pkg-dir:
        dir: /sbin
inherit-pkg-dir:
        dir: /usr
net:
        address: 192.168.1.100
        physical: skge0
        defrouter が指定されていません

global# zoneadm list -vc
  ID NAME             STATUS     PATH                           BRAND    IP
   0 global           running    /                              native   shared
   - zone0            installed  /zfs/zpool0/zone0              native   shared
global# zoneadm -z zone0 boot
global# zoneadm list -vc
  ID NAME             STATUS     PATH                           BRAND    IP
   0 global           running    /                              native   shared
   4 zone0            running    /zfs/zpool0/zone0              native   shared
改めて Solaris ゾーン上で時刻を設定してみると、設定出来ることが確認できました。
global# zlogin zone0
[ゾーン 'zone0' pts/5 に接続されました]
Last login: Mon Apr 19 15:18:32 on pts/5
Sun Microsystems Inc.   SunOS 5.10      Generic January 2005
zone0#
zone0# ppriv -l zone | grep sys_time
sys_time
zone0# date
2010年04月19日 (月) 16時00分59秒 JST
zone0# ppriv -D -e date 04192359

2010年04月19日 (月) 23時59分00秒 JST
zone0#

global# date
2010年04月19日 (月) 23時59分05秒 JST
うまく設定が出来るようになりましたが、1 点注目すべきポイントがあります。
上記設定はシステムの時刻設定をした事になりますので、グローバルゾーンにも時刻変更の影響を与えます。試してはいませんが、同一サーバ上の他の Solaris ゾーンにも同様に影響が出ることになります。
次の例はデフォルトの動作になりますが、グローバルゾーンで時刻を設定すれば、Solaris ゾーンにも反映されます。
global#  ppriv -D -e date 04191540
2010年04月19日 (月) 15時40分00秒 JST
global# date
2010年04月19日 (月) 15時40分05秒 JST

zone0# date
2010年04月19日 (月) 15時40分03秒 JST
このように、Solaris ゾーンで必要な特権を割り当てることで時刻を設定することが可能でした。グローバルゾーンを含む他のゾーンにも時刻設定の影響が出ることも確認できました。
sys_time 特権は、date(1) コマンドの他に ntpdate(1M) コマンドや xntpd(1M) デーモンでも使用されていますので、冒頭で考えたようにグローバルゾーンをインタネットにさらけ出さずにすみそうです。
最後に、今回の設定と netservices(1M) 等とを組み合わせれば、よりセキュアな Solaris ゾーン環境を構築できることになりますね。

参考ドキュメント
  • Solaris のシステム管理 (Solaris コンテナ : 資源管理と Solaris ゾーン)
  • Solaris 10 - アプリケーションのゾーン対応
  • Shrink-Wrap Security

  • 木曜日 4 22, 2010

    Real Time スケジューラで動作する Zone の設定方法

    前回、 Solaris ゾーン上の CPU リソースは FSS(Fair Share Scheduler) でスケジューリングされる 説明をしましたが、今回は、任意のゾーンに対するスケジューリング クラスを FSS 以外に変更する方法を紹介します。

    ゾーンのスケジューリングクラスをデフォルトの FSS から変更する為には、対象となる ゾーンが使用する CPU プールの pool.scheduler プロパティーに有効なスケジューリング クラスを設定します。

    それでは早速、RT(Real Time Scheduler)で動作するゾーンを 作成してみましょう。具体的には、zonecfg の scheduling-class プロパティー を使ってゾーンのスケジューリングクラスを設定します。

    今回は、CPU プールを作成する手間を省く為、ゾーン起動時に自動でプールを 構成する dedicated-cpu プロパティをゾーンに設定しました。

    下記の例は、ゾーン名 real-zone に、2 CPU 分の CPU プールを割り当て、 scheduling-class を RT で定義しております。

    # zonecfg -z real-zone
    real-zone: そのような構成済みゾーンはありません
    'create' を使用して、新しいゾーンの構成を開始してください。
    zonecfg:real-zone> create
    zonecfg:real-zone> set zonepath=/export/zone/real-zone
    zonecfg:real-zone> add dedicated-cpu
    zonecfg:real-zone:dedicated-cpu> set ncpus=2
    zonecfg:real-zone:dedicated-cpu> end
    zonecfg:real-zone> set scheduling-class=RT
    zonecfg:real-zone> verify
    zonecfg:real-zone> commit
    zonecfg:real-zone> exit
    
    # zoneadm -z real-zone install
    Preparing to install zone .
    Creating list of files to copy from the global zone.
    ...
    The file  contains a log of the zone installation.
    
    # zoneadm -z real-zone boot
    

    これでゾーンのスケジューリングクラスを RT に設定したゾーンが作成できました。
    現在、検証環境では、下記のように FSS で動作する zone01 と、RT で動作する real-zone が稼働しております。
    # zoneadm list -cv
      ID NAME             STATUS     PATH                           BRAND    IP
       0 global           running    /                              native   shared
       1 zone01           running    /export/zone/zone01            native   shared
       2 real-zone        running    /export/zone/real-zone         native   shared
    

    poolstat コマンドで、プールの状態 (real-zone 用にプールが作成されている事) を 確認します。
    # poolstat
                                  pset
     id pool                 size used load
      1 SUNWtmp_real-zone       2 0.00 0.00
      0 pool_default            2 0.00 0.00
    

    次に、各ゾーン内で priocntl -d にて起動されるプロセスのスケジューリングクラス を確認します。
    zone01# priocntl -d
    TIME SHARING PROCESSES:
        PID    TSUPRILIM    TSUPRI
       6487        0           0
    
    
    real-zone# priocntl -d
    REAL TIME PROCESSES:
        PID   RTPRI       TQNTM    TQSIG
       6484       0        1000        0
    

    今度は実際に各ゾーンに負荷をかけ、起動するプロセス のスケジューリングクラスを確認してみます。
    今回、zone01 と real-zone それぞれで CPU に負荷を かける nspin を実行した結果が下記となります。
    zone01 では、PID 6522 と 6523、real-zone では、PID 6524 と 6525 が 起動しております。

    # ps -efl -o pid,zone,comm | grep nspinx の結果
     6523   zone01  ./nspinx
     6522   zone01  ./nspinx
     6524 real-zone ./nspinx
     6525 real-zone ./nspinx
    

    prstat -z の結果より、PRI を確認すると、real-zone で実行しているプロセスの PRI が 60 より大きいので、RT でスケジューリングされている事が確認できます。

    prstat -z の結果
       PID USERNAME  SIZE   RSS STATE  PRI NICE      TIME  CPU PROCESS/NLWP
      6525 root     1344K  540K cpu0   100    -   0:01:53  25% nspinx/1
      6524 root     1344K  672K cpu1   100    -   0:01:53  25% nspinx/1
      6522 root     1344K  672K cpu3    20    0   0:01:57  25% nspinx/1
      6523 root     1344K  540K run     20    0   0:01:57  25% nspinx/1
    ....
    ....
    ZONEID    NPROC  SWAP   RSS MEMORY      TIME  CPU ZONE
         2       14   17M   20M   0.2%   0:03:59  50% real-zone
         1       14   22M   25M   0.3%   0:03:58  50% zone01
         0       52  173M  256M   3.2%   0:01:13 0.0% global
    
    Total: 80 processes, 312 lwps, load averages: 4.92, 5.53, 2.86
    

    ご参考で、各スケジューリングクラスに割り当たる PRI 番号は下記コマンドで 確認できます。

    # priocntl -l
    CONFIGURED CLASSES
    ==================
    
    SYS (System Class)
    
    TS (Time Sharing)
            Configured TS User Priority Range: -60 through 60
    
    FX (Fixed priority)
            Configured FX User Priority Range: 0 through 60
    
    IA (Interactive)
            Configured IA User Priority Range: -60 through 60
    
    FSS (Fair Share)
            Configured FSS User Priority Range: -60 through 60
    
    RT (Real Time)
            Maximum Configured RT Priority: 59
    


    (補足情報)
    今回、Real Time スケジューラで動作するゾーンを紹介しましたが、Real Time スケジューラで 動作するゾーンでは、FSS 制御下で動作するプロパティ( cpu-share や capped-cpu ) が制御 できませんので設計時に注意が必要です。

    (参考資料)
    ゾーンのスケジューリングクラス
    http://docs.sun.com/app/docs/doc/819-0385/gepst?l=ja&a=view



    (参考情報)
    過去の 「やっぱり Sun がスキ!」blog 記事一覧はこちらを参照下さい。 http://wikis.sun.com/display/yappri/Home

    水曜日 4 21, 2010

    dispadmin コマンドの紹介

    今回は、プロセスが使用するスケジューラを変更するコマンド dispadmin を 紹介します。
    このコマンドはあまり馴染みがないかも知れませんが、Solaris コンテナで Zone のリソース制御を行う時に重要なコマンドとなります。

    Solaris コンテナ上の CPU リソース制御は、FSS(Fair Share Scheduler)を使用 しますが、Solaris 10 初期インストールの状態では、スケジューラが FSS を デフォルトで使用する設定になっておりません。

    その為、zonecfg コマンドで cpu-shares プロパティを設定した Zone を起動すると 下記ワーニングメッセージが出力されます。
    (今回は、Solaris 10 10/09 で検証しております。)

    # zoneadm -z zone01 boot
    
    zoneadm: zone 'zone01': 警告: zone.cpu-shares 資源制御が設定されていますが、
    zoneadm: zone 'zone01': FSS はこのゾーンのデフォルトのスケジューリングクラス
    zoneadm: zone 'zone01': ではありません。FSS はゾーン内のプロセスに使用されますが、
    zoneadm: zone 'zone01': FSS の利点を十分に得るために、FSS を
    zoneadm: zone 'zone01': デフォルトのスケジューリングクラスにするようにしてください。
    zoneadm: zone 'zone01': 詳細は、dispadmin(1M) を参照してください。
    

    CPU リソース制御プロパティは、FSS の管理下で制御を行いますので、デフォルト のスケジューリングクラスに FSS が設定されていないとワーニングが出てしまいます。

    ワーニングメッセージを出さないよう FSS をデフォルトのスケジューリ ングクラスに設定するには、下記設定を行います。

    まずは、現在のデフォルトスケジューラを確認してみましょう。
    # dispadmin -d
    dispadmin: Default scheduling class is not set
    

    Solaris 10 の初期インストール状態では、デフォルトスケジューラは何も設定 されていない事が確認できます。

    それでは、デフォルトスケジューラを FSS に設定してみましょう。
    # dispadmin -d FSS
    
    これで設定が完了しました。
    最後にデフォルトスケジューラに FSS が設定できたか確認してみましょう。
    # dispadmin -d
    FSS     (Fair Share)
    ----
    


    FSS の設定が完了しましたので、もう一度 Zone を起動してみます。
    # zoneadm -z zone01 boot
    

    zone01 起動時にワーニング出力が消えました。


    ちなみに、dispadmin でデフォルトのスケジューラを設定すると、 下記内容のファイルが /etc/dispadmin.conf に作成されます。
    # cat dispadmin.conf
    
    #
    # /etc/dispadmin.conf
    #
    # Do NOT edit this file by hand -- use dispadmin(1m) instead.
    #
    DEFAULT_SCHEDULER=FSS
    


    Zone のリソース制御が思うように動作しない場合、一度 dispadmin の設定を確認する事をお勧めします。


    (参考情報)
    過去の 「やっぱり Sun がスキ!」blog 記事一覧はこちらを参照下さい。 http://wikis.sun.com/display/yappri/Home

    水曜日 11 28, 2007

    Solaris 8 Branded Zones (Project Etude)の始め方

    Solaris 8 Branded Zones は、SPARC / Solaris 8 環境を Solaris 10 のひとつのコンテナ上で動かす為の技術で P2V (Physical to Virtual)環境が実現できます。

    動作のイメージ図はこちら。 

     

    早速、環境を作ります。Solaris 10 のコンテナを利用されている方、触ったことがある方であれば、簡単に環境を作ることができます。正式名称は Solaris 8 Migration Assistant 1.0 の名称で、パッケージは Sun Download Center からダウンロード可能となってます。
    (評価ライセンスは90日間)

    動作要件を確認すると Solarsi 10 8/07かつ 127111-01パッチが必須ですが、11月中旬現在の推奨パッチクラスタを適用すれば、127111-03 が適用され準備は完了です。

    パッチの適用がうまくいっていれば、Kernel Jumbo Patch を以下の出力で確認できます。

    bash-3.00# uname -a
    SunOS tatsu04 5.10 Generic_127111-03 sun4u sparc SUNW,Sun-Blade-1000
     

    パッケージ的には、以下の3点が付属しているのでマニュアルに従って pkgadd  します。

    bash-3.00# ls
    SUNWs8brandr/  SUNWs8brandu/  SUNWs8p2v/

    bash-3.00# pkgadd -d . SUNWs8brandr
    bash-3.00# pkgadd -d . SUNWs8brandu
    bash-3.00# pkgadd -d . SUNWs8p2v


     

    SUNWs8p2v は、物理マシン(Physical)で動いている Solaris 8 を仮想マシン(Virtual )に変換するためのパッケージでしょうか。

    物理マシンで動作する Solaris 8 を Virtual への移行の際には、flash archive 経由でインストールします。今回は、Migration Assistant に付属の solaris8-image.flar を利用することとします。

    【1】  zone の構成

    bash-3.00# zonecfg -z s8-zone
    zonecfg:s8-zone> create -t SUNWsolaris8
    zonecfg:s8-zone> set zonepath=/export/home/s8-zone
    zonecfg:s8-zone> set autoboot=true
    zonecfg:s8-zone> add net
    zonecfg:s8-zone:net> set address=10.14.16.97
    zonecfg:s8-zone:net> set physical=eri0
    zonecfg:s8-zone:net> end
    (global zone と共有するディレクトリの設定もできます。)
    zonecfg:s8-zone> verify
    (問題なく構成できていれば、メッセージはでません。)
    zonecfg:s8-zone> commit
    zonecfg:s8-zone> exit

    これで構成は終わりです。構成がうまくいっているかどうか(STATUS=configured)を確認します。

    bash-3.00# zoneadm list -cv
      ID NAME          STATUS     PATH                           BRAND    IP
       0 global           running         /                                  native   shared
       - s8-zone        configured    /export/home/s8-zone     solaris8 shared

    【2】  zone に flasharchive から、Solaris 8 イメージをインストール

    bash-3.00# zoneadm -z s8-zone install -a /var/tmp/s8_image.flar
    Log File: /var/tmp/s8-zone.install.21207.log
    Source: /net/machinename/s8_image.flar
    Installing: This may take several minutes...
    Postprocessing: This may take a minute...
    Result: Installation completed successfully.
    Log File: /export/home/s8-zone/root/var/log/s8-zone.install.21207.log
        (省略)

    【3】 起動と確認。

    bash-3.00# zoneadm -z s8-zone boot
    (初期起動時はホスト名と聞かれます。)
    bash-3.00# zoneadm list -cv
      ID NAME             STATUS     PATH                           BRAND    IP
       0 global           running    /                              native   shared
       3 s8-zone          running    /export/home/s8-zone           solaris8 shared
    bash-3.00# zlogin -C s8-zone
    [ゾーン 's8-zone' コンソールに接続し���������������]
    bash-2.03# uname -a
    SunOS tatsu07 5.8 Generic_Virtual sun4u sparc SUNW,Sun-Blade-1000

    というような表示を確認できます。

    機能のまとめ

    • このツールを利用すると、Solaris 8 をサポートしていない最新の Sun 製ハードウェア上で Solaris 8 アプリを改修無しでの動作を確認することや、Solaris 8 ゾーンの中で Solaris 8 アプリを利用可能かどうかをGlobal zone から Dtrace を利用して確認可能です。
    • また、Solaris 8 Branded Zone と Global Zone の両Zone から共有可能な ZFS ファイルシステムを構成する事もできます。
    • Migration Assistant の名称通り、既存のSolaris 8 アプリケーションをSolaris 10 へ移行する際の支援ツールです。今後も注目の価値があるかもしれません。

    Reference 

     









     


     




     


     

    金曜日 8 24, 2007

    DTrace のススメ - DTrace でみる mod_perl の裏側

    Solaris 上の Apache Web Server にて、perl で書かれたサイトを運用している 皆様は、perl を CGI としてお使いですか?それとも mod_perl を使用していますか?

    mod_perl 自体は古くからありますので、皆様も既によく知っているかもしれません。 ただ、自分は漠然と mod_perl の方が CGI の場合よりも早いらしいとしか認識して いませんでした。

    そこでちょっと mod_perl について調べてみました。

     "mod_perl gives you a persistent Perl interpreter embedded in your web server.
      This lets you avoid the overhead of starting an external interpreter and
       avoids the penalty of Perl start-up time, giving you super-fast dynamic
       content." by http://perl.apache.org/
    

    どうやら mod_perl は、web server (apache) に持続的に使用出来る Perl インタラプタ を組み込んでしまう事で、CGI の場合 (Perl スクリプトが呼び出されるたびに外部 Perl を実行する) と比べて Perl start-up time の時間を抑制出来るという物の様です。

    という事で実際に呼び出しが抑制されているのかを DTrace を使って簡単に確認 してみました。

    下記 man をみると、外部プログラムの呼び出しには exec() が関わりそうです。

     % man -s 2 exec
     System Calls                                              exec(2)
     
     NAME
          exec, execl, execle, execlp, execv, execve, execvp - execute
                                                               \^\^\^\^\^\^\^\^
          a file
          \^\^\^\^\^\^
    

    そこで今回は、SolarisInternals のサイトに掲載されている exec を追跡する DTrace スクリプト "exec.d" を使って検証してみましょう。

    exec.d in SolarisInternals

     #!/usr/sbin/dtrace -s
     
     #pragma D option quiet
     
     proc:::exec
     {
             self->parent = execname;
     }
     
     proc:::exec-success
     /self->parent != NULL/
     {
             @[self->parent, execname] = count();
             self->parent = NULL;
     }
     
     proc:::exec-failure
     /self->parent != NULL/
     {
             self->parent = NULL;
     }
     
     END
     {
             printf("%-20s %-20s %s\\n", "WHO", "WHAT", "COUNT");
             printa("%-20s %-20s %@d\\n", @);
     }
    

    では、CGI として perl が呼び出される場合を確認してみます。

    まず、exec.d を実行している最中に ab(apache bench) にて、perl で書かれた index.cgi へアクセスさせます。
    ab が終了したら exec.d を "Control + C" で終了させましょう。

     jse8-213% /usr/apache2/bin/ab -n 2000 -c 64 http://localhost/cgi-bin/bench/index.cgi
     ...
     ...
     Server Software:        Apache/2.0.58
     Server Hostname:        localhost
     Server Port:            80
     
     Document Path:          /cgi-bin/bench/index.cgi
     Document Length:        34637 bytes
     
     Concurrency Level:      64
     Time taken for tests:   6.845140 seconds
     Complete requests:      2000
     Failed requests:        0
     Write errors:           0
     Total transferred:      69658374 bytes
     HTML transferred:       69304680 bytes
     Requests per second:    292.18 [#/sec] (mean)
     Time per request:       219.044 [ms] (mean)
     Time per request:       3.423 [ms] (mean, across all concurrent requests)
     Transfer rate:          9937.71 [Kbytes/sec] received
     ...
     ...
     jse8-213%
    
     # ./exec.d
     \^C
     WHO                  WHAT                 COUNT
     zsh                  ab                   1
     httpd                index.cgi            2045
     
     #
    

    dtrace の結果をみると確かに、httpd から index.cgi が多数呼び出されて いるのがわかります。

    では、mod_perl を使用した場合はどうなるでしょうか。

     jse8-213% /usr/apache2/bin/ab -n 2000 -c 64 http://localhost/cgi-bin/bench/index.pl
     ...
     ...
     Server Software:        Apache/2.0.58
     Server Hostname:        localhost
     Server Port:            80
     
     Document Path:          /cgi-bin/bench/index.pl
     Document Length:        34637 bytes
     
     Concurrency Level:      64
     Time taken for tests:   2.683551 seconds
     Complete requests:      2000
     Failed requests:        0
     Write errors:           0
     Total transferred:      69699894 bytes
     HTML transferred:       69354862 bytes
     Requests per second:    745.28 [#/sec] (mean)
     Time per request:       85.874 [ms] (mean)
     Time per request:       1.342 [ms] (mean, across all concurrent requests)
     Transfer rate:          25364.15 [Kbytes/sec] received
     ...
     ...
     jse8-213%
    
     # ./exec.d
     \^C
     WHO                  WHAT                 COUNT
     zsh                  ab                   1
     
     #
    

    今度は確かに zsh から ab が呼び出されていますが、httpd からは、index.pl は呼び出されていない (perl インタラプタを呼び出しているのでは無く、httpd が、index.pl を実行している) 事がわかります。

    mod_perl を使って exec を抑制する事で、スループット(Requests per second) が、292.18 [#/sec] から、745.28 [#/sec] にも上がりましたので、perl で 書かれたサイトを運用している場合は、mod_perl を使用する事はかなりの 効果があるようです。

    また、このように DTrace を使うとアプリケーションの設定変更による動作の 違いが簡単に確認できる様になります。 SolarisInternals のサイトには他にも fork.d 等、多くの有益な dtrace スクリプトが掲載されています。

    是非皆様も SolarisInternals 等を参考に DTrace を効果的に使ってみて下さい。

    About

    Search

    Archives
    « 4月 2014
      
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
       
           
    今日