Coder Social home page Coder Social logo

knowledge's People

Contributors

kawasin73 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

knowledge's Issues

Mmap:Mmap への書き込みのバッファリング

レコードを追記する場合に、1件ごと Mmap された領域へコピーする場合と、バッファリングして複数件を一度にコピーする場合でどの程度パフォーマンスに開きがあるのか調査する

C:nginx のプラグインを作ってみる

ログの出力を、syslog、ファイル以外のものに転送するプラグインを作ってみる

nginx がよくわからなかったら、Apache の設計を読んでみる。デーモンプログラムとしての設計は似ている。
Apache 1.3, 1.4 などの1系をみるとよい

Algorithm:KVS におけるコンパクション

KVS で、データが削除された時にフラグメンテーションが起こる。
複数のデータの順序や位置を入れ替えることによって空き領域を結合し、連続した空き領域を増やすために、コンパクションが行われる。

各種 KVS でコンパクションがどのように行われているかを調査する。

  • badger
  • redis
  • leveldb
  • rocksdb
  • boltdb

Algorithm:Postgres における XID の wraparound

Postgres では、すべてのトランザクションに単調増加する XID を付与してトランザクションの順序を記録している。
しかし、XID は、unsigned 32bit int であるので上限があり、その上限に達した時に周回(wraparound)する必要がある。

その wraparound の手法を調査する。

ただし、トランザクションIDは32bitのunsigned intなので、これをずっと使い続けると、どこかでwrap around(周回)します。そのため、PostgreSQLの内部ではXIDの周回をうまくハンドリングするような仕組みが実装されています。
https://www.postgresqlinternals.org/chapter3/

DPDK(Data Plane Development Kit)

Data Plane Development Kit は、ネットワーク処理に特化したアプリケーションを作成するためのソフトウェアライブラリ

調査:メモを管理するアプリ

自分のメモを管理するアプリが欲しいので調査する

欲しい機能

  • Mac、iPad、(できれば)iPhone で使える
  • クラウドに保存される
  • Markdown でかける
  • UI が綺麗
  • 日付で分類できる
  • タグで分類できる
  • いい感じに分類できる

Mmap の性質調査

Mmap を取り扱う上で気になることを調査する

  • Mmap へのデータ書き込みをバッファリングと速くなるか #13
  • Mmap でのページアウトのタイミング #16
  • msyncfsync の関係 #17

本:省メモリプログラミング

省メモリプログラミングを読みます。

「スモールメモリソフトウェア」とは、好きなだけのメモリを使えないすべてのソフトウェアをいう

amazon

img_3577

Mmap:ページアウトのタイミング

Mmap でファイルをマッピングしたとき仮想メモリ空間のみを確保し、実メモリは割り当てない。

仮想メモリ空間はページ(4KB etc...)ごとで管理され、あるページに初めてアクセスしたとき page fault が発生しファイルの内容をページキャッシュにロードして、ページキャッシュを仮想メモリに対応させる。(ページイン)

Mmap でページインされたメモリがいつ解放される(ページアウト)のか、そのタイミングを調査する。

Mmap:msync と fsync の関係

Go 言語では、syscall パッケージに syscall.Mmap()syscall.Munmap() が用意されているが、msync に相当するインターフェイスは用意されていない。

一方、Mmap を実行する時にはファイルディスクリプタが必要になるが、ファイルディスクリプタを提供する os.File 構造体は Sync() インターフェイスを用意しており、内部で fsync システムコールを実行している。

mmap した内容がディスクに書き込まれたことを保証するために、fsync を利用することができるかどうかを調査する。

目次

勉強になるモジュール

  • FoundationKit #2
  • Apache Portable Runtime Module #3
  • DPDK #10

読んだ本

  • プログラミング作法 #4
  • 省メモリプログラミング #5
  • 詳解 UNIX プログラミング #32
  • Effective Java 第3版 #33
  • Android を支える技術 I #34
  • Android を支える技術 Ⅱ #35
  • #36

調査

  • システムコール(Linux) #11
  • mmap #15
  • SILO:DB の新しいトレンド
  • hash map テーブルの拡張サイズ(素数?)
  • メモを管理するアプリ #24
  • DJB #22
  • framegraph パフォーマンスを見るツール

1人前のプログラマになるために

  • httpサーバーをフルスクラッチで C 言語で実装する #20
  • C 言語に詳しくなる #21
  • nginx のプラグインを作ってみる #26
  • 競技プログラミング #27

参考になるサイト

  • asciiflow
    • 文字列で簡単な絵をかけるサイト
  • stackedit
    • マークダウンエディタ
    • mermaid でフロー図を書くことができる
  • Rosetta Code
    • 様々なタスクを複数の言語でそれぞれどのように実装するかをまとめている
  • HackerRank

    ソフトウェアエンジニアのスキルをスコア化し、企業の適切な技術者採用につなげるプラットフォーム
    コード・チャレンジ」と呼ばれる35のプログラミング言語、4000を超える無料公開のテストによって自らのスキルを証明することができ、また企業が設定した特定の問題を解くことで、成果によっては面接に進み採用オファーをもらうことができる
    https://svs100.com/hackerrank-2/

  • overleaf
    • LaTex のブラウザエディタ
  • draw.io

学んだこと

  • 技術ドキュメンテーションの考え方 #19
  • ソフトウェアの解説ドキュメントの着目点 #18
  • 技術選定のドキュメントのまとめ方 #6
  • 設計のやり方 #9
  • issue の考え方 #23
  • ベンチマークの取り方 #12
  • コーディングをするときの心得 #31

アルゴリズムなど

  • postgres における xid の wraparound #7
  • B-tree のアルゴリズムと実装 #8
  • メモリアロケーションにおけるフラグメンテーションへの対策 #14
  • 基数木(Patricia tree, Radix tree)#25
  • KVS におけるコンパクション #29
  • ファイルシステムのジャーナリング #30
  • Lock-free と Wait-free

パフォーマンス比較

  • Golang におけるインターフェイス呼び出しと関数ポインタ呼び出しの比較 kawasin73/bitset#2
  • Mmap へのデータ書き込みをバッファリングするかどうか #13

その他

  • 鉄拳のオンラインゲームの設計

C 言語に詳しくなる

C 言語についてのあれこれを調べる

  • デファクトなライブラリ
    • ネットワークライブラリ
      • ZeroMQ

競技プログラミング

アルゴリズムとデータ構造はプログラマにとっての筋肉である。

筋肉を鍛えるために競技プログラミングをする。

また、高速で効率的なプログラミングの場面でよく利用される C++ を利用することで、C++ になれる

HTTP サーバーを C 言語で実装する

1人前のプログラマとしての技術を身につけるために HTTP サーバーを C 言語でフルスクラッチで実装する。

HTTP サーバーは、TCP ソケットの扱い方、リクエストを読み込むバッファとプロトコルパーサーの実装方法、クライアントの死活監視や終了処理、プラグイン機構、バッファキャッシュのためのファイル操作など、ソフトウェアの様々なエッセンスが必要になるプロダクトである。

これを勉強しながらフルスクラッチで実装することで、C 言語とソフトウェアの構築手法を学ぶ。

https://github.com/kawasin73/c-http

設計:設計のやり方

  • 神の目で大雑把に動きを考える。それから、データサイエンスを適用する
  • 課題がある場合はそのことを明記して next feature に回す

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.