ブックマーク / kaigai.hatenablog.com (12)

  • 秒速で10億レコードを処理する話 - KaiGaiの俺メモ

    これまでのPG-Stromの性能測定といえば、自社保有機材の関係もあり、基的には1Uラックサーバに1CPU、1GPU、3~4台のNVME-SSDを載せた構成のハードウェアが中心だった。*1 ただソフトウェア的にはマルチGPUやNVME-SSDのストライピングに対応しており、能力的にどこまで伸ばせるのかというのは気になるところである。 そこで、方々に手を尽くして、次のようなベンチマーク環境を整備してみた。 (機材をお貸し頂いたパートナー様には感謝感激雨あられである) 4UサーバのSYS-4029GP-TRTというモデルは、GPUをたくさん乗っけるためにPCIeスイッチを用いてPCIeスロットを分岐している。ちょうど、PCIeスイッチ1個あたり2個のPCIe x16スロットが用意されており、同じPCIeスイッチ配下のデバイス同士であれば、完全にCPUをバイパスしてPeer-to-Peerのデ

    秒速で10億レコードを処理する話 - KaiGaiの俺メモ
    koyancya
    koyancya 2019/11/01
  • GpuJoin + GpuPreAgg combined kernel - KaiGaiの俺メモ

    以下のクエリは、t0とt1の2つのテーブルをJOINし、その結果をGROUP BYして出力するものである。 しかし、EXPLAIN ANALYZEの出力には奇妙な点がある。 postgres=# explain analyze select cat,count(*),avg(ax) from t0 natural join t1 group by cat; QUERY PLAN -------------------------------------------------------------------------------- GroupAggregate (cost=955519.94..955545.74 rows=26 width=20) (actual time=5964.955..5964.972 rows=26 loops=1) Group Key: t0.cat -

    GpuJoin + GpuPreAgg combined kernel - KaiGaiの俺メモ
    koyancya
    koyancya 2017/09/06
  • 動いた!SSD-to-GPU Direct DMA - KaiGaiの俺メモ

    ここしばらく、NVMe-SSDからGPUへとPeer-to-Peer DMAを行うためのLinux kernelドライバを書いている。 これは昨年末のPGconf.JPのLTでアイデアを先に発表したもので、従来は、例えばテーブルスキャンに際して90%の行がフィルタリングされる場合であっても、データをストレージからRAMにロードしていた。しかし、どうせフィルタリングするのであれば、バッファのために利用したRAMのうち90%は無駄である。 基的なアイデアは、ストレージからのデータロードに際して、CPU側のRAMではなく、GPU側のRAMへロードし、そこで数百~数千コアの計算能力を使って行のフィルタリングや、あるいは、テーブル同士のJOINや集約演算を行ってしまう。そして、これらの前処理が終わった段階でCPU側へデータを書き戻してやれば、CPUから見ると『ストレージからデータを読出したら、既に

    動いた!SSD-to-GPU Direct DMA - KaiGaiの俺メモ
    koyancya
    koyancya 2017/09/06
  • Pascal以降のUnified Memoryを使いたおす。 - KaiGaiの俺メモ

    今でこそTESLA P40に24GBのRAMが載り、コンシューマ向けでもGTX1080Tiに11GBのRAMが搭載されてたりと、GPU側でも10GBを越えるメモリを積むことは珍しくなくなってきた*1。 長らく自分の開発環境で頑張ってくれたGTX980は(当時のハイエンド製品だったにも関わらず)4GBのRAMしか積んでおらず、基的には、希少資源であるデバイスRAMをどのようにアロケーションするかというのは、データベースのワークロードをGPUで処理する上での大問題であった。 例えば、OUTER側から20万行を読み出して*2、INNER側の1万行とJOINする処理を考えた場合、最悪ケースでは20万行×1万行で20億行が生成されることになる(CROSS JOIN)。 もちろん、PostgreSQLの統計情報からある程度の推計は可能であるし、JOINの結果生成される行数というのはコスト推計値にダイ

    Pascal以降のUnified Memoryを使いたおす。 - KaiGaiの俺メモ
    koyancya
    koyancya 2017/08/16
  • NECを退職し、新会社を立ち上げました。 - KaiGaiの俺メモ

    ご報告が遅れましたが、6月30日付で新卒の2003年から14年あまり勤務したNEC退職しました。 また、日、東京法務局品川出張所においてヘテロDB株式会社の登記申請を行い、また、併せて新会社のチーフアーキテクト兼代表取締役社長に就任しました。 今後は、前職では実現できなかった、GPUSSDなどヘテロジニアスな計算機資源を活用する事で、高性能、低価格、使いやすさを両立するデータベース製品の事業化を目指していく事になります。 どうぞよろしくお願いいたします。 web: http://heterodb.com/ 弊社が入居する西大井創業支援センター(品川区) 10年以上も勤務した会社を辞めてスタートアップを立ち上げるというのは、おそらく人生の中でも上位にい込むビッグイベントの一つだと思うので、今の決意や創業に至る一連の流れについて記録を残しておこうと思います。 (書き下してみたら意外と長

    NECを退職し、新会社を立ち上げました。 - KaiGaiの俺メモ
    koyancya
    koyancya 2017/07/05
  • 進捗)SSD-to-GPU ダイレクトSQL実行機能 - KaiGaiの俺メモ

    ここ暫くブログでまとめていなかった、SSD-to-GPUダイレクトSQL実行機能の進捗について。 この機能をかいつまんで言うと、NVMe-SSDに格納されているPostgreSQLのデータブロックをGPU RAMに直接転送し、そこでSQLのWHERE句/JOIN/GROUP BYを実行することで見かけ上のI/O量を削減するという代物である。 NVIDIAのTesla/Quadro GPUが対応するGPUDirect RDMA機能を使い、SSD<=>GPU間のデータ転送を仲介するLinux kernel moduleを使えば、CPU/RAMにデータをロードする前にGPU上での処理を行うことができる。 しばらく前からScan系の処理には対応していたが、JOIN/GROUP BYへの対応を加え、さらにPostgreSQL v9.6のCPU並列にも追従したということで、簡単なベンチマークなら取れる

    進捗)SSD-to-GPU ダイレクトSQL実行機能 - KaiGaiの俺メモ
    koyancya
    koyancya 2017/04/24
  • AWSのP2.*インスタンスで PG-Strom を試す - KaiGaiの俺メモ

    従前、AWSの提供するGPUインスタンス g2.* に搭載されているGPUはGRID K520というちょっと古いモデルで、PG-Stromは非対応だった。 理由は、一年ほど前にComputing Capability 3.5以降で対応のDynamic Parallelism機能を使うように全面的に作り直したからで、詳細は以下のエントリを参照。 kaigai.hatenablog.com その後、昨年の10月にAWSは新世代*1のGPUインスタンスを新たにリリースした。 japan.zdnet.com これでPG-Stromの動作要件を満たすようになった上に、特にメモリ搭載量で相応の強化が行われたため、例えばPGconf.ASIAで発表を行った創薬領域の類似度サーチのような、I/Oが支配的でないようなワークロードであれば相応の効果が見込める、ハズである。 発表から少し間が空いてしまったが、p

    AWSのP2.*インスタンスで PG-Strom を試す - KaiGaiの俺メモ
    koyancya
    koyancya 2017/01/13
  • Beyond the 1GB limitation of varlena - KaiGaiの俺メモ

    This article is a part of the PostgreSQL Advent Calendar 2016. According to the request by Joe Conway (@josepheconway), I wrote this article in English. I like to share the discussion we had at the PostgreSQL developer unconference on the day before PGconf.ASIA 2016, and the related idea of mine. PostgreSQL supports variable length data types; like text, bytea, json, numeric, array and so on. Thes

    Beyond the 1GB limitation of varlena - KaiGaiの俺メモ
    koyancya
    koyancya 2016/12/05
  • エルザ・ジャパン様の対応が神レベルだった件 - KaiGaiの俺メモ

    雑文です。 現在取り組んでいる SSD-to-GPU ダイレクト機能の実装には、PostgreSQL/PG-Strom側の機能拡張だけれなく、NVMe SSDからGPU RAMへのDMAを実行する Linux kernel ドライバの開発が必要になる。 Linux kernelにはDMAを実行するためのインフラが既に多数揃っているので、ドライバの開発自体はそれほど大仕事ではないのだが、GPUがその機能に対応している必要がある。 NVIDIA提供のドキュメントによると、 GPUDirect RDMA :: CUDA Toolkit Documentation GPUDirect RDMA is available on both Tesla and Quadro GPUs. と、あり、いわゆるコンシューマ向け廉価製品であるGTXでは対応していない。 対応していないというのは、GPU上のRAM

    エルザ・ジャパン様の対応が神レベルだった件 - KaiGaiの俺メモ
    koyancya
    koyancya 2016/04/19
    安心のエルザ
  • PostgreSQLのデータ構造はなぜ並列プロセッサ向きではないか。 - KaiGaiの俺メモ

    今年もPostgreSQL Advent Calendar 2015に参加しています。 前からちょくちょく『PG-StromってXeon Phiだとどーなんですか?』的な質問を受ける事があんですが、データ構造から見て難しいので『勘弁!』という理由を紹介してみたいと思います。 PostgreSQLのレコードは、内部的には HeapTupleHeader 構造体を先頭とする可変長データとして表現されています。 struct HeapTupleHeaderData { union { HeapTupleFields t_heap; /* MVCC関連情報 */ DatumTupleFields t_datum; /* xmin, xmaxとか... */ } t_choice; /* current TID of this or newer tuple */ ItemPointerData t_

    PostgreSQLのデータ構造はなぜ並列プロセッサ向きではないか。 - KaiGaiの俺メモ
    koyancya
    koyancya 2015/12/15
  • Sort by Table Partition? - KaiGaiの俺メモ

    v9.6向け開発ネタとして思い付いたアイデア。 でも、個人的には他に優先すべき機能*1もあるので、たぶん自分ではできない。誰かヨロシク的な。 タイムスタンプをキーとして複数の子テーブルにパーティション化されたテーブルがあるとする。 これは結構一般的な伝票データの作り方なのでそれほど変な仮定でもない。 各子テーブルに設定されたCHECK()制約から、特定のキーによる並べ替えを行う場合に各々の子テーブルに大小関係が定義できる場合。 例えば、以下のようなテーブル構成で、キー "YMD" によるソートを行うケースを考えると、tbl_2013テーブルに格納されている全てのレコードは、他のテーブルから読み出したレコードよりも最近の日付を持っていると言える。中を読むまでもなく。 そうすると、キー "YMD" による並べ替えを行うケースであっても、ソートを行う問題領域を小さくする事ができるので、その分、処

    Sort by Table Partition? - KaiGaiの俺メモ
    koyancya
    koyancya 2015/10/29
  • 並列Aggregateに向けて - KaiGaiの俺メモ

    PostgreSQL Advent Calendar 2014に参加しています。 数日前、SimonがPgSQL-Hackersに面白いパッチを投げてきた。 曰く、 KaiGai, David Rowley and myself have all made mention of various ways we could optimize aggregates. Following WIP patch adds an extra function called a "combining function", that is intended to allow the user to specify a semantically correct way of breaking down an aggregate into multiple steps. Gents, is this what

    並列Aggregateに向けて - KaiGaiの俺メモ
    koyancya
    koyancya 2014/12/24
    PostgreSQL 、どでかい種がいっぱい埋まってる感じする
  • 1