2015年12月23日水曜日

SIM のあるサーバーのクラスの調べ方

この記事は、「セカンドライフ技術系 Advent Calendar 2015」の記事です。

セカンドライフ技術系 Advent Calendar 2015


今回の内容は、扱っている題材自体は“誰得?”って突っ込みがありそうな内容なんですけれど…w、
技術系としては気になるよね?という内容だと思いましたので、記事にしてみました。

実は、下記の記事を書いている際に、気になって調べていた内容を別途まとめたものです^^

天使になりたくて: プライベート SIM の初期費用値下げ、「Grandfathered(適用除外)」SIM の譲渡費用改定が発表されました

概要

セカンドライフの SIM は、リンデンのサーバー上で動いています。
リンデンのサーバーは常に同じスペックでは無くて、時々見直しが行なわれ、その時々の最適なスペックに更新が行われています。
そのサーバーのスペックに応じて、“クラス”という種別があります。

2015 年 12 月 23 日現在、最新のクラスは「クラス 8」です。


サーバーのクラスの情報は、一般のユーザー向けには公開されていません。

これは、SIM を新規購入すると最新のクラスのサーバーが割り当てられて、その後も随時新しいクラスへのアップグレードが自動的に行われていくからです。

Moving away from server Class - Second Life

しかし、昔からある SIM の中には、古いクラスのままのところもあるようです。

プライベート SIM

Class 5344
Class 78205
Class 87791
Class 不明1458

リンデンの SIM

Class 518
Class 71291
Class 85554
Class 不明248

2015年 12 月 20 日現在

New SL Sims in past week - Page 94 - SLUniverse Forums

クラスごとのサーバーのスペックは、下記のようになっているようです。

CPUコア数メモリ最大収容可能 SIM 数
(フルリージョン)
最大収容可能 SIM 数
(ホームステッド)
Class 4Opteron 2702 コア2GB2 SIM-
Class 5Xeon 51484 コア4GB4 SIM16 SIM(1コア 4SIM)
Class 7Dual Quad Xeon8 コア24GB8 SIM32 SIM(1コア 4SIM)
Class 8不明

このため、古い SIM を譲渡してもらう場合などの場合は、サーバーのクラスがどうしても気になってしまうことがあるかもしれません。

そんな時のために、今回は SIM のあるサーバーのクラスを調べる方法をご紹介します^^

Second Life Grid Survey

一番手っ取り早く調べる方法それは、セカンドライフの SIM の情報を集めているサイト「Second Life Grid Survey」で調べることです。

Second Life Grid Survey

サイトの「Region Search」欄に SIM 名を入力して「Search」ボタンを押すと、その SIM の情報が表示されます。

ここでは、リンデンの SIM のひとつである Linden Estate Services SIM を検索してみましょう。


検索結果の中の「Physical visit survey details」の「Server Class」が、サーバーのクラスです。



現在は、801 となっています。

これは、クラス 8 のサーバーであることを表しています。

つまりこの SIM は、2015 年 12 月時点での最新のスペックのサーバー上で動いているということになります。

801 の最初の数字が、クラスの番号です。

クラスの番号の後ろの「01」の部分は、同じクラス内のバージョン違いを表しているそうです。

例:701、702、703

Second Life Grid Survey は、リンデンラボが公開している情報ではありません。
セカンドライフのユーザーの Tyche Shepherd さんが運用しているそうです。
またその情報は不定期に更新されているようですので、最新の状態を表しているとは限りません。
その辺は注意が必要です。

Radegast


テキストベースの軽量ビュアーとして人気の Radegast ビュアーには、SIM の情報を表示する機能が標準で用意されています。

Radegast Metaverse Client · Lightweight client for connecting to Second Life and OpenSim based virtual worlds

Radegast でログイン後、チャットの入力欄に「//siminfo」と入力することで、現在いる SIM の情報をチャット欄に表示することが出来ます。


「CPU class」の部分が、現在の SIM のあるサーバーのクラスの情報です。

これは現時点のリアルタイムのサーバーの情報ですので、Second Life Grid Survey ではまだ取得されていない最新の状態も表示することが出来ます。

libOpenMetaverse

