Hatena::ブログ(Diary)

ablog このページをアンテナに追加 RSSフィード Twitter

2014-09-20

テーマを変更する

config.py の html_theme を変更して make html すればOK

$ vim config.py
#html_theme = 'default'
html_theme = 'traditional'
$ make html

参考

curlでファイルをダウンロードする

自分もいつもオプションを忘れるのでメモ

Webからファイルをダウンロードするときwgetを使います。

wgetは、リダイレクトに対応していないので、リダイレクトを使っているサイトの場合には、curlを使います。

オプションをいつも忘れてしまうので、書いておきます。

$ curl -L -O [URL]
curlでファイルをダウンロードする - ksaitoの日記

2014-09-16

VirtualBox を 4.3.10 から 4.3.16 にアップグレードしたメモ

f:id:yohei-a:20140916145240p:image

VirtualBox を 4.3.10 から 4.3.16 にアップグレードした。ゲストの Windows 7 でフルスクリーンモードのときにタスクバーにマウスポインタを合わせようとすると、VirtualBox のミニツールバーが反応するのがストレスフルだったが、ついに改善されているようだ!

VirtualBox 4.3.16 (released 2014-09-09)

(中略)

GUI: mini-toolbar should provoke less artifacts/conflicts with 3D guest rendering

Changelog ? Oracle VM VirtualBox

環境

yazekats% cat /etc/issue
Oracle Linux Server release 6.4
Kernel \r on an \m
yazekats% uname -r
2.6.39-400.17.1.el6uek.x86_64

VirtualBox 4.3.10 アンインストール

# yum remove VirtualBox-4.3

VirtualBox 4.3.16 インストール

ダウンロード
VirtualBox 4.3.16 をインストールする
# yum install VirtualBox-4.3

あれ、yum で update すればよかった?w


VirtualBox Extension Pack をインストールする
  • racle_VM_VirtualBox_Extension_Pack-4.3.16-95972.vbox-extpack を右クリックして"Open With Oracle VirtualBox"を選択する。
  • 確認ダイアログ("VirtualBox - Question")が開くので"Install"ボタンを押す。
  • "VirtualBox License"というダイアログが出るので、読んで"I Agree"を押す。
  • スクロールバーを一番下まで ひっぱらないと"I Agree"ボタンが押せるようにならない。
  • root ユーザーのパスワード入力を求められるので入力する。
Guest Additions をインストールする
  • ゲストOSを起動する。
  • メニューから[Devices]-[Install Guest Additions...]を選択する。
  • インストーラがマウントされるので、マウントされたドライブを開いて、VboxWindowsAdditions.exe を実行する。
  • ウイザードに従ってインストールする。
  • Choose Components で Direct3D Support は選択不要。
  • ゲストOS再起動する。

関連

2014-09-15

ORA-4030のトレースファイルから領域ごとのメモリ使用量を調べる

手順

  • トレースから Process Map Dump セクションを抽出する
perl -nle '/End of process map dump/ and exit;/Dumping process map/ and $b=$.+1;defined($b) and $.>$b and print;'
foo.trc > process_map_dump.txt
perl -lane '($b,$e)=split(/-/,$F[0]);printf(qq/$.\t%s\t%d\n/,$F[5],(hex($e)-hex($b))/1024)' process_map_dump.txt > process_map_size.txt 

  • Linux だと ORA-4030のトレースファイルの process map dump は /proc/pid/maps のままぽいので、/proc/pid/maps を加工する例を記載する。
$ cat /proc/self/maps|perl -lane '($b,$e)=split(/-/,$F[0]);printf(qq/$.\t%s\t%d\n/,$F[5],(hex($e)-hex($b))/1024)'
1	/bin/cat	44
2	/bin/cat	4
3		4
4	/bin/cat	4
5	[heap]	132
6	/lib64/ld-2.12.so	128
7	/lib64/ld-2.12.so	4
8	/lib64/ld-2.12.so	4
9		4
10	/lib64/libc-2.12.so	1580
11	/lib64/libc-2.12.so	2044
12	/lib64/libc-2.12.so	16
13	/lib64/libc-2.12.so	4
14		20
15	/usr/lib/locale/locale-archive	96836
16		12
17		4
18	[stack]	136
19	[vdso]	4
20	[vsyscall]	4

