brand new note

インフラエンジニアを目指す大学院生のメモ

進捗率を表示するpvコマンド

aptとかyumしたときに表示される進捗率をあらわすプログレスバー。pvコマンドを用いると簡単にこれを実装することができます。時間がかかる処理を自作した場合に対して有効です。使ったことがない方はまずインストールしてみましょう。

sudo apt install pv

使い方

時間がかかる処理ということで、試しに大きなファイルの圧縮をやってみましょう。まず500MBのダミーファイルを用意します。

dd bs=500000000 count=1 if=/dev/zero of=bigfile1.dat
dd bs=500000000 count=1 if=/dev/zero of=bigfile2.dat

ダミーファイルの作り方の説明はこちら

/dev/zeroってなんだ - brand new note


次に作成した二つのファイルをアーカイブし、圧縮します。tarの引数に-を指定することによって、コマンドの出力を標準出力に出すことができます。これにより、パイプで進捗率をpvコマンドに渡すことが可能になります。最後にgzipコマンドに渡して圧縮します。

tar cf - bigfile1.dat bigfile2.dat | pv | gzip > archive.tar.gz


ikeda@DESKTOP-4B08IPQ:/tmp/myapp/datadir$ tar cf - bigfile1.dat bigfile2.dat | pv | gzip > archive2.tar.gz
 953MiB 0:00:06 [ 137MiB/s] [            <=>                                                                           ]

プログレスバーで圧縮中の様子を観察することができます。左から順にトータルのデータ量、経過時間、処理速度が出力されているのがわかります。

参考

UNIXシェルスクリプト マスターピース132

UNIXシェルスクリプト マスターピース132

4Kモニタを買いました

はい。タイトル通りの報告となります。


うちにはモニタらしいモニタがなく、HD, 23.5inch というごく普通のテレビにPCを繋いで作業するだけだったのですが、ようやく購入に踏み切りました。こちらです。

輝度のダイナミックレンジが広がるHDR機能付き4Kモニタで4万円強は現時点で最安クラス。パネルはTNよりIPSやADSが良いとのことで…。ためになります。 HDR機能およびディスプレイのスペックの見方については、ざっくりした説明がこちらに記載されています。

www.eizo.co.jp

つなぐ

f:id:frazz:20181024134021j:plainf:id:frazz:20181024134040j:plain

うちのデスクトップPCは4K出力ができないので、対応できるのはジャンクで買ってきたX250のみ。もはやジャンクPCの仕事量を超えています…。miniDP to 4K-HDMIを挟んで出力します。試しにyoutubeで4K動画を流してみたところ、かくつきましたがなんとか再生可能でした。


ケーブル規格の調べもの

入手できたうちのminiDP to 4K HDMIはこちら。

www.mco.co.jp

こいつが4K30p と FHD60p の2パターンにのみ対応しており、4K60pは出せないことが判明しました。4K30p=現在最も普及しているHDMI1.4(max10.8Gbps) , 4K60p=ちょっとレアなHDMI2.0(MAX18Gbps) なのですが、ここが60pに対応していないとHDMI2. 0を買っても意味がないんですね。しかもサブ機のX230に至ってはFHDすら出せないからそもそも出力不可能…。くそう…。

まあよく考えたらこんな細いのが18Gbpsも出せるわけないんですが、調査不足でした…。30pでもきれいなので許しましょう。ちなみに上記のHDMI規格を調べていないと、世の中には30pしか出せないのに堂々と4KHDMIって書いて売られているケーブルが多数存在しますので、とっても気になるという方であれば購入の際に注意してみるとよいと思います。ゲーミングPCを買うような方々が主に気にするのかな?

https://ja.wikipedia.org/wiki/HDMI#HDMI_2.0


まあそれはともかく

写真だと伝わりにくいんですが、家でこの画質が見られると相当こう…テンションに…影響しますね。鮮やかなんですよ白がクリアで黒がシャープで!!()

サイズが27inchで、90cmのメタルラックに悠々とのっかるくらい。他の皆様のレビューの通り、27inch以上になるとちょっと作業がしにくくなってしまうのでこれくらいが満足度が高いのかなあと思います。解像度150%くらいにして文字サイズ的にはちょうどいいくらいで、まだ高精細になる余力を残していると考えると非常に作業中の充実感は得られるんじゃないかなと思います。

f:id:frazz:20181024141804p:plain

