いろいろとあって、パソコン向けのメモリ(DDR4とか)の構成について
仕様を見てたんだけど、結構奥深いなと
ちょっと気になったところをいくつか上げてみた
自作PCとかでよくある問題だけど、原因の一つとしては
基板上のメモリの配線レイアウトとの整合性が合わないこと。
あまりマザーボード側を疑うことは少ないだろうけど、
ノウハウがないメーカーとか安いメーカだと
基板設計の問題で相性問題が出やすくなるのかなと思った
あと、温度要因もあったりするので、
memtestで通れば問題ないかというとそうでもないよね…。
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倍の転送速度となる。
しかし、同一のグループを読む場合は、性能低下が発生してしまう。
この点が今まで知らなかったし、あまり認知はされていないような気はします。
海外キャッシングの方法として代表的な方法 + Sony Bank Walletでの比較をしてみた。
代表的な方法としては以下のとおり。
使用したシートは以下においておきました。
間違えなどありましたら、ご指摘いただけるとありがたいです。
https://docs.google.com/spreadsheets/d/1Ajvtjo-JnyEUyQSWqPV-cgys2ZtKmaAYk3vqW49QF4A/edit#gid=0
結果はというと以下のような感じ。
クレジットカードは注釈の内容が重要。
キャッシング金利が高いので、明細に載ったらすぐに繰り上げ返済しないとダメ。
両替は意外と悪く無いかも?ただ、お店によるので一概には何とも。お金持ち歩くリスクもあるしね…。
そうなると、Sony Bank Walletが良い、という結論になりそうだけど、実際問題としてどこまで差があるか?
実際に海外でキャッシングしてみると、犯罪防止のためか1度におろせる金額が
決まっていたりして、実はATMの手数料が…という話もある。
また、差がつくと行っても短期の旅行だと言っても1000円程度でしょう。
トータルで見ると、個人的にはSony Bank Walletか割高でも国際キャッシュカードあたりが
一番面倒ごとが少なくて良いのかなと思いますね。
ソニー銀行が「Sony Bank Wallet」という海外向けの面白い商品を出していた。
気になったのは以下の2点。
海外で現地通貨をおろす場合、クレジットカードを使うようにしている。
ただ、これがいろいろと落とし穴があって、結構気を使うことが多い。
VISAデビットであれば、即時決済になるので金利の問題もないし、
スキミングは口座の残高の範囲なので良い。
後は後者の外貨預金口座からの直接出金、
今ちょうど円高進行というのもあって興味が湧いてくる。
他のカードとの比較をしてみようかな。
外出先とかで親戚に「あのときの写真がほしい!」とか言われたとき
Dropboxの公開リンクを送ってあげればすぐに見られる。これが結構便利だった
何故か、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を追加したことが影響してるのかな…?
とりあえず解決したので深追いはしないことにした。
複数スレッドで同時にsleepを行ったとき、
sleepの引数の時間より数倍の時間がかかってしまう事があった。
いろいろと試行錯誤はしてみたけど、イマイチ理由はわからず…。
とりあえずメモだけしておく。
今回のプログラムはとあるネットワーク上のサーバ、以下の4つのスレッドが存在しています。
各スレッドはポーリングをしていて、それ以外の時間はコンテキストスイッチのために
定期的にsleepを入れるようにしています。
今回の問題は、この"定期的なsleep"です。
ruby-profで各スレッドの処理負荷を計測すると以下のとおりとなります。
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
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
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。。。
おそらく、コンテキストスイッチの問題で遅くなっているのかなぁとは思っていますが、
それにしても時間がかかりすぎていてあまり納得はできていません。
もう少し調査方法を変えて見ながら探ってみたほうが良いのかも?
セブ島へ年末年始は行ってきました。
寒いのが嫌いなので、暖かいところで過ごせたのは良かった。
日本帰ってきたら「寒い…」とばかり言っています。
セブ島は主に2箇所、日本人がリゾートで行くマクタン島と
あまり一般的ではない(と思っている)バンタヤン島に行ってきました。
前者はMaribago Bluewaterというところに泊まって、年越しもここで迎えました。
プライベートビーチがあることが売りの一つだったりするんですが、
水質が綺麗ではなく非常に良くなかったです…。
一方でプールで過ごせば、リゾート気分が味わえるので良いかなと思います。
いずれにしても、繁忙期にわざわざ行くようなところではなく、
閑散期のちょっと安めの時期を狙っていくのが良さそう…。
後者のバンタヤン島、これが非常に良かった。
まず、日本人含め全体的に観光客が少ない。
国内でのツアーの取り扱いがないし、ローカルバスに乗ることになるので
少し難易度が高いことが理由だと思う。
セブシティから路線バスに3時間のって、さらにフェリーで1時間近くかかる。
観光客が少ない分、ホテルやその島全体がのほほんとした空間になっていて、
普段の疲れを癒やすのには本当に良かった。
また、海の水もこちらは綺麗。海を楽しむための場所、という感じがして良かった。
今回泊まったホテルはMarlins Beach Resortというところ。
海側の部屋にしたら、テラスからすぐ海に出ることができるし、
そのままテラスで海を見ながらくつろぐこともできるので最高でした。
お値段的にも1泊2人で1万ぐらいなので、Maribagoとかに比べるとそりゃもう…。
ただ、お風呂とかトイレとかはダメだったかな。。。
という感じで、ホテル事情を中心に書いてみました。
まぁMarbagoが良くなかったという話ではなく
バンタヤン島が最高でした、っていう話でした(笑)
(サービスとか含めると、Maribagoは日本人が行きやすいと思います)