Your SlideShare is downloading. ×
0
お手軽並列処理
お手軽並列処理
お手軽並列処理
お手軽並列処理
お手軽並列処理
お手軽並列処理
お手軽並列処理
お手軽並列処理
お手軽並列処理
お手軽並列処理
お手軽並列処理
お手軽並列処理
お手軽並列処理
お手軽並列処理
お手軽並列処理
お手軽並列処理
お手軽並列処理
お手軽並列処理
お手軽並列処理
お手軽並列処理
お手軽並列処理
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

お手軽並列処理

21,583

Published on

0 Comments
5 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
21,583
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
23
Comments
0
Likes
5
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  1. お手軽並列処理 斉藤 博文 (hi_saito@yk.rim.or.jp) @hi_saito
  2. 最近の興味のあるところ自宅でのスマホやタブレットを快適に利用したい。● 回線はそのままだけど、インターネット接続端末 が増えて重くなってきたよね。● スマホで表示される広告がうるさいよね。● 不意にタップしてしまうことがあるよね。 そんな時こそ OSS の活躍の場
  3. 具体的には?Fedora をサーバーにしていろいろ改善中。● Web のキャッシュ squid● DNS のキャッシュ dnsmasq● 広告の削除 adzapper● hosts, iptables の自動更新 cron なかなか快適です!
  4. 自宅の構成 Web サーバー モデム DNS サーバー iMac Fedora 1.5M ADSL Proxy サーバー ルーター 40M iPhone iPhone iPhoneWiFi ルーター Wii DS Win Win Fedora
  5. 今日のお題hosts ファイルの自動更新● ローカルの hosts ファイルにブラックリストの書 かれた hosts を入手してマージする。● ちなみに、DNS キャッシュの dnsmasq が hosts を見てくれるので楽です。 これをどう書くか?
  6. やりたいことを書こう!● 今の hosts をバックアップ● ブラックリストを入手する● ブラックリストを hosts 形式にする● 新しい hosts を作る● 新しい host を上書きする● 以前の hosts との差分を取る● 古いバックアップを削除する 書くだけなら、簡単ですね。
  7. 順序を決めよう! 今の hosts をバックアップ ブラックリストを入手する ブラックリストを hosts 形式にする 新しい hosts を作る 新しい host を上書きする 以前の hosts との差分を取る 古いバックアップを削除する
  8. 並列処理できるかな? 今の hosts をバックアップ ブラックリストを入手する ブラックリストを hosts 形式にする 新しい hosts を作る 新しい host を上書きする 以前の hosts との差分を取る 古いバックアップを削除する
  9. グループ分けしよう! ● 今の hosts をバックアップ準備 ● ブラックリストを入手する ● ブラックリストを hosts 形式にする ● 新しい hosts を作る実行 ● 新しい host を上書きする確認 ● 以前の hosts との差分を取る後処理 ● 古いバックアップを削除する 大体この 4 つに分割されます。
  10. 何で組むか!?誰もがお世話になるツール、make です!● 良しなに並列処理してくれる。● 負荷が高い時には単列処理に自動で変更する。● エラーがあれば、自動的にストップ。 まさに root で使うのに最高のツールです。
  11. Makefile の作り方作るもの : 作る材料 作り方または作るもの : 事前にしなければいけないこと 作り方 とても簡単です。
  12. 変数の設定 【ワンポイント】 GNU make だと := で展開後# Settings - 設定 の変数が代入できて便利だよ。SHELL = /bin/bashMAKEFLAGS = -j 4 -l 4 -sTMP = /tmpHOSTS = /etc/hostsHOSTS_LAN = /etc/hosts.lanBLACKLIST_URL = http://someonewhocares.org/hosts/GENERATION = 3TODAY := $(shell date +%Y%m%d%H%M%S) -j が同時処理数、-l が負荷の設定
  13. Makefile の骨子all: Prepare Execute Check Clean# Prepare - 準備Prepare: backup_hosts get_blacklist format_blacklist_to_hosts make_new_hosts# Execute - 実行Execute: overwrite_hosts# Check - チェックCheck: diff_hosts# Clean - 後処理Clean: remove_older_hosts
  14. backup_hosts:backup_hosts: cp ${HOSTS} ${HOSTS}.${TODAY}get_blacklist:get_blacklist: wget -q -o /dev/null ${BLACKLIST_URL} -O ${TMP}/get_blacklist
  15. format_blacklist_to_hosts:format_blacklist_to_hosts: get_blacklist awk $$0 ~ /^127/ {print $$0} ${TMP}/get_blacklist > ${TMP}/format_blacklist_to_hosts 【ワンポイント】make_new_hosts: Makefile で $ は $$ と記載 する。make_new_hosts: format_blacklist_to_hosts cat ${HOSTS_LAN} ${TMP}/format_blacklist_to_hosts > ${TMP}/make_new_hosts
  16. overwrite_hosts:overwrite_hosts: make_new_hosts rm ${HOSTS} mv ${TMP}/make_new_hosts ${HOSTS} 【ワンポイント】diff_hosts: 「実行」は可能な限り一瞬で完 了する方法を使おう。diff_hosts: make_new_hosts diff -u ${HOSTS}.${TODAY} ${TMP}/make_new_hosts
  17. remove_older_hosts:remove_older_hosts: backup_hosts ls -1 ${HOSTS}.* | egrep ${HOSTS}.[0-9]{14}$$ | sort -r | 【ワンポイント】 awk NR > ${GENERATION} | grep よりも egrep を使うと xargs rm -f 便利だよ。リテラルなら fgrep が便利だよ。 うまく分割して、小さくまとめる。
  18. 本当に高速化されているの?全 7 項目に sleep 1 を割り当てて実行してみる。$ time make -f Makefile0.02s user 0.03s system 0% cpu 7.061 total$ time make -j 4 -f Makefile0.02s user 0.03s system 1% cpu 4.040 total ちゃんと並列処理されている。
  19. もうひとつの並列処理コマンドxargs も並列処理できるよ。$ time seq 5 | xargs -n 1 sleep0.00s user 0.00s system 0% cpu 15.111 total$ time seq 5 | xargs -P 5 -n 1 sleep0.00s user 0.01s system 0% cpu 5.007 total ちゃんと並列処理されている。
  20. まとめやることを最初に抜き出して、「準備」「実行」「確認」「後処理」のどれに当てはまるかを考えよう。順序を少し考えるだけで、make の世界では並列処理できちゃいます。 「実行」は短く。
  21. まとめプログラミング言語単独で並列処理をしようとすると大変ですが、普通に処理するだけで並列処理する仕組みは準備されているのです。 早速、帰ったら復習だぁ!

×