投稿

phpのバイナリをramdiskとhdd上で動かして速度比較してみた

こんにちは、haniokasaiです。比較的精神が落ち着いています。
サーバーで、ramdisk使ってるのですがあまり速くない気がして、そもそもramdiskはファイル読み書き以外にも効果があるのか検証したいと思いました。

チェック環境
Core i7 3770s
ram 16GB(4.1 GB/s)
hdd 300gb(100MB/s)


ハッシュ値計算
まずは、ハッシュ値計算。明らかにcpuしか使わないとは思うのですが試してみました。

<?php
$time_start = microtime(true);
// ここに測定したいPHPの処理を記述
//http://qiita.com/ao_love/items/a2d8b8566d0426195002
$i=1;
while($i <= 10000){
echo hash(sha512, 'hoge hoge');
echo PHP_EOL;
$i++;
}
$time = microtime(true) - $time_start;
echo $time . " seconds\r\n";
?>
ramdisk
2.385381937027 seconds
2.3838350772858 seconds
2.381500005722 seconds
2.385363817215 seconds
2.3823990821838 seconds

hdd
2.386225938797 seconds
2.3824648857117 seconds
2.3904531002045 seconds
2.385146856308 seconds
2.3851881027222 seconds

変わらないですね()

変数に代入+擬似乱数速度

<?php
$time_start = microtime(true);
// ここに測定したいPHPの処理を記述
//http://qiita.com/ao_love/items/a2d8b8566d0426195002
$i=1;
while($i <= 100000){
$a[$i] = mt_rand();
echo $a[$i];
echo PHP_EOL;
$i++;
}
$time = microtime(true) - $time_start;
ech…

PocketMine-MPでマルチスレッド処理をする!Thread/AsyncTask

こんにちは、haniokasaiです。
誰も、PocketMine-MPのマルチスレッドについてまとめた人がいなかったのでまとめてみます。

イントロ
phpで書かれたpocketmineは重いです。それは、保守のかんたんさと引き換えにそうなっているのでしょうが、特にcurlで外部のapiにアクセスをするものを使うときには全体の処理を遅らせてしまうことでしょう。
そもそも、PMMPのbinには、pthreadが同梱されていますが、単純に使うことはどうやら
できないようです。そこでどうしようかなぁと思ってたら、記憶がうろ覚えなのですが、pocketmine\threadを使うと良いと、おぎわらが教えてくれました。彼は私の夢で何故か一度登場したことがあります。
マルチスレッドについては、検索すればいい説明が読めます。


プラグイン例
https://github.com/haniokasai/PocketMine-Thread/

Thread
threadは、返り値の伴わないスレッド処理ができます。ですから、serverlistの情報送信のような一方的な作業に使うことができます。

        $job1 = new thread_ex1("Hello");
        $job1->start();

class thread_ex1 extends Thread
{
    public function _construct($data)
    {
        $this->data = $data;
    }
    public function run()
    {
        echo $this->data;
       Server::getInstance()->getLogger()->notice($this->data);// 動かない、無言だがエラーとなる
    }
}
最初の $job1 = new thread_ex1("Hello");
で、仕事を生成します。
()内には、引き渡したい変数をかけます。
(引き渡し先は、_construct($data)です。この関数の中に $this->data = $data; と定義してあげると、run内で利用できます。)
$job…

libminecraft.soを解析して、パケットとか、いろいろ調べる! #2

イメージ
こんばんは、haniokasaiです。

サーバーホスティングプロジェクトの前段階のプロジェクトに取り組んでいるのですが、最近、それができていないので、別のことをしようと思いました。そこで、パケット解析の手法を書きます。

今回使う、mcpeassemblyanalogyanalyzerの製作者のnewdelion(以後、あーたんと表記)とかなりもめたことがあり、記事が製作できませんでしたが、最近ではすっかり仲良くなり、後ろの穴を使わせてもらう関係となりました(大嘘)彼は残念ながら、ほかにも仲のいい男がいるので、私の片想いでしょうが、、、、 ホモじゃないですよ!!!

冗談はさておき、本題にはいります。

