Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
yes command faster
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
MSR
April 07, 2018
Technology
460
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
yes command faster
yesコマンドは速くなっている
※絵文字が正常に表示されていません。完全版は
https://gitpitch.com/msr-i386/slide_20180407_yes/
まで。
MSR
April 07, 2018
More Decks by MSR
See All by MSR
horizon
msr_i386
0
1.4k
fujiaire by shell
msr_i386
0
1.2k
colaboratory
msr_i386
0
180
Amazon Dash Hack
msr_i386
0
1.4k
cgroup
msr_i386
0
1.5k
discover fork-bomb
msr_i386
0
2k
kanji banner
msr_i386
0
1.9k
ASCII art oneliner
msr_i386
0
2.1k
QR Code Shell
msr_i386
0
2.4k
Other Decks in Technology
See All in Technology
Devsumi 2026 Summer 人もAIも使える共通基盤を事業の加速装置にする~デザインシステム運用に学ぶ組織レバレッジ~ 渡辺 凌央
legalontechnologies
PRO
1
230
LLM/Agent評価:トップ営業の発言を「正解」にする 〜暗黙的正解による評価を営業資産に変える〜
takkuhiro
1
230
AICoEでAIネイティブ組織への進化
yukiogawa
0
190
Gen3R: 3D Scene Generation Meets Feed-Forward Reconstruction
spatial_ai_network
0
130
脱金融のフューチャー・デザイン / Future Design Beyond Finance
ks91
PRO
0
150
SRE依存からの脱却 運用を開 発チームへ移す、 フルサイ クル開 発体制の実践
joooee0000
0
3.1k
型は壁、Rustでもバグを直すな、表現できなくせよ
nwiizo
14
2.1k
ボーイスカウトルールでメモリやスキルを改善しよう
azukiazusa1
4
1.4k
ZOZOTOWNの進化と信頼性を両立する負荷試験
zozotech
PRO
2
190
Foxgloveについて 実際にExtensionを開発して公開するまでの話 / About Foxglove: The Story of Developing and Releasing an Extension
ry0_ka
0
290
OPENLOGI Company Profile for engineer
hr01
1
74k
関数型の考えを TypeScript に持ち込んで、テストしやすい純粋関数を増やす / Pure at the Core, Effects at the Edge: Bringing Functional Thinking into TypeScript
kaminashi
2
130
Featured
See All Featured
From π to Pie charts
rasagy
0
240
Building Flexible Design Systems
yeseniaperezcruz
330
40k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
230
23k
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
380
For a Future-Friendly Web
brad_frost
183
10k
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
62
45k
A Tale of Four Properties
chriscoyier
163
24k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
2k
How GitHub (no longer) Works
holman
316
150k
Building the Perfect Custom Keyboard
takai
2
810
[RailsConf 2023] Rails as a piece of cake
palkan
59
6.7k
How to build a perfect <img>
jonoalderson
1
5.8k
Transcript
YESコマンドは速く なっている @第35回シェル芸勉強会 大阪サテライト Navigate : Space / Arrow Keys
| - Menu | - Fullscreen | - Overview | - Blackout | - Speaker | - Help M F O B S ? 1 / 20
目次 yesとは 速度指標 yesの比較 いかにして速くなったか [ GitPitch @ github/msr-i386/slide_20180407_yes ]
2 / 20
自己紹介 ハンドルネーム: MSR Webブラウザ の作者 Twitter ID: @msr386 Tungsten [
GitPitch @ github/msr-i386/slide_20180407_yes ] 3 / 20
yesとは 自分がkillされるまで指定した文字列を繰り返し 出力するコマンド 引数を省略した場合はyが出力され続ける [ GitPitch @ github/msr-i386/slide_20180407_yes ]
4 / 20
活用例 続行するのに'y'とEnterキーを押す必要のあるプ ログラム/シェルスクリプトでyを勝手に押して 欲しい場合 負荷試験として シェル芸の足がかりとして [ GitPitch @ github/msr-i386/slide_20180407_yes
] 5 / 20
適当にディレクトリを作り、その中で tree したら 次のような出力が得られるようにしてください。 (第33回 シェル芸勉強会 Q1) $ tree .
└── ҩ └── ҩ └── ҩ └── ҩ └── ҩ └── ҩ └── ҩ └── ҩ └── ҩ └── ҩ [ GitPitch @ github/msr-i386/slide_20180407_yes ] 6 / 20
解答例 $ yes ҩ | head -n 10 | sed
-z "s/\n/\//g;s/^/mkdir -p /" | sh [ GitPitch @ github/msr-i386/slide_20180407_yes ] 7 / 20
今回の目的 yesコマンドが高速化されたことを確かめる [ GitPitch @ github/msr-i386/slide_20180407_yes ] 8 /
20
速度指標 YES PER SECOND [ GitPitch @ github/msr-i386/slide_20180407_yes ]
9 / 20
YES PER SECOND 1秒間に何回'y'(+改行コード)を出力することがで きたかを表す 計測には pv コマンド (Pipe Viewer)
を使用する debian系なら apt-get で簡単に入手可能 ただし、pvコマンドの結果から単位変換が必要 100 [MiB / s] = 100 / 2 * 1048576 = 52,428,800 [yes / s] "yes per second" ではなく "y per second" ではない か説 [ GitPitch @ github/msr-i386/slide_20180407_yes ] 10 / 20
PVコマンド実行例 $ yes | pv > /dev/null 63GiB 0:00:02 [1.88GiB/s]
[ <=> ] [ GitPitch @ github/msr-i386/slide_20180407_yes ] 11 / 20
計測環境 PC: GPD Pocket OS: Ubuntu 16.04 LTS (Windows Subsystem
for Linux) [ GitPitch @ github/msr-i386/slide_20180407_yes ] 12 / 20
最初期 1979年1月10日にKen Thompsonによって書かれた コード 実に単純明快 (K&RスタイルのC言語なので今だと 違和感あるかも) 記録: 14,837,350.4 [yes/s]
main(argc, argv) char **argv; { for (;;) printf("%s\n", argc>1? argv[1]: "y"); } [ GitPitch @ github/msr-i386/slide_20180407_yes ] 13 / 20
NETBSDでの実装 これも非常にシンプル ※一部改行を削除 記録: 14,942,208 [yes/s] int main(int argc, char
**argv) { const char *yes; yes = (argc > 1) ? argv[1] : "y"; while(puts(yes) >= 0) continue; return EXIT_FAILURE; } [ GitPitch @ github/msr-i386/slide_20180407_yes ] 14 / 20
FREEBSDでの実装 バッファリングで高速化 (2017年7月13日) ※主要部分のみ抜粋、一部改行を削除 ※計測できず int main(int argc, char **argv)
{ ... ... while ((ret = write(STDOUT_FILENO, exp + (explen - more), if ((more -= ret) == 0) more = explen; err(1, "stdout"); } [ GitPitch @ github/msr-i386/slide_20180407_yes ] 15 / 20
GNU COREUTILS バッファリングで高速化 (2015年3月10日) ※主要部分のみ抜粋 記録: 225,443,840 [yes/s] ※8.25 int
main (int argc, char **argv) { ... ... /* Repeatedly output the buffer until there is a write error while (full_write (STDOUT_FILENO, buf, bufused) == bufused) continue; error (0, errno, _("standard output")); return EXIT_FAILURE; } [ GitPitch @ github/msr-i386/slide_20180407_yes ] 16 / 20
FREEBSD, GNU COREUTILSが高 速な理由 1行ごとに標準出力するのは効率が悪いので、バ ッファリングしてから標準出力する バッファーは1KiB (BUFSIZ @ stdio.h)
[ GitPitch @ github/msr-i386/slide_20180407_yes ] 17 / 20
参考(1) Unixコマンド”yes”についてのちょっとした話 How is GNU yes so fast? Improve yes'
throughput yes: output data more efficiently https://postd.cc/a-little-story-about-the-yes-unix-command/ https://www.reddit.com/r/unix/comments/6gxduc/how_is_g https://github.com/freebsd/freebsd/commit/1d61762ca37c2 https://github.com/coreutils/coreutils/commit/35217221c211 [ GitPitch @ github/msr-i386/slide_20180407_yes ] 18 / 20
参考(2) NetBSD - yes.c OpenBSD - yes.c FreeBSD - yes.c
GNU coreutils - yes.c http://cvsweb.netbsd.org/bsdweb.cgi/src/usr.bin/yes/yes.c? rev=1.9&content-type=text/x-cvsweb-markup https://github.com/openbsd/src/blob/master/usr.bin/yes/yes https://github.com/freebsd/freebsd/blob/master/usr.bin/yes https://github.com/coreutils/coreutils/blob/master/src/yes.c [ GitPitch @ github/msr-i386/slide_20180407_yes ] 19 / 20
おまけ #危険シェル芸 $ yes `yes` [ GitPitch @ github/msr-i386/slide_20180407_yes ]
20 / 20