サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
世界禁煙デー
syuu1228.hatenablog.com
なにこれ KVM開発エンジニアらが立ち上げたベンチャーCloudius、クラウド向けOS「OSv」を発表 | OSDN Magazineで紹介されていたので興味を持って弄ってみた。 KVM/Xen専用のOSで、アプリケーションとしてJavaアプリケーションが動くという事のようだ。 基本的にはJava製のWebアプリを想定しているのだろう。 ライセンスはBSDライセンス。 Ubuntuでのビルド方法 sudo apt-get install openjdk-7-jdk sudo apt-get install autotools-dev libltdl-dev libtool autoconf autopoint sudo apt-get install libboost-all-dev genromfs zfs-fuse autoconf ant git clone https://git
こちら。 こんな感じにRubyスクリプトでNICを設定できるぜいえーい eth = Netif.new("eth0") eth.up eth.mtu = 1000 eth.set_addr("172.0.0.1", "255.255.255.0") puts "addr:#{eth.addr}" puts "netmask:#{eth.netmask}" puts "broadaddr:#{eth.broadaddr}" puts "promisc?:#{eth.promisc?}" puts "up?:#{eth.up?}" puts "eth3 exists?:#{Netif.exists?("eth3")}" 取り敢えずLinuxとFreeBSDでのみ動きます。他のOSは知りません。前回の記事でNetlinkとか騒いでたくせにLinux版でNetlink使ってません(死) どなたかN
自分の書いているプログラムからNICの設定を直接弄りたくなった事はないだろうか? プログラム内からifconfigコマンドに引数をつけて実行すれば簡単に実現できるが、それはあんまり格好良くないし、情報を取り出そうとするとifconfigコマンドの出力文字列をパースしたりしなければならなくなって格好悪い。 よりプログラムの書き方として正しいのは、ifconfigコマンドが叩いているAPIを自力で叩いてみる事だろう。 というわけで、ここではifconfigコマンドがNICを操作するために叩いているAPIを自力で叩いてNICの設定を変更してみようと思う。 まずは最も単純なプログラムとして、NICのリンクステータスをUP/DOWNするというのを試してみよう。 ソケットへのioctlによるNICリンクステータス変更 ifconfigコマンドで行われているNICリンクステータスの変更処理を最小限のコー
以前もまとめたが、だいぶ古くなったので再度まとめてみる。 割り込みは直接ネットワークに関係しないのだが、ネットワークIOを語る際に外せない話題なので敢えてネットワーク関連記事に分類した。 Linux kernel features for high-speed networking bashでソケットプログラミング パケット受信処理の待ち合わせ部分 続・FreeBSDの割り込み周りに足りないと思う機能 FreeBSDの割り込み周りに足りないと思う機能 Linuxでnetperfとかで負荷かけてる時に/proc/statとかを記録してグラフ化するツールあったらいいなと思ったので作った、という話 CONFIG_RFS_ACCELはsfc(SolarflareのNIC)専用だという話 /proc/irq/<irq>/smp_affinityの書き換えでPCIコンフィグレーション空間はどのように書
ふと気になったので適当に調べてみる。 調査方法は、各OSのソースコードをダウンロードしてきて、 find . -name "*.[chsS]" -exec cat {} \;|wc -l を実行した(※xnuの場合だけこれに.cppも加えてみた)。 見ての通りいい加減な調べ方なので、あんまり真に受けないように。 ※追記:リクエストにお答えしてsloccountの結果も載せてみます。 OS名 行数 SLOC Linux 3.9.4 15564694 11071422 FreeBSD 9.1 5436430 3826934 DragonFly BSD 3.4.1 2930195 1995729 NetBSD 6.1 5325381 3497216 OpenBSD 5.3 2973206 2104883 xnu 2050.22.13 1261297 798157 UNIX v6 12274 88
exec 5<>/dev/tcp/news.google.co.jp/80 echo -e "GET / HTTP/1.1\nHost: news.google.co.jp\n">&5 cat <&5よくよく考えたらman bashで以前に見かけていたような気もしないでもないが、きちんと把握してなかった。 OSレベルの機能ではないが、シェルレベルの実装でPlan9風にシェルからソケットが開けるのであった。 (この記事はこちらを参考にしました)
$ sudo apt-get install libvirt-bin virtinst qemu-kvm $ sudo invoke-rc.d libvirt-bin start とりあえず必要なモノを入れてlibvirtdを立ち上げる。 $ sudo qemu-img create -f qcow2 /var/lib/libvirt/images/vm0.img 16G 16GBなVMイメージファイルを作成(容量は適時調整)。 $ sudo virt-install --connect=qemu:///system -n vm0 --vcpus=4 -r 8192 --serial pty -v \ --disk=/var/lib/libvirt/images/vm0.img,format=qcow2,bus=virtio --nographics \ -l http://ftp.jai
Linux kernelと言えばlist_for_eachみたいな謎のマクロでよくわからないがforeachできる事はよく知られているが、他にも色々あるのだなぁと知ったのでメモ。 #define for_each_possible_cpu(cpu) for_each_cpu((cpu), cpu_possible_mask) #define for_each_online_cpu(cpu) for_each_cpu((cpu), cpu_online_mask) #define for_each_present_cpu(cpu) for_each_cpu((cpu), cpu_present_mask) for_each_possible_cpuはシステムに存在可能なCPU番号をイテレート、for_each_online_cpuはシステムで今オンラインなCPU番号をイテレート、for_ea
Linuxで3万プロセス起動するとMCE(Machine Check Excepution)を食らうというよく分からない噂を聞いたので、興味を持ち試してみている。 但し、元実験は恐らくDebian stableでカーネルが2.6.32と古めだが、再現実験環境は最近入れたUbuntu Serverなので3.5.0-26-generic。 こんなにバージョン違うともう別物だろう。 ハード構成も違うし、同じ状況を再現するのは困難かも…。 取り敢えず、今のところ何も起きていない。しばらく放置してみる。 追記: 何もエラーが出ないので、最終的に7万プロセスを投入して1日間放置したが、dmesgにもmcelogにもエラーは表示されなかったのでこれにて実験終了とする。 @naota344氏によると、「CPU温度の上昇」などのイベントでもMCEは発生していて、その場合ログは行われるがMCEによるpanic
3.8あたりからかな?最近のカーネルのnetconsoleにはoops_onlyってオプションがある。 $ sudo modprobe netconsole netconsole=6665@192.168.100.12/eth0,6666@192.168.100.11/04:0c:ce:xx:xx:xx oops_only=Y こんな感じに指定しとくと、panicした時のdmesgだけが送られてくるようになる。 使い方は特にそれまでと変わらない。
netconsoleは、dmesgの出力をUDPでリモートホストへ送る機能。 この機能のポイントは、カーネルがpanicした後でも送信してくれる(無理かもしれないけど努力はする)という事。 panic時のbacktraceとかも取れる。 送信側の設定 netconsoleモジュールの引数か、カーネル引数でローカル・リモートのアドレス・ポートを指定。 フォーマットはnetconsole=src-port@src-ip/ifname,dst-port@dst-ip/dst-macって感じ。 $ sudo modprobe netconsole netconsole=6665@192.168.100.12/eth0,6666@192.168.100.11/04:0c:ce:xx:xx:xx 受信側の設定(OSXの場合) syslogdで受けても良い。 今回は取り敢えず受けて表示したかっただけなの
AVR上で動くARMエミュレータを実装してLinuxを起動するという頭のオカシイ記事を読んで感動したのだが、よくよく読むとそのARMエミュレータそのものも中々面白そうである。 (和訳はこちら:本の虫: GNU/Linuxを動かせる最低スペックはATmega) エミュレート対象のCPUはARMv5TE、なぜかThumbまでサポート UARTなどの周辺デバイスは独自実装ではなく、Intel XScale PXA255 SoCをエミュレート 但しSDのエミュレーションが遅すぎたのでpvdiskという準仮想化ドライバを実装 AVR上だけではなくPC上でも動作(恐らくLinux上という事だと思われる。OSXだとビルドエラーになる) コードサイズは非常にコンパクトで9056行 Makefileを見る限り標準ライブラリ以外何もリンクしてない Linuxカーネルには手を加えずに動いていると推測される(pv
ということで、今年もいよいよ始まりますねGoogle Summer of Code。 Google Summer of Codeってなに Google Summer of Code (GSoC) は2005年の5月から8月に初めて開催され、その後毎年行われているイベントで、Googleが指定したフリーソフトウェアやオープンソースのプロジェクトでその夏の間に課題をクリアした数百人の学生に賞金を支払う制度である。参加資格は18歳以上の学生。 このプログラムはまず、参加資格のある学生が実施したいソフトウェアプロジェクトを詳述した申込書を提出する。申込書は対応する組織が評価する。参加組織はそれぞれのプロジェクトに貢献できると判断した場合、プロジェクト毎に指導者を配置しなければならない。指導者は申込書をランク付けし、ランク付けした一覧をGoogleに送る。Googleは各組織にいくつのプロジェクト(
ネットワークスタックの、割り込みコンテキストからプロセスをたたき起こすまでの処理はしっかり読んだつもりなのだが、プロセスコンテキストで寝ている側を深く把握していなかったのでちょっと眺めてみる。 システムコールからプロセスがスリープするまで(UDP) アプリケーションからのシステムコールが最終的にudp_recvmsgを呼ぶところまでの説明は割愛。 udp_recvmsgは__skb_recv_datagramを呼んで、sk->sk_receive_queueに積まれたskbを取り出そうとする。 (skはカーネル内のソケット構造体) この時、パケットがなければwait_for_packetがコールされるが、これが待ち合わせ処理のwait側。 wait_for_packetでは、prepare_to_wait_exclusiveでset_current_stateを呼びcurrent->sta
EDK2向けに記事を書くけど、他のSDKを使う場合でも同じ問題が生じると思うので、gnu-efiな人達も読んでおいて下さい。 なお、この問題はIA32では確認できないのですが、どうしてそうなるのか僕はx86のABIにあまり詳しくないので良く分かりません。IA32だと吐くバイナリのABIがちゃんと合うとかそういうことかなーと思ってます。 EDK2だとツールチェインとしてmingwを使う場合の説明が本家のドキュメントに乗ってますが、x64環境だとWindowsとUnixではlongの長さが違うとかの理由で(64ビット - Wikipedia)libc・posix api・bsd socketなどのライブラリを提供するStdLibのビルドが通りません(手直しする事も可能かと思いますが、オススメはしません)。 そこで、ドキュメントを読んでみるとホストOS向けのgcc 4.4-4.6を使う方法が紹介
.vmxファイルにこんなの追記したら、telnetで覗けるようになった。 serial0.present = "TRUE" serial0.fileType = "network" serial0.fileName = "telnet://127.0.0.1:10000"VMware Fusionでしか試してないけど、多分他のVMwareでもいけるんじゃないかな。
Mac上のVMware FusionやVirtualBoxでUEFI 2.0を試す - かーねる・う゛いえむにっき BIOSとUEFIの歴史 - かーねる・う゛いえむにっき GPTとMBRはどのように違うのか? - かーねる・う゛いえむにっき UEFIのSDK事情 - かーねる・う゛いえむにっき Linuxホストでuefiバイナリのビルドめも - φ(・・*)ゞ ウーン カーネルとか弄ったりのメモ qemuでuefi - φ(・・*)ゞ ウーン カーネルとか弄ったりのメモ macでEDK2のビルドメモ - φ(・・*)ゞ ウーン カーネルとか弄ったりのメモ Ubuntu12.10でEDK2をビルド - jou4のブログ 覚え書き: mruby on EFI Shell EDKでmrubyをビルドする - jou4のブログ GUID Partition Table を読む - jou4のブロ
カーネル飛んだ時とか、RIP(EIP)からobjdump -d vmlinuxを見ながら位置を探したりしてたんだけれども、binutilsに含まれてるaddr2line使えばソースコードの行数簡単に見れたのね。 まぁ、これがあるからといってobjdumpでディスアセンブルさせて眺めたいケースが無くなるわけじゃないから、併用した方がいいんだろうけど。 objdumpで探す $ cd ~/linux $ objdump -l -d vmlinux |less (/ ffffffff81525fc0と入力してReturn) ffffffff81525fc0 <dev_queue_xmit>: dev_queue_xmit(): /home/syuu/bcube-linux-stable/net/core/dev.c:2464 ffffffff81525fc0: 55 push %rbp ffff
Twitterでちょっと話題にしたのでメモしとく。 sh-3.2$ mkdir -p hoge/huga sh-3.2$ touch hoge/huga/piyo sh-3.2$ ln -sf hoge tmp sh-3.2$ rm -rfv tmp tmp sh-3.2$ ls -l hoge/huga/piyo -rw-r--r-- 1 syuu staff 0 1 22 14:25 hoge/huga/piyo シンボリックリンクをrm -rf tmpする分にはシンボリックリンクだけが消える。 sh-3.2$ ln -sf hoge tmp sh-3.2$ rm -rfv tmp/ tmp//huga/piyo tmp//huga tmp/ sh-3.2$ ls -l hoge/huga/piyo ls: hoge/huga/piyo: No such file or directo
GRUB1なら良く知ってるんだけど、GRUB2って勉強不足で未だによく分からないのよね。 で、デフォルトカーネルを変えようとした訳だが、最近のUbuntuの/boot/grub/grub.cfgってサブメニューがあって、そこにカーネルの候補が入ってる形になってる。 grub.cfgからmenuentryとsubmenuだけを要約してくるとこんな感じ: menuentry 'Ubuntu' submenu 'Advanced options for Ubuntu' menuentry 'Ubuntu, with Linux 3.5.0-21-generic' menuentry 'Ubuntu, with Linux 3.5.0-21-generic (recovery mode)' menuentry 'Ubuntu, with Linux 3.2.0-rc7+' menuentry 'U
UEFI環境下では、BIOSでサポートされているMBRに代わりGPTと呼ばれる新しいパーティーションテーブルを用います。 2TB以上の大容量なHDDをサポート出来る、と説明される事が多いのですが、具体的にどのような違いがあるのか比較してみます。 MBR MBRはLBA 0に置かれる512byteのパーティーションテーブルで、以下の様なレイアウトになっています: オフセット サイズ 内容 0x000 446byte ブートストラップローダ 0x1be 64byte パーティーションテーブル(4エントリ) 0x1fe 2byte ブートシグニチャ(0xaa55) ブートストラップローダはBIOSからロード・実行されるブートプログラムで、パーティーションの情報はパーティーションテーブルに存在します。 なお、最大パーティーション数は4個と決められており、4つのパーティーションを「物理パーティーショ
BIOSの歴史 BIOSはIBM PC(1981年)と共に登場し、「IBM PC互換機」が普及した事によりパソコンの標準ファームウェアとなりました。 以降、ハードウェアもBIOS自身も当時とは全く異なる姿になるまで大きく拡張・変更され続けていますが、アプリケーション互換性を保たなければならなかった過去の経緯から、未だBIOSは大変古い仕組みを使い続けており、機能の実装に大きな制約があります。 具体的に一番大きい制約は、リアルモード(CPUがオリジナルのIBM PCに搭載されていた8086をエミュレートするモード)で動作しているということです。 これにより、一度にアクセスできるデータサイズは64KBに制限され、メモリ空間全体でも通常1MBまでしかアクセス出来ません。 プロテクトモードやロングモード(64bitモード)でOSを走らせるためには、CPUのモード切替の作業が必要になり、ブートローダ
Macばっかり使ってるとUEFI 2.0で遊ぶ機会が無く、いつまでも使い方が分からないままな訳ですが、最近のVMwareやVirtualBoxならUEFI 2.0をサポートしているので仮想マシン上で取り敢えず試してみる事が可能です。 VMware Fusionの場合 なんか適当にUbuntu Server 12.10/amd64のISOでも落としてきましょう。 こやつはEFI対応機を自動検出して全自動でEFI&GPTブート環境を構築してくれます、ArchやGentooで頑張る気合のないゆるふわ諸君には最適です。 ISOをインストールディスクに指定して新しいVMを生成します。 エディタでこのVMの.vmxを開いて以下の項目を追加します: firmware = "efi"Mac以外の環境では、VMware Playerへ同様の設定を行う事でUEFIを試すことが出来るようです(参考)。 後はCD
netperfで負荷かけている時にカーネルのstatistics情報取って色々とグラフ作るツールがあったらいいなぁ、と思ったので作った。 今のところperf statで取れるようなCPUのキャッシュの情報とかが取れてないが…とりあえず netperfとかやってる間にログに数値を記録 各CPUの値/合計値/CPU毎の偏り の3パターンで集計 グラフ化 まで出来る。完全自動ではなくてツールが分かれてるが。 取得先はいまのところ/proc化にある以下のファイル: /proc/interrupts /proc/stat /proc/net/netstat /proc/*/sched おまけに、netperfをnプロセス並列で立ち上げるツールもついている。 しかしながら、未だ一切のマニュアルを書いていない… C++とRubyの勉強という面もあって、コードはかなりアレ。 測れるものは増やしていけるとい
BHyVe Hackathon用にサンプルの仮想デバイスを書いてみた。 実行イメージ bhyve-tap0# cat /dev/bvtest Hello from BHyVe 仕組み inl(BVTEST_LEN_PORT)で文字列の長さを取得 outl(BVTEST_OFF_PORT, offset)で読み取りたい1文字のオフセットを設定 inl(BVTEST_IO_PORT)で1文字取得 実装 diff --git a/sys/conf/files.amd64 b/sys/conf/files.amd64 index 1769a17..b0c3f0f 100644 --- a/sys/conf/files.amd64 +++ b/sys/conf/files.amd64 @@ -454,6 +454,7 @@ contrib/x86emu/x86emu.c optional x86bi
sched:sched_migrate_taskイベントにフィルタルール「comm==bash」を適用、トレースを有効化してtrace_pipeから標準出力にトレース結果を出力 cd /sys/kernel/debug/tracing/events/sched/sched_migrate_task echo "comm==bash" > filter echo 1 > enable cat /sys/kernel/debug/tracing/trace_pipe
Caution What I describing in this text is not so different with FreeBSD official manual, if you haven't read official manual you should read it first. Here's the link: 23.6. Rebuilding World Install FreeBSD 9.0/amd64. We won't use src or ports in this document. You can unselect all extra components if you wish. Note: You CANNOT use i386 version. It has to amd64. Install Subversion, checkout BHyVe
usr.sbin/bhyve usr.sbin/bhyveload usr.sbin/vmmctl lib/libvmmapi sys/amd64/vmm
Just read objdump -d -S ./a.out. Or die.
次のページ
このページを最初にブックマークしてみませんか?
『syuu1228's blog』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く