サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
iPhone 16
nishidy.hatenablog.com
OS X Yosemite (10.10.5) でC(GNU99)でpthreadを用いたマルチスレッドプログラムを書いていて、なかなかerrorが取れなかったときに以下ツイートを起点にした議論を見て、ValgrindのHelgrind toolが使えそうということで使ってみた。 pthread_create に渡した callback から return NULL する以降のタイミングで時々にクラッシュするって何だろう。ローカル変数のバッファオーバーランかなぁ— Kazuho Oku (@kazuho) January 4, 2016 ValgrindはDarwinにも対応しており、ソースからコンパイルすればインストールできる。使い方は、コンパイル時に-gでソースレベルのデバッグ情報を付与し、valgrind --tool=helgrind ./a.outと実行するだけで良い。 ==25
Kubernetesとそれに関連するミドルウェア Kubernetesはdockerなどのコンテナのスケジューリングやロードバランスを担うクラスタリング制御用運用管理ツール。様々なミドルウェアを組み合わせて使うモジュラー型のアーキテクチャになっている。 etcdは分散KVSで、Zookeeperと同じようなもの。コンセンサスアルゴリズムによる合意形成の手段を実装することにより、分散環境におけるKVSのスケーラビリティとリダンダンシーを実現している。 etcdは、Linuxディストリビューションの一つであるCoreOSのアプリケーションとして提供されているが、今回はCentOS上で使用している。 flannelはネットワーク管理用ツールで、VXLANなどのオーバーレイのエンドポイントを作る。etcdとflannelが協調してクラスタ内のネットワークを形成する役目を持つ。 Kubernetes
ext2 正常にアンマウントが実行されなかった場合には、パーティション全体のメタデータと実データの整合性をfsckによって確認する必要がある ブロック構造 - ブロックサイズは1KB,2KB,4KBのいずれか スーパーブロックには全体のi-node数など、グループデスクリプタにはそのブロックグループのi-node数など、i-nodeにはファイルのメタデータとデータブロックのアドレスなど、が記録されている スーパーブロックはバックアップされており、mkfs.ext2 -nでバックアップされたブロックを確認することができ、mkfs.ext2 -bでそのブロックを指定することで復旧できる 間接ブロック参照 - ext2のi-nodeにはデータが保存されているブロック番号を格納するサイズ15のテーブルがあり、そのうち#0〜#11は直接ブロック参照(ブロック番号を格納する)、#12は1段間接ブロック
Linuxで扱う様々な種類や単位のメモリについてまとめておく。また、メモリというリソースに関する制御や管理について考察する。 ulimit $ ulimit -a | egrep "memory|stack" max locked memory (kbytes, -l) 64 max memory size (kbytes, -m) unlimited stack size (kbytes, -s) 8192 virtual memory (kbytes, -v) unlimited max locked memory - mlockシステムコールを使うことにより、メモリの内容がディスク上にスワップされないようにする(=Lockする)ことができる。その最大容量。 max memory size - 静的(スタック領域)や動的(ヒープ領域)に確保するメモリの最大容量。 virtual mem
仮想マシン=ゲスト=ゲストOS 仮想マシンモニタ=VMM=ハイパーバイザー 仮想化コンセプト 仮想マシンモニタ=VMM(Virtual Machine Monitor)は、自身の子プロセスとして仮想マシンを実行し、ユーザモードでは実行できない命令を仮想マシンが発行したときは、CPUで例外が発生するため、それをVMMが補足(trap)*1して、仮想マシンが実行すべき命令をVMMが実行すれば良い(trap-and-emulate)。 そのためには、VMMは特権モードで実行し、仮想マシンを特権モードより低いモード(かつ、ユーザモードより高いモード)で実行すれば良い。 x86における仮想化 リングのコンセプトには0〜3の4段階があり、リング0はハードウェアにアクセスする特権命令を実行する。つまり、カーネルモードはリング0で実行し、ユーザモードはリング3で実行する。なお、1,2は使用しない。 x86
ファームウェア(BIOS or UEFI*1)が マザーボードのROMからメモリにロードされて実行開始し、ハードウェアをスキャン(POST - Power-On Self Test というハードウェアの自己診断を)する [BIOSの場合] プライマリHDDのMBR(先頭のセクタ(512バイト))を見る [UEFIの場合] プライマリHDDのGPTヘッダ(LBA1 or 最終セクタ)を見る MBR/GPTにインストールされているブートローダをメモリにロードして制御を移す GPTとMBRはどのように違うのか? - かーねる・う゛いえむにっき BIOS/UEFI/MBR/GPT MBRでは232≒2.2TBまでのディスクしか扱えない GPTでは264≒8.5ZBまでのディスクを扱うことができる BIOSはIntel CPUのリアルモード(16bitモード)でないと起動できないため、1MBまでのメ
Pythonによるデータ分析入門 ―NumPy、pandasを使ったデータ処理 作者: Wes McKinney,小林儀匡,鈴木宏尚,瀬戸山雅人,滝口開資,野上大介出版社/メーカー: オライリージャパン発売日: 2013/12/26メディア: 大型本この商品を含むブログ (12件) を見る PandasのDataFrameは行列形式のデータ構造で、indexやcolumnにkeyが指定できたり*1、indexやcolumnをまとめたものにnameを付けられたりする。DataFrameに対する集計関数や条件選択などはある程度直感的に操作できるが、Python標準のデータ構造から階層的なindexを持ったDataFrameを作成する場合や、階層的なindexを持ったDataFrameをどのように自由に変換できるのか、などが分かりづらかったので色々試してみた。 Nested dictを元にDat
STP:スパニングツリープロトコル STP=802.1dは、ポートをブロックしてループフリーを実現するため、リンクを冗長化できない MST=802.1sは、VLANの集合ごとにスパニングツリーを作る*1ため、リンクの活用率は高くなるが、経路を冗長化することはできない スパニングツリーは、到達性は保証するが、最短経路を保証しない ポートの状態遷移 STPでは、フォワーディング状態に遷移するまでに30秒(直接リンクの障害時)または50秒(間接リンクの障害時)かかる RSTP=802.1wでは、エッジポート(端末が接続されているポート)の設定を行えば、転送開始するまでに1秒とかからない Q-in-Q Q-in-Q=802.1adは、VLANを表すVIDを持つ802.1qヘッダを二重にすることで、VLAN範囲が4095から4095×4095まで拡張される ユーザのMacアドレスを全てのスイッチで学
読み込んだデータをシリアライズしておきたい場合、pickleを使えば任意のクラスのオブジェクトを扱える。ファイルを開いて、dumpで書き出し、loadで読み出しを行えば良い。しかし、ある構造を持つクラスのオブジェクトをpickleでシリアライズしようとすると、以下のようにエラーとなる。 $ python --version Python 3.4.3 $ python pickle_test.py Traceback (most recent call last): File "pickle_test.py", line 15, in <module> pickle.dump(klass,f) _pickle.PicklingError: Can't pickle <function Klass.__init__.<locals>.<lambda> at 0x107728ae8>: attr
MySQLとNoSQL MySQLでは、マスタ:スレーブを1:N構成とすることで、参照系クエリを複数のスレーブに振り分けることができ、スレーブを増やすことによって参照系クエリのスケールアウトが可能。 更新系クエリは、データを一意に保つためマスタ1台で対応することになるが、スレーブと同期する手前、マスタだけを極端にスケールアップすることは避けた方が良い。スレーブ側のリレーログの適用が追いつかなくなる。 MySQL 5.1からはパーティショニング機能によって、RANGEやHASHなどによってパーティショニングされた表を、別々の物理ドライブにストライプできるため、複数のパーティションが同時にアクセスされる場合の物理I/Oの競合を抑えることが可能。*1 一方、CassandraなどのNoSQLでは、データベースの持つシャーディング機能によって、書き込み領域を持つノードを物理的に分散させることができ
メモリにデータを格納する際、通常はアラインメントに沿って展開される。ワード単位以上のデータを格納する場合、その開始アドレスがワード単位の整数倍になっていないと、メモリフェッチが余分に発生してスループットが落ちるか、アラインメント違反によってエラーが発生するか、アクセスしたデータが異常となり期待していない挙動を引き起こす。 x86では、アラインメントに沿っていないアドレスにアクセスする場合、メモリフェッチが余分に発生するが、アラインメント違反は起こらない。ARM/Linuxでは、アラインメント違反が発生するが、/proc/cpu/alignmentに設定されている値に従って結果として発生する挙動が変わる。 0 例外を無視 1 例外をdmesgに出力 2 例外を捕捉して正常にアクセスする 3 1+2 4 例外を受理してバスエラーを起こす 5 1+4 c.f. Linux Kernel Docu
ConsulはDNSインターフェースを通してノードとサービスの死活監視の状況を提供することができる e.g. ロードバランスのためラウンドロビンしているノード群を問い合わせ結果として提供するとき、問い合わせ結果からダウンしたノード・サービスを動的に外す DNSをどのようにインターフェースとして利用しているか、を見ていく過程で、DNSについて学ぶことができる www.consul.io localhostでConsulサーバが動いていて、ノードルックアップを行う場合、例えばfoo.node.consulの名前解決を行う際は$ dig @127.0.0.1 -p 8600 foo.node.consul ANYのように行う DNSサフィックスがOSの設定によって自動的に付加されることを防ぐためにFQDNはピリオドで終端するので、DNSサフィックスが不要な場合、digで問い合わせする際にピリオド
ハイパフォーマンスブラウザネットワーキング読了 - RAMEN is the best food. HTTP1.1 では、持続的接続(Connection: Keep-Alive)により、一つのドメインに配置された複数のコンテンツをダウンロードする場合、一つのTCPコネクションを再利用して次々にHTTPリクエストを送信することができる(HTTPパイプライン)。また、一つのドメインに対して、6つの接続を並行して利用することができる。 HTTP1.1では、持続的接続によってTCPコネクションを再利用するが、HoL(head-of-line)ブロッキングの問題の影響を受ける。また、HTTP1.1の仕様上の制限*1により、あるHTTPリクエストの処理に時間がかかってしまった場合、その後のHTTPリクエストの処理が終わっているにもかかわらず、先のHTTPリクエストの処理を待つことになる*2。また、並
このページを最初にブックマークしてみませんか?
『nishidy.hatenablog.com』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く