本気出すとこんな感じで、相当数ウィンドウを開いても重ならなくて済むのがなんとなくご想像いただけるかと思います。

皆様も興味があればぜひ!

知識を構造化するためのテクニック

最近どうやって知識を効率的に入れるか、頭と体をどう使えばいいのかを考えています。読書術とかメモ術とか脳のちょっとした仕組みとか、心理学の端っことか…そんなことをひたすら調べています。

そこでqiitaの一記事が目に留まりまして、研究なり、ものづくりなりをしていくときに参考になりそうだったのでメモしておきます。最近出たエンジニアの知的生産術という書籍が有効なようで、まとめのまとめみたいになって恐縮なんですが…。自分なりの解釈で再構成しています。参考記事や原著が気になる方は一読しておくとよいと思います。

qiita.com


知識の構造化テクニック

  • 理解できないことを学ぼうとしない

分からないことに時間を割くのはやめる。これが難しいのですが慣れるしかないのかなと思います。

  • 事実の暗記より先に全体像を学ぶ

インターネットの記事よりもいろんな書籍を読み漁ることでこれは練習できるかもしれません。まったく技術的なジャンルでなくても、です。感覚を身につけるものと割り切れば応用できます。

  • 基礎から積み上げる

  • 複雑な知識は細分化し、一つの疑問と答えをセットにして短く記憶する

大事なことを何度も繰り返して覚えるには短く記憶するほうがいいのだと思います。

  • 穴埋め問題は効果がある

  • 画像を使う

メモでも図や絵を多用したり矢印で因果関係を意識的に書く方が頭に入りやすいですし、PC上で思考の整理をする際も同様なのだと思います。どなたかいいツール教えてください()

  • 記憶術を使う(マインドマップ等)

  • 順序のない情報の集合は記憶しにくいのでインプットの対象から外す

割とこれが大事で、例えばやみくもにコマンドオプションを覚えても効果が薄かったりするのかもしれません。全体を把握して一つのコマンドでどんな問題を解決できるのかを、ざっと気になったところだけメモするくらいがいいのかもしれません。

  • 似たようなものは一度に覚えない

索引を順番に眺めるのは効果があまりありません…。全体図を捉えるなら目次を見たほうが効果的です。

  • 言い回しを最適化する、知識を自分の体験と絡める

自分の言葉で直して「気づき」に重点を置くのが大切なのかと。

  • 冗長性ある記憶方法は最小情報原則に矛盾しない

ひとつのものごとを言い換えればこうだよね、っていうように直すことで記憶の定着を図る方法です。

  • 日付を記録する

学んだ時期を見直す仕組みを持つことで思い出すスピードを短縮できます。全部覚えようとするのは不可能です。ここをしばらく自分は割り切れずに悩んでいたのですが…

  • 優先順位をつける

言わずもがな。個人的にはまだ苦手です。


また、この本以外においても「図や画像で記憶する」「試験問題を解く」「問題を手を動かして作ってみる」などの学習方法が、より主体的に取り組めるため効果的という話をちらほら耳にしました。エンジニア以外の勉強にも使えるテクニックが多いようですが、これをちょっと頭に入れておくだけで色々捗りそうです。

今日の小ネタ 180728

本日の気づきシリーズとか作ったら軽いネタも気軽にアウトプットできるのではという目論見です。自分のブログですし。

thunderbirdの小ネタ

  • メールのアーカイブは受信トレイでメールをクリックしてAキー。作ったフォルダには分類できないけど大事なメールが来た時に使う。

  • メール送信時の表の作成について。中に文字を打ってる間にセルの大きさが自動で調整されていくので、勝手にきれいな表が作れるしエクセルみたいにセルを引っ張らなくて済む。これ知らなくて3分くらい引っ張ってた。


エンジニアさんのブログを発見した

ブロックチェーンエンジニアとして生きる - ブロックチェーン,エンジニア,ビットコイン,Bitcoin,イーサリアム,Ethereum,暗号通貨,仮想通貨,DApps

ブログは質より量派の方がいらっしゃったようで少し安心。。。どうでもいいけどこのwordpressのテーマ持ってます、使いやすいんですよね


椅子でできる筋トレについて

【オフィス&自宅で】イスを使った20種類の筋トレメニューで引き締める! | 【舞筋道-maikindo-】ダンス×筋トレ×ダイエット

体力を戻すために運動はしたいけど進捗も出したい。器具買うほど筋トレは興味ない。気分が乗った時だけでいい…という方におすすめ。最後のほうはオフィスでやっちゃだめ。


