この issue を読んでいたところ、下記のような設定がおすすめされているのを知りました
設定を追加したところ Linux カーネルのリポジトリで tig を起動すると数秒〜 待たされるのが シュっと出るようになった! やったー 🐧
今までの時間を返してくれ!
macOS の話題です
Linux カーネルのリポジトリなんかでコミットメッセージをすぐ翻訳して読みたいなと思ったので、以下のように ~/.tigrc
を設定してみる
ショートカットキーは、適当に 9
に bind しています
bind generic 9 @sh -c 'git log --format=%B -n1 %(commit) | pbcopy; open /Applications/DeepL.app; osascript -e \'tell application "System Events" to keystroke "v" using command down\''
さて、 tig でコミットを眺めてる時に 9
をピッと押すと
DeepL が出てきて、コミットログをペーストして翻訳して出てくる
とりあえずは便利に使えそうかな?
ちょいと sar -W
を使うことがあって ソースを調べた話です
sar -W
で 一秒間にスワップインしたページ / スワップアウトしたページを参照できる
hiboma@example:~$ sar -W 1 Linux 5.15.0-25-generic (example) 06/20/22 _x86_64_ (4 CPU) 12:25:22 pswpin/s pswpout/s 12:25:23 0.00 0.00 12:25:24 0.00 0.00 12:25:25 0.00 0.00
以下は man の説明を引用したものです
-W Report swapping statistics. The following values are displayed: pswpin/s Total number of swap pages the system brought in per second. pswpout/s Total number of swap pages the system brought out per second.
この数値はどこから取ってるのだったかな? と気になったのでソースを調べました。
ソースを clone します
ghq get git@github.com:sysstat/sysstat.git
pswpin
でソースを grep ( ag ) して、それっぽいコードを探してアタリをつける。ヘッダファイルの 👈 っぽいですね。
$ ag pswpin ... 略m rd_stats.h 156: unsigned long pswpin __attribute__ ((aligned (8))); 👈 pcp_stats.c 282: snprintf(buf, sizeof(buf), "%lu", ssc->pswpin); xml_stats.c 399: "pswpin=\"%.2f\" " 401: S_VALUE(ssp->pswpin, ssc->pswpin, itv),
rd_stats.h で struct stats_swap
なる構造体を見つける。次は、この構造体が参照されている関数を探す。
/* Structure for swapping statistics */ struct stats_swap { unsigned long pswpin __attribute__ ((aligned (8))); unsigned long pswpout __attribute__ ((aligned (8))); };
C のソースを読むときは Emacs が手に馴染んでいるので、 GNU Global で絞り込む
sscanf してるのが怪しいですね。ジャンプすると read_vmstat_swap() という関数です
read_vmstat_swap() で pswpin / pswapout の値を取ってるみたいですね。 /proc/vmstat
を読んでるようです。
/* *************************************************************************** * Read swapping statistics from /proc/vmstat. * * IN: * @st_swap Structure where stats will be saved. * * OUT: * @st_swap Structure with statistics. * * RETURNS: * 1 on success, 0 otherwise. *************************************************************************** */ __nr_t read_vmstat_swap(struct stats_swap *st_swap) { FILE *fp; char line[128]; if ((fp = fopen(VMSTAT, "r")) == NULL) return 0; while (fgets(line, sizeof(line), fp) != NULL) { if (!strncmp(line, "pswpin ", 7)) { /* Read number of swap pages brought in */ sscanf(line + 7, "%lu", &st_swap->pswpin); } else if (!strncmp(line, "pswpout ", 8)) { /* Read number of swap pages brought out */ sscanf(line + 8, "%lu", &st_swap->pswpout); } } fclose(fp); return 1; }
/proc/vmstat
で grep して調べてみると、あったあった
hiboma@example:~$ grep pswp /proc/vmstat pswpin 0 pswpout 0