メインコンテンツへスキップ

技術

スレッド間でカウンタを共有する

C言語では、複数のスレッドが共有する変数を単純にインクリメントすると期待通りの結果になりません。あるいは簡単なテストでうまく動いたとしても、高負荷になるとおかしな結果を返します。この手のバグは再現条件を揃えること自体が難しいので、はじめから安全なコードを書けるように挙動を知っておくことが大事です。

Linuxにおけるpfifo_fastのTOSによる挙動

Linuxのqdisc(Queueing DISCipline:キューイング規則)でデフォルトで使用されるpfifi_fastを調べていたら、IPv4ヘッダのTOSフィールドに設定されている値によって挙動が変わるという仕様でした。そこでTOSの値を変えながら、色々と測定してみました。

MPTCPのパケットを眺めてみる(その2)

前回は、実際に送信されるMPTCPのMP_CAPABLEのパケットを眺めてみました。 今回は、ADD_ADDR、DSS、DSS FIN、MP_JOINのフォーマットと実際のパケットを見比べてみます。 MPTCPのオプションは、前回の内容を参考にしてください。

MPTCPのパケットを眺めてみる(その1)

前回は、 RFC 6824 で定義されているMPTCPについて紹介しました。 今回は、TCPのオプション領域でやり取りされるMPTCPのシグナリングパケットを簡単に説明し、RFCで定義されているオプションのフォーマットとMPTCPのMP_CAPABLEが付いた実際のパケットを見比べてみようと思います。

Multipath TCP(MPTCP)

Multipath TCP(MPTCP)は、複数のIPアドレス/インタフェースを同時に使用して通信することで、通信のスループットを向上させるという機能です。また、あるIPアドレス/インタフェースが使用できない状態になっても別のIPアドレス/インタフェースを使うことで、通信を継続できるという耐障害性も兼ね備えています。 そんな夢のようなMPTCPに触れる機会があったので、簡単にご紹介します。

SHAの仕様と実装比較(SHA-1編)

とあるソースコードを追っていたらsha_init()やsha_transform()をコールしている部分に遭遇し、飛んでみたら謎すぎた(実際は全く謎ではない)ので、SHA(Secure Hash Algorithm)について色々と調べてみました。 その調査の結果を、備忘録として残しておくための記事です。 長くなることを避けるため、あくまでSHAの仕様とその実装を見比べる程度にします。 今回はSHA-1編です。

Linux上でネットワークの帯域制限と遅延を設定する

無線通信をするアプリケーションのテストのために、帯域や遅延といった、ネットワークの状態をシミュレートしたいことがあると思います。 本記事では、Linux上で、ネットワークインタフェースに対する帯域制限と遅延の設定方法を説明します。

2進数リテラルと2進数ダンプ

C++14では2進数リテラルが規格に加わりました。GCCやClangではCでも使えます。というか、もともとコンパイラの独自拡張機能として実装済みだったものが規格になったみたいです。使い方はこんな感じ。

/usr は何の略か

Unix系OSのルートディレクトリ直下にある “/usr” はなんの略なのか。 巷の意見はおおよそこんな感じです。 「もちろん “USeR” の略でしょ。」 「あまいな。 “User Services and Routines” の略だ。」 「その “User SR” の略だっていうソースはあるの?」 どうもはっきりしません。そこで調べ始めたら、思いのほか深入りしてしまったので、今回調べたことを書いておきます。

Javaのprotectedの意味

Javaのアクセス修飾子protectedで少しハマったので、調べた内容をメモしておきます。

JNIでenumを扱う

Java 5.0から導入されたJavaのenumですが、JNIを経由したnativeメソッド内ではどのように扱えばよいのでしょうか?これについては、JNI仕様にも明記されていないようです。必要があったので、ちょっと調べてみました。