#修正
2017/4/5 片想いの漢字が間違っていると、本人から指摘を受けましたが、片想いであることは間違っていると指摘を受けませんでした

windowsでやります

まず、libminecraftpe.soバイナリからテキストファイルをつくらないといけません。
http://blog.haniokasai.com/2016/11/libminecraftpesowindows.html
以前、書いておきました。これにしたがって、やってください。

次に
https://ci.appveyor.com/project/haniokasai/mcpeassemblyanalogyanalyzer/build/artifacts
にて、ログインをし、PacketSearcherとSpliterを落としてください。
最新版ではありませんが、ここからも落とせます


Spliter

Spliter.zipを解凍し、Spliter.exeを実行してください。
すると、白黒のcuiの画面が出てきます。

上から、

Path:dumpmcpe.txtの保存場所
Output Path:出力されるフォルダ
Output Name:出力されるファイル名
Output Extension:空欄で構わない
と入力してください。


例:
Path:Z:\workdir\mcpelib\test\dumpmcpe.txt
Output Path:Z:\workdir\mcpelib\test\out
Output Name:out_dump
Output Extension:
エンターを押してかなり待ちます。

す…

timingsでどの処理にどのくらいの負荷がかるか調べる! Minecraft PC(Bukkit)/PE(PocketMine,Nukkit)のサーバーで軽量化! 

イメージ
どうもおひさしぶりです。haniokasaiです。
最近は下書きを少し書いては、興味がなくなりの繰り返しでありました。

今回は、Minecraftのサーバーの負荷を減らすために、どのような処理に時間がかかっているのかを分析する方法を紹介します。

BlueLightでやってみます。ほかも大体は同じです
サーバーのコンソールで、

/timings on
を実行します
とします。

コンソール
timings on [17:26:40] [Server thread/INFO]: タイミングをリセット及び有効にしました


普通に(または負荷をかけるように)プレイしてもらい、

/timings paste
をします。

すると 
timings paste [17:45:36] [Server thread/INFO]: タイミングをhttp://paste.ubuntu.com/23792964/にアップロードします [17:45:36] [Server thread/INFO]: 結果は http://timings.haniokasai.com/?url=23792964 で見ることができます

とコンソールに表示されるので、 http://timings.haniokasai.com/~等のリンクをブラウザで見てください。(PocketMineの場合、BlueLight以外、http://timings.云々なんとか.com/を、http://timings.haniokasai.com/に置き換えると日本語で見れるでしょう) すると、、、


このように表示されます! 上二つの項目は、サーバー全体の負荷、下2つはプラグインごとの処理の負荷が見れます。 Eventにイベントの種類が書かれています
このようにして、サーバーの負荷を知ることができれば、プラグインの処理を減らす、あるいはサーバーのスペックを増やす等の対策ができるわけです。

激安でもない海外VPS 1か月740円ちょっとのVPS in 中国 [qcloud]

イメージ
どうも、haniokasaiです。サーバーがほしくなったので、気分を変えて、中国のサーバーを使うことにしました。DDosプロテクションもあります。

リージョンは広州、上海、北京など。

時間払いと月払いが選べます。


回線料金がすごく高い、、、。0にすると外部にアクセスできず、ローカルのみの鯖が立てられます。


DDoSプロテクションつきです!
最新のOSが用意されています。
多くのdockerをはじめとするさまざまなアプリ付きosが選べます。

ディスクは異様に遅いんですけど、cloud blockのせいでしょうか、、、 windows server 2012 datacenterがアクチ済みのものがタダで使えます!
ubuntuも最新....


1個購入。。。
webからvnc的な奴が使えまずが、回線速度を絞りすぎたせいで遅いです。。。



対応言語は中国語と英語
クレジットカードを登録することが本人確認となります。(個人に限る、vプリカでも可能)


C:\Users\hani>ping 182.254.215.132

182.254.215.132 に ping を送信しています 32 バイトのデータ:
182.254.215.132 からの応答: バイト数 =32 時間 =153ms TTL=108
182.254.215.132 からの応答: バイト数 =32 時間 =155ms TTL=108
182.254.215.132 からの応答: バイト数 =32 時間 =160ms TTL=108
182.254.215.132 からの応答: バイト数 =32 時間 =166ms TTL=108

