ブックマーク / msyksphinz.hatenablog.com (15)

  • Netflixによるインスタンス負荷改善のための解析事例 - FPGA開発日記

    LinkedInの記事をめぐっているうちに見つけた、マイクロアーキテクチャに関する面白い事例。 CPUのマイクロアーキテクチャのさらに奥深くまで理解が必要な問題を解決するために、どのようなツールをつかってどのように解決したかの話。 netflixtechblog.com Netflix内でのワークロード最適化のため、AWSのインスタンスサイズを移行(16 vCPUから48 vCPU)し、CPUがボトルネックとなるワークロードの性能向上を図った。 このインスタンスの移行により、性能をほぼ直線的に増加させることを想定し、スループットがおよそ3倍になると予想した。 しかし、結果としてこの移行で想定する性能は達成できなかった。 https://netflixtechblog.com/seeing-through-hardware-counters-a-journey-to-threefold-pe

    Netflixによるインスタンス負荷改善のための解析事例 - FPGA開発日記
    nishitki
    nishitki 2024/08/22
  • setjmpとlongjmp はどのように実現されているのか - FPGA開発日記

    setjump(), longjump()について基的なことを調査するために、まずは以下のページなどを読んで勉強した。 http://www.nurs.or.jp/~sug/soft/super/longjmp.htm (制限はあるが)どのような場所からでも、setjump()を実行した場所に戻ってくることが出来る。これにより、例外処理もどきのようなものが作れる。 #include <setjmp.h> #include <stdio.h> #include <stdlib.h> jmp_buf jmp_div; void divide_test (int a, int b) { if (b == 0) { longjmp(jmp_div, 1); } int div = a / b; printf ("divide_test (%d, %d) = %d\n", a, b, div);

    setjmpとlongjmp はどのように実現されているのか - FPGA開発日記
    nishitki
    nishitki 2023/06/07
  • プロセッサのメモリコンシステンシモデルについて - FPGA開発日記

    プロセッサ構成はますますマルチコア化しており、同期処理や各プロセッサでの通信、データ共有をどのように行うかという問題は重要になっている。 ハードウェア・ソフトウェアには「メモリモデル」というものが定義されており、共有する変数をどのようにして取り扱うか、レーシングの状態をどのように取り扱うかというものが定義されているが、少し気になって復習がてら「ハードウェアのメモリコンシステンシとは何なのか」について調査を行ったのでメモする。 参考文献 Computer Architecture, Sixth Edition: A Quantitative Approach (The Morgan Kaufmann Series in Computer Architecture and Design) 作者:John L. Hennessy,David A. Patterson出版社/メーカー: Morga

    プロセッサのメモリコンシステンシモデルについて - FPGA開発日記
    nishitki
    nishitki 2022/11/15
  • フルスクラッチから作って理解するQEMU (Rust編) - FPGA開発日記

    モチベーション なぜRustを選んだか? 私はQEMUは「アーキテクチャエミュレーション界のLLVM」だと思っている QEMUが高速な理由:TCG Binary Translation ゲスト命令(RISC-V) → TCGホスト命令(x86)の処理をRustで作ろう RISC-Vの命令をフェッチしてデコードする RISC-Vの命令をTCGに変換する TCGをx86に変換する 実装結果 Binary Translation実行を高速化するための様々なテクニック BasicBlock分まで複数命令をまとめて変換 TCG Block Chainingの実装 評価結果 TB Lookup and Jumpの実装 評価結果 まだ完成していないところ 一部の最適化はまだ未実装となっている ゲストアーキテクチャがx86のみとなっている。TCGによる複数プラットフォーム対応として、まずは環境のそろ

    フルスクラッチから作って理解するQEMU (Rust編) - FPGA開発日記
    nishitki
    nishitki 2020/12/29
  • 半導体業界における「IP」とは何なのかを説明したい - FPGA開発日記

    RISC-V」という言葉が徐々にエンジニア界隈に普及し始め、技術界隈のニュースサイトだけでなく、一般的なニュースを扱うような新聞社の記事でも見かけるようになってきました。例えば以下のような記事です。 www.nikkei.com 半導体エンジニアではない人がこのような記事を書く場合、「設計IP」について正しい知識を持っておかないと、少しおかしなことになってしまいます。しかしこれは記事を書いている記者だけを責めることは出来ません。半導体設計業界はソフトウェア開発業界に比べて小さな業界で、プレーヤの数も少なく、ネット上にあまり情報も出てきません。時事ネタを速攻で記事に起こさないといけない新聞記者が「IPってなんだっけ?」「リスクファイブってなんぞや?」ということをいちいち厳密に調べてられない、ということも理解できます。 そこで、非エンジニア(というか非半導体産業の方)でも理解できるように、R

    半導体業界における「IP」とは何なのかを説明したい - FPGA開発日記
    nishitki
    nishitki 2020/10/04
  • QEMUに入門してみる(14. トレース関数の自動生成方法) - FPGA開発日記

    QEMUにはトレース出力用の関数を自動的に生成するフレームワークが存在している。これは命令トレースを出力するのとは異なり、各種イベントを取得するためのフレームワークを生成するものだ。 まず、取りたいイベントを定義しなければならない。target/myriscvx/trace-eventsというファイルを作成してそこに記述する。以下はRISC-Vの実装から取ってきた。 qemu/target/myriscvx/trace-events # target/myriscvx/cpu_helper.c myriscvx_trap(uint64_t hartid, bool async, uint64_t cause, uint64_t epc, uint64_t tval, const char *desc) "hart:%"PRId64", async:%d, cause:%"PRId64",

    QEMUに入門してみる(14. トレース関数の自動生成方法) - FPGA開発日記
    nishitki
    nishitki 2020/07/29
  • AWSインスタンスをPythonで操作するためのboto3に入門する - FPGA開発日記

    私は普段はLLVMのビルドをローカルマシンを使って行っている。私のローカルラップトップPCはSurface Laptop2なので、LLVMをデバッグモードでビルドするのにはかなり骨が折れる(実際、ビルド中は何もできない)。 しかしサーバを購入するのはもったいないし、それだけのために電気代が増えてしまうのもなんだか悔しいので、ビルドの時だけ強力なサーバを立ち上げるクラウドのような方式が欲しいと思った。 そこで、AWSをクライアントから管理するためのツールであるboto3を使ってみることにした。実際に、RISC-VAWSシミュレーションツールであるFireSimはBoto3を使用している。 まずは入門から。参考にしたのは以下のQiitaの記事。とても分かりやすい。 qiita.com S3バケットへのアクセステスト まずはS3からデータを取得するための方法について入門する。API Keyなど

    AWSインスタンスをPythonで操作するためのboto3に入門する - FPGA開発日記
    nishitki
    nishitki 2019/08/24
  • Intel CPUの脆弱性"ZombieLoad"の論文を読んでみる - FPGA開発日記

    Intelがまた出した。Meltdown / Spectre系のCPUの脆弱性として新たに発表された"ZombieLoad"である。 これもまた論文が発表されている。これらの論文は、最新のCPU技術を勉強するにあたって非常に有用なものだ。ZombieLoadの論文を読んで、どのような脆弱性であるのかを読み解いていくことにした。 参考にしたのは、"ZombieLoad: Cross-Privilege-Boundary Data Sampling" という論文だ。以下からダウンロードできる。 arxiv.org すべてを理解できたわけではないが、ZombieLoadの質は、Intel CPUのハードウェア的なバグであるというところであると言える。アーキテクチャ上のバグではないため、AMD、Armでは現れない。Intelの実装が単純に問題だった、ということになりそうだ。 そもそもMeltd

    Intel CPUの脆弱性"ZombieLoad"の論文を読んでみる - FPGA開発日記
    nishitki
    nishitki 2019/05/19
  • マルチコアにおけるキャッシュコヒーレンシ方式の簡単なまとめ (1. キャッシュスヌープ方式) - FPGA開発日記

    久しぶりににヘネパタ(「コンピュータアーキテクチャ 定量的アプローチ 第5版」)を読み直していると面白い。少しマルチコアプログラミングについて確認したいことがあったので、マルチコアにおけるキャッシュコヒーレンシを保つための手法についてもう一度勉強し直した。 キャッシュコヒーレンシとは、マルチコアにおけるメモリアクセスの一貫性を保つための仕組み。例えば、複数コアにおいて1つのメモリアドレスに対して処理を行うと、各コアのキャッシュにデータが残っているため最新のデータを取得することができず、処理に矛盾が発生してしまう。 マルチコアにおけるキャッシュ間の矛盾 コア0がある処理を行いメモリに書き込むと、その結果はコア0のキャッシュに書き込む。一方で、コア2も同様にある処理を行い同一メモリに書き込むと、そのメモリの最新の値はコア0のキャッシュの中にあるはずなのに、そのことを知らないコア2は勝手に自分の

    マルチコアにおけるキャッシュコヒーレンシ方式の簡単なまとめ (1. キャッシュスヌープ方式) - FPGA開発日記
    nishitki
    nishitki 2019/02/04
  • PortSmashで学ぶ高性能プロセッサの同時マルチスレッディング - FPGA開発日記

    CPUの脆弱性として新たに報告された "PortSmash" 、どういう脆弱性なのかを調べるために論文を探すと公開されていた。 Port Contention for Fun and Profit https://eprint.iacr.org/2018/1060.pdf "Port Contention for Fun and Profit" という論文として公開されている。 どうでもいいけれども、"Fun and Profit" (趣味と実益)っていう名前がついているのは謎である。 読み進めていくと、結構理屈としては分かりやすい攻撃手法だということが分かった。 ちなみにこのPortという言葉は、SSHなどのポートのことではない。 現代のアウトオブオーダのプロセッサには、命令の種類に応じて実行されるユニットが分けられている。 例えば算術演算命令ならばALUユニット、メモリアクセス命令だっ

    PortSmashで学ぶ高性能プロセッサの同時マルチスレッディング - FPGA開発日記
    nishitki
    nishitki 2018/11/09
  • Linuxがブートできる自作RISC-VシミュレータをGitHubにアップロードした - FPGA開発日記

    自作RISC-Vシミュレータがある程度落ち着いてきたので、キリがいいところでGitHubで公開することにした。 github.com まあSpike(riscv-isa-sim)の劣化Cloneだと言ってしまえばそれまでなので、あまり意味はないのだけれど。。。 図. 自作RISC-Vシミュレータの外部インタフェース 使い方はGitHub上のREADME.mdに書いてある。BSDライセンスなので自由に改造してやってください。 まあこういうツールの場合BSDライセンスが良いのかどうかもよく変わっていないけれども? RISC-Vの精神に基づいてみた。 Spikeシミュレータとの差分点としては、デバッグ情報がしっかり出力できるようにした。レジスタアクセス情報からメモリアクセスの情報まで、--debugオプションによりしっかり情報を出力する。 その影響で--debugオプションをかなり遅くなってしま

    Linuxがブートできる自作RISC-VシミュレータをGitHubにアップロードした - FPGA開発日記
    nishitki
    nishitki 2018/09/12
  • Intel Software Guard Extensionのチュートリアルを読む(2. Design an Application) - FPGA開発日記

    CPU脆弱性についての論文を読んでいると必ずと言っていいほど出てくるIntel SGX(Software Guard Extension)。 なんとなく秘匿データを扱うためのIntelのハードウェア機構なんだろうなと思っていたけど、あまり知ったかぶりをしているのもよくないのでチュートリアルを読んでみることにした。 前回に続いて、今回はTutorialのPart-3だ。いよいよPassword Managerの実装に入っていく。まずはクラス設計から、どこに境界を作成するのかについて考えていく。 software.intel.com Intel® Software Guard Extensions Part-3: アプリケーションのデザイン Part-3では、Intel® Software Guard Extensions (Intel® SGX)を使ってどのようにしてアプリケーションを設計す

    Intel Software Guard Extensionのチュートリアルを読む(2. Design an Application) - FPGA開発日記
    nishitki
    nishitki 2018/08/24
  • 「ゼロから作るディープラーニング②」を購入 (1. ニューラルネットワークの復習) - FPGA開発日記

    ゼロから作るDeep Learning ? ―自然言語処理編 作者: 斎藤康毅出版社/メーカー: オライリージャパン発売日: 2018/07/21メディア: 単行(ソフトカバー)この商品を含むブログ (2件) を見る 「ゼロから作るディープラーニング②」を購入した。第1巻は一応完走した、つもり、、、なので第2巻に挑戦する。 あまり内容を詳細に記録するつもりはないので、Jupyter Notebookに書いたものをスクリーンキャプチャして貼り付けて記録とする。 第1章はニューラルネットワークの復習。スパイラルデータを使ってクラス分けを行う。 @7shi さんに教えていただき、Jupyter Notebookの実行結果はGistに乗せていくことにしました。 なるほど、これは便利。 Jupyter Notebook Viewer こんなグラフを書けるのが面白い。これはニューラルネットワークによ

    「ゼロから作るディープラーニング②」を購入 (1. ニューラルネットワークの復習) - FPGA開発日記
    nishitki
    nishitki 2018/07/30
  • CPUの脆弱性を突く新たなテクニック "BranchScope" の仕組みを読み解く (1) - FPGA開発日記

    ASPLOS-18 にて、 BranchScope と呼ばれる新しいCPUの脆弱性を付く攻撃手法が発表された。 今年の頭に ”Meltdown", "Spectre" で世間を騒がせたCPUの脆弱性の件だが、今回別の形で攻撃する手法を発見したということで、面白そうなので調査してみることにした。 こちらも現代のコンピュータアーキテクチャが誇る高性能CPUの機構をうまく活用するものであり、Spectreと考え方は近いようだ。 ちなみに、原論文は以下で入手することが可能だ。 BranchScope: A New Side-Channel Attack on Directional Branch Predictor http://www.cs.ucr.edu/~nael/pubs/asplos18.pdf ざっくりと前半のしくみの部分を読んで、なるほど、こういう手もあるのか。という感じ。 Spec

    CPUの脆弱性を突く新たなテクニック "BranchScope" の仕組みを読み解く (1) - FPGA開発日記
    nishitki
    nishitki 2018/03/30
  • Meltdown, Spectre で学ぶ高性能コンピュータアーキテクチャ - FPGA開発日記

    巷ではIntel, AMD, ARMを巻き込んだCPUのバグ "Meltdown", "Spectre" が話題です。 これらの問題、内容を読み進めていくと、コンピュータアーキテクチャにおける重要な要素を多く含んでいることが分かって来ました。 つまり、このCPUセキュリティ問題を読み解いていくと現代のマイクロプロセッサが持つ、性能向上のためのあくなき機能追加の一端が見えてくるのではないかと思い、Google, Intelの文献を読み解いてみることにしました。 が、私はセキュリティの専門家ではありませんし、過去にデスクトップPC向けのような大規模なCPU設計に参加したこともありません。 あくまでコンピュータアーキテクチャに比較的近い場所にいる人間として、この問題の質はどこにあるのか、可能な限り読み解いていき、現代のマイクロプロセッサが持つ高性能かつ高機能な内部実装について解き明かしていき

    Meltdown, Spectre で学ぶ高性能コンピュータアーキテクチャ - FPGA開発日記
    nishitki
    nishitki 2018/01/07
  • 1