pseudoの意味は「疑似」とか「偽」

読み方:pseudo: UNIX/Linuxの部屋

すーど、とか、しゅーど、とかいうらしい。pseudo terminal は「疑似端末」っていう意味。linuxいじってるとよく見るんだけど???ってなることがよくあるので。


BGPツールキット

Hurricane Electric BGP Toolkit

自分がアクセスしているプロバイダのASがいくつなのかとかが分かります。逆にAS番号から企業を検索することもできます。ピアリングの状態も確認できるのでネットワーク勉強してる人は見ていて楽しいと思います。


ps aux したときの [hogehoge/0] って何

タイトルを迷って非常に抽象的にしてしまいましたが、CLIが固まってしまってデバッグしてた時の調べものです。

カーネルスレッド

[hogehoge/0]のように[]で囲われたプロセスはカーネルスレッドと呼ばれます。

カーネルスレッドとは - Linuxの備忘録とか・・・(目次へ)

f:id:frazz:20180512182616p:plain

カーネルスレッドの役割はワークキュー、メモリの回収、ソフト割込みなどで、カーネルの動作を補助するものになっています。ここでカーネル起動時にinit (process ID 1)が生成されると、それを親にして子プロセスが生成される。。。という話あたりもしたかったのですが、こちらに詳細があります。気が向いたら追記します。

カーネルスレッド生成&ユーザーモードプロセス生成 - Qiita

で、カーネルスレッドとユーザプロセス、psコマンドで両方見ることができるのはなぜかというと、スケジューリングの観点から見たときカーネルスレッドもプロセスも同じ手順(do_fork関数)で生成されるからなんですね。


ただ違いももちろんあって、一般的なプロセスは生成されるときに一定のメモリ量を割り当てられるので、メモリの限界が来ない限り同時にたくさんのプロセスを抱えることができます。それに対しカーネルスレッドも同時にたくさん動作することは可能なのですが、その上限はハードウェアのメモリ量ではありません。「カーネルスレッドを動かすプロセスに割り当てられたメモリ量」です。

なので、リソース確認用コマンドで確認してもメモリがいっぱいになっていないのに動作が重くなる、あるいはロードアベレージが高くなる場合はカーネルスレッドが乱立しているかもしれません。その場合のデバッグはケースバイケースなんでしょうけど、自分が躓いたときは一緒に動いている他のサーバがトリガーになってました。nfsの挙動がおかしくなっているのをdmesgコマンドで見つけた感じです。

なかみ

まだ整合性に欠ける表現があります。

  • [events]

非同期実行の必要がある低レベルの要求を処理するメカニズム

  • [kintegrityd]

ワークキュー?ブロックデバイスに誤りがないかチェック

  • [kblockd]

カーネルのブロックI/Oタスク

  • [watchdog]

時間ごとに監視するやつ、途切れたらアラートを上げる

  • [stopper]

カーネルマイグレーションスレッドともよばれる

  • [ksoftirqd]

ソフトウェア割込みが高いと実行される

  • [xfsなんとかd]

"xfsファイルシステムは処理効率のための動作タイミングを正確に制御する必要があるカーネル機能の一つである" とりあえずxfsはファイルシステム

  • [rpciod]

NFSと関係があるらしい

パケットを投げるプログラムを拾ってきた

くそみたいな記事しか生み出せない罪悪感のおかげで実装ベースの思考回路に変わり始めています。しかしながら毎度のごとくやる気が尽きたところまでしか書けませんので、随時追記していきます。

githubから拾ってきたコード

適当なプログラムやアプリ開発を一からやってみようとしたのですが、過去に何度も挫折してるので作戦変更。自分の専門分野が絡んでて、かつ他人が書いたプログラムを教材にした方が深みが出るかな...という結論に達したので、一ヶ月前に読むのを諦めたソケットプログラムのソースを引っ張ってきました。

GitHub - rbaron/raw_tcp_socket: An exercise about working with raw sockets under GNU/Linux

実行して満足して終わっちゃったんですよ。くそでしょ。

実行結果

[root@ikeda raw_tcp_socket]# ./raw_tcp_socket 
IP header checksum: 40710


TCP Checksum: 14092
Success! Sent 50 bytes.
SEQ guess: 1138083241

とりあえず分かってること

