パソコンのメモリって奥深いなと

いろいろとあって、パソコン向けのメモリ(DDR4とか)の構成について
仕様を見てたんだけど、結構奥深いなと
ちょっと気になったところをいくつか上げてみた

メモリの相性問題

自作PCとかでよくある問題だけど、原因の一つとしては
基板上のメモリの配線レイアウトとの整合性が合わないこと。

あまりマザーボード側を疑うことは少ないだろうけど、
ノウハウがないメーカーとか安いメーカだと
基板設計の問題で相性問題が出やすくなるのかなと思った

あと、温度要因もあったりするので、
memtestで通れば問題ないかというとそうでもないよね…。

DDR4のアクセス速度

DDR SDRAMは2つのDRAMを同時にフェッチして、
2つのデータをバースト転送することで、メモリクロックに対して2倍の転送速度となる。
DDR2, 3はDDRに対して2倍、4倍のバースト長にする(同時に同時にフェッチするDRAMも2倍、4倍)ことで
2倍、4倍の転送速度が実現できる。
(メモリクロックは世代が進んでもほとんど変わりはない。
理由は微細化が進んだぶんが容量に転嫁されてるからとか…)
以下の図を参考にするとわかりやすいです。

[拡大画像]【後藤弘茂のWeekly海外ニュース】 JEDECが「DDR4」とTSVを使う「3DS」メモリ技術の概要を明らかに
http://pc.watch.impress.co.jp/img/pcw/docs/488/696/html/20.jpg.html

問題はDDR4の場合、8倍になるか?という話
実はDDR4の場合は同時にフェッチするDRAMの数はDDR3の場合と変わっておらず、
バンクグループを2つ同時に読むことで8倍の転送速度を実現している。
ただ、このバンクグループが問題になり、一回のフェッチで
異なるグループを読む場合は8倍の転送速度となる。
しかし、同一のグループを読む場合は、性能低下が発生してしまう。
この点が今まで知らなかったし、あまり認知はされていないような気はします。

Posted at : 2016-01-26 22:11:28 / Category : none

海外キャッシングの比較

海外キャッシングの方法として代表的な方法 + Sony Bank Walletでの比較をしてみた。
代表的な方法としては以下のとおり。

  • 両替(Travelex)
  • クレジットカード(楽天, VISA)
  • 国際キャッシュカード(新生銀行)
  • Sony Bank Wallet

使用したシートは以下においておきました。
間違えなどありましたら、ご指摘いただけるとありがたいです。

https://docs.google.com/spreadsheets/d/1Ajvtjo-JnyEUyQSWqPV-cgys2ZtKmaAYk3vqW49QF4A/edit#gid=0

結果はというと以下のような感じ。

  1. Sony Bank Wallet
  2. クレジットカード(ただし、キャッシング金利がかかるため、すぐに繰り上げ返済すること)
  3. 両替
  4. 国際キャッシュカード

クレジットカードは注釈の内容が重要。
キャッシング金利が高いので、明細に載ったらすぐに繰り上げ返済しないとダメ。
両替は意外と悪く無いかも?ただ、お店によるので一概には何とも。お金持ち歩くリスクもあるしね…。

そうなると、Sony Bank Walletが良い、という結論になりそうだけど、実際問題としてどこまで差があるか?

実際に海外でキャッシングしてみると、犯罪防止のためか1度におろせる金額が
決まっていたりして、実はATMの手数料が…という話もある。
また、差がつくと行っても短期の旅行だと言っても1000円程度でしょう。

トータルで見ると、個人的にはSony Bank Walletか割高でも国際キャッシュカードあたりが
一番面倒ごとが少なくて良いのかなと思いますね。

Posted at : 2016-01-17 12:15:44 / Category : money

Sony Bank Walletが面白そう

ソニー銀行が「Sony Bank Wallet」という海外向けの面白い商品を出していた。
気になったのは以下の2点。

  • VISAデビット
  • 外貨預金口座から直接出金できる

海外で現地通貨をおろす場合、クレジットカードを使うようにしている。
ただ、これがいろいろと落とし穴があって、結構気を使うことが多い。

  • クレジットカードのキャッシングにあたるため、金利がついてしまう
    • 金利がつくことは良いんだけど、アレコレ考えるのが面倒…
  • スキミングのリスクがある

VISAデビットであれば、即時決済になるので金利の問題もないし、
スキミングは口座の残高の範囲なので良い。

後は後者の外貨預金口座からの直接出金、
今ちょうど円高進行というのもあって興味が湧いてくる。

他のカードとの比較をしてみようかな。

Posted at : 2016-01-17 11:53:23 / Category : money

Dropboxに写真をおいておくと便利

外出先とかで親戚に「あのときの写真がほしい!」とか言われたとき
Dropboxの公開リンクを送ってあげればすぐに見られる。これが結構便利だった

Posted at : 2016-01-16 16:05:21 / Category : none

rbenvを入れてからcronに失敗する

何故か、rbenvを入れてからcronに登録したrubyの処理が失敗する…。
結論から言うと、rbenv自体は直接関係なかった。
PATHの設定を変えた際にbashのパス解決ができなくなっただけだと思う。

エラーとしては以下のものが出ていた。文字化けして意味がわからず…。

/usr/bin/env: bash: ã 㠮よ㠆㠪ファイルやディレクトリ㠯㠂り㠾㠛ん

localeを英語にすればよかったのだろうけど、推測で以下のエラーだと仮定。

/usr/bin/env bash: No such file or directory

export PATH=""で環境変数をまっさらにしてから、
cronに設定している環境変数を一つ一つ追加して確認。
すると、実は/binと/sbinのパスが抜けている事がわかった。