182.254.215.132 の ping 統計:
    パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)、
ラウンド トリップの概算時間 (ミリ秒):
    最小 = 153ms、最大 = 166ms、平均 = 158ms

C:\Users\hani>

ロサンゼルスと同じ成績()



htek@VM-93-218-ubuntu:~$ dd if=/dev/zero of=test bs=64k count=16k conv=fdatasync16384+0 records in
16384+0 records out
1073741824 …

NukkitプラグインをKotlinで書く!

イメージ
こんばんは、haniokasaiです。
前々から、groovyかkotlinかscalaをやりたかったのですが、Kotlinをやってみることにしました。

KotolinとはJVMなどで動く言語で、javaの代替えとして使用できるものです。
Javaに比べて、安全なコードを簡潔に書くことができます。


必要なもの
・少しはNukkitでプラグインが作れる
・intellij idea



1.プロジェクトを作成します。

2.gradleタブを選び、javaとkotlinをチェックを入れ、next



3.上から、
my.test.plugin TutorialPlugin 1.0-SNAPSHOT
と入力してください。
すべての箱にチェックを入れ、

保存先を決めます。

build.gradleを開いて

この内容をコピペしてください。 https://github.com/haniokasai/Nukkit-KotlinPlugin/blob/master/build.gradle

rebuildプロジェクトをします。

すると、こんな感じに。

そして、resourcesフォルダにplugin.ymlを追加します。 https://github.com/haniokasai/Nukkit-KotlinPlugin/blob/master/src/main/resources/plugin.yml

そうしたら、kotlinフォルダの上で右クリックして、new からフォルダ作成で my.test.plugin.tutorialplugin を作ってください。


そのフォルダの上で右クリックして、

Mainというファイルを作成し、

[MCPE/MCPEの開発を楽にする!]プラグインを自動リリース/テストしよう! #1 CIとは何ぞや?

どうも、はにおかさいです。多くのMCPE/MCPC開発者さんが、プラグイン等を手動でビルドしていると思いますが、それをCIに自動でやらせることができます。そこで、CIの使い方について解説したいと思います。

そもそもCIって何ぞや?
CIとは、continuous integrationの略、日本語にすると継続的インテグレーションということです。ビルドやテストを自動的にやってくれるものです。
日本のminecraft開発界ではあまり普及してないように感じます。あったほうが便利ですが知らない方や使いこなせない方が多いようです。

どのようなCIがあるの?
ciは星の数ほどあります。選りすぐりのciをご紹介します。

CircleCI
DockerベースのCI。GoやjavaやPHPやNode.jsが使えます。成果物のダウンロードができます。プライベートリポジトリも無料でビルドできます。ただし、ビルド速度は遅め。BlueLightでのCIの一つとして採用しています。エラー表示が見やすいのでエラーチェックに使っています。

Appveyor
C#のビルドができるCIです。速度も速いですし、非常に使いやすい。MiNETでの開発に使っています。成果物のダウンロードができます。

Jenkins
自前でサーバーをインストールして使うタイプのciです。スペックも自由自在ですし、設定も色々できますが、運用するにはlinuxの知識が必要です。成果物の公開も自由にできますし、mavenリポジトリも構築できるので、色々なプロジェクトで使っています。

Poggit私の解説
これは、PocketMineのプラグインビルドに特化したものです。プラグインの配布を全自動でできますが、エラーの分析には使い物になりません。

GitlabCI
プライベートリポジトリも1つあたり10GB、GitLFSも無料で使えます。それのCIです。あまり速度は速くなく、成果物のダウンロードもそこまでいいとは思いませんがプライベートリポジトリは美味しいです。

まとめ
少しにはなりますが、CIを紹介しました。自分は 成果物をダウンロードできるか 簡単にビルドできるか 自分のメンテナンスはめんどくさくないか で選んでいます。
使えば自分の作業が減ることがわかるでしょう。機械ができることは機械にさせる、これが大切だと思います。ぜひCIのある生活をはじめ…