タグ

ブックマーク / medium.com (63)

  • Rustがサポートするアーキテクチャ少なすぎる!

    RustLinuxカーネルモジュールを実装しよう!」とはしゃいできましたが、実は、X86-64とLoongArchという2つのCPUアーキテクチャしかサポートされていません。近いうちに、ARM64もサポートされそうですが、Linuxカーネルがサポートする大半のアーキテクチャで、Rustは使えません。 Linuxカーネルの標準コンパイラのGCCは、CのソースコードをLinuxカーネルがサポートする様々なCPUアーキテクチャ用の実行ファイルに変換することができます。一方、Rustの公式コンパイラがサポートを保証しているCPUアーキテクチャはARM64とX86、X86–64だけです。 Rustの公式コンパイラがサポートしているアーキテクチャが少なすぎるということで、別のコンパイラを試してみました。 Rustの公式コンパイラRustの公式コンパイラは、コンパイラを実装するための基盤的なソフトウ

    Rustがサポートするアーキテクチャ少なすぎる!
    rin51
    rin51 2024/02/21
  • Rustで作るLinuxデバイスドライバ

    だれでもできるシリーズとして、Rustでカーネルモジュールを実装しながら学んできましたが(役に立たないキャラクタデバイスドライバなど)、そろそろ実際に使える機能を実装したいころですよね! 今回は、筆者が実装したネットワークPHYドライバが、Rustで実装された初めてのデバイスドライバとしてLinuxカーネルに採用された話を紹介します。 誤解:LinuxカーネルがRustをサポート「LinuxカーネルがRustをサポートした」というニュースを見て、Rustのコードがどんどん採用されていると誤解している方もいるようです。このニュースは、「LinuxカーネルをRustでも書けるようになりましたが、実際に何かを実装するかどうかは未定」という意味です。Linuxカーネルは、メモリマネージメント、ネットワーク、暗号など、数多くのサブシステムで構成されており、それぞれのメンテナが、コードの採否を判断しま

    Rustで作るLinuxデバイスドライバ
    rin51
    rin51 2024/01/12
  • “test && commit || revert” by Kent Beck

    新しいスタイル VS テスト駆動開発「Limbo on the Cheap」のなかで、新しいプログラミングワークフローを考案しました。テストが成功するたびにコードをコミットする「test && commit」というものです。Oddmund Strømme(私が最初に出会った、私と同じく対称性に取り憑かれたプログラマ)が、テストが失敗したらコードをリバートすべきだと提案してくれました。私はこのアイデアが大嫌いだったので、とりあえず試してみることにしました。 そのコマンドは「test && commit || revert」になります。テストが失敗したら、コードはテストが最後にパスしたときの状態に戻るのです。 私は「test && commit || revert」に賛同はしていませんし、そのトレードオフについて説明するつもりもありません。動作はするでしょうけど、あんまりうまくいかないんじゃな

    “test && commit || revert” by Kent Beck
    rin51
    rin51 2023/09/09
    ケントベック
  • TLSが難しい?RustとLinuxカーネルで実装しよう!

    TLS(Transport Layer Security)が難しすぎると、お嘆きのセキュリティファースト世代の皆様、RustLinuxカーネルを実装しながら学んでみましょう! カーネルモジュールの実装は難しい?それは誤解です。TLSをアプリケーションとして実装しようとすると、各種のライブラリを検索していたつもりが、SNSを眺めていて、一日が終わっていることありますよね。カーネルモジュールを実装するために使えるのはカーネルの機能だけです。検索する必要はなく、雑念が生じる余地はありません。その集中力があれば、カーネル開発は難しくありません。 TLSとLinuxカーネル皆様の中には、LinuxカーネルはTLSをサポートしているのでは?と思っている方がいるかもしれません。TLSは実際のデータの送受信の前に、ハンドシェイクと呼ばれる、暗号鍵の合意や相手の認証を実施します。ハンドシェイク後、Linu

    TLSが難しい?RustとLinuxカーネルで実装しよう!
    rin51
    rin51 2022/12/30
  • Use Singleton Pattern Or Not?

    In this article, I will go through the cons and pros of the singleton pattern, and in much more detail, I will answer the question above. Where are Singletons Supposed To Be Used?Let’s start with a definition of this pattern by referring to refactoring.Guru. Singleton is a creational design pattern that lets you ensure that a class has only one instance while providing a global access point to thi

    Use Singleton Pattern Or Not?
    rin51
    rin51 2022/07/20
    シングルトン
  • Linuxカーネルが難しい?Rustで実装できそう!

    「ついに、RustLinuxカーネルを実装できる!」 待ち望んだ感を出してみましたが、2年前に記事を書いてから、すっかり忘れていました。LinuxカーネルのRustサポートについての意見を求められたら、「技術的には面白いけど、実用レベルではないね。」と、上から目線の回答でエンジニアレベルの高さをアピールするつもりでしたが、2年間の間、誰にも聞かれませんでした。 近々、LinuxカーネルにRustサポートが取り込まれそう、ということで、デバイスドライバを実装してみました。 Rust対応カーネルのコンパイルまずは、Rust対応を有効にしたLinuxカーネルをコンパイルする必要があります。「カーネルってコンパイルするものなの?」という読者は、ネットの長老たちに叡智を求めましょう。「インストール直後に、メモリ削減のために不要な機能を無効にして、カーネルコンパイルしたんじゃ。」というような、太古の

    Linuxカーネルが難しい?Rustで実装できそう!
    rin51
    rin51 2022/07/12
  • Rustが遅すぎる?プロファイリングで性能向上!

    「開発プロセスにプロファイリングを組み込むのはどうだろう?」 ミーティングで、プロファイリングの重要性を発言するだけで、みんながあなたの深い知見、意識の高さに驚くことでしょう。もちろん、あなたは、プロファイリングのやり方を知っている必要はありません。開発の終盤に、性能目標が達成されず、解析が実施される頃には、誰もあなたの発言は覚えていません。しかし、万が一、あなたの意見が採用されても困らないように、この記事を参考にしてください。 Goは、CPU、メモリ、block、mutexなど、使いこなせないほどの種類をサポートするプロファイリングツールpprofを標準機能として提供します。一方、Rustは、そんな機能を提供しません。Rustへの愛が揺らぐかもしれませんが、Rustへの愛は、見返りを求めない純愛です。愛の見返りに何かが与えられると期待してはいけません。 Rustでもpprofあなたは、す

    Rustが遅すぎる?プロファイリングで性能向上!
    rin51
    rin51 2022/02/24
  • インターンレポート: RootlessコンテナのTCP/IP高速化

    はじめまして、インターン生の松直樹と申します。 この記事では、私がNTT研究所におけるインターン「コンテナランタイムの実装と評価」のインターン期間中に取り組んだ「bypass4netns」について紹介させていただきます。 自己紹介私は京都大学 情報学研究科に所属し、 普段は次世代型ホームネットワークと称してホームネットワークとSDNの融合や計算処理オフロードに関する研究に取り組んでいます。 コンテナ技術やその周辺のネットワーク技術に関しては普段から興味があったものの、 時間をかけて取り組む機会がありませんでした。 その折に、今回のインターンの募集を見つけ、実装を中心に触れることができる良い機会だと思い応募させていただきました。 インターン期間中はRootlessコンテナとネットワーク周りにどっぷりと浸ることができ、 非常に貴重な体験ができました。 はじめに: Rootless コンテナに

    インターンレポート: RootlessコンテナのTCP/IP高速化
    rin51
    rin51 2022/02/16
  • Git LFSについて調べてみた

    こんにちは。NTT研究所の露崎です。 業務でGitの一機能であるGitLFSの導入の仕方を調べてたのですが日語のドキュメントでちょっと欲しい情報が見つからなかったのでブログにまとめました。 Git LFSとは詳細な話は "git lfs”でGoogle検索かけると最初にヒットするこちらなどが参考になるのでここでは省きますが、簡単にいうと「画像ファイルなどのgitで管理されるべきでないとされるバイナリファイルなどを、まとめてgit上で管理するため機能」です。通常、gitは差分を管理しており各クライアントはその差分をGitHubなどのgitリポジトリサーバと共有しています。これに対して、git lfs機能を経由して追加されたファイルはファイルの実体は別のオブジェクトストレージ(図のLarge File Storage)などに保存されそのハッシュ値、保存先だけがgitリポジトリで管理されます

    Git LFSについて調べてみた
    rin51
    rin51 2022/01/17
  • インフラエンジニアなら気になるQUICのロードバランサ (方式編)

    図1: QUICコネクションを振り分けるロードバランサはじめに記事では、バックエンドのWebサーバへリクエストを振り分ける装置の意味でのロードバランサ(図1)について、QUIC対応の議論状況を紹介します。方式編と実装編にわけて二編を予定しており、稿は方式についての解説です。 IETFでは、F5 Networksとマイクロソフトから提案されたロードバランシング方式が議論されています。稿では下記のインターネットドラフトをQUIC-LBと表記します。 QUIC-LB: Generating Routable QUIC Connection IDs https://datatracker.ietf.org/doc/html/draft-ietf-quic-load-balancers 執筆時点の -07 をベースとしますが、ドラフトですので今後の議論次第で改版が続きます。あらかじめご承知おき

    インフラエンジニアなら気になるQUICのロードバランサ (方式編)
    rin51
    rin51 2021/08/26
  • RustでLinuxカーネルの機能を拡張しよう!

    Linuxカーネルの機能を安全に拡張できるeBPFのコードはC言語で実装する必要があると知り、がっかりしているクラウドネイティブ 世代の皆様に朗報です。実は、Rustで、eBPFのコードを実装することができます。今更、C言語(クラウドネイティブ ではない感じ)を学ぶ必要はありません! eBPFとプログラミング言語eBPFを活用するソフトウェアは、カーネルスペースで動作するeBPFバイトコードと、eBPFバイトコードを制御するユーザスペースのアプリケーションから構成されます。後者は、GoPythonRustなど様々なプログラミング言語で実装することができますが、前者は、制限のあるC言語で実装する必要があります。 eBPFの構成Rust用eBPFライブラリRustでeBPFを扱う一般的な方法は、libbpf-rsライブラリです。これは、C言語でユーザスペースのアプリケーションを実装するため

    RustでLinuxカーネルの機能を拡張しよう!
    rin51
    rin51 2021/06/14
  • Creating Initramfs

    rin51
    rin51 2021/06/04
    busyboxを使ってinitramfsを作ってqemuで起動
  • Hash Table Vs Concurrent HashMap and it’s internal working

  • Skebを運営する株式会社スケブ、株式会社実業之日本社による買収のお知らせ

    創業124年の老舗出版社とネットクリエイター向けプラットフォームの緊密な協力体制によって、新たなクリエイター支援事業を推進します。株式会社スケブ(社: 東京都千代田区、代表取締役: 喜田 一成)は、株式会社実業之日社(社: 東京都港区、代表取締役: 岩野 裕一)が2021年2月12日付で過半数の株式を取得したことから、同日より株式会社実業之日社の子会社となりました。 重要なポイント今後の運営方針につきまして、創業者はSkebの開発業務からは引退しますが、引き続き創業者が運営会社の代表取締役を務め、運営方針の決定、機能の追加、仕様の変更、手数料の変更、およびキャンペーンの開催は創業者に一任されています。 株式会社実業之日社の協力の元、4月より新規にエンジニアの増員が決まり、新規機能を開発できる体制の整備を進めています。 手数料の急増はなく、クリエイターファーストの方針に一切の変更は

    Skebを運営する株式会社スケブ、株式会社実業之日本社による買収のお知らせ
    rin51
    rin51 2021/02/12
  • Introducing Arene

    This article is available on the Woven Planet Group account. To keep current with insider insights into the world of mobility, follow our new account! We want to enable the most programmable vehicles on the planet. Vehicle software development today is like mobile development was ten to fifteen years ago. Back then, the only people who could program mobile phones were the ones working for the manu

    Introducing Arene
    rin51
    rin51 2021/01/23
    トヨタのArene >The API is written in Rust and comes as a pre-compiled C/C++ library (currently built for x86 and arm).
  • ソケットAPIが遅すぎる?新たなio_uringを試す!

    新しいAPIが作られるたびに、私たちは、古いAPIを置き換えるだけで高速化という夢をみます。何度夢破れても、高速なAPIが追加されたと聞けば、試さずにはいられませんよね! 今回は、Linuxカーネル5.1で追加されたio_uringを使って、Rustのasyncランタイムを実装し、gRPCサーバのベンチマークを実行してみました。 io_uringとはio_uringは、ファイルシステムとネットワークの非同期I/Oのために開発されました。同期よりも非同期のほうがおしゃれ、そういう雰囲気ありますよね!クラウドネイティブも、非同期にAPIを介して、なんかやってるやつですよね。 io_uringのインターフェイスは、高い性能を目指し、1)アプリケーションとカーネル間でのメモリコピーを避ける、2)複数のI/O要求を一度にカーネルに伝えることができる、という工夫がされています。 下図のように、アプリケ

    ソケットAPIが遅すぎる?新たなio_uringを試す!
  • [Fuchsia] Zircon Kernel

  • gRPCが遅すぎる?eBPFでカーネル内で動かす!

    gRPCの高速化への飽くなき追求(具体的な目標や目的なし)を続けてきましたが、まだ、遅すぎる!今回は、安全にLinuxカーネルに機能を追加できるeBPFという仕組みを使って、カーネル内で動作するgRPCサーバを実装しました。その結果、前回実装したRust版よりも2倍高速になりました! eBPFで安全なユーザコード実行eBPFを使えば、システムコール、パケットの受信など、カーネルで発生する様々なイベントに対して、私たちユーザが実装したコードを、カーネル内部で実行することができます。同じようにカーネルに機能を追加できるカーネルモジュールと違って、eBPFは、データ破壊など、システムの安定性に深刻な影響を与える危険なコードの実行を防ぐことができます。 eBPFで検索すると、たくさんの日語の情報が見つかるXDPは、ネットワークインターフェイスのドライバのパケット受信時に、ユーザコードを実行する仕

    gRPCが遅すぎる?eBPFでカーネル内で動かす!
    rin51
    rin51 2020/10/16
  • FGO を支える負荷試験ツール

    これはアカツキとディライトワークスが共同で主催している “FGOなど大規模ゲームの課題から学ぶゲームサーバ・インフラ勉強会” での LT 発表資料です。こちらの資料に軽く補足を入れながら話をしていきます。 時雨堂では FGO の検証に利用するための負荷試験ツールを提供しています。 先日、大きめのメンテナンスが無事終わり、ほっとしています。 さて、メンテが無事終わって、FGO の中の人から以下のようなありがたいメッセージをもらいました。 負荷試験ツールなくしては今回の改修はなしえなかったと思いますので当にありがとうございました…。その負荷試験ツールがどんな仕組みで、どんなことを実現しているのかを書いていきます。時雨堂が負荷試験ツールで実現したことのみを書きます。 主に技術的な話というよりはこんなことやったよがほとんどです。 番データを利用した負荷試験利用されている負荷試験ツールは、時雨堂

    rin51
    rin51 2020/10/14
  • 【いでよ障害対応太郎】我々はインシデントにどう向き合っているのか 〜社内向け障害対応リスト付き〜

    「なんかアプリでインシデント起きてエンジニアがどこかで対応してるらしいよ」 「インシデント時のお知らせって誰がどうやって出すんだっけ?」 「インシデントの復旧作業って今どれくらい終わってる?」 「あのインシデントって振り返りしたっけ?」 「似たようなインシデント、前も対応したような、していないような」 このような会話に覚えはありませんか? FiNC Technologies社 (以下FiNC) では今まで インシデント対応をしていても自チーム内で対処しようとしてしまい、他の人が気づけないインシデント対応の仕方にフォーマットがなく、迅速な対応やお客様への報告ができないインシデントの振り返りが実施されず、インシデント時の知見が共有されないという問題がありました。 それらの問題を 気が付きやすく、シェアしやすくする = 統一のチャンネルで情報を整理し、そこにシェアしやすい空気を作る何をすべきかわ

    【いでよ障害対応太郎】我々はインシデントにどう向き合っているのか 〜社内向け障害対応リスト付き〜