SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...Naoya Ito
この記事について LinuxのIPC(プロセス間通信)を紹介します。 プロセス間通信とは Inter Process Communication(IPC)はプログラムの実行単位であるプロセスの間で行われるデータ交換のことを指します。プロセスの依存関係は可能な限り疎結合になるようOSで管理されています。そのため、IPCはLinux OSの機能を経由して行う必要があります。 OSがプロセスに提供するデータ交換の方法はひとつだけではありません。それぞれ特徴のある多彩な方法を提供しています。 ここで紹介するのは以下の5つです。 共有メモリー セマフォ マップドメモリー パイプ ソケット通信 (他にありましたらコメントで教えていただければ幸いです。) それでは、見ていきましょう。 共有メモリ プロセス間で同じメモリを共有します。 共有メモリの最大の利点はそのアクセススピードにあります。 一度共有メモ
rmコマンドで大量のファイルを削除しようとするとjournaldがめっちゃリソース持っていく件— bokko (@cubicdaiya) 2017年8月3日 今時のファイルシステムはみんなジャーナルもってて何かあったときにそこからリカバリする仕組みになってるので、当たり前といえばそうなんだけども。 (TODO: ここにファイルシステムのツリー+ジャーナルのポンチ絵を手描きでも何でも描く) ご本尊のデータのツリーと何らかのWALを1セットで持っておくのはRDBだろうがファイルシステムだろうがそうは変わらない、で、削除についても並行制御をうまくやるために削除フラグをログに入れておいてあとで本尊のデータを整理するというのが基本的な設計になる。そこで私は立ち上がった(TL;DR: 特にオチとかはないです)。 rm -rf が遅いのは人類にとって損失ではないか。もっと速く完了するようにすれば、 rm
気分転換に、普段からLinuxで作業する上で割と便利なツールだったり小技を共有します。知ってたらごめんね 一応全部MacでもLinuxでも動くはずです。 高速化系 axel , aria2c http://qiita.com/sarumonera/items/2b30999d7d41a4747d74 https://goo.gl/gsFrCT https://wiki.archlinuxjp.org/index.php/Aria2 http://qiita.com/TokyoMickey/items/cb51805a19dcee416151 こいつらは割と有名(?)かなと思います。やってることはcurlやwgetとほとんど変わらず、サーバにHTTPリクエストを送ってレスポンスを取ってくるだけなのですが、ダウンロードを高速化するためにtcpコネクションを何本も貼って、相手サーバーに負担をかけ
pattern1_root pattern1_root/pattern2_last_leaf root_node root_node/pattern3_non-last_leaf root_node/pattern3_non-last_leaf/sample root_node/pattern3_non-last_leaf/pattern4_non-last_node's_child root_node/leaf_node $ cat sample1.txt | forest ├ ─ pattern1_root │ └ ─ /pattern2_last_leaf └ ─ root_node ├ ─ /pattern3_non-last_leaf │ ├ ─ /sample │ └ ─ /pattern4_non-last_node's_child └ ─ /leaf_node
詳細情報を出力しながら、execlのテストを5回繰り返したい場合は次のように指定します。 ./Run -v -i 5 execl 測定可能なテストケース 標準で実行されるテストケースは次の通りです。個別に実行したい場合は、カッコの中のテスト名を指定します。 Dhrystone 2 using register variables テストケース : dhry2reg 整数演算処理の性能をベンチマークします。Dhrystoneというベンチマークツールを利用しています。 Double-Precision Whetstone テストケース : whetstone-double 浮動小数演算処理の性能をベンチマークします。Whetstoneというベンチマークツールを利用しています。 Execl Throughput テストケース : execl システムコール処理性能をベンチマークします。execl
Doug Lea の malloc (dlmalloc) 小さなオブジェクトを大量に new しまくるプログラムを C++ で書いたところ、処理時間の多くが malloc() に費やされていることがわかりました。このような場合、自前でメモリ管理を行って最適化するという方法がありますが、なかなか大変です。 そこで、安易に高速な malloc に置き換えてみようということで、 Doug Lea の malloc (通称 dlmalloc) の最新版を試してみました。 dlmalloc の使い方 dlmalloc は 1ファイルをダウンロードしてビルドすれば使えます。次のように実行すると共有ライブラリ libdlmalloc.so を作れます。現時点でのバージョンは 2.8.3 でした。 % wget ftp://g.oswego.edu/pub/misc/malloc.c % gcc -O2
GPD WINを買いました。 Debian 8(Jessie)をインストールしてみたので、やったことなどをメモしておきます。 1. Windows 10上でパーティションサイズ変更 16GB分をDebian用に空ける Windows 10でパーティションのサイズを変更する方法 -EaseUS 「方法1:Windows 10の内蔵ディスク管理ツールでパーティションサイズを変更」のやり方で行った 2. Debianインストール用USBフラッシュメモリ作成 $ wget http://cdimage.debian.org/debian-cd/current/amd64/iso-cd/debian-8.7.1-amd64-netinst.iso $ sudo dd if=debian-8.7.1-amd64-netinst.iso of=/dev/sdb 3. 2.で作成したUSBフラッシュメモリ
The kernelci.org project aims to improve the quality of the mainline Linux kernel by improving testing and validation across the wide variety of diverse hardware platforms that run Linux. There are so many different devices and platforms that run Linux, and Linux kernel development is moving so quickly that it is difficult to ensure that any given platform will remain working and stable with each
#include <stdio.h> #include <proc/readproc.h> static void show_proc(proc_t *proc_info) { printf ("tid=%d, ppid=%d, pgrp=%d, session=%d, tty=%d, tpgid=%d [%s]\n", proc_info->tid, proc_info->ppid,proc_info->pgrp, proc_info->session, proc_info->tty, proc_info->tpgid, proc_info->cmd); return; } int main(int argc, char* argv[]){ PROCTAB* proc; proc_t *proc_info; proc = openproc(PROC_FILLARG | PROC_FILL
目的 仮想メモリ空間のアドレス等のメモリマップを調べる。 なお、ちゃんと調べたわけではないので誤りがあるかもしれない。 環境 OS: Oracle Enterprise Linux 5.8 Kernel: 2.6.32-300.10.1.el5uek x86_64 Unix/Linux における仮想メモリ空間のメモリマップは一般には以下のようになっている。 +------------------------------+ 0x0000000000000000 : : +------------------------------+ | | | text | 機械命令 | | +------------------------------+ | | | data | 初期化された static 変数 | | +------------------------------+ | | | BSS
はじめに 先の記事の予告の通り、nobarrierとjournal_async_commitがどう動くのかについての詳細の調査を実施した。 なお、ほやほやのLinux-4.10くらいを見ています。 Documentation kernel/Documentation/filesystems/ext4.txtより 185 barrier=<0|1(*)> This enables/disables the use of write barriers in 186 barrier(*) the jbd code. barrier=0 disables, barrier=1 enables. 187 nobarrier This also requires an IO stack which can support 188 barriers, and if jbd gets an error o
はじめに POSIXのタスクのスケジューリングポリシーに類似させて作られたLinux独自のI/Oスケジューリングクラスについての理解を深めようという趣旨の雑記です。なお、Linux-4.10くらいとutil-linux-2.29.2くらいを見ています。 概要 Linuxはタスク(スレッド)ごとにioprio値(io_context)を持つ。これはクラスとデータを組み合わせた値となっている。クラスは下記の4つ。 IOPRIO_CLASS_NONE IOPRIO_CLASS_RT IOPRIO_CLASS_BE IOPRIO_CLASS_IDLE IOPRIO_CLASS_RTとIOPRIO_CLASS_BEの時はさらに0から7までの優先度をデータとして持つ。ioprioはこれらを下記のようなマクロで組み合わせて表示される。kernel/include/linux/ioprio.hより、 10
Ubuntu で Upstart を利用する際のデバッグについて。 ※個人メモです。既出情報であり、特に他の人の役には立たないと思います step1 --verbose or --debug で十分な情報が表示されるならこれで。 不十分なら step2 へ $ sudo start --verbose some_service or $ sudo start --debug some_service step2 dmesg コマンドで $ sudo start some_service $ sudo dmesg list log1 ... log2 ... step3 tail したい場合 $ sudo start some_service 別ターミナルで $ sudo tail -f /var/log/kern.log
Linux, pidで検索してもBashでの方法ばかりでるので、C/C++での方法のまとめ 使用するAPI pid => getpid() Man page of GETPID ppid => getppid() Man page of GETPID tid => syscall(SYS_getid) Man page of GETTID ※注意 pthread_self が返す値はLinuxのtidではない Man page of PTHREAD_SELF 実装例 #include <iostream> #include <future> #include <unistd.h> #include <sys/types.h> #include <sys/syscall.h> pid_t gettid(void) { return syscall(SYS_gettid); } int mai
cgroupはv1とv2という2つの実装(と言っていいのか?)があってそれらはkernel/cgroup.cで一つのコードベースにまとまっているのでコード読んでで混乱するなーというところで、誰得なめもを。 特に、4.1とかのカーネルだとv2のコードはまだ正式版となってないけどマージはされていて、DEVELsane_behaviorというオプションを使うことでv2の機能が使えるようになってます(参考: Linux 3.16 から試せる cgroup の単一階層構造 (1) - TenForward)。今はv2がちゃんと入っているのでこのオプションは不要で、cgroupのマウント時にcgroup v2としてマウントするかどうかで切り分けできます。cgroup_mount()のis_v2がそれです。 2083 static struct dentry *cgroup_mount(struct f
皆さんは 技術書典2 というイベントをご存知でしょうか。2017年4月9日に秋葉原で開催される、技術書オンリーの同人誌即売会です。 この記事では、技術書典2のために書いた 「Linuxカーネルモジュール自作入門」 の目次をご紹介します。最後にダウンロード販売のお知らせもあります。 追記:おかげさまで、技術書典2自体も私たちのブースも非常に盛況でした。ご来場いただいた方々、運営の方々、他サークルの方々、大変ありがとうございました。ダウンロード販売のお知らせを更新しましたので、興味のある方はご確認をお願いします。 販売情報 日時 2017年4月9日(日) 場所 アキバ・スクエア ブース き-09「tech@サイボウズ式」編集部 書名 Linuxカーネルモジュール自作入門 ページ数 36(表紙含む) 目次 第1章「はじめに」より: 本書を手にとって頂いてありがとうございます。この本はLinuxカ
webアプリケーションのデプロイを、Dockerを用いてダウンタイムなく行う手順をサーバーのプロビジョニング、アプリの用意、運用方法に分けまとめた。 はじめに ECSやGKEとかが、Dockerのクラスタ管理ではデファクトっぽい位置づけになってる気がするが、そういうサービスが使えない場合でかつ、公式ツールを使ってデプロイする場合の方法を調べまとめた。 成果物 下記にまとめています。 記事を参照しながら見てください。 https://github.com/togana/sample-docker-deploy 構成 デプロイのイメージ図 使用するツール Docker version 1.13.1 docker-machine version 0.9.0 docker-compose version 1.11.1 VirtualBox version 5.1.10
はじめに 本記事はlinuxカーネルのソース分析によって、このソフトウェアの様々な特徴を可視化します。ソースの総行数といったありがちなものから、1つのバージョン内のrelease candidate(rc)ごとのパッチ数の推移やサブシステムごとのデータなども出しています。 linuxには、v2.6.x, v3.x, v4.xで表す、Linuxのオリジナル開発者であるLinus Torvalds氏がリリースするmainlineカーネル(通常、単にLinuxと言えばmainlineカーネルを指す)があります。このうち、データ採取した範囲はgitで追える範囲のv2.6.12〜v4.10までです。ものによってはv4.0〜v4.10までの範囲です。 全体の傾向 総行数 行数は*.[chS]というパターンにマッチする行の数を使いました。v2.6.12では600万行そこそこ(それでも凄いのですが)だった
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く