タグ

Programmingとkernelに関するtztのブックマーク (13)

  • 革命の日々! 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_

  • 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
  • TIPS/Linux/kernel - masami Wiki*

    masami Wiki*

    TIPS/Linux/kernel - masami Wiki*
  • Linux netfilter Hacking HOWTO

  • 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上で動かす
  • マルチスレッドのコンテキスト切り替えに伴うコスト - naoyaのはてなダイアリー

    また Linux カーネルの話です。 Linux では fork によるマルチプロセスと、pthread によるマルチスレッドでの並行処理を比較した場合、後者の方がコストが低く高速と言われます。「スレッドはメモリ空間を共有するので、マルチプロセスとは異なりコンテキストスイッチ時にメモリ空間の切り替えを省略できる。切り替えに伴うオーバーヘッドが少ない。」というのが FAQ の答えかと思います。 が「オーバーヘッドが少ない」と一言にいわれても具体的にどういうことなのかがイメージできません。そこで Linux のスレッド周りの実装を見て見ようじゃないか、というのが今回のテーマです。 3分でわかる(?) マルチプロセスとマルチスレッド まずはうんちく。マルチプロセスとマルチスレッドの違いの図。以前に社内で勉強会をしたときに作った資料にちょうど良いのがあったので掲載します。Pthreadsプログラミ

    マルチスレッドのコンテキスト切り替えに伴うコスト - naoyaのはてなダイアリー
  • DBサーバ向けLinuxチューニングを考える 〜 メモリオーバーコミット編 : DSAS開発者の部屋

    Cでプログラムを書いていて大量のメモリを確保したくなったとき、大抵は mallocを使うと思いますが、その際には戻り値がNULLかどうかを判断してエラー処理に飛ばすと思います。しかし、Linux のメモリ管理サブシステムには「メモリ・オーバーコミット」という機構があり、実装されているメモリ以上の領域を確保できてしまいます。 #include <stdio.h> #include <stdlib.h> int main() { int i; char *p; for(i=0;i<65536;i++){ p = (char *)malloc(65536); if(0 == (long)p){ break; } } printf("SIZE=%dMB\n",i*65536/1024/1024); return(0); } swapoff したメモリ 1G のマシンでこれを実行するとこんな感じにな

    DBサーバ向けLinuxチューニングを考える 〜 メモリオーバーコミット編 : DSAS開発者の部屋
  • カーネル挙動を追尾する「DTrace」の実力

    Solaris 10の強化機能としてクローズアップされることが多い「DTrace」。さまざまなサービスが並列稼働する基幹サーバでは、カーネル挙動によってボトルネックを判断することも多い。DTraceは、解決するための打開策となるのか? 実例サンプルで検証していく。 Solaris 10の目玉となる機能のひとつに、実行中のサーバ情報をいつでも取得できる「DTrace」がある。DTraceは、稼働サーバ上で思うようなパフォーマンスが得られなかったり、トラブルが生じた際に原因究明するのに役立つ機能だ。この「OS選択の新常識」Solaris特集では、DTraceを使うと具体的にどのような情報を取得でき? どのようなシーンで役立つのか? その実例を解説していくことにしよう。 DTraceの仕組み まずは簡単に、DTraceの仕組みから説明する。 Solaris 10の内部には、「プローブ」と呼ばれる

    カーネル挙動を追尾する「DTrace」の実力
  • 1