なぜこのタイミングで問題が露呈したのかはわからないけど、
おそらく、bash_profileのPATHにrbenvを追加したことが影響してるのかな…?
とりあえず解決したので深追いはしないことにした。

Posted at : 2016-01-06 13:42:40 / Category : none

Rubyのsleepが引数の時間より数倍かかってしまう

複数スレッドで同時にsleepを行ったとき、
sleepの引数の時間より数倍の時間がかかってしまう事があった。
いろいろと試行錯誤はしてみたけど、イマイチ理由はわからず…。
とりあえずメモだけしておく。

背景

今回のプログラムはとあるネットワーク上のサーバ、以下の4つのスレッドが存在しています。

  • 接続待機スレッド(accpet thread)
  • データ送信スレッド(send thread)
  • データ受信スレッド(recv thread)
  • メッセージルーティングスレッド(msg thread)

各スレッドはポーリングをしていて、それ以外の時間はコンテキストスイッチのために
定期的にsleepを入れるようにしています。
今回の問題は、この"定期的なsleep"です。

ruby-profで各スレッドの処理負荷を計測すると以下のとおりとなります。

接続待機スレッド(accpet thread)

 1Measure Mode: wall_time
 2Thread ID: 70010781717220
 3Fiber ID: 70010781716680
 4Total: 6.980623
 5Sort by: self_time
 6
 7 %self      total      self      wait     child     calls  name
 8 45.84      6.876     3.200     3.677     0.000       52   Kernel#sleep
 9  1.44      0.101     0.101     0.000     0.000        1   TCPServer#initialize
10  0.01      0.001     0.001     0.000     0.000       51   <Class::IO>#select

データ送信スレッド(send thread)

 1Measure Mode: wall_time
 2Thread ID: 70010781712700
 3Fiber ID: 70010781619120
 4Total: 5.175139
 5Sort by: self_time
 6
 7 %self      total      self      wait     child     calls  name
 8  1.94      5.174     0.100     5.073     0.000       52   Kernel#sleep
 9  0.01      0.001     0.001     0.000     0.000       17   IO#write
10  0.01      5.175     0.000     0.000     5.175        1   NodeSendTask#run

データ受信スレッド(recv thread)

 1Measure Mode: wall_time
 2Thread ID: 70010781622000
 3Fiber ID: 70010781619360
 4Total: 5.175198
 5Sort by: self_time
 6
 7 %self      total      self      wait     child     calls  name
 8 68.86      5.167     3.564     1.604     0.000       52   Kernel#sleep
 9  0.02      0.001     0.001     0.000     0.000       69   <Class::IO>#select
10  0.02      5.175     0.001     0.000     5.174        1   NodeRecvTask#run

メッセージルーティングスレッド(msg thread)

 1Measure Mode: wall_time
 2Thread ID: 70010781621200
 3Fiber ID: 70010781619380
 4Total: 5.175243
 5Sort by: self_time
 6
 7 %self      total      self      wait     child     calls  name
 8  0.02      5.173     0.001     5.172     0.000       52   Kernel#sleep
 9  0.01      5.175     0.000     0.000     5.175        1   MessageRouter#run
10  0.00      0.000     0.000     0.000     0.000       16   JSON::Ext::Generator::State#generate

問題点

今回sleepの引数は全て1msに設定しています。

上記のデータのうち、accept threadとrecv threadでsleepの回数に対する
時間がaccpetの場合60倍、recvの場合は70倍近くかかってしまっています。
1msのはずが約60ms。。。

おそらく、コンテキストスイッチの問題で遅くなっているのかなぁとは思っていますが、
それにしても時間がかかりすぎていてあまり納得はできていません。
もう少し調査方法を変えて見ながら探ってみたほうが良いのかも?

Posted at : 2016-01-05 14:40:26 / Category : none

年末年始はセブ島へ

セブ島へ年末年始は行ってきました。
寒いのが嫌いなので、暖かいところで過ごせたのは良かった。
日本帰ってきたら「寒い…」とばかり言っています。

セブ島は主に2箇所、日本人がリゾートで行くマクタン島と
あまり一般的ではない(と思っている)バンタヤン島に行ってきました。

前者はMaribago Bluewaterというところに泊まって、年越しもここで迎えました。
プライベートビーチがあることが売りの一つだったりするんですが、
水質が綺麗ではなく非常に良くなかったです…。
一方でプールで過ごせば、リゾート気分が味わえるので良いかなと思います。

いずれにしても、繁忙期にわざわざ行くようなところではなく、
閑散期のちょっと安めの時期を狙っていくのが良さそう…。

後者のバンタヤン島、これが非常に良かった。
まず、日本人含め全体的に観光客が少ない。
国内でのツアーの取り扱いがないし、ローカルバスに乗ることになるので
少し難易度が高いことが理由だと思う。
セブシティから路線バスに3時間のって、さらにフェリーで1時間近くかかる。
観光客が少ない分、ホテルやその島全体がのほほんとした空間になっていて、
普段の疲れを癒やすのには本当に良かった。

また、海の水もこちらは綺麗。海を楽しむための場所、という感じがして良かった。
今回泊まったホテルはMarlins Beach Resortというところ。
海側の部屋にしたら、テラスからすぐ海に出ることができるし、
そのままテラスで海を見ながらくつろぐこともできるので最高でした。
お値段的にも1泊2人で1万ぐらいなので、Maribagoとかに比べるとそりゃもう…。
ただ、お風呂とかトイレとかはダメだったかな。。。

という感じで、ホテル事情を中心に書いてみました。
まぁMarbagoが良くなかったという話ではなく
バンタヤン島が最高でした、っていう話でした(笑)
(サービスとか含めると、Maribagoは日本人が行きやすいと思います)

Posted at : 2016-01-04 23:57:59 / Category : none