2021年2月28日日曜日

gtdl

Go でサポートしているプラットフォームは  go tool dist list で見れるというのをどこかで知ったので記録。Go 使っているわけではないけども。 

$ go tool
addr2line
asm
buildid
cgo
compile
cover
dist
doc
fix
link
nm
objdump
pack
pprof
test2json
trace
vet
$ go tool dist
usage: go tool dist [command]
Commands are:

banner         print installation banner
bootstrap      rebuild everything
clean          deletes all built files
env [-p]       print environment (-p: include $PATH)
install [dir]  install individual directory
list [-json]   list all supported platforms
test [-h]      run Go test(s)
version        print Go version

All commands take -v flags to emit extra information.
$ go tool dist list
aix/ppc64
android/386
android/amd64
android/arm
android/arm64
darwin/amd64
darwin/arm64
dragonfly/amd64
freebsd/386
freebsd/amd64
freebsd/arm
freebsd/arm64
illumos/amd64
ios/amd64
ios/arm64
js/wasm
linux/386
linux/amd64
linux/arm
linux/arm64
linux/mips
linux/mips64
linux/mips64le
linux/mipsle
linux/ppc64
linux/ppc64le
linux/riscv64
linux/s390x
netbsd/386
netbsd/amd64
netbsd/arm
netbsd/arm64
openbsd/386
openbsd/amd64
openbsd/arm
openbsd/arm64
openbsd/mips64
plan9/386
plan9/amd64
plan9/arm
solaris/amd64
windows/386
windows/amd64
windows/arm

$ go tool dist list |cut -d/ -f 1 |uniq
aix
android
darwin
dragonfly
freebsd
illumos
ios
js
linux
netbsd
openbsd
plan9
solaris
windows

$ go version
go version go1.16 darwin/amd64

'solaris/amd64' と、Solaris は x86_64 だけらしい。NetBSD より OpenBSD のが多いのが意外な。

2021年2月25日木曜日

カーネル本より #2

3章、スレッドと軽量プロセス で混乱気味。 

3.2 基本的な概念要素 で 

本節では、3つの重要なタイプであるカーネル・スレッド、軽量プロセス、ユーザ・スレッドについて述べる

とある。ここの軽量プロセス( lightweight process, LWP ) が、?

カーネル支援ユーザ・スレッドのことである

と書かれていて、読んでる最中はいまいちピンと来ず、 「支援」と書かれているからかな・・と思い

すべてのプロセスは、1つあるいはそれ以上のLWPを持つ。その各LWPは別個のカーネル・スレッドで支援されている(図 3.4)

その図には 1つの P(プロセス) が複数のL(LWP) と対応していて、L と K(カーネル・スレッド) が 1:1 で対応している。

各LWPはカーネル・スレッドに関連している一方で、カーネル・スレッドにはシステム・タスクに貢献してLWPを持たないものもある。

 ・・・その後に

メモ:  LWP という術語は、SVR4/MP と Solaris 2.x の術語から借りてきたものである。 SunOS バージョン 4.x では、LWP は次の項のユーザ・レベル・スレッドを指しているので、混乱がある。しかし、本書では、LWP をカーネル支援ユーザ・スレッドとして一貫して用いる。あるシステムでは、仮想プロセッサとして用いているが、本質的には LWP と同じである。

はい・・?

カーネルがLWPを生成、同期、管理する機構を提供する一方で、LWPの賢明な使用はプログラマに任される。多くのアプリケーションはユーザ・レベル・スレッド機能の方がよりよいサービスを受けられる。

と。スレッドのご利用は計画的にと。「次の項」の 3.2.3 ユーザ・スレッドには以下

Mach の Cスレッドや POSIX の pスレッドなどのライブラリ・パッケージを介して実現する。

うーん・・?グリーンスレッドとは違う?ややわけがわから無くなってきたのでなんとなく wikipedia を頼ると・・・ https://ja.wikipedia.org/wiki/%E3%82%B9%E3%83%AC%E3%83%83%E3%83%89_(%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF)#%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E3%82%B9%E3%83%AC%E3%83%83%E3%83%89%E3%81%A8%E3%82%AB%E3%83%BC%E3%83%8D%E3%83%AB%E3%82%B9%E3%83%AC%E3%83%83%E3%83%89

書かれている、「カーネルスレッドとLWPを総称してネイティブスレッドと呼ぶこともある。」だと自分としてはしっくりくる感。

その後の 3.5 節ではスケジューラ・アクティベーションが出てくる。前の NetBSD 。https://ja.wikipedia.org/wiki/Scheduler_activations

「Scheduler activations は 1999年に Anderson、Bershad、Lazowska、Levy により提唱された」と書かれているけど 1991年ではないかな。Received June 1991; revised August1991; accepted September 1991とある。

https://en.wikipedia.org/wiki/Light-weight_process

原書が出た当時に触ってたら「これなー」となるんだろうな。2000年代前半にいた職場では Solaris 入れたラップトップを持ってる人いたけど、LWP がどうの、というのは一度も聞いたことがなかったなぁ。

