Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
yes command faster
Search
MSR
April 07, 2018
Technology
470
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.5k
fujiaire by shell
msr_i386
0
1.2k
colaboratory
msr_i386
0
190
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
2k
ASCII art oneliner
msr_i386
0
2.1k
QR Code Shell
msr_i386
0
2.4k
Other Decks in Technology
See All in Technology
hackers_champloo_2026_tidb
makocchi
0
140
M5Stackで作る BLEマウス GPSログの世界
tomokusaba
0
120
AgentCoreで実践するハーネスエンジニアリング
yakumo
1
300
QA4AI 2026-Oct 生成AI時代の品質保証
tokuty
0
410
事業活動を AI Ready にする攻めと守りのデータエンジニアリング / data-engineering-for-ai-ready-business
pei0804
7
2.6k
Getting Started with Google Antigravity
glaforge
0
210
UniFi(ユニファイ)AIカメラの現場活用
ludicmind
1
420
触りたくないデータに、どう触るか AI時代のRBACアクセスガバナンス
ivry_presentationmaterials
0
130
DWH の限界突破! AI エージェント向け爆速リアルタイムデータ基盤 ClickHouse
jozono
1
390
AIカンパニーへの転換を支えた、エンジニアの仕事の再定義
kworkdev
PRO
1
460
AIがコードを書く時代に、エンジニアは何で自分の価値を証明するのか / In an era where AI writes code how do engineers prove their value
carta_engineering
3
860
LocalStack を使ったサーバーレスアプリケーション開発 / Serverless Development with LocalStack
kakakakakku
1
410
Featured
See All Featured
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
260
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
23k
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
270
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
930
Why Our Code Smells
bkeepers
PRO
340
58k
A better future with KSS
kneath
240
18k
Reality Check: Gamification 10 Years Later
codingconduct
0
2.3k
The Illustrated Children's Guide to Kubernetes
chrisshort
51
53k
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
430
Optimizing for Happiness
mojombo
378
71k
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