Linux

Linuxサーバでディスクキャッシュを説明する

  • POST
なぜメモリ使用量などを意識する必要があるのかについて説明するとした場合の簡単な案です。ディスクへのアクセスという観点でメモリがどのように利用されているかを考えて見る内容で説明してみます。Software Design 2018年1月号|技術評論社を参考にさせていただきました。 最近は自分で手を動かしながら、実際の挙動を見ることができるような書籍・記事が増えてきたので、実際にやってみることができて嬉しいです。 はじめに 一般的なOSでは、物理的なディスクにアクセスする際、以下のようなフローでアクセスする: メモリ上にファイルが読み込まれている場合、メモリからファイルを読み込む メモリ上に存在しない場合、直接ディスクにアクセスする 当然ながら、ディスクへのアクセス速度 <<<<< メモリへのアクセス速度のため、基本的な戦略としては「メモリにファイルを読み込ませる」こととなる。 ここではディスクキャッシュの有り無しでどのようにディスクへのアクセス速度が変化するかを見てみます。 メモリについて まずはLinux上でのメモリ管理について簡単におさらいします。 ディスクキャッシュに関する情報を参照する freeコマンドを実行することで、メモリ上にキャッシュされているファイルサイズを確認できます。freeコマンドを実行した際の、buff/cache列を参照します: kazu634@bastion% free -m total used free shared buff/cache availableMem: 488 130 27 5 330 324 Swap: 1023 58 965 メモリに格納されているディスクキャッシュを削除する /proc/sys/vim/drop_cachesに3を書き込むことで、メモリ上に格納されているキャッシュをドロップできます: kazu634@bastion% echo 3 | sudo tee /proc/sys/vm/drop_caches [sudo] kazu634 のパスワード: 3 kazu634@bastion% free -m total used free shared buff/cache available Mem: 488 131 275 5 81 322 Swap: 1023 58 965 kazu634@bastion% ファイルへのアクセス速度を計測する すでに説明してきたように、OSがファイルにアクセスする際は、メモリ上のキャッシュ経由のアクセスと、直接ディスクにアクセスする場合の2つのパターンがあります。

KVMで仮想環境を整えてみる – (3)

  • POST
今までの説明でとりあえずゲストOSをインストールするところまでは出来ましたが、これだと何かと不便なので、PXEブートでインストールする環境を作ってみます。 PXEブートとは Wikipediaによると、次のようにありました: Preboot eXecution Environment(PXE)は、コンピュータのブート環境のひとつ。インテルの策定したネットワークブートの規格である。ネットワークブートを利用することにより、ストレージをもたないクライアントコンピュータや、ストレージに別のOSが導入されているクライアントコンピュータがサーバ上のOSイメージを使用して起動できる。 Preboot Execution Environment – Wikipedia 要するにネットワーク経由でOS起動イメージを配布して、ブートしてしまう方式です。PXEブートの環境で、OSインストール用のブートイメージを配布してあげるとCDとかを直接コンピュータに入れなくても、ネットワーク経由でOSインストールが出来てしまうのです!PXEブートでOSインストール用のデプロイメントサーバを構築すれば、ゲストOSを起動してあげるだけでOSの自動構築が出来る環境を整えることができます。 PXEブートサーバの構成 私の大雑把な理解だと、PXEブートは以下の手順で進行します: PCの電源をONにする DHCPサーバがブートイメージを配布するTFTPサーバのIPアドレスを通知する 通知されたTFTPサーバにアクセスし、最低限の環境を起動するためのブートイメージ(=syslinux)をダウンロードする ダウンロードしたブートイメージから最小限の環境が起動される。その環境から実際のOSブートイメージがダウンロードされる(複数OSブートイメージの中から起動するブートイメージを選択させることも可能) 以上のことからもわかるように、PXEブートサーバには、 syslinux DHCPサーバ TFTPサーバ が必要になります。 つづく

KVMで仮想環境を整えてみる – (2)

  • POST
