未分類

先日twitter(X)でiowaitが云々で盛り上がっていて、それ自体は別にどうという話でもなかったのですが、iowaitって今実際どうなってるんだろう?というところを少し実験してみました。

未分類

前回はDockerコンテナで開いているポートをホスト側から取得する方法を解説しました。

今回はそれをスクリプトにしてみました。あまり汎用とは言い難いのですが、ご参考までに。

未分類

昨今では誰もが使用するLinuxコンテナ、中でもDockerは初心者でも知っているほど有名です。しかし、Dockerで開いているポートって実は調べようとすると結構面倒くさいですよね。コンテナにexecでshellを開いてss -ltnしても、コンテナには通常ssnetstatなんて入っていないわけです。

コンテナと言ってもイメージはどうせdebian系列かalpineなんだからとaptやらapkやら叩いてインストールすればssnetstatも使えるでしょう。しかし次にコンテナ起動したときには消えてます。かといってイメージに入れたくもないのです。

ではどうするか?

コンテナで分からないならホストで調べてみます

未分類

aptにはfull-upgradeなるサブコマンドがあります。説明を読んでもupgradeとどう違うのか、実際どういうケースを想定しているのか、よく分かりませんよね。

full-upgrade (apt-get(8))
full-upgrade はアップグレードの機能を実行しますが、システム全体をアップグレードするために必要とされる場合には、現在インストール済みのパッケージを削除することができます。

man apt

今回はUbuntu 22.04上で、具体例(1例だけ)を挙げて、それを検証してみました。

未分類

SystemTapはRedhatを中心として作られたフリーソフトで、主にカーネルの動作確認や解析などに使用できるツールです。2005年に発表されて以来、2011年にはメジャーdistroで動作するようになり、現在bpftraceと並んで不動の地位を得ています。

効能の割にそれほど情報がないこともあり、Ubuntu 22.04での使用感などを含め、とりあえず記事にしてみました。

未分類

C/C++のmemcpyは十分に最適化されており、forループする大抵のコードよりは速くなるように出来ています。しかし測り方を間違えると十分な効果を期待できません。例えばLinuxで以下のコードでは正しく測定できません。なぜだか分かりますか?

#include <chrono>
#include <iostream>
#include <cstring>

using namespace std;
using namespace std::chrono;

typedef size_t target_t;

int main(int argc, char* argv[]) {
    constexpr size_t N = 1024 * 1024 * 1024; // 1GiB

    auto src = new target_t[N/sizeof(target_t)];
    auto dst = new target_t[N/sizeof(target_t)];

    auto begin = high_resolution_clock::now();
    memcpy(dst, src, N);
    auto end = high_resolution_clock::now();

    cout << N << "bytes copy: " << N / 1024. / 1024. / duration_cast<nanoseconds>(end - begin).count() * 1000000000 << "[MiB/s]" << endl;
    return 0;
}

プログラムは正しく動きます。

$ g++ -g -O0 hoge.cpp -o hoge
$ ./hoge
1073741824bytes copy: 1560.47[MiB/s]
$

何が正しく測定できてないのでしょう?

未分類

Linux(今回はUbuntu20.04)でTUIする方法を紹介します。LinuxでGUIでなく端末操作する場合、CLIと言ったりしますが、今回はTUIです。

  • GUI: Graphical User Interface
  • CLI: Command Line Interface(和製英語だとCUIと呼ばれる)
  • TUI: Text-based User Interface

ニュアンス的にはテキストでグラフィカルなウィジェットを模したインターフェースを表現し、キーボードだけで操作していく、簡易GUI的なテキストベースのUIをTUIと呼ぶ感じです。作り的にはncursesなどを利用したアプリケーションになります。

未分類

GUIなLinuxからsshを使って別のGUIなLinuxに入って作業するとき、たまにXの画面が欲しいときがあります。そういうときssh -Xで繋ぐと手元の画面にリモートのGUIアプリを表示して操作することができます。便利な小技ですよね。

$ ssh -X user-name@remote-host
$ gedit

しかし、こうして繋いだ場合も、管理者権限が必要とかでsudoでGUIアプリを起動すると使えないというケースがよくあります。Xの認証の仕組みから使えないのですが、今回はsudoした先でGUIアプリを起動する方法を説明します。

ただし、本番運用の公開サーバーでX関係のライブラリなど必要のないパッケージを入れるのは個人的にはやめた方がいいと思います。あくまで複数のGUIを持つLinux開発マシンを渡り歩くときの小技です。また使い終わったらゴミを残さないようにしましょう。

未分類

前回までに、Linuxでシステムトレイにgtk&(C++/python)とqt&C++を使ってアイコン表示をしてみました。

今回はqt&pythonで同じことをしてみます。

未分類

前回までに、Linuxでシステムトレイにgtkを使ってC++/pythonでアイコン表示してみたのですが、

今回はqtを使ってC++でアイコン表示してみようと思います。