タグ

NeoCatのブックマーク (294)

  • ptrace より 100 倍速いシステムコールフック作った - かーねるさんとか

    新しい高性能で汎用的なシステムコールフックの仕組みを作ってみました。 モチベーションとして、システムコールをフックしてユーザー空間でエミュレートしたくなったのですが、現状、性能と汎用性を両立する仕組みがなさそうだったので、新しい方法を考えました。 今回のシステムコールフックの仕組みは以下のような特徴があります。 ptrace より 100 倍以上高速 LD_PRELOAD や既存のバイナリ書き換えツールより確実 カーネルへの変更なし、かつカーネルモジュールを使わない プログラムのソースコード、プログラムの再コンパイル不要 eBPF でトレーシングをしているけれど、できれば制約が少ないユーザー空間でトレーシングツールを作りたい。もしくは、gVisor のようなサンドボックスを作りたいけれど、ptrace による性能劣化が大きいので、他の高速なシステムコールフックの仕組みが使いたい、というよう

    ptrace より 100 倍速いシステムコールフック作った - かーねるさんとか
    NeoCat
    NeoCat 2021/10/15
    syscallと同じサイズでcallq *%raxに置き換えられるので最初のページにトレーサのコードをmapすればそこに飛んでくれると。これは頭いい(けどセグフォするアホなプログラム追おうとするとシステムコール呼んじゃいそう)
  • 8月23日のAWSの大規模障害でMultiAZでもALB(ELB)が特定条件で500エラーを返すことがあったという話 - Make組ブログ

    このブログ記事で 「MultiAZ」にしていたら何事も全て大丈夫という認識を変えられると嬉しいです (当該の時点で障害起こした人はちゃんとMultiAZにしてなかったんでしょ?という人の認識も変えられると嬉しいです)。 MultiAZにしておくことは基 です。 その上でも、 安心しきらずに監視は必要 という話をしています。 MultiAZ構成にしておきましょう そのうえで監視、検知、トレーサビリティを大切にしましょう MultiAZ要らないという見当外れの解釈はしないでください (一部、間違えた解釈をしてるコメントも見受けられましたが、大いに違います)。 前提 2019-08-23、AWSで大規模な障害が起こりました。 障害の一般的な内容は以下のとおりです。 まとめのブログ https://piyolog.hatenadiary.jp/entry/2019/08/23/174801 AW

    8月23日のAWSの大規模障害でMultiAZでもALB(ELB)が特定条件で500エラーを返すことがあったという話 - Make組ブログ
    NeoCat
    NeoCat 2019/08/24
    いくつかのサービスの一つでELBが応答しなくなったりコンソールで一切情報が取れなくなるケースは見たな。対応方法はこの記事と概ね同じく障害AZを含まないようにすること
  • MJIT で dlopen 使わずに ELF オブジェクトを直接ロードする話 - 兼雑記

    MJIT というのが Ruby に入ったのは聞いていて、すごいことするな、と思ってたんですが、実際に Ruby Kaigi で話を聞けて少し遊んでみたくなったのでした。そういえば https://turingcomplete.fm/5 の時に「MJITについてどう思うか聞いておいて下さい」とかリクエストしておいたのに聞いてくれなかったのであった。 https://k0kubun.hatenablog.com/entry/ruby26-jit すごいことするな、と思ったのはその手法で、 C 生成して dlopen という、よく雑談とかで言う話ではあるけど、実際広く使われる用途で使われたのは見たことが無かった(ICFPCとかでは見たことがある)ので、すごいなと。 一方で、 dlopen たくさんすると、いくつかの意味でオーバヘッドがかかると思われるため、あとでマイクロベンチに出ないところで大変

    MJIT で dlopen 使わずに ELF オブジェクトを直接ロードする話 - 兼雑記
    NeoCat
    NeoCat 2018/06/11
    .so経由で読むのが不都合ならバイナリを自力で読めば…とは思うけどarch依存もありそうだしやっぱり実用的ではないですよね…。RubyKaigiでLightWeight-JIT作ってるという話もあったけどこれもMRI並のarch対応は時間かかりそう…
  • VMに手を加えずRubyを高速化するJITコンパイラ「YARV-MJIT」の話 - k0kubun's blog

    先日のRubyKaigi 2017のLTではLLVMベースのCRuby向けJITコンパイラLLRBの話をしました。 5分はちょっとJITの話をするには短かかったですね。 LLRBをふまえた、Cのコード生成への軌道修正 さて、上記の資料にある通り、CRubyのJITにおいてはメインの高速化対象が既に存在するCのコードになるため、 開発の早い段階でパフォーマンスにインパクトを持てるとすればLLVM Passの順番を変えるくらいで、 LLVM IRを直接生成しても最適化上のメリットがほとんどないのでその部分はMJIT と同じくCのコードを生成するように変更したい、という話をした*1。 で、LLRBはC拡張として作るべくちょっと不思議な努力をいろいろやっており、 それらの設計はやってみた結果(コアに直接変更を加えるのに比べ)デメリットの方が大きいと思ったので、 LLRBの失敗を全て生かしつつ、今回

    VMに手を加えずRubyを高速化するJITコンパイラ「YARV-MJIT」の話 - k0kubun's blog
  • [小ネタ] Gitのコマンド実行に失敗した時に目立つメッセージを表示する | DevelopersIO

    先日Gitでrebaseをしたつもりがされていないという事故が起きました。 話を聞いたところ、「明らかにrebaseのコマンドは打ったが、エラーメッセージをスルーしていてrebaseできてなかった」という状況でした。 たしかにGitでコマンドの実行に失敗した時のエラーメッセージはわりとさっぱりしている気がします。 $ git rebase develop Cannot rebase: You have unstaged changes. Please commit or stash them. もっと「失敗した!」感が強いメッセージが表示されれば事故を防げるのかな、と思いましたので、Gitのエイリアスを利用してGitのコマンド実行に失敗した時に目立つメッセージを表示するように設定してみます。 また、試した際の環境は以下です。 OS: macOS Sierra 10.12.6(16G29)

    [小ネタ] Gitのコマンド実行に失敗した時に目立つメッセージを表示する | DevelopersIO
    NeoCat
    NeoCat 2017/08/18
    シェルのプロンプトに直前のコマンドの終了コードが0以外だったら派手な警告が出るようにしておく方が汎用性が高いと思う
  • ある日海馬が故障した - 一過性全健忘(TGA)体験記 - ibaibabaibaiのサイエンスブログ

    だいぶ固い話題が続いたので,気分を変えて.3年ちょっと前に経験した奇妙な出来事についての報告を書くことにする.簡単にいうと,ある日突然海馬が故障して記憶にまったく書きこみができなくなり,数時間で治った.という話である.途中から科学者魂というか,何としてでも画像を手に入れてやる,みたいなモードになるのだが,さてその結果はどうなったか.症状のほうはそのまま回復して,その後再発もしていないので,心配せずに読んでいただきたい.あと,文中にも出てくるが,筆者は医療関係者でも脳の専門家でもないので念のため. 「これで5回目だと思う」 その日は10月の土曜日で,午後は自宅で科研費の書類を作っていた.それにも飽きて,いつものようにバスで最寄り駅まで行き,ジムに入った.着替えて,軽い筋トレをはじめたが,途中からなにか考えがうまく回らなくなって,ジムの中でうろうろしていたような気がする. そのあとしばらくたっ

  • 男の異業種転職ウェブメディア-OREPICA-

    男の異業種転職メディア「OREPICA(オレピカ)」は、未経験だけど今と異なる業界に転職を考えている人向けの転職情報メディアです。 「今と違う業界に転職したい」「自分のスキルで活躍できる業界はどこか」など、新しい未来へ踏み出すきっかけとなるメディアを目指します。

    男の異業種転職ウェブメディア-OREPICA-
    NeoCat
    NeoCat 2015/11/21
    すべFアニメEDのジェネラティブアートのお話。使ったツールとか。ライフゲームinライフゲームも出てくるよね。
  • プリオンなんて嘘だと思ってた - ibaibabaibaiのサイエンスブログ

    はじめはプリオンなんて信じなかった. だって話が出来過ぎではないか.たんぱく質の1次元配列は同じでも,その折りたたみの形状が複数ある.みんながAという折りたたみ方をしているときに,それよりちょっとだけ安定なBという形状のものを入れると,それが自己触媒的に伝わっていき,とうとう全部がBになってしまう. これだけで,統計物理だの非線形科学だのに興味を持っている人間にはツボとしかいいようがない.たとえば,結晶を作るときに「種」を入れると,それまで「偽りの安定状態」にあった過飽和溶液から急速に固体が出現する.こうした正のフィードバック現象は,こうした学問に携わる者の心の底に棲みついている.それが突然思ってもみなかったふうに登場したのである. しかも,プリオンには「ストレイン」という系統のようなものがいくつもあって,たとえば系統Bに感染すると全部が系統Bに,系統Cに感染すると全部が系統C,という風に

    プリオンなんて嘘だと思ってた - ibaibabaibaiのサイエンスブログ
    NeoCat
    NeoCat 2015/11/14
    SFの"猫のゆりかご"みたいな世界が人間の体でも実際起こっているらしい、という話。ちなみに逆の働きをする"分子シャペロン"というものもある
  • perl6なので6種類の記号だけでプログラムを書く - すぎゃーんメモ

    Perl6で記号Hello worldする - すぎゃーんメモ という記事を書いたところ なるほど、文字の種類が少なくて簡単 / 他3コメント URL “Perl6で記号Hello worldする - すぎゃーんメモ” URL 2015-10-22 19:30:57 via Hatena というブコメをいただいたけど、あの記事では適当に生成したので 11種類もの記号を使っていて まだちょっと多いかな、という感じがした。 ので最大限に使う文字種類を減らして、6種類の記号だけでHello worldを書いてみた。 ::('('~^(~::('~'~^~(^(''~~''))~':'~^~(^(''~~''))~^'~'~^'('~^')'~')'~^':'~^'~')(')'~^~(^(''~~''))~^'('~'^'~^~(^(''~~''))~^':'~^'~'~'^'~^':'~^'~

    perl6なので6種類の記号だけでプログラムを書く - すぎゃーんメモ
    NeoCat
    NeoCat 2015/10/24
  • マリオメーカーで4,294,967,295+4,294,967,295を計算してみた

    回路の小型化、最適化を追求して桁数を32まで増やしてみました。なるべく少ないパーツで回路を作る必要があるため、もはやAND回路やOR回路の原型は留めていません……多分これが一番でかいと思います。偉大な先駆者様:sm27235148※お詫びと訂正※パーツ上限で50個までと思っていたのは当は100個まででした。大変申し訳ありませんがここで訂正させて下さい。コースID:47AD-0000-0095-E43D技術革新の結果→sm27383127マリオメーカー学会発表まとめ:mylist/53472912

    マリオメーカーで4,294,967,295+4,294,967,295を計算してみた
  • あなたの知らない超絶技巧プログラミングの世界 - 兼雑記

    奇書を頂きました。 一応レビュアーとして参加したことになっています…が、掲示板かなにかと勘違いした人が雑談をして邪魔をしているな、という感じでした。浜地慎一郎という文字列が10回くらい出てくる残念なです。 もう少しマジメに説明すると、私がクソコードとか読んでいるような、トリッキーなコードの作品集兼使われているテクニックの解説などがなされています。読んでいてこの面白いなーと思ったのは、関連する他の人が書いたコードも紹介されていますが、基的に遠藤さんの作品が主人公ということでした。えっこの人一冊書けるくらい Quine 書いてるんだ…という。 それと、クソコードコンテスト for Ruby であるところの、 TRICK 2015 が開催されますので、みなさん頑張ってクソコードを書いて、審査員をうならせて下さい。 https://github.com/tric/trick2015/blo

    あなたの知らない超絶技巧プログラミングの世界 - 兼雑記
  • メシ通 | ホットペッパーグルメ

    こんにちは! ベトナム料理普及家のKi Yamamotoです。 家でできるベトナムご飯、アジアご飯のレシピや調味料、文化に関する情報を発信している僕が…

    メシ通 | ホットペッパーグルメ
    NeoCat
    NeoCat 2015/08/17
  • 分散深層強化学習でロボット制御 - Preferred Networks Research & Development

    新入社員の松元です。はじめまして。 “分散深層強化学習”の技術デモを作成し、公開いたしました。ロボットカーが0から動作を学習していきます! まずはこの動画を御覧ください。 以下で、動画の見どころと、使っている技術を紹介します。 動画の見どころ Car 0(○の付いている車)が右折カーブの手前で減速する様子(右画面の白いバーのところが、ブレーキのところで赤くなっている。ニューラルネットはブレーキが最も多く報酬が得られると推測していることがわかる)。速い速度ほど報酬は大きいが、カーブを曲がりきれず壁にぶつかってしまうので学習が進むとカーブ手前でのみ減速するようになる。 目の前に車がいるときは一時停止して、いなくなってから加速する。 エチオピアには当にこのような交差点があるらしい。 ぎりぎりですれ違う2台。学習途中ではすれ違いきれずにぶつかって倒れてしまうこともある(早送りシーン中に人が写って

    分散深層強化学習でロボット制御 - Preferred Networks Research & Development
    NeoCat
    NeoCat 2015/06/11
    非常に分かりやすいし面白そう。
  • cron の意外な落とし穴! - もろず blog

    システムを運用していく上で cron を使う場面はよくありますよね 処理をスケジュール実行したい時にとても便利です そんな cron ですが、最近仕事で作業しているときに ntpdate でシステム時刻を変更した後に cron で設定した時刻になってもジョブが実行されないという問題が見つかりました 全てのジョブが実行されていないわけではなく一部のジョブは実行されているようでした また、時刻を変更した後に crond を再起動すれば全てのジョブが正常に実行されるようになりました 幸い、実運用ではなくてシステムテスト中に見つかった問題なのでまだよかったんですが、運用している環境で同じ問題が起きたら相当マズイですよね そもそも ntp の時刻同期でシステム時刻が修正された場合にも同じ問題が起きそうじゃないですか? ググっても同じような事象は見つからず、社内のメンバーにも聞いてみても cron

    cron の意外な落とし穴! - もろず blog
  • GCC 5.0のC++関係機能 - Faith and Brave - C++で遊ぼう

    https://gcc.gnu.org/gcc-5/changes.html 網羅的ではなく、気になったものだけ抽出して書いています。 C++11、C++14関係の対応状況は、cpprefjpサイトにもほぼ反映しました。 C++14を全実装 変数テンプレート 宣言時のメンバ初期化を持つ型の集成体初期化を許可 constexprの制限緩和 サイズ付きデアロケーション -std=c++14オプションが使えるようになる。旧-std=c++1yオプションは非推奨。 C++11周りのライブラリサポート改善 std::listのsize()メンバ関数が、デフォルトでO(1)になる std::dequeとstd::vector<bool>に、ステートフルアロケータのサポートを追加。 iostreamのクラスに、ムーブとswapのサポートを追加。 std::alignとstd::aligned_union

    GCC 5.0のC++関係機能 - Faith and Brave - C++で遊ぼう
    NeoCat
    NeoCat 2014/12/25
    "C++14を全実装"
  • cdの引数を絶対パスにしてコマンドヒストリに残す - ももいろテクノロジー

    cdの引数が相対パスのままコマンドヒストリに残って便利な例が思いつかないので、絶対パスでコマンドヒストリに残すようにする。 具体的には、以下のシェル関数を.bashrcに書く。 if [[ -n "$PS1" ]]; then cd() { command cd "$@" local s=$? if [[ ($s -eq 0) && (${#FUNCNAME[*]} -eq 1) ]]; then history -s cd $(printf "%q" "$PWD") fi return $s } fi いくつかの重要なポイントを以下に記す。 cdの定義を上書きしているが、このような場合中で普通にcdを呼ぶと再帰してしまうためcommand組み込みコマンドを使う。 "$@"の代わりに"$1"を使うことはできない。cdを引数なしで呼んだときホームディレクトリに移動しなくなってしまう。 cdの

    cdの引数を絶対パスにしてコマンドヒストリに残す - ももいろテクノロジー
    NeoCat
    NeoCat 2014/12/11
    便利そう。記事内のテクニック解説も参考になる
  • 浸漬液冷はHPC/スパコンの未来を救うのか? - ExaScalerが保守性に優れた完全開放型の液浸冷却システムを開発

    レポート 浸漬液冷はHPC/スパコンの未来を救うのか? - ExaScalerが保守性に優れた完全開放型の液浸冷却システムを開発 既報の通り2014年10月14日にExaScalerが液浸の冷却システムを発表した。この冷却システムは、完全開放型で保守性に優れ、システム全体を高効率に冷却できると謳われている。 このExaScalerは、1024コアのPEZY-SCプロセサを開発したPEZY Computingの姉妹会社で、PEZY-SCやその後継チップのような高密度プロセサの実力を十分発揮させるためには、高密度の発熱を冷却できるシステムが不可欠ということで、PEZY Computingの齊藤社長兼CEOが中心となってPEZY Computingとは別に開発を推進し、今年4月に設立された会社である。 不活性の液体にプリント板ごと漬けて冷却する液浸の冷却システムとしては、東京工業大学のTSUBA

    浸漬液冷はHPC/スパコンの未来を救うのか? - ExaScalerが保守性に優れた完全開放型の液浸冷却システムを開発
    NeoCat
    NeoCat 2014/10/22
    「Xeon E5-2660 v2…フル動作に近いHPLの動作状態でもチップ温度は36~37℃」
  • Linux 3.16 から試せる cgroup の単一階層構造 (1) - TenForward

    Linux 3.16 からカーネルソースツリーの Documentation/cgroups の下に一つ文書が増えているのに気づいた方もいらっしゃるのではないでしょうか。cgroupの使い方が大幅に変わる変更がマージされています。増えた文書は以下。 Documentation/cgroups/unified-hierarchy.txt (3.16.1) 今までとの互換性 とは言ってもいきなり 3.16 からドーンと変わっているわけではなく、普通に使うには今までと何も変わりません。このドーンと変わっているのを体験するには cgroupfs を以下のようにマウントする必要があります。 # mount -n -t cgroup -o __DEVEL__sane_behavior cgroup /sys/fs/cgroup/そう、cgroupをマウントするときのオプションとして '__DEVEL_

    Linux 3.16 から試せる cgroup の単一階層構造 (1) - TenForward
  • ddコマンド実行途中に、何バイトコピーできたかを見る方法 | さくらのナレッジ

    知り合いと話していた際に、「ddコマンドでディスクをコピーしているとき、scpのようにプログレスバーが表示できたらいいのに」という話を聞きました。 意外と知られていないのですが、USR1シグナルを送ることで途中経過を表示させることが可能です。 [root@wwwxxxxu ~]# dd if=/dev/zero of=/dev/null & [1] 31092 [root@wwwxxxxu ~]# kill -USR1 31092 7764899+0 records in 7764898+0 records out 3975627776 bytes (4.0 GB) copied, 6.02001 seconds, 660 MB/s [root@wwwxxxxu ~]# kill -USR1 31092 25123042+0 records in 25123041+0 records ou

    ddコマンド実行途中に、何バイトコピーできたかを見る方法 | さくらのナレッジ
    NeoCat
    NeoCat 2014/07/29
    ↓BSD系(Mac OS X含む)だとkill -INFO
  • 自作のC言語プログラムから,BIOS設定(CMOS)を読み書きする方法 (の調査ログ) - 主に言語とシステム開発に関して

    自作のプログラムから,BIOSの設定を変更する事は可能なのか。 例えばブートデバイス設定やブートシーケンスの設定は, ふつうはPC起動時の「BIOS設定画面」から手動で変更するわけだが, これらの項目を,自作プログラムから書き換える事はできるのか。 (1)BIOSやCMOSなど関連キーワードについて (2)自作プログラムからBIOS/CMOSにアクセスする方法 (3)具体的なサンプルコードと実現方針 (4)結論 (1)BIOSやCMOSなど関連キーワードについて簡単におさらい PCの起動の流れ: ユーザはPCの電源を入れる。 PCのマザーボードに通電する。ここで,マザーボード上には,CPU,ROMまたRAMが設置されている。 ROM内には,BIOSのプログラムが入っている。 ROMとはいえ,フラッシュメモリなので,書き換え可能である。ここの書き換えは,BIOSアップデートを意味する。 RA

    自作のC言語プログラムから,BIOS設定(CMOS)を読み書きする方法 (の調査ログ) - 主に言語とシステム開発に関して
    NeoCat
    NeoCat 2014/06/07
    RTCのCMOSだったら、Linux+C言語で、rootでioperm(0x70, 2, 1)したあと、outb(0x80|reg,0x70) / inb(0x71) で読んだりoutb(x, 0x71)で書いたりすることはできる。でもこの人がいじりたいのはRTCじゃないのではないかなあ