前回はとりあえずOSイメージを指定して、OSをインストールするところまでできたと思います。OSインストール終了後にリブートすると、おそらくKVM上のゲストOSは再起動しないので、次のコマンドを実行してあげます: $ sudo virsh start <ゲストOSの名前> これで CD のマウントオプションを除いて、 virt-install で指示したオプション通りにゲストOSを起動してくれます。しかしここでつまずきの種が。。。 ゲストOSのネットワーク設定について さて KVM で作成したゲスト OS はNATになります。ゲストOSから外部への通信はできるのですが、ホストOSを含む外部からゲストOSへのアクセスは出来ません。VMWareなんかだとNAT接続でもホスト-ゲスト間は通信できるのですが、KVMはそうではないみたいです。 そこでブリッジ接続(ホストOSと同じネットワークセグメントのIPアドレスで通信)をできるようにしてみます。 事前準備 事前に次のコマンドを実行します: $ sudo apt-get install libcap2-bin $ sudo setcap cap_net_admin=ei /usr/bin/qemu-system-x86_64# x64の場合 $ sudo setcap cap_net_admin=ei /usr/bin/qemu # x32の場合 ブリッジ接続の設定方法 私のホストOSのUbuntuくんはNICが一枚です。初期状態だとネットワークの設定(/etc/network/interfaces)はこんな感じのはず: # This file describes the network interfaces available on your system # and how to activate them.

Linuxにおけるフォーマット

  • POST
Linuxでのフォーマットの仕方を忘れがちで何度もGoogleのお世話になっているので、ここでまとめておきます。 パーティションの切り方 fdiskコマンドを用います。 kazu634@srv634% df /media/disk [951] Filesystem 1K-ブロック 使用 使用可 使用% マウント位置 /dev/mapper/srv634-root 329233 138796 173439 45% / tmpfs 513816 513816 % /lib/init/rw udev 10240 100 10140 1% /dev tmpfs 513816 513816 % /dev/shm /dev/sda1 233335 32653 188234 15% /boot /dev/mapper/srv634-home 142568216 294068 135032012 1% /home /dev/mapper/srv634-tmp 376807 10307 347044 3% /tmp /dev/mapper/srv634-usr 4805760 2526672 2034968 56% /usr /dev/mapper/srv634-var 2882592 1217136 1519024 45% /var /dev/sdb1 964500 17696 897808 2% /var/backup_data /dev/sdc1 2010752 265440 1745312 14% /media/disk kazu634@srv634% fdish /dev/sdc1 /media/disk [952] zsh: command not found: fdish kazu634@srv634% sudo fdisk /dev/sdc1 /media/disk [953] [sudo] password for kazu634: Command (m for help): m Command action a toggle a bootable flag b edit bsd disklabel c toggle the dos compatibility flag d delete a partition l list known partition types m print this menu n add a new partition o create a new empty DOS partition table p print the partition table q quit without saving changes s create a new empty Sun disklabel t change a partition's system id u change display/entry units v verify the partition table w write table to disk and exit x extra functionality (experts only) Command (m for help): p Disk /dev/sdc1: 2059 MB, 2059278848 bytes 64 heads, 62 sectors/track, 1013 cylinders Units = cylinders of 3968 * 512 = 2031616 bytes Disk identifier: 0x00000000 Device Boot Start End Blocks Id System Command (m for help): n Command action e extended p primary partition (1-4) p Partition number (1-4): 1 First cylinder (1-1013, default 1): Using default value 1 Last cylinder or +size or +sizeM or +sizeK (1-1013, default 1013): Using default value 1013 Command (m for help): p Disk /dev/sdc1: 2059 MB, 2059278848 bytes 64 heads, 62 sectors/track, 1013 cylinders Units = cylinders of 3968 * 512 = 2031616 bytes Disk identifier: 0x00000000 Device Boot Start End Blocks Id System /dev/sdc1p1 1 1013 2009761 83 Linux Command (m for help): w The partition table has been altered!