タグ

ブックマーク / ymmt.hatenablog.com (4)

  • golang.org/x/crypto/ssh で固まらないようにする - 誰かの役に立てばいいブログ

    最近 CKE というベアメタル向けの Kubernetes 管理ツールを作っています。 ブートストラップツールではなく自律的・継続的にクラスタの構成を修正していくツールで、以下が特徴です。 ネットワークプラグイン非依存 HA 対応 CKE 自体の高可用性 今日は CKE の紹介が目的ではないのでこのあたりにします。 題は、CKE が内部で使っている golang.org/x/crypto/ssh というライブラリが無期限に ブロックしてしまう問題があったので、どう対応したかです。 問題 以下のようなスタックトレースで動作が停止するケースが試験中に何度か発生しました。 goroutine 2153 [chan receive, 4 minutes]: golang.org/x/crypto/ssh.(*mux).openChannel(0xc000105730, 0x13a0ec2, 0x

    golang.org/x/crypto/ssh で固まらないようにする - 誰かの役に立てばいいブログ
  • NVMe ストレージの揮発性内部キャッシュ - 誰かの役に立てばいいブログ

    TL;DR HDD 同様、NVMe ストレージも nobarrier するなら内部キャッシュを無効化したほうがいいケースがあります。 分かる人向けに端的に書くと、NVMe 仕様には volatile write cache の有無と、有効化/無効化切り替え、および有効な場合にデータが消失するケースが明記されています。手持ちの NVMe デバイスの情報を確認して、ファイルシステムに nobarrier つけたいなら、確実に無効化しておきましょう。 以下は詳細。 NVMe というのは PCIe バスに直接つないでデータを保存できるストレージの共通規格で、nvmexpress.org で仕様が公開されています。最新の仕様は rev. 1.3です。 HDD や SSD のようなものではあるんですが、hdparm コマンドで設定することはできず、ベンダが提供するツールか、NVMe 仕様に基づいてコン

    NVMe ストレージの揮発性内部キャッシュ - 誰かの役に立てばいいブログ
  • IPv6 は人類には早過ぎたんだ - 誰かの役に立てばいいブログ

    人類は大袈裟ですが、私には厳しかったという話。 IPv6 対応のプログラムとは? いたるところに書かれているので省略。以下の記事などを参考にどうぞ。 IPv6ソケットプログラミング Programming using C-API 手短にまとめると gethostbyname(3) ではなく getaddrinfo(3) を使って名前解決する accept(2) や getpeername(2) で返るアドレス情報は struct sockaddr_storage に格納する listen するソケットは AF_INET6 指定で作ると IPv4/v6 両対応になる シンプルですよね。ここまでは。 落とし穴1:リンクローカルアドレス IPv6 のアドレス体系は IPv4 とかなり異なります。最たるものがリンクローカルアドレスです。 リンクローカルアドレスはルーティングされないので、リンク(≒

    IPv6 は人類には早過ぎたんだ - 誰かの役に立てばいいブログ
  • アセンブリ読んだら負けかなと思ってる - 誰かの役に立てばいいブログ

    子供のころからできるだけ手抜きして成果を挙げることだけは長けている山です。 今回は、C/C++ で作ったプログラムが運用中にクラッシュするときのデバッグ方法のお話しです。 開発中のデバッグは gdb などでソース追いながらデバッグできますが、運用中ですと strip していたり最適化していたりしてデバッグが難しくなります。 そもそも、いきなりクラッシュすると情報が残らずに困ってしまいます。そんなときどうするか。 Step1. スタックトレースを出力する こんな関数を用意しましょう。Linux 以外の人はそれなりに実装してください。 #include <execinfo.h> #include <unistd.h> void dump_stack() { void* bt[100]; int n = backtrace(bt, 100); backtrace_symbols_fd(bt,

    アセンブリ読んだら負けかなと思ってる - 誰かの役に立てばいいブログ
  • 1