lewing isc.tamu.edu Larry Ewing and The GIMP, CC0, via Wikimedia Commons
Linux関係について適当にメモ書きしてます。結構いい加減かもですがあしからず。
lewing isc.tamu.edu Larry Ewing and The GIMP, CC0, via Wikimedia Commons
Linux関係について適当にメモ書きしてます。結構いい加減かもですがあしからず。
この記事を書いた動機 (Nov 14 あたりの出来事) 最近、HP Proliant ML 150 (9 Gen) の消費電力削減の目的で、休止状態を利用できるようにしようとした過程で、それが正しく機能しているのか調べたくなった。そこで、ただメモリをたくさん指定した量だけ消費するプログラムを作成し、とりあえず動くところまで作ったので、ここに置いておこうというわけである。どこまで意味があるのかは不明。 ちなみに、一応メモリ割り当てに失敗したとき用に、再度メモリ割り当てを試みる機能や、メモリ割り当てに完全に失敗したときにプログラムを終了するなど、セーフティも実装しているが、結局使うことはなかったので正しく動く保証はない。 使い方 プログラムのコンパイル gcc useram.c -o useram プログラムの利用 # 10 GB のメモリを埋めるときの例 useram 10 Too many ram will be allocated by your request. denied operation. と出てくる時 プログラム内の定数 margin の大きさが大きすぎる可能性があるので、適宜調整する。 後は単純に、実装されているメモリサイズより大きなサイズを指定してしまっているので、小さい値で再度プログラムを実行してみる。 プログラム本体 #include <stdio.h> #include <stdlib.h> #include <sys/sysinfo.h> // unit GB #define margin 10 #define retry 3 // Get the amount of entire installed RAM. // No args are required. // return: amount of entire installed RAM int checkRAM(){ unsigned int amount = 0; // GB struct sysinfo info; sysinfo(&info); // convert unit byte to Giga byte (10^9) amount = info.totalram / 1000 / 1000 / 1000; return amount; } // allocate RAM (amount GB) // args:(Unit -> GB) // amount: allocation size unsigned int // maxAmount: entire system RAM amount unsigned int // return: // pointer: pointer to allocated area void* // If all ram allocation attempts are failed, return NULL. void* allocateRAM(unsigned int amount, unsigned int maxAmount){ // find specified allocation size is exceed entire system RAM amount or not. if(amount >= maxAmount - margin){ printf("Too many ram will be allocated by your request. denied operation.\n"); return 0; } // allocate ram but still the allocated area is not utilized. unsigned long allocateSize = (long)sizeof(char) * (long)amount * (long)1000 * (long)1000 * (long)1000; void* pointer = (void*)malloc(allocateSize); // retry ram allcation if it is failed. if(pointer == NULL){ printf("ram allocation is failed. retry %d times\n",retry); int counter = 0; while(pointer == NULL && counter < retry){ printf("retry %d\n",counter); void* pointer = (void*)malloc(allocateSize); counter++; } } // If all ram allocation attempts are failed, return NULL. if(pointer == NULL){ printf("allocation failed!\n"); return NULL; } printf("allocation OK\n"); return pointer; } // amount unit GB void useRAM(void* pointer,unsigned int amount){ // 4 mean size of int unsigned long loopAmount = (long)amount * (long)1000 * (long)1000 * (long)1000 / (long) 4; int* arr = (int*)pointer; // For each loop, fill up the allocated area with random value by 4 byte(size of int) for(unsigned long i = 0; i < loopAmount; i++){ arr[i] = (int)rand(); } printf("Loop amount %lu\n",loopAmount); printf("RAM area is filled up. The process is finished.\n"); return; } int main(int argc,char **argv){ // find entire system ram unsigned int ramAmount = checkRAM(); // If The allocation size is not specified, exit this program. if(argc <= 1){ printf(" The size of ram amount that will be filled up is not specified. (GB)\n"); return -1; } unsigned int amount = atoi(argv[1]); // find correct value is entered or not if(amount != 0){ printf("%d GB\n",amount); }else{ printf("You may enter string or 0 as args. Stop.\n"); return -1; } printf("System info: \n %d GB RAM is installed\n",ramAmount); // ram allocation and filling up process void* pointer = allocateRAM(amount,ramAmount); useRAM(pointer,amount); // If ram allocation is failed, exit this program if(pointer == NULL) { printf("went worng\n"); return -1; } // wait until get user input. // The filled up RAM area will not be free while there is no user input for 'q' key. char input = 'a'; while(input != 'q') scanf("%c",&input); free(pointer); return 0; } 参考にしたサイト How to determine memory size via C code - Stack Overflow https://stackoverflow.com/questions/45259131/how-to-determine-memory-size-via-c-code (2024年12月12日)
この記事を書いた動機 単純に別の記事を更新してて、一応書いとくかってなっただけです。二番煎じというか、自分用のメモとしての補足的な記事なので、シンプルに書きます。 環境 arch linux (2024/11/13の時点で最新のやつ) yay のインストール 必要なコマンドをインストール sudo pacman -S base-devel git 作業ディレクトリとして適当な場所に移動 cd /tmp git から yay のリポジトリのクローン git clone https://aur.archlinux.org/yay.git cd yay yay をインストール makepkg -si 以上で、yayコマンドが使えるはずである。。。 まとめ sudo pacman -S base-devel git cd /tmp git clone https://aur.archlinux.org/yay.git cd yay makepkg -si 参考にしたサイト Arch Linux に yay をインストール #archLinux - Qiita https://qiita.com/ekzemplaro/items/6714469c1fb1ae06b80f (2024年11月14日)
この記事を書いた動機 最近linuxのカーネルパラメータとか、コンフィグをいじる機会があったって、どうやっていじるんだっけとなったので、メモを残そうということになった。 いつものように、基本は自分のために書いてるというのもあって、他人が見るためのコンテンツとしてはクオリティは終わってるので、そこは承知ください。。。。 環境 ここには、簡易的にどんな環境でやることについて書いているか、記録してみる。 arch linux linux kernel version: 6.9.7 UEFIに対応したハードウェア環境 grub をブートローダーとして使っている x86 系列の 64 bit CPU (Intel の core i シリーズとか、ryzenとか、、、) カーネルをビルドする 今使っているlinuxのバージョンを確認 uname -r 6.9.7 作業用のフォルダを作成 いろいろ、コンフィグだのカーネル本体だのをいじくりまわして散らかるので、一つのフォルダにそれらをまとめる。 mkdir ~/kernel cd ~/kernel linux をダウンロード linux archivesから、自分の使っているlinuxのバージョンに合った、linux をダウンロードしてくる。私の場合は、以下のように、リンクを改変することで、バージョンを合わせた。 改変前 https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.11.7.tar.xz 改変後 https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.9.7.tar.xz linuxのダウンロードには、ブラウザから直接ダウンロードボタンを押したり、リンクを踏むことでできたり、gitが使えたりする。いろいろあるが、めんどくさかったので、wgetコマンドを使った。 wget https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.9.7.tar.xz ダウンロードしたカーネルを展開する tarコマンドで以下のようにして、適当に中身を展開する。 tar xfv linux-6.9.7.tar.xz cd linux-6.9.7 # オプションのヒント # x: extract (抽出) # f: file (展開するファイルを指定する) # v: verbose (途中経過の表示ができる) カーネル設定ファイルをコピー linuxでは、何も設定がないところからスタートする場合は、たぶん自分で以下のようにして、一つ一つコンフィグを設定していくっぽいが、そんなことを一からしていたら日が暮れてしまうので、今動いているカーネルの設定を使いまわす。 make menuconfig ... # 何かしらのメニューがしばらくすると表示され、圧倒的な量の設定項目があることに圧倒されるまでがセット。。。 linuxカーネルのバージョンを合わせたのは、バージョンがあっていないと、新たにカーネルの設定が追加されていたりして、その設定をするのが面倒だし、それで動かなかったらさらに面倒だからである。arch linuxの場合だと以下のようにして、設定をコピーできる。 ...
この記事を書いた動機 ただの自分用のよく使う設定集としてのメモ。基本的にgnome標準で付いてくると思われるgsettingsコマンドを使う。 環境 細かいことは書かないけど一応 gnome wayland Xwayland no X11 4kなどの高解像度ディスプレイ gnome の有効化(一応) gnomeのディスプレイマネージャーを単にsystemdのサービスとして起動時に立ち上がってくれるように有効にするだけ。Windowsで言ったら、logonui.exeかみたいなやつに近い気がする。 systemctl enable gdm トラックパッドの設定 物理ボタンではなく、タップしている領域で右クリックか判定しているトラックパッド用の設定。 gsettings set org.gnome.desktop.peripherals.touchpad click-method 'areas' ウィンドウのボタン 最大化、ウィンドウモードとかのボタンなどのWindowsでは標準の機能がデフォルトで無効になっているので、有効にする。 gsettings set org.gnome.desktop.wm.preferences button-layout ":minimize,maximize,close" スケーリングの設定 スケーリングとか、gnomeの実験的な機能として現在(2024年10月27日)組み込まれている機能を有効化する。よくバグる。 # 125% とかもっと細かいスケーリングを有効にできる。ある程度は実用できる段階に体感では感じるが、Xwaylandのアプリが思いっきりぼけてしまう。 gsettings set org.gnome.mutter experimental-features "['scale-monitor-framebuffer']" # Xwayland で動くアプリがぼけないようにする、欲張り設定。中途半端な125%とかの設定と併用すると、変にウィンドウが特定の領域でしか反応しなくなるなど、バグが多い。 gsettings set org.gnome.mutter experimental-features "['scale-monitor-framebuffer','xwayland-native-scaling']" ちなみに、Xwaylandの「xwayland-native-scaling」などは、以下のサイト(githubのmutterのリポジトリ)で設定値の存在を確認できる。 https://github.com/GNOME/mutter/blob/main/data/org.gnome.mutter.gschema.xml.in 例えば、こんな感じで書いてある。何か気になるのがあったら、仮想マシンかなんかで使う前に試してみるといいかもしれない。 <schemalist> <flags id="org.gnome.mutter.MetaExperimentalFeature"> <value nick="scale-monitor-framebuffer" value="1"/> <value nick="kms-modifiers" value="2"/> <value nick="autoclose-xwayland" value="4"/> <value nick="variable-refresh-rate" value="8"/> <value nick="xwayland-native-scaling" value="16"/> </flags> カーソルの大きさ サイズの取得 gsettings get org.gnome.desktop.interface cursor-size サイズの変更 gsettings set org.gnome.desktop.interface cursor-size 12 設定のリセット gsettings list-schemas | xargs -n 1 gsettings reset-recursively fcitx5 日本語環境についても、いちいち調べるのはめんどくさいので、今日(2024/11/14)追記してみることにした。 ...
このページは、まだ未完成です。。。 nicotalk&キャラ素材配布所 http://www.nicotalk.com/charasozai_kt.html (2024年5月16日) リポジトリ 記事リスト