https://docs.oracle.com/cd/E19253-01/819-0390/mtintro-75924/index.html

Solaris のマルチスレッドライブラリと標準

 

その後2003年には Linux で ネイティブなパジックススレッドライブラリが出てくる。

Red Hat Linux 9 のプレスリリース残ってるのね

https://www.redhat.com/en/about/press-releases/press-redhatlinux9

2021年2月17日水曜日

OS本

古のカーネル本はいくつか買ったので、さて、ナウなOS本を今買うとしたら何になるのだろうと熱帯雨林のサイトで探してみると以下が見つかる。

オペレーティングシステムの概念 https://www.amazon.co.jp/dp/4320122534/

だが2010年刊と10年も前、原書は 2004年。

https://www.amazon.co.jp/dp/0471694665/

和訳版は7版までだけど、原書なら 10th まで出ていた。このペースだと再来年には11th ?

2008, 8th https://www.amazon.co.jp/dp/0470128720/

2013, 9th https://www.amazon.co.jp/dp/1118093755/

2018, 10th https://www.amazon.co.jp/dp/1119456339/

なかなか値が張る。9th までは O'Reilly Online Learning にあるので 9th をちらっと読んでみよう。ToC みて 10th めちゃくちゃ欲しい!となれば買おう。

https://www.os-book.com/OS10/index.html https://www.os-book.com/OS9/index.html

カーネル本より

1-3の 3. から

1.3 過去、未来  より

最近その卓越した地位も Microsoft 社の Windows や Windows NT オペレーティング・システムの出現によって脅かされている。デスクトップ市場のようなローエンドでは UNIX は戦いに負けたように見える。

 

1.3.2 UNIX の何が間違っているか  より

UNIX は素晴らしいオペレーティング・システムであるが、多くのユーザはオペレーティング・システムではなく、単純にある仕事をしてくれる能力だけを欲する。これらのユーザは基盤となるファイル・システム構造やプロセス・モデルの優雅さには興味を持っていない。ただ、特定のアプリケーションを最低のコストと手の掛からない方法で実行させることを望んでいる。

 

そうよねぇ。今も Windows なり macOS なり、使いたいアプリケーションがちゃんと動きさえすればいいとは思う。例えば、Windows Update がー、ソフトウェアアップデートがー、とかを気にしなくてもいい未来は死ぬまでに来るのかしら。スマホ、タブレットがそれに近いのかもしれない。使ったことがないけどもしかして Chromebook ?

 

この書籍読んでると、上に書いたようになかぐろでの表記がしばしばある。他のをいくつか挙げると、32ビット・マシン、ジョブ・コントロール、コマンド・ヒストリ、オリジナルの UNIX ソース・コード、デバイス・ドライバ、メッセージ・キュー、など。どれも今は「・」書かないんじゃないかな。当時はそういうものだったのか、訳者の好みだったのか。

なかぐろではないけど、カリフォルニア大学バークレー校と書かれたすぐ後にはカルフォルニア大学バークレー校と書かれていた。揺れている。

 

IBM の knowledge center はなかぐろってる。ナレッジ・センターとは書かれていないけど。

https://www.ibm.com/support/knowledgecenter/ja/SSFKSJ_9.0.0/com.ibm.mq.pro.doc/q002620_.htm

 

1.4 本書の意図 より

SVR4 には最も注意を傾けたが、4.3BSD や 4.4BSD、Mach にも十分な用紙を割いている。商業用 UNIX の中では本書は SunOSと Solaris 2.x に最大の用紙を割いた。それはただ単に、UNIX 市場における重要性だけでなく、Sun Microsystems 社がその後の基本リリースへの統合された多くの技術貢献の責任を負っていることと、これらのシステムに対する方の出版物のためである。

 「用紙を割いた」という表現は新鮮だった。紙面だと雑誌や新聞紙になる?紙幅なりページ数、頁数でもよさそうな。。 

 

読み終えたら単に「やっぱり Solaris はすごかったんだね」という感想になると予想。


2021年2月12日金曜日

カーネル本

最近、なんの気無しに古いカーネルな本を数冊買った。読むとは言っていない。

1. https://www.amazon.co.jp/dp/4320025512/

1991/6 刊、丸善。手元のは 2000/9 の14刷。

原書は 1986/5 刊 https://www.amazon.co.jp/dp/0132017997/ 

 

2. https://www.amazon.co.jp/dp/4890529306/ 

1996/4 刊、ソフトバンク。手元のは刷数不明。1刷かな。

原書は 1994/6 刊 https://www.amazon.co.jp/dp/0201633388/

 

3. https://www.amazon.co.jp/dp/4894711893/

2000/5 刊、ピアソンエデュケーション。まだ手元にない。手元のは1刷。3冊中で最も鈍器度が高い。表紙には 4.4BSD, Solaris 2.x, Digital UNIX などと書いてあってそれだけで古い本であることが感じられる。

原書は 1995/10 刊 https://www.amazon.co.jp/dp/0131019082/

 

1 や 3 のように原書発刊から5年くらい経ってたのはすごいな。ものによっては原書新版が出てたりするくらいな気がする。