パケットを50バイト送信してるプログラムですね。ばっと読んだ感じ、Cなのでメモリをいじったりしてた気がします。プログラム内にバイト指定する為の何かがある。

分からなかったところ

今後1記事書きます。これを読んでるところ。IP チェックサムの秘密

  • winsock.h

windowsのソケットプログラミング用ライブラリ。

  • pragma

プラグマを使用すると、コンパイル内容を詳細に渡って制御できるらしい。

  • dstatで見ると92バイト送ってるんだけど

プログラムを実行するだけで出現してしまうオーバーヘッドなのかもしれない(予想)。

書き換えてみる

  • 100バイト送るにはどうしたらいいのか?

  • インターフェースを指定するには?

おもうこと

実装ベースにした途端「知ってることをしゃべれる喜び」が「作れる喜び」にグレードアップするんですね。そうなると今までパケットの作りとか気にしてなかったのにちゃんと調べるようになるし、解析ツールの必要性を感じるし、プログラムやリソースの出力結果が不本意なものになってもそれが楽しい。ずっとこれが今まで苦しかったんですけど、色々考えて少しでも多く前進できる頭にしていきたいと思います。

テレメトリネットワークって何

janogで聞いたキーワードの調べ物。

テレメトリ

tele:遠隔地、metering:計測、つまり自分がそこに居なくても遠隔地からデータを自動で収集してくれる様なシステムのことを一般にテレメトリングシステムと言います。ネットワークにもこの「遠隔地の情報を収集」の考え方を使おうというアイデアから生まれた言葉です。わりと新しい言葉で、実際どういうことって聞かれると自分もなかなか説明できませんのでまとめておきます。。。

これまでスイッチ、ルータ、AP等の機器情報は個別に管理されていました。しかしシステムやアプリケーションの複雑化、クラウド技術の進展に伴い、これらの監視データを管理用ノードで一括管理できる仕組みの開発が進んでいます。

何が新しいのか

Telemetryを実現することにより最終的なゴールとしては、「データセンターの投資を保護し最大化」することです。

Telemetryによるクラウド型ネットワークの可視化 - LTN Blog 〜 Lenovo Technology Network 〜

こちらの記事が分かりやすかったです。「遠隔地の」「様々なネットワーク機器を」「全部まとめて」というテーマでならこれまでにもさまざまな監視ツールは開発されていました。しかしクラウドが浸透してきた現在では、企業ごとに個別に構築したネットワークを監視するといった形態は減少しており、DC向けの大規模な監視が必要です。

ましてや、監視ができてもそこから分析までやってくれるツールというのはそう多くありません。つまり現在ではそのあたりの技術開発がホットだということなんですね。(自分ももっとこの辺の技術を詰めて行かないといけないんですね)

クラウドを使うメリットはインフラ部分の管理を投げられるといったものの他に、コストやサービスのスケールに応じた柔軟なリソースの拡大、縮小ができる点にあります。つまり、「アクセスが来そうな予兆を捉えたら障害が発生する前にサーバリソースを自動で拡大する」みたいなことができたら便利だな、とか思うわけです。

監視したデータを分析して適切な動作をする、までやる、という一つの例ですね。調べた感じシステムリソースの将来予測をするAIはちらほら出てきているようです。研究分野とかぶっててめっちゃ焦る

なるほど

ずっとがむしゃらに気になるものを勉強してたんですけど、どうも今まで自分の現実からかけ離れたすごい人達がこういうシステムを作ってるんだ、という気持ちが拭えなくて。でも自分もネットワークをちょっと組んでみて監視ツールとかを入れて、いまこうなってんのかーみたいなこと言ってニヤニヤできるくらいにならないとヤバイなと思いました。

こういうのは周りの仲間がやってないこともないんですけど、理解が浅いと自分で手を動かす理由がハッキリしてくれないんですよね。(だから浅い記事しか書けないんですね。。。)企業さんがやってるホットな部分を追うのは「イメージを作る」という意味で専門書を読むのと同じくらい大事だということが分かりました。いわば両輪ですね。

実現するための技術

監視のみの場合と違って、実際に分析するにはDBとそれなりのストレージ、あとはそもそも分析に対応した機器が必要です。CISCOやARISTAは既に分析ツールを一式出しているとのことです。

ここにシステムの実装に関するスライドを貼っておきますが正直理解が追いついてません。ここまででなくても近いうちにおうちでネットワーク機器の情報を収集するシステムは作りたいですね、esxiとzabbixくらいはやりたい。