C言語では、複数のスレッドが共有する変数を単純にインクリメントすると期待通りの結果になりません。あるいは簡単なテストでうまく動いたとしても、高負荷になるとおかしな結果を返します。この手のバグは再現条件を揃えること自体が難しいので、はじめから安全なコードを書けるように挙動を知っておくことが大事です。
Linuxのqdisc(Queueing DISCipline:キューイング規則)でデフォルトで使用されるpfifi_fastを調べていたら、IPv4ヘッダのTOSフィールドに設定されている値によって挙動が変わるという仕様でした。そこでTOSの値を変えながら、色々と測定してみました。
前回は、実際に送信されるMPTCPのMP_CAPABLEのパケットを眺めてみました。
今回は、ADD_ADDR、DSS、DSS FIN、MP_JOINのフォーマットと実際のパケットを見比べてみます。
MPTCPのオプションは、前回の内容を参考にしてください。
前回は、 RFC 6824 で定義されているMPTCPについて紹介しました。 今回は、TCPのオプション領域でやり取りされるMPTCPのシグナリングパケットを簡単に説明し、RFCで定義されているオプションのフォーマットとMPTCPのMP_CAPABLEが付いた実際のパケットを見比べてみようと思います。
Multipath TCP(MPTCP)は、複数のIPアドレス/インタフェースを同時に使用して通信することで、通信のスループットを向上させるという機能です。また、あるIPアドレス/インタフェースが使用できない状態になっても別のIPアドレス/インタフェースを使うことで、通信を継続できるという耐障害性も兼ね備えています。
そんな夢のようなMPTCPに触れる機会があったので、簡単にご紹介します。
最近Go言語でのシステム開発を行うことがあったのですが、ANYアドレスを使ったTCP待受でハマった挙動があったのでメモしておきます。
元々は予定していなかったSHA関連ネタですが、折角なので残しておきます。
前々回はSHA-1、 前回はSHA-256の仕様と実装について比較したので、今回はSHA-512について比較してみようと思います。
前回、SHA-1の仕様と実装について比較したので、今回はSHA-256について比較してみようと思います。
とあるソースコードを追っていたらsha_init()やsha_transform()をコールしている部分に遭遇し、飛んでみたら謎すぎた(実際は全く謎ではない)ので、SHA(Secure Hash Algorithm)について色々と調べてみました。
その調査の結果を、備忘録として残しておくための記事です。 長くなることを避けるため、あくまでSHAの仕様とその実装を見比べる程度にします。
今回はSHA-1編です。
無線通信をするアプリケーションのテストのために、帯域や遅延といった、ネットワークの状態をシミュレートしたいことがあると思います。
本記事では、Linux上で、ネットワークインタフェースに対する帯域制限と遅延の設定方法を説明します。
TCP通信の状態を監視していたところ、スロースタート閾値の初期値が、カーネル内で定義されている初期値と異なっていることがありました。調査したところ、Linuxに実装されているtcp_metricsが原因でした。本記事では、tcp_metricsの無効化方法について説明します。
C++14では2進数リテラルが規格に加わりました。GCCやClangではCでも使えます。というか、もともとコンパイラの独自拡張機能として実装済みだったものが規格になったみたいです。使い方はこんな感じ。
今日はコンパイルの最適化オプションが単純なループと整数演算をどのくらい高速化できるかを見てみます。
Unix系OSのルートディレクトリ直下にある “/usr” はなんの略なのか。 巷の意見はおおよそこんな感じです。
「もちろん “USeR” の略でしょ。」 「あまいな。 “User Services and Routines” の略だ。」 「その “User SR” の略だっていうソースはあるの?」
どうもはっきりしません。そこで調べ始めたら、思いのほか深入りしてしまったので、今回調べたことを書いておきます。
Javaのアクセス修飾子protectedで少しハマったので、調べた内容をメモしておきます。
JNIを使ってCなどのnativeプロセスからJavaVMを起動し、さらにそのJavaVMからnativeメソッドをコールバックさせる方法です。Webで調べた際に、意外と情報が見つからなかったのでメモ。
Java 5.0から導入されたJavaのenumですが、JNIを経由したnativeメソッド内ではどのように扱えばよいのでしょうか?これについては、JNI仕様にも明記されていないようです。必要があったので、ちょっと調べてみました。