タグ

linuxとprogrammingに関するtztのブックマーク (29)

  • 拙著「Linuxネットワークプログラミング」:Geekなぺーじ

    Linuxネットワークプログラミング」というを書きました。 LinuxでCを利用してネットワークプログラミングを行うための解説書で、私にとって初の書籍執筆です。 昨年2月にソフトバンククリエイティブさんから書籍執筆のオファーを頂き、開始から約一年後の発売となります。 今回、C言語によるLinuxのネットワークプログラミング解説書籍を執筆する機会を頂けたのですが、書籍の大きな方向性として以下の点が挙げられます。 可能な限り、ソースコード全文を掲載する。断片的なソースコードだと手元で即座に試しにくい メインはIPv4を意識しながら書く ただし、getaddrinfo()を前提とし、IPv6が存在することを前提に書く IPv6移行がメインの書籍ではない。インターネットの世界がIPv4/IPv6デュアルスタックで運用されることになるという前提でネットワークプログラミング解説書を書いているだけ

  • アプリケーションがマルチスレッドでもマルチコアCPUを活かせない件 - blog.nomadscafe.jp

    もっと詳しい方のフォロー募集です アプリケーションがマルチスレッドになってもネットワーク処理が分散されなければマルチコアを活かせない典型的な例です。id:viverの古橋さんがs100kpsとしてあげていた件にも近いかも。 memcachedで現象を確認します。最近のmemcachedはマルチスレッドで動くようになっているので、まずはそれを確認します。 $ memcached-tool localhost stats|grep threads threads 4 スレッドが4つで起動しています。 負荷がそれなりにある状態(8000req/sec程度)で、コマンドラインでtopを開き、「1」キーを押して、CPUごとの使用率を表示します。(例はFedora8 kernel-2.6.23) Tasks: 77 total, 1 running, 76 sleeping, 0 stopped, 0

  • 革命の日々! linuxのmlockが凶悪な件について

    諸卿もご存知の通り、Linuxのメモリアロケーションはmalloc(), mmap()した段階ではメモリ割付をせず、最初にメモリにアクセスしたときに行うという俗に「first touch」と呼ばれるアロケーションポリシーを採用している。 さて、んでは、このmmap()したけどまだ実際にはメモリ割付されているないアドレスにたいしてmlock()したらどうなるか。 というと、この時点でメモリ割付が走る。 走るのはいいんだが、これがまたベラボーに遅い。 別にLinuxカーネルのアルゴリズムが悪いわけではなくて、メモリ割付をする=そのページを0クリアするという事なので、DRAMのアクセス速度が超えられない壁となって立ちはだかるわけだ。 じゃあ、どのくらい時間がかかるか計算してみよう。 まず、DRAMをDDR2 PC5300と仮定しよう。イマドキ、こんなもんよね。 これでアクセス速度理論値 5300

  • YANO's digital garage - パケット受信タイムスタンプ

    Linuxでパケット受信契機のタイムスタンプ採取方法。 ユーザーアプリからはsetsockoptでSO_TIMESTAMPを設定しておき、recvmsgで受信する都度せっせとCMSG_DATA(cmsg)経由で取得する形での仕組みが用意されている。具体的なコーディングサンプルだと char    inbuf[BUFSIZ]; char    cmsgbuf[CMSG_SPACE(sizeof(struct timeval))]; struct  cmsghdr *cmsg; struct  msghdr  msghdr; struct  iovec   msg_iov; struct timeval  *pTime, tv; const int on = 1; setsockopt(sock, SOL_SOCKET, SO_TIMESTAMP, &on, sizeof(on)); msg_

  • Manpage of CMSG

    Section: Linux Programmer's Manual (3) Updated: 1998-10-02 Index JM Home Page roff page 名前 CMSG_ALIGN, CMSG_SPACE, CMSG_NXTHDR, CMSG_FIRSTHDR - 補助データにアクセスする。 書式 #include <sys/socket.h> struct cmsghdr *CMSG_FIRSTHDR(struct msghdr *msgh); struct cmsghdr *CMSG_NXTHDR(struct msghdr *msgh, struct cmsghdr *cmsg); size_t CMSG_ALIGN(size_t length); size_t CMSG_SPACE(size_t length); size_t CMSG_LEN(size_t

  • Manpage of RTNETLINK

    Section: Linux Programmer's Manual (7) Updated: 2008-08-08 Index JM Home Page roff page 名前 rtnetlink, NETLINK_ROUTE - Linux IPv4 ルーティングソケット 書式 #include <asm/types.h> #include <linux/netlink.h> #include <linux/rtnetlink.h> #include <sys/socket.h> rtnetlink_socket = socket(AF_NETLINK, int socket_type, NETLINK_ROUTE); 説明 rtnetlink はカーネルのルーティングテーブルを読んだり変更したり するためのものである。これはカーネルが内部のサブシステムと 通信するためにも用いられて

  • Manpage of NETLINK

  • Manpage of NETLINK

    Section: Linux Programmer's Manual (7) Updated: 2008-08-08 Index JM Home Page roff page 名前 netlink - カーネルとユーザー空間の通信 (AF_NETLINK) 書式 #include <asm/types.h> #include <sys/socket.h> #include <linux/netlink.h> netlink_socket = socket(AF_NETLINK, socket_type, netlink_family); 説明 netlink はカーネルモジュールとユーザー空間のプロセス間で 情報をやりとりするために用いられる。 netlink は、ユーザープロセスに対しては 標準的なソケットベースのインターフェースを、 カーネルモジュールにはカーネルの内部 API を提供

  • straceを使ったデバッグ | OSDN Magazine

    プログラムが機能を果たせない場合には、有用なエラーメッセージを返し、問題を解決する手がかりを提供するのが理想的だ。しかし残念ながら、このような理想的な状況は珍しく、アプリケーションでエラーが発生したときに、手元に何の情報もないことも多い。 ここで、デバッグツールの登場だ。私にとってなくてはならないツールの1つが、straceだ。straceはシステムコールトレーサで、すでに実行されているプログラムによって発せられたコールを追跡する(straceを既存のPIDにバインドする)ことも、テストしたいプロセスをstraceに開始させることもできる。 では、straceの使い方を実例とともに見ていくことにしよう。 KDE起動時の問題 以前、私はKDEを起動する際の問題をデバッグしていた。返されたエラーメッセージからは、何の手がかりも得ることができなかった。 _KDE_IceTransSocketCr

    straceを使ったデバッグ | OSDN Magazine
  • Linux の identd が遅い理由 〜 debian の pidentd はひと味違う? : DSAS開発者の部屋

    identd というのは,いわゆる ident プロトコル(RFC 1413)を実装したデーモンの総称です.最近は使われる場面も減ってきたかもしれませんが,DSAS では一部この identd の返答結果に基づいてアクセスの可否を決定しているサービスが存在します(※1).そのため,identd の返答速度は重要になります. ※1 ident プロトコルは,クライアントからサーバ側への TCP 接続に関して,サーバ側がクライアント側に,その TCP 接続を所有しているユーザは誰であるかを問い合わせるためのものです.問い合わせた結果を何に用いるかはサーバ次第ですが,その仕組み上,問い合わせるサーバ側は問い合わせ先となるクライアント側の identd が自分が期待した回答を返してくれるものと信頼していることが前提となります.つまり,インターネット上のクライアントの identd の返答に基づいて

    Linux の identd が遅い理由 〜 debian の pidentd はひと味違う? : DSAS開発者の部屋
  • Linux Device Driver

    �$B%U%l!<%`?d>)$G$9$,!"�(B<A HREF="index_jp.html">�$B0l1~8+$k$3$H$O$G$-$^$9�(B</A>�$B!#�(B

  • CRS-wiki TOP - CRS Wiki

    *1 といってもTOPPERS JSPカーネルでは定義されていないみたいですが。。。 *2 #仕様書では高度な同期通信が先に来ますが、スタンダードプロファイルではサポートしなくても良いので、飛ばして、後にします *3 普通は、企業という集団でみているけれども、自分たちが属している集団が経済効率よく・他の集団よりもより優れた問題解決をしていくといった観点で見たい。だから、企業ではなく、集団としました。 Link: LinuxDriverへの道18?(6d) 練習用ページ(133d) wikiとは?(175d) ビジモテなギークへの道(324d) リンク(356d) ビジモテなギークへの道4(398d) umeへのコメント(421d) ビジモテギークへの道---会計概論編(425d) ビジモテギークへの道---経済学概論編(425d) ビジモテなギークへの道2(456d) ビジモテなギークへの

  • Linux Kernel Document Wiki @ SF.jp

    トップページへ Linuxカーネルに関する技術情報を集めていくプロジェクトです。現在、Linuxカーネル2.6解読室の第2章までを公開中。 目次まえがき第0章 Linuxカーネルの構成要素 0.1 Linuxカーネルとは 0.2 Linuxカーネルのソースコード 0.3 Linuxカーネル機能の概要 0.4 カーネルプリミティブ 0.5 プロセス管理 0.6 メモリ管理 0.7 ファイルシステム 0.8 ネットワーク 0.9 プロセス間通信 0.10 Linuxカーネルの起動 0.11 Linuxカーネルの動作例 Part 1 カーネルプリミティブ第1章 プロセススケジューリング 1.1 マルチタスク 1.2 プロセスとは? 1.3 プロセス切り替え 1.4 プロセスディスパッチャの実装 1.5 プロセススケジューラ 1.6 プロセススケジューラの実装 1.7 事象の待ち合わせ 1.8 最

    Linux Kernel Document Wiki @ SF.jp
  • masami Wiki*

    2023-12-28 ここはモナコモンテカルロ、絶対に抜けない 2016-09-02 TIPS/FS TIPS/SSH TIPS 2012-03-26 LPIC/101/XWindowSystem/XサーバとXDM 2012-02-22 LPIC/202 2012-02-02 大剣スキルt5b3 MHP3 大剣スキル 2012-01-29 ゲーム

    masami Wiki*
  • Linux netfilter Hacking HOWTO

  • 普通のやつらの下を行け: BFDでデバッグ情報の取得 - bkブログ

    普通のやつらの下を行け: BFDでデバッグ情報の取得 gcc に -g オプションを与えるとデバッグ情報をバイナリに埋め込むことができます。この情報は通常 gdb などのデバッガによって利用されますが、普通のプログラムでも利用できれば何かおもしろいことができるかもしれません。 普通のやつらの下を行けの第4回として、今回は BFD (libbfd) を用いてデバッグ情報を取得する方法を取り上げたいと思います。 BFD とは BFD (Binary File Descriptor library) は各種バイナリフォーマットに対して低レベルな操作を行うためのライブラリです。 GNU binutils に含まれています。Debian GNU/Linux なら次のコマンドでインストールできます。 % sudo apt-get install binutils-dev ここでは BFD の bfd_

  • ディレクトリの中にある大量の小さなファイルを高速に読み込む方法 - 射撃しつつ前転 改

    ディレクトリの中にある大量のファイルを高速に読み込む方法が知りたかったので、実験してみた。想定しているシチュエーションは、一つ一つのファイルは数KB程度だが数が多い、という場合である。適当な順番でアクセスすると、ランダムアクセスになってしまいとても時間がかかる。個々のファイルを読み込む順番はどうでも良く、すべてのファイルを処理することさえできればいいので、原理的にはシーケンシャルアクセスで処理できてしかるべきである。 まず、ファイルシステムについて。HDDやSSDなどのハードウェアにアクセスする際には、ファイル名などという概念はもちろん存在しない。ファイル名と実際のディスク上の対応を管理するのがファイルシステムの主な役割である。ファイルシステムは、ファイル名からそのファイルに対応するブロック番号(メモリアドレスみたいなもんだな)を調べて、そのブロック番号を指定してHDDやSSDにアクセスす

    ディレクトリの中にある大量の小さなファイルを高速に読み込む方法 - 射撃しつつ前転 改
    tzt
    tzt 2009/07/28
    ファイルシステムを使った時点で負けと言う気もする。
  • http://www.takatan.net/hiki/hiki.cgi?SO_SNDTIMEO-SO_RCVTIMEO

    tzt
    tzt 2009/05/08
    SO_SNDTIMEO オプションはconnect()にも有効らしい。
  • IBM Developer

  • naoyaのはてなダイアリー - sched_setaffinity(2) を使って任意のプログラムを任意のCPU上で動かす

    Linux 2.6 には sched_setaffinity(2) というシステムコールがあり、これを利用して任意のスレッドを(マルチCPU環境下で)特定の CPU で実行させることができます。http://www-06.ibm.com/jp/developerworks/linux/051028/j_l-affinity.shtml によるとリアルタイムプロセスでマネージャとなるスレッドをこのシステムコールで特定の CPU に固定する...といった応用が考えられるそうです。 へえ、と思ったのでちょっと遊んでみました。LD_PRELOAD を使って任意のプログラムを任意の CPU に固定して動かしてみます。GCC の __attribute__)((constructor))( で sched_setaffinitiy(2) を呼びます。(参考: http://0xcc.net/blog/

    naoyaのはてなダイアリー - sched_setaffinity(2) を使って任意のプログラムを任意のCPU上で動かす