行番号、名前、サイズ(KB)


おまけ

  • pmap も /proc/[pid]/maps とかを加工してるだけぽい
$ strace -e open pmap -x $$
open("/etc/ld.so.cache", O_RDONLY)      = 3
open("/lib64/libproc-3.2.8.so", O_RDONLY) = 3
open("/lib64/libc.so.6", O_RDONLY)      = 3
open("/sys/devices/system/cpu/online", O_RDONLY|O_CLOEXEC) = 3
open("/proc/self/maps", O_RDONLY)       = 0 ★
open("/proc/7993/stat", O_RDONLY)       = 3
open("/proc/7993/cmdline", O_RDONLY)    = 3
open("/proc/7993/smaps", O_RDONLY)      = 0
7993:   /bin/zsh
Address           Kbytes     RSS   Dirty Mode   Mapping
0000000000400000     636     564       0 r-x--  zsh
000000000069f000      24      24      24 rw---  zsh
00000000006a5000      76      36      36 rw---    [ anon ]
00000000008a4000      16      16       0 rw---  zsh
00000000025c6000    1600    1532    1532 rw---    [ anon ]
0000003ba6200000     128     112       0 r-x--  ld-2.12.so
0000003ba641f000       4       4       4 r----  ld-2.12.so
0000003ba6420000       4       4       4 rw---  ld-2.12.so
0000003ba6421000       4       4       4 rw---    [ anon ]
0000003ba6600000    1580     580       0 r-x--  libc-2.12.so
0000003ba678b000    2044       0       0 -----  libc-2.12.so
0000003ba698a000      16      16       4 r----  libc-2.12.so

bondingでActiveなインターフェースの確認方法と変更方法

確認方法

  • /proc/net/bonding/bond0
$ cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v3.4.0 (October 7, 2008)
 
Bonding Mode: fault-tolerance (active-backup)
Primary Slave: eth0 ★ eth0 が Primary
Currently Active Slave: eth0 ★ eth0 が Active
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 5000
Down Delay (ms): 0
 
Slave Interface: eth0
MII Status: up
Link Failure Count: 0
Permanent HW addr: 00:0c:29:5d:d3:40
 
Slave Interface: eth2
MII Status: up
Link Failure Count: 0
Permanent HW addr: 00:0c:29:5d:d3:54

変更方法

  • eth1 を Active にする
# ifenslave -c bond0 eth1

参考

Oracle VM の Domain0 からコマンドラインでゲストを起動する方法

コマンド

  • create って起動ぽくないけど、以下のコマンドで DomainU(仮想マシン) を起動できる。
# xm create -c vm.cfg

続きを読む

2014-09-14

VirtualBoxの仮想マシンアプライアンスをインポートするとVBOX_E_FILE_ERROR(0x80BB0004)が発生する

事象

f:id:yohei-a:20140914161709p:image:w640


原因

  • ファイル自体は削除していてもメタダータが残っていた模様。

対処

  • [File]-[Virtual Media Manager]で不要なファイルを選択して[Remove]をクリックする。

f:id:yohei-a:20140914161708p:image:w640

2014-09-13

gettimeofday(2) は VDSO によりユーザー空間で実行される

gettimeofday(2) はシステムコールなので、大量に発行すると%sysが上がると思っていたが、VDSOという仕組みでユーザー空間で実行されるので%userが上がるらしい。時刻取得みたいなちょっとした処理でシステムコールを発行してコンテキストスイッチするのって無駄が多いなって思ってたけど、そこはちゃんと考えられているんですね。

多くのアプリケーション負荷 (特にデータベースおよび財務サービスアプリケーション) は gettimeofday または類似の時間機能コールを非常に頻繁に実行します。 このコールの効率性を最適化すると、 大きな利点があります。