当時はどうやって「この専門書良いから翻訳して日本でも出そう」という動きが発生したんだろうか。ネットニューズで盛り上がったりしてたのかしら。 UNIX magazine は 1986年創刊、 UNIX USER は 1992年創刊だったようだ。

 

1 の Maurice J. Bach 氏は書籍に略歴は書かれていなかった。ググってもこの本しか出てこない。

2 の Curt Schimmel 氏はベル研UNIX開発チームの元メンバー、発刊当時は SGI の中の人だったらしい。お〜〜

3 の Uresh Vahalia 氏は現在 HPE の VP of Engineering の方のはず。当時は EMC の中の人だったと。

どれもパラパラっと読むくらいかな。いずれも「コンディション: 良い」以上のを買って、1 が最も高価だった(当時の定価よりかは安い)。2 は 1,000円、送料まで入れると 3 がもっとも安価で手に入れられたのだった。

 

これは 2001年: あえてSolarisを使う理由  https://askslashdot.srad.jp/story/01/08/29/1320256/

 

ところでウルリッヒのスレッドプログラミング本は一体どうなったのだろう。2018 年に発売してたように見えるけど、出てないと思う。

https://www.amazon.co.jp/dp/0131487264/


2021年2月6日土曜日

ACM 更新していた

ACM のメンバーシップ更新。

O'Reilly Learning の技術書利用が主目的で、社の制度で O'Reilly Learning 利用することも可能だけども、前に塩対応されたので ACM メンバーになって使い始めた、という感じ。

一冊すみからすみまで読み切ることはなくリファレンス的利用が多いな。ちゃんと読んだ方が血肉となるだろうと思いつつ出来てはいない。

去年はしばらく(数ヶ月)利用しておらず、久しぶりになにか読むかと思ったら O'Reilly Learning を deactivate されており Customer Service Representative に問い合わせしたのだった。利用するならちゃんと利用しなさいてこと。

Early Release で出てきてる書籍で気になるのもあるのでぽちぽちと playlist に追加。AWS Cookbook やら High Performance MySQL, 4th Edition あたりよさそう。

BSD grep の今

 container_of をゴソゴソと見てるとき、macOS 上にソース持ってきて当初は grep してたのだけど、あれ、これやたら遅いな?と思いやっぱり ripgrep だなと rg にしたのだった。

macOS の grep (BSD grep) はGNU grep より遅いね、というのはささっとググるだけでこんな感じで見つかる。BSD grep が遅いのか、GNU grep が速いのか。

https://lists.freebsd.org/pipermail/freebsd-current/2010-August/019310.html

http://jlebar.com/2012/11/28/GNU_grep_is_10x_faster_than_Mac_grep.html

 

うん、おそい。

$ time grep -r ^#include . |wc -l; grep --version
  341659

real    0m14.074s
user    0m12.134s
sys    0m1.902s
grep (BSD grep) 2.5.1-FreeBSD

$ time ggrep -r ^#include . |wc -l; ggrep --version
  335204

real    0m2.162s
user    0m0.762s
sys    0m1.411s
ggrep (GNU grep) 3.6
Copyright (C) 2020 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by Mike Haertel and others; see
<https://git.sv.gnu.org/cgit/grep.git/tree/AUTHORS>.

$ time rg ^#include |wc -l; rg --version
  335204

real    0m0.557s
user    0m1.036s
sys    0m2.906s
ripgrep 12.1.1 (rev 9c8d873a75)
-SIMD -AVX (compiled)
+SIMD +AVX (runtime)

ん、BSD grep とそれ以外で数が合わない。いやいや・・diff とってみてもこの差が出るのかわからんぞ・・


以下は VM な FreeBSD 12.2-R で。BSD grep 最も遅いけどもだいぶマシになっている感。

$ time grep -r ^#include . |wc -l; grep --version
  341714

real    0m2.061s
user    0m0.999s
sys     0m1.149s
grep (GNU grep) 2.5.1-FreeBSD

Copyright 1988, 1992-1999, 2000, 2001 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

$ time bsdgrep -r ^#include . |wc -l; bsdgrep --version
  341714

real    0m3.863s
user    0m2.525s
sys     0m1.435s
bsdgrep (BSD grep) 2.6.0-FreeBSD

$ time rg ^#include |wc -l; rg --version
  335259

real    0m0.872s
user    0m1.242s
sys     0m2.031s
ripgrep 12.1.1
+SIMD -AVX (compiled)
+SIMD +AVX (runtime)

これもまた数が合わない、今度は ripgrep が。

find ~ xargs しましょう

 $ time find . -type f|xargs rg ^#include |wc -l
  335259

real    0m1.257s
user    0m1.356s
sys     0m2.155s
$ time find . -type f|xargs grep ^#include |wc -l
  335259

real    0m1.906s
user    0m0.824s
sys     0m1.235s
$ time find . -type f|xargs bsdgrep ^#include |wc -l
  335259

real    0m3.522s
user    0m2.560s
sys     0m1.110s