サーバーのクラスの情報は、.NET(C#)用のライブラリ libOpenMetaverse でも取得することも出来ます。

libOpenMetaverse は、セカンドライフビュアー相当の機能を C# のプログラムから利用出来るようにしたライブラリです。

libopenmetaverse - libomv - Developer Wiki

openmetaversefoundation/libopenmetaverse · GitHub

libOpenMetaverse を利用すると、セカンドライフビュアーや Bot などのプログラムを作成する際、セカンドライフのサーバーとの通信などの部分を libOpenMetaverse にお任せすることが出来ます。
ややこしい通信の手続きの処理などを、自分で一から作る必要はありません。

先ほどご紹介した Radegast ビュアーも、libOpenMetaverse を使って作られています。


libOpenMetaverse の NetworkManager クラスの CurrentSim プロパティで、現在の SIM の情報が取得出来ます。
その情報の中の「CPUClass」が、サーバーのクラスの情報です。

CurrentSim Property

では実際に、libOpenMetaverse を使ってサーバーのクラスの情報を取得してみましょう。

using System;
using System.Collections.Generic;
using System.Text;
using OpenMetaverse;

namespace SakuraNoel
{
    //
    // GetServerClass クラス
    //
    class GetServerClass
    {
        // クライアントオブジェクト
        private static GridClient Client;

        static void Main(string[] args)
        {
            // クライアントオブジェクトを作成
             Client = new GridClient();

            // ログを出力しない
            Settings.LOG_LEVEL = Helpers.LogLevel.None;

            // ログイン処理
            if(Client.Network.Login("アカウントの名", "アカウントの姓", "パスワード", "SampleBot", "1.0"))
            {
                // ログインした場合

                // サーバーのクラスを表示
                Console.WriteLine("CPU Class: {0}", Client.Network.CurrentSim.CPUClass);

                // ログアウト
                Client.Network.Logout();
            }
            else
            {
                // ログイン出来なかった場合
                Console.WriteLine("Login Error!: {0}", Client.Network.LoginMessage);
            }
        }
    }
}
GetServerClass.cs

このプログラムでは、サーバーに接続して、接続した SIM のクラスの情報を表示したあと、すぐにログアウトします。
いわゆる“Bot”のような挙動をするプログラムです。

プログラムを実行すると、

CPU Class: 801

といった結果が表示されます。

libOpenMetaverse を使うとこのように、C# から簡単に SIM のクラスの情報が取得出来ます。

リアルタイムにクラスの情報を取得することはもちろん、こういった情報を元に Second Life Grid Survey のようなサービスを作成することも可能です。

C++

libOpenMetaverse でサーバーのクラスが取得出来るのなら、通常のビュアーでも同様の方法で出来るんじゃないの?と思われたかもしれません。

libOpenMetaverse やその他のサードパーティビュアーは、セカンドライフの公式ビュアーのソースを元に作成されています。

公式ビュアーのソースファイルは、オープンソースプロジェクト「Snowstorm」として公開されています。

Project Snowstorm - Second Life Wiki

正式リリースされている公式ビュアーのソースファイルの他に、現在開発中の様々なプロジェクトビュアーのソースファイルも公開されています。
誰でも自由に、その内容を閲覧することが出来ます。

そのソースファイルを見ていくと、公式ビュアー内にも、libOpenMetaverse と同様にサーバーからクラスの情報を取得している部分が見つかります。

indra/newview/llviewerregion.cpp の LLViewerRegion::unpackRegionHandshake() が、その部分です。

lindenlab / viewer-release   / ソース  / indra / newview / llviewerregion.cpp - Bitbucket

ここでは、SIM とのハンドシェイクの際に、接続した SIM 固有の情報を取得しています。
その処理の中で、サーバーのクラスの情報も取得されています。

msg->getS32     ("RegionInfo3", "CPUClassID",  classID);

サーバーのクラスの情報自体は取得されているのですが、公式ビュアーではこの情報はユーザーの目に見える形では提供されていません。
ビュアーにサーバーのクラスの情報を表示する UI を作ってみたいと思われた方は、この辺を元に挑戦してみてください。

また、C++ で自分で直接サーバーのクラスの情報を取得したいという方も、llviewerregion.cpp などの内容は参考になると思います。


いかがだったでしょうか?

サーバーのクラスを調べたいという疑問を調べていくと、ビュアーの仕組みの部分までたどり着いてしまいました。
技術系としては興味深い内容だったのではないでしょうか?

今回は“サーバーのクラスを調べてみたい”というところからでしたけれど、他のことでもこうやって調べていくと、実は意外な解決方法が見つかるかもしれません。

技術系としてはそういう探求も楽しい部分だと思いますので、なにか気になったことが出てきた時は、ぜひいろんな面から調べてみてください^^

このエントリーをはてなブックマークに追加

0 件のコメント:

コメントを投稿