タグ

Blogとメモリに関するslay-tのブックマーク (23)

  • Go製ミドルウェアのメモリリークを解決した話 - Mirrativ Tech Blog

    インフラ・ストリーミングチームの id:udzura (@udzura)です。今回は、Goミドルウェアのメモリリークを見つけて解決する際に、どのようなプロセスを踏んでいったかを解説します。 Go製のミドルウェアの概要 ミラティブでは、Webアプリケーションのみならず、ミドルウェアに相当する部分についても必要なものは内製しています。その中の一つに、社内で「Radisha」と呼んでいる各種集計とキャッシュなどを行うためのミドルウェアがあります。Radishaは以下のような特徴を備えています。 GET、SET、SETEXなど基的なRedis互換のコマンドを実装している。そのため、既存のRedisクライアントライブラリから操作が可能である。 ランキング集計、一定時間内のアクセス集計などが行えるよう、Redis にない独自のコマンドを実装している。 高い可用性を志向しており、オンメモリのデータは

    Go製ミドルウェアのメモリリークを解決した話 - Mirrativ Tech Blog
  • Goのロギングライブラリから見たゼロアロケーション - Speee DEVELOPER BLOG

    はじめに UZOUという広告配信プラットフォームでバックエンドエンジニアをしている@muroon01です。 Goのロギングライブラリであるzerolog, zapは(使用法によりますが)ゼロアロケーションであると言われています。 そこでゼロアロケーションのロギングライブラリとは一体どのようなつくりなのか、またGoのソースをゼロアロケーションにする方法について記述していきたいと思います。 ゼロアロケーションとは? (メモリ)アロケーションとはプログラムが動作するのに必要なメモリの割り当てを意味しており、スタック領域へのもの(静的アロケーション)とヒープ領域へのもの(動的アロケーション)が存在します。 スタック領域へのメモリの割当は割当サイズおよび確保・解放されるタイミングがプログラムの記述時に静的に決まります。 一方、ヒープ領域は宣言時にメモリの最大割当サイズを指定せずに、プログラム実行時に

    Goのロギングライブラリから見たゼロアロケーション - Speee DEVELOPER BLOG
  • spliceを使って高速・省メモリでGzipからZIPを作る - knqyf263's blog

    良い話を含むので概要の最初だけでも読んでもらえると幸いです。この話が実用的かと言うと多分全然実用的ではないので理解しても仕方ないかなと言う気がします。 概要 ファイルフォーマット gzip 10-byteのヘッダ 拡張ヘッダ ファイル体 フッタ(trailer) zip ローカルファイルヘッダ Data descriptor セントラルディレクトリエントリ セントラルディレクトリの終端レコード gzipからzipへの変換 gzipヘッダの処理 gzipファイル体の処理 gzip trailerの処理 複数gzipファイルの連結 PoC まとめ 概要 先日Dirty PipeというLinuxカーネルの脆弱性が公表されました。 dirtypipe.cm4all.com この脆弱性の原理自体も面白いのですが、その前に報告者の組織で行っているGzipZIPの処理で引っかかったのでまず先にそち

    spliceを使って高速・省メモリでGzipからZIPを作る - knqyf263's blog
  • Rustで実装するmalloc - NTT Communications Engineers' Blog

    この記事は、NTT Communications Advent Calendar 2021 21日目の記事です。 はじめに こんにちは、イノベーションセンターの鈴ヶ嶺(@suzu_3_14159265)です。普段は、クラウド・ハイブリッドクラウド・エッジデバイスなどを利用したAI/MLシステムに関する業務に従事しています。日は、Rustで動的メモリ確保(dynamic memory allocation)のmallocを実装してPythonvimを動かしてみようという内容をお届けします。 また、去年もRustネタのアドベントカレンダーを書いているのでぜひ見ていただけると嬉しいです! NTTコミュニケーションズ Advent Calendar 2020 Rustで実装するNetflow Collector 実装するmallocのアルゴリズム 今回実装するmallocのアルゴリズムは小さな

    Rustで実装するmalloc - NTT Communications Engineers' Blog
  • Active Recordともっと仲良くなって自然に優しいコードを書くぞ - SmartHR Tech Blog

    こんにちは。SmartHRRails顧問業をしています @willnetです。最近は主にリファクタリングをしています。 SmartHRのバックエンドは基的にRubyで書かれています。しかし入社してくるバックエンドエンジニアは必ずしもRubyRailsを長年使ってきた人だけではなく、前職では他言語を使っていてRuby(Rails)はほとんど使ったことがないという人もいます。 webアプリケーションを作る、という点ではどの言語でも抑えるべき点は同じですが、RubyRailsに特化した考え方や書き方もありますよね。SmartHRではそれを効率よく習得してもらうために読書会を開催したり、社内のドキュメントツールに知見を書いて共有したりしています。 僕も社内のドキュメントツールにActive Recordの付き合い方ついて書いたところ、評判が良く「テックブログにしたら?」と言われたので今回一

    Active Recordともっと仲良くなって自然に優しいコードを書くぞ - SmartHR Tech Blog
  • 新しいLinux namespaceである「CPU Namespace」について - inductor's blog

    はじめに この記事は、以下のlwn.netの記事を抄訳したものです。 lwn.net CPU Namespaceのご紹介 これはCPU namespaceのインターフェスとそのメカニズムを証明するための初期プロトタイプです。 現状におけるCPUリソースの制限方法 Linuxカーネルでは、タスクのCPUリソースを制御するために2つの方法を提供します。 cgroup cpuset: 該当のグループにアタッチされた単一または複数のタスクの集合に対し、CPUリソースを制限するためのメカニズムです。 syscall sched_setaffinity: CPUの集合に対して特定のタスクをピニングするためのシステムコールです(訳注: NUMA利用時の条件下などにおいてよく利用される手法)。 また、カーネルはシステムにおいて利用可能なCPUリソースを閲覧可能にするために3つの方法を提供します。 sys/

    新しいLinux namespaceである「CPU Namespace」について - inductor's blog
  • ブラウザにおけるメモリリークを解決するために読んでおけると良い資料 - mizdra's blog

    最近趣味仕事の Web アプリケーションでメモリリークに遭遇して、頑張ってメモリリークの原因を突き止めて修正する、ということがあった。その過程でメモリリークについて色々調べて知見が溜まったので、学習資料の紹介という形でアウトプットしてみる *1。 前置き 紹介する記事がかなり偏っていることに注意 冒頭で触れたメモリリークを解決するために読んだ記事をまとめただけなので、内容にそれなりの偏りがある 例えば id:mizdra が遭遇したメモリリークは全てブラウザ上で発生していたものだったので、これから紹介する内容も主にブラウザにおけるメモリリークに焦点を当てたものになる GC がどうメモリをどう解放しているか、何故メモリリークが発生するのかは全てカット 調べれば色々な記事が出てくるので、必要に応じて読んでください 基的な知識を抑える まずメモリリークとメモリ撹拌の違いを学ぼう どちらも同じ

    ブラウザにおけるメモリリークを解決するために読んでおけると良い資料 - mizdra's blog
  • プログラミング言語の未来はどうなるか | κeenのHappy Hacκing Blog

    κeenです。最近JEITAのソフトウェアエンジニアリング技術ワークショップ2020に参加したんですが、そこで五十嵐先生、柴田さん、Matzとパネルティスカッションをしました。その議論が面白かったので個人的に話を広げようと思います。 年末年始休暇に書き始めたんですが体調を崩したりと色々あって執筆に時間がかかってしまいました。 時間を置いて文章を書き足していったので継ぎ接ぎ感のある文体になってるかもしれませんがご容赦下さい。 というのを踏まえて以下をお読み下さい。 いくつか議題があったのですが、ここで拾うのは一番最後の「プログラミング言語の未来はどうなるか」という話題です。 アーカイブが1月末まで残るようです。もうあと数日しかありませんが間に合うかたはご覧下さい。 そのとき各人の回答を要約すると以下でした。 五十嵐先生:DSLを簡単に作れる言語というのが重要。それとプログラム検証、プログラム

    プログラミング言語の未来はどうなるか | κeenのHappy Hacκing Blog
  • Goで開発した配信サーバーのメモリ使用量問題に向き合う - Mirrativ Tech Blog

    こんにちは。ストリーミングチームの松です。 Mirrativのストリーミングチームは、低遅延配信や、通知ぼかしというような機能を追加するため、配信のorigin serverの前段にtranscoder serverというものを導入してきました。 tech.mirrativ.stream tech.mirrativ.stream transcoder serverはGoによる内製のミドルウェアであり、主に映像の変換を行う目的で作られました。現在は配信プロトコルの変換(既存プロトコル -> 低遅延プロトコル)などを行っています。また、実際にはサーバー上のDockerコンテナ内で動作しています。 transcoder serverを展開していくにあたり、メモリ使用量が常に増え続ける問題が起きていたため、その際に直面したGoの実メモリ使用量に関する話を書きたいと思います。 メモリ使用量の増加問

    Goで開発した配信サーバーのメモリ使用量問題に向き合う - Mirrativ Tech Blog
  • k8sのIDE、Lensが便利な件について | cloud.config Tech Blog

    記事はFIXER Advent Calendar 2020 15日目の記事です。 k8sお勉強中の冨です。半年間毎日k8sと睨めっこして、kubectlでの操作にも多少慣れてきました。しかし流石に毎日となるとグラフィカルで操作性の良いツールとか無いかなぁと思ってしまったりするものです。そこで調べていたらk8sのIDEなるものが。Lensと言うそうです。記事ではLensとは何か、Lensを使って便利だったところ、Lensにk8sクラスターを登録するまでを紹介します。 Lensとは Lensとはオープンソースかつ無料のk8sのIDEです。Electronベースのアプリケーションで、WindowsmacOSLinuxをサポートしています。結構人気みたいで、Githubのスター数は11000件を超えています。IDEの見た目はこんなかんじ↓ Lensを使って便利だったこと クラスターの切り

    k8sのIDE、Lensが便利な件について | cloud.config Tech Blog
  • PostgreSQLのメモリアーキテクチャを知る

    こんにちは、GMOアドマーケティング インフラ開発部のhakumaiです。 前回の記事「AWSエンジニアGCPメインの会社に転職してみた」を読んでいただいた方々、ありがとうございます。 初めまして、GMOアドマーケティング インフラ開発部のhakumaiです。今年1月にHRTech系企業からGMOアドマーケティングに転職してきました。現職では、女子向けメディア「めるも」のインフラ業務に携わり、日々業務に励んでおります。今回は、私が転職してみて感じたインフラ技術のギャップの一部についてお話しいたします。 前職でのインフラ環境・経験について前職のHRTech企業で触っていたインフラ環境は、ほぼAWSでした。インフラの保守運用業務に加え、新規プロダクトのインフラアーキテクチャ設計構築を経験したこともあり、V... 今回は2回目の投稿になります。 前回と同様に、「AWSエンジニアから見たGCP

    PostgreSQLのメモリアーキテクチャを知る
  • Rustでインメモリキャッシュ作った話 | κeenのHappy Hacκing Blog

    κeenです。先日発表したRustで作るインメモリキャッシュが全然話し足りなかったので色々補足します。 実は今回の話題はソフトウェアというよりはハードウェアの仕組みに由来するものなのですが、ソフトウェアにも応用できるだろうということで試してみた結果です。 ハードウェアでもソフトウェアでもアクセスするデータは時間局所性、つまり短期間にアクセスするデータには偏りがあるというのが仮定としてあります。 よくある例が冪乗則、あるいは80:20の法則とよばれるもので、アクセス数上位20%のものが全体の80%のアクセスを占めたりします。 データ全部はメモリに乗らないけど20%くらいだったら載るようなケースではその20%を上手く選んでメモリに載せられる仕組みがあればパフォーマンスがあがるはずです。 ということでそのような仕組み、キャッシュがほしいよねというのがモチベーションです。 キャッシュの話 まずはキ

    Rustでインメモリキャッシュ作った話 | κeenのHappy Hacκing Blog
  • NuxtのSSRモードでメモリリーク?原因はaxios? - ANDPAD Tech Blog

    はじめに 最近金髪から黒髪に戻して更生しました藤井(フロントエンドエンジニア)でございます。久々にテックブログに貢献させて頂きます! 今はメインの施工管理機能の改修の傍ら、新機能開発にも携わっておりまして、フロント側はSSRモードのNuxtを採用しております。さて、そんな中SREチームから「フロントエンドがメモリリークしていませんか?」との通報が入りました。 いやいや、そんなハズは・・と思いながらもDatadogを見てみると見事にメモリ消費量が右肩上がりに増えていってます。なぜじゃ・・・。 調査開始 メモリリークになるような処理を入れた覚えはないぞ!と思いつつも調査開始です。ひとまずChromeのDevtoolでPerformanceやMemoryタブを見ながら確認しますが、これと言って原因が見つかりません。 おかしい・・。なんでだろう。 あれこれ試しましたが解決せず、ほぼ1日消化しました

    NuxtのSSRモードでメモリリーク?原因はaxios? - ANDPAD Tech Blog
  • はてなブログのキャッシュ周りをきちんと改善したら、アプリケーションサーバの台数を半分にできた話 - Hatena Developer Blog

    はてなブログでSREをやっているid:cohalzです。 2019年12月頃からid:utgwkkやid:onkとともに、はてなブログにおけるキャッシュ周りの改善を行いました。その結果、次のような成果が得られました。 ブログ記事のキャッシュヒット率が、1日平均で8%から58%に向上 アプリケーションサーバの台数を、以前の半数以下に削減 DBに届くリクエスト数が、以前の3分の2まで減少 レスポンスタイムの平均が、以前の8割まで減少 この記事では、実際にどういった改善を行ったのか、その際に気をつけたことや大変だったことを紹介します。 はてなブログがVarnishを導入した経緯と課題 開発合宿をきっかけに問題が明らかになる 進め方をまず考える ホストのメモリをできるだけたくさん利用する メモリを積んだホストでなぜかレイテンシが悪化 キャッシュが分散しないようVaryヘッダを使う デバイス情報を適

    はてなブログのキャッシュ周りをきちんと改善したら、アプリケーションサーバの台数を半分にできた話 - Hatena Developer Blog
  • なぜDiscordはGoからRustへ移行するのか - MISONLN41's Blog

    DiscordGoで書かれていたコンポーネントをRustに移行しているらしい。Windowsの低レイヤ層の一部で採用されるなど、近年どんどん注目を集めているRustだが、DiscordはなぜRustを選んだのか。その最大の特徴である「パフォーマンスを妨げる要素であるGCを排した上でメモリセーフな言語」であることにクローズアップした面白い内容だったので、えっちらおっちら和訳してみた。英語が得意というわけでもなく、無理やり翻訳しているところも多いのであしからず。ほとんどGoogle翻訳のままというのは内緒。 追記: 7/31にはてブでいっぱいブックマークされたみたい。気になったブコメへの返信を末尾に追記した。 原文: Why Discord is switching from Go to Rust - Discord Blog Rustは様々な分野において第一級の言語になりつつあります。Di

    なぜDiscordはGoからRustへ移行するのか - MISONLN41's Blog
  • Goでインメモリキャッシュを取り扱う時にハマった話 - Gunosy Tech Blog

    こんにちは、Gunosy Tech Labの片木(@jkatagi)です(普段はGunosyデータ分析ブログの方に生息しています)。 記事では社内のとあるAPIGo製)の改修をしていたときに遭遇したインメモリキャッシュの落とし穴について共有します。 普段からGoを書いている人にとっては当たり前のことかもしれませんが、アンチパターンとして共有できれば幸いです。 落とし穴にハマるGopherくん 要約 APIのアーキテクチャについて なにが起きたのか なぜ起こったのか 単体テストでは気づけなかったのか どう解決したか おわりに 要約 長くなるので最初に要約しますと 当該APIでインメモリキャッシュとして構造体のスライスを格納していた キャッシュしている値を変えてしまうとキャッシュ元も変わってしまう という事態が発生しました。 ですのでインメモリキャッシュを使う時は対象の値が変更されないこと

    Goでインメモリキャッシュを取り扱う時にハマった話 - Gunosy Tech Blog
  • CUDAを一枚の絵にまとめてみた - OPTiM TECH BLOG

    まえがき 初めまして、R&Dチームの宮﨑です。趣味はFPSをやってます。150時間やってますが未だにドンかつをべられていません。普段は深層学習のベンチマークを取ったりしています。 実はひと昔前からあった深層学習。近年実用性が増して一大ブームとなっています。実用的になった背景の一つとしてGPUを用いた高速化により深層学習の学習及び推論が実用的な時間で実行できるようになったことがあります。NVIDIAから提供されるCUDAを用いるとC言語に拡張を加えた形式でCPU+GPUのヘテロジニアスコンピューティングを記述できます。 CUDAを使用するにはCPU+GPUの環境がどのようなハードウェア構成をしており、その上でCUDAがどのようなシステムを構築しているのかを理解する必要があります。この理解なしに漫然とサンプルコードを真似するだけでは意図通りのパフォーマンスが出なかったり、そもそもAPIの意味

    CUDAを一枚の絵にまとめてみた - OPTiM TECH BLOG
  • x86上のLinuxとFreeBSDにおいて、メモリキャッシュを無効にするカーネルモジュールを書いた話 - alphakai’s tech blog

    どうも、前回の記事が思っていたよりも反響があり、Blogを書くモチベーションが高まり、また記事を書くことにします。 ↑とか書いたんですが、このへんまで書いて50日くらい記事を書くのを放置していたので、ちゃっちゃと書き上げることにします。 今回はx86なCPUに存在するControl Registerのうち、CR0に存在するCache Disableフラグを操作するカーネルモジュールをLinux、FreeBSDのそれぞれ向けに作ったのでそれについて記述します。 それでは、続きからどうぞ。 はじめに、作成したカーネルモジュールのリポジトリへのリンクを掲載します。 Linux版のカーネルモジュール(procfsとして実装) cr0cd FreeBSD版のカーネルモジュール(キャラクタデバイスとして実装)cr0cd_fbsd そもそもこれはなに 一言で言うと、メモリのキャッシュ(L1, L2, L

    x86上のLinuxとFreeBSDにおいて、メモリキャッシュを無効にするカーネルモジュールを書いた話 - alphakai’s tech blog
  • #dlang 所有権と借用をD言語に組み込む【翻訳】 - Kotet's Personal Blog

    Ownership and Borrowing in D – The D Blog を 許可を得て 翻訳しました。 誤訳等あれば気軽に Pull requestを投げてください。 ほとんどのプログラムはメモリを確保し、管理します。 プログラムが複雑になり、失敗がより大きな損害を引き起こすようになるにつれて、 メモリ管理を正しく行うことはますます重要になってきています。 一般的には以下のような問題があります。 メモリリーク(使っていないメモリを解放しない)二重フリー(複数回メモリを解放する)use-after-free(すでに開放されたメモリを参照する)問題は、どのポインタがメモリを解放する責任を持つか(つまり、メモリを所有しているか)、 どのポインタがメモリを参照しているか、どれが(スコープ内で)アクティブかです。 一般に以下のような解決策があります。 ガベージコレクション(Garbage

    #dlang 所有権と借用をD言語に組み込む【翻訳】 - Kotet's Personal Blog
  • Tensorコアを使ってみた - Fixstars Tech Blog /proc/cpuinfo

    このブログは、株式会社フィックスターズのエンジニアが、あらゆるテーマについて自由に書いているブログです。 アルバイトの大友です。 TensorコアのWMMA APIを使っている人があまりいなかったため、6月中はインターンとして、7月からはアルバイトとしてその使い方や性能を調べていました。 この記事はその成果をまとめたものです。 Tensorコアを使うことでFP16のSIMD計算(f16x2)に比べ密行列積を5倍程度高速化できました。 Tensorコアとは NVIDIA Voltaアーキテクチャから採用されたTensorコアは2つの$4 \times 4$のFP16行列の積を1サイクルで計算し、その累積和をFP16/FP32で取ることができる計算ユニットです。 cuBLAS, cuDNNなどのライブラリではCUDA 9からTensorコアを利用できます。 WMMA APIを用いた行列積計算

    Tensorコアを使ってみた - Fixstars Tech Blog /proc/cpuinfo