VDSO (Virtual Dynamic Shared Object) は、 ユーザースペースのアプリケーションシステムコールよりも少ないオーバーヘッドで一部のカーネルアクションを実行できるようにする共有ライブラリです。 多くの場合、 VDSO は gettimeofday システムコールデータへの高速なアクセスを提供するために使用されます。

VDSO を有効にすると、 カーネルはユーザースペース共有ライブラリ (特に glibc) にあるものではなく VDSO のシンボルの定義を使用するよう指示されます。 VDSO の有効化の影響はシステム全体に及びます。 すべてのプロセスが使用するか、 またはどのプロセスも使用しないかのどちらかになります。

有効化されたら、 VDSO は gettimeofday の glibc 定義をその独自の定義でオーバーライドします。 これにより、 システムコールオーバーヘッドが取り除かれます (コールは glibc ではなくカーネルメモリに直接行われるため)。

2.5. gettimeofday speedup

The "vDSO" (virtual dynamic shared object) is a small shared library that the kernel automatically maps into the address space of all user-space applications. Applications usually do not need to concern themselves with these details as the vDSO is most commonly called by the C library. This way you can code in the normal way using standard functions and the C library will take care of using any functionality that is available via the vDSO.

(中略)

One frequently used system call is gettimeofday(2). This system call is called both directly by user-space applications as well as indirectly by the C library. Think timestamps or timing loops or polling—all of these frequently need to know what time it is right now. This information is also not secret—any application in any privilege mode (root or any unprivileged user) will get the same answer. Thus the kernel arranges for the information required to answer this question to be placed in memory the process can access.Now a call to gettimeofday(2) changes from a system call to a normal function call and a few memory accesses.

vdso(7) - Linux manual page

無限ループしながら gettimeofday を実行するプログラムを書いて、

  • gettimeofday.c
#include <stdio.h>
#include <sys/time.h>

int main(void)
{
	struct timeval tv;
        while(1) {
                gettimeofday(&tv, NULL);
        }
	return 1;
}

コンパイルして実行してみると、ユーザーモードで使った時間がほとんどで、カーネルモードで使った時間は僅かしかない。

$ gcc -o gettimeofday gettimeofday.c 
$ ldd gettimeofday
	linux-vdso.so.1 =>  (0x00007fff22715000)
	libc.so.6 => /lib64/libc.so.6 (0x0000003ba6600000)
	/lib64/ld-linux-x86-64.so.2 (0x0000003ba6200000)
$ time ./gettimeofday 
^C

real	12m6.745s
user	12m1.298s <-- ユーザーモードの時間が長く
sys	0m0.369s <-- カーネルモードの時間は短い

続きを読む

oraagent.bin が UDP で通信している

11gR2 RAC でローカルでUDPで通信してるプロセスがいると言われて、ちょっと netstat 見てたら、oraagent.bin が UDP で通信しているのを見つけた。

$ netstat -nauep
Proto Recv-Q Send-Q Local Address               Foreign Address             State       User       Inode      PID/Program name
(中略)
udp        0      0 ::1:32154                   :::*                                    1101       441244     8265/oraagent.bin

どうでもいいメモ。

echo ::kmastat|mdb -k の buf size、memory in use の単位は byte

echo ::kmastat|mdb -k の buf size、memory in use の単位を調べていたら、名著"Solaris Internals: Solaris 10 and OpenSolaris Kernel Architecture (2nd Edition)" に byte だと書かれていた。

Table 11.12. kmastat Columns

Column	Description
Cache name	The name of the cache, as supplied during kmem_cache_create().
buf_size	The size of each object within the cache in bytes.
buf_avail	The number of free objects in the cache.
buf_total	The total number of objects in the cache.
Memory in use	The amount of physical memory consumed by the cache in bytes.
Allocations succeeded	The number of allocations that succeeded.
Allocations failed	The number of allocations that failed. These are likely to be allocations that specified KM_NOSLEEP during memory pressure.

続きを読む