ソースの表示以前のリビジョンバックリンク全て展開する/折り畳む文書の先頭へ Share via Share via... Twitter LinkedIn Facebook Pinterest Telegram WhatsApp Yammer Reddit Teams最近の変更Send via e-Mail印刷パーマリンク × Emacs 26.1のc-modeのシンタックスハイライトが重いでござる(未解決) EmacsでC++を書いてるとバッファが超重くなることがある。キー入力やスクロールがツーテンポくらい遅れる感じ。他のバッファには影響しないので物凄く困ってるわけではないが、地味にストレスでござる。 発生条件がさっぱりわからんのが困りどころ。重くなるファイルでも開いた直後は大丈夫だったりして、編集しているうちに何かの拍子で重くなる。ファイルの大きさ自体はさほど関係ないようだ(起きないやつは行数が多くても起きないし、起きるやつは100行程度のソースでも起きる)。何となく、コメントないしマルチバイト文字成分多めのファイル、C++11なコードで発生しやすいような感じ。 ほぼ間違いないのはc-modeが原因であるということ。他のmodeでは発生しないし…。恐らくFont Lockがらみが原因と思われる (2019-07-09 追記) M-x font-lock-modeでFont Lockの有無を切り替えると明らかに速度が変わるので、Font Lockがらみなのも間違いない。 未だ解決には至ってないが、毎度profileとるのが面倒なのでメモがてら記事にしとく。 Function CPU samples % - redisplay_internal (C function) 736 68% - jit-lock-function 731 68% - jit-lock-fontify-now 731 68% - jit-lock--run-functions 725 67% - run-hook-wrapped 725 67% - #<compiled 0x1b94275> 725 67% - font-lock-fontify-region 725 67% - c-font-lock-fontify-region 722 67% - font-lock-default-fontify-region 658 61% - font-lock-fontify-keywords-region 647 60% - c-font-lock-declarations 320 29% - c-find-decl-spots 313 29% - #<compiled 0x1c22bc1> 234 21% - c-get-fontification-context 125 11% - c-back-over-member-initializers 64 5% + c-just-after-func-arglist-p 18 1% + c-parse-state 16 1% + c-back-over-compound-identifier 14 1% + c-at-toplevel-p 10 0% + c-backward-sws 5 0% + c-looking-at-or-maybe-in-bracelist 47 4% + c-backward-token-2 6 0% + c-back-over-compound-identifier 3 0% + c-forward-decl-or-cast-1 60 5% + c-font-lock-single-decl 15 1% + c-backward-sws 14 1% + c-backward-token-2 4 0% c-syntactic-re-search-forward 2 0% + c-forward-label 1 0% + c-bs-at-toplevel-p 52 4% + c-beginning-of-macro 5 0% + c-forward-sws 3 0% + c-literal-start 1 0% c-font-lock-<>-arglists 77 7% + #<compiled 0x1c2637d> 44 4% + c-font-lock-cut-off-declarators 41 3% + c-font-lock-enclosing-decls 34 3% + c-font-lock-enum-body 24 2% #<compiled 0x1c26351> 19 1% + c-font-lock-complex-decl-prepare 11 1% + c-font-lock-enum-tail 8 0% #<compiled 0x1c272e7> 8 0% + c-font-lock-invalid-single-quotes 7 0% #<compiled 0x1c272af> 6 0% #<compiled 0x1c2631b> 6 0% #<compiled 0x1c27285> 4 0% #<compiled 0x1c2633d> 4 0% #<compiled 0x1c263a3> 4 0% #<compiled 0x1c2630b> 3 0% + c-font-lock-raw-strings 3 0% whitespace-trailing-regexp 1 0% + font-lock-fontify-syntactically-region 7 0% + font-lock-unfontify-region 1 0% + c-before-context-fl-expand-region 64 5% + file-remote-p 4 0% + eval 1 0% - ... 232 21% Automatic GC 232 21% + command-execute 103 9% 御覧の通り、c-modeのFont Lockが原因なのは間違いないんだよなー。解決方法分からんけど。 以前はそれほど気にならなかったし設定も大して変えてないので、単にマシンがしょぼいだけって線も捨てきれない。一応マシンスペックも書いておく。 CPU Core i5-5200U (2.2GHz/2C4T) RAM DDR3-1600 8GBx1 GPU HD Graphics 5500 HDD MQ01ABF050 前はUnreal Engine 4での開発に耐えられるようなデスクトップマシンだったのよねー。 FreeBSD 12のApache 2.4.39がunion semun ickふんだららでビルドエラー FreeBSD 12.0-RELEASEへの更新中、www/apache24のports更新で以下のようなビルドエラーが起きた。 unixd.c:245:25: error: variable has incomplete type 'union semun' union semun ick; ^ unixd.c:245:19: note: forward declaration of 'union semun' union semun ick; ^ 1 error generated. *** [unixd.lo] Error code 1 union semunが定義されとらんとな…。 ググってみたら既にバグチケが上がっていた。メンテナ曰く、当該箇所を削除するか全部のトップレベルのportsをリビルドせよとの事だが、後者は面倒でござる。というか、“全てのトップレベル”の範囲がわからんかったので、ソース修正でどうにかする。 /usr/ports/www/apache24/work/httpd-2.4.39/os/unix/unixd.cの240行目付近、#if !APR_HAVE_UNION_SEMUNによってunion semunの定義がなくなっているようなので、#ifと#endifをコメントしてやる。 apr_os_proc_mutex_t ospmutex; //#if !APR_HAVE_UNION_SEMUN ///★コメントアウト! union semun { long val; struct semid_ds *buf; unsigned short *array; }; //#endif ///★コメントアウト! union semun ick; struct semid_ds buf = { { 0 } }; あとは/usr/ports/www/apache24の下でmake installすればビルドは通る。……が、起動しようとするとSegmentation faultで落ちるぅorz。 見た感じdevel/apr1関係のコードのような気がするので、portmaster apr –force-configでaprをリビルド。その後、改めてportmaster apache24 –force-configしたら無事ビルドも通って問題なく起動した。 FreeBSDにConnectXのユーティリティを入れるとファイル所有者が書き換えられる? FreeBSD 12.0-RELEASEへの更新作業時に発覚した、システム系ディレクトリの所有者が謎の6151に書き換わってる問題の続き。 こんな感じでユーザーデータ置き場以外でroot以外が所有者のディレクトリを列挙してみた。 # find / -type d ! -uid 0 ! -path "*/home/*" ! -path "*/zdata/*" ! -path "*/zbackup/*" -print0 | xargs -0 stat -f "%u %g %N" | tee ~/non_root_owner_dirs.txt すると、以下のディレクトリの所有者が6151になっていた。 6151 0 /etc 6151 0 /etc/mft 6151 0 /etc/mft/fwtrace_cfg 6151 0 /usr 6151 0 /usr/bin 6151 0 /usr/include 6151 0 /usr/lib 6151 0 /usr/lib/bash_libs 6151 0 /usr/lib/mft 6151 0 /usr/lib/mft/mtcr_plugins 6151 0 /usr/lib/mft/python_tools 6151 0 /usr/lib/mft/python_tools/mlxmcg 6151 0 /usr/lib/mft/python_tools/mst 6151 0 /usr/lib/mft/python_tools/mstdump 6151 0 /usr/lib/mft/tcl 6151 0 /usr/lib/mft/tcl/bin 6151 0 /usr/lib/mft/tcl/lib 6151 0 /usr/lib/mft/tcl/lib/tcl8.4 6151 0 /usr/share 6151 0 /usr/share/man 6151 0 /usr/share/man/man1 6151 0 /usr/share/mft 6151 0 /usr/share/mft/mlxconfig_dbs 6151 0 /usr/share/mft/mstdump_dbs これらディレクトリの中を覗いてみると、いくつかのファイルも6151になっている。そして6151のやつらの大半の最終更新日が2018年11月23日だった。 書き換わってるファイル達と更新日から察するに、どうもConnectX-3のユーティリティのインストールが原因のような気がする。頼むよMellanoxさん…。 幸い、6151以外に怪しい所有者は見当たらなかったので、以下のコマンドで所有者をrootに戻して一件落着(元の所有者が本当にrootだったかどうかの確証はないけど…) # find / -uid 6151 ! -path "*/home/*" ! -path "*/zdata/*" ! -path "*/zbackup/*" -print0 | xargs -0 chown root FreeBSD 12.0-RELEASEのデフォルトのPerlをPerl 5.28に直す FreeBSD 12.0-RELEASEに更新後、Samba 4.8を更新しようとしたら怒られた。 # portmaster samba48 ===>>> Currently installed version: samba48-4.8.5_1 ===>>> Port directory: /usr/ports/net/samba48 ===>>> This port is marked IGNORE ===>>> Invalid perl5 version 5.24 ===>>> If you are sure you can build it, remove the IGNORE line in the Makefile and try again. Perl 5.24は不適切とな。例によって /usr/ports/UPDATING を見てみると、システムデフォルトのPerlバージョンは5.26 (20180330)を経て今は5.28(20181213)となっている模様。 20161103の記述に従い、Perlのバージョンを更新する。 まずは/etc/make.confにDEFAULT_VERSIONS+= perl5=5.28を追加。 # echo 'DEFAULT_VERSIONS+= perl5=5.28' >> /etc/make.conf Perl 5.24を5.28で置き換える。 # portmaster -o lang/perl5.28 lang/perl5.24 正常に終了したら、上記DEFAULT_VERSIONSは消しておk。 そののち、Perl 5.24の共有ライブラリに依存するパッケージを更新。 # portmaster -f `pkg shlib -qR libperl.so.5.24` p5-なパッケージも更新しといた方が安全かも? # portmaster p5- これで無事Samba 4.8のビルドが通った。 FreeBSD 11.2-RELEASEをFreeBSD 12.0-RELEASEに更新 遅ればせながら家鯖をFreeBSD 11.2-RELEASEから12.0-RELEASEへと更新した。 まずは現在の環境を最新にしておく(あまりに古いとメジャーバージョンアップに失敗することがあるため) $ freebsd-version -ku 11.2-RELEASE-p7 11.2-RELEASE-p7 # freebsd-update fetch # freebsd-update install # reboot ここで、ブートローダまでは起動するがカーネル読み込みでブラックスクリーンになる謎現象に2日ほど悩まされた。結局BIOS設定をデフォルト状態に戻したら直ったが、原因は恐らくデュアルCPUからシングルCPUに変えた事と思われる。うちの鯖は無駄にデュアルCPUだったので(ドヤァ 最新になったか確認。 $ freebsd-version -uk 11.2-RELEASE-p10 11.2-RELEASE-p10 12.0-RELEASEへ更新する。 </code> # freebsd-update -r 12.0-RELEASE upgrade Looking up update.FreeBSD.org mirrors… 3 mirrors found. Fetching metadata signature for 11.2-RELEASE from update2.freebsd.org… done. (略) To install the downloaded upgrades, run “/usr/sbin/freebsd-update install”. </code> システムのインストール # freebsd-update install Installing updates... Kernel updates have been installed. Please reboot and run "/usr/sbin/freebsd-update install" again to finish installing updates. 「再起動して再度freebsd-update installせよ」とのことだが、ここで必ずサードパーティのkext(vboxdrvとか)を一旦無効化する。さもないと、再起動後のカーネル読み込みでクラッシュする場合がある。 # emacs /boot/loader.conf hogehoge_load="YES"の行をコメントアウトするで~ 再起動 # reboot システムのバージョンを確認してみる。システムは更新され、ユーザーランドは古いままという事が分かる。 $ freebsd-version -ku 12.0-RELEASE-p4 11.2-RELEASE-p10 ユーザーランドを更新。procの所有権を変えようとしてエラーが出てるけど、まぁ気にしない。 # freebsd-update install Installing updates...install: chown 0:0 ///proc: Operation not supported install: chmod 555 ///proc: Operation not supported Completing this upgrade requires removing old shared object files. Please rebuild all installed 3rd party software (e.g., programs installed from the ports tree) and then run "/usr/sbin/freebsd-update install" again to finish installing updates. 再度システムのバージョンを確認。ユーザーランドが更新されていることが分かる。 $ freebsd-version -uk 12.0-RELEASE-p4 12.0-RELEASE-p5 ここまで来たら、pkg-static upgrade -fでインストール済みpackagesをすべて更新するのが正しいお作法。 なんだけれども、自分はportsでビルドしていく派なのでpkgだけ更新して、残りはちまちまportmasterする。 # pkg-static install -f pkg pkg-static: Warning: Major OS version upgrade detected. Running "pkg-static install -f pkg" recommended Updating FreeBSD repository catalogue... pkg-static: Repository FreeBSD has a wrong packagesite, need to re-create database Fetching meta.txz: 100% 944 B 0.9kB/s 00:01 Fetching packagesite.txz: 100% 6 MiB 1.7MB/s 00:04 Processing entries: 100% FreeBSD repository update completed. 31778 packages processed. All repositories are up to date. The following 1 package(s) will be affected (of 0 checked): Installed packages to be REINSTALLED: pkg-1.10.5_5 (ABI changed: 'freebsd:11:x86:64' -> 'freebsd:12:x86:64') Number of packages to be reinstalled: 1 3 MiB to be downloaded. Proceed with this action? [y/N]: y [1/1] Fetching pkg-1.10.5_5.txz: 100% 3 MiB 1.7MB/s 00:02 Checking integrity... done (0 conflicting) [1/1] Reinstalling pkg-1.10.5_5... [1/1] Extracting pkg-1.10.5_5: 100% ldconfig: /usr/lib: ignoring directory not owned by root んん~?/usr/libのオーナーがrootじゃないだとー? $ ls -al /usr total 177 drwxr-xr-x 18 6151 wheel 17 11月 23 2018 . drwxr-xr-x 25 root wheel 34 5月 29 01:20 .. dr-xr-xr-x+ 3 root wheel 3 10月 19 2011 .zfs drwxr-xr-x 2 6151 wheel 515 5月 29 00:39 bin drwxr-xr-x 2 root wheel 5 1月 29 2017 freebsd-dist drwxr-xr-x 16 root wheel 15 10月 22 2018 home drwxr-xr-x 58 6151 wheel 344 5月 29 00:33 include drwxr-xr-x 12 6151 wheel 710 5月 29 00:49 lib drwxr-xr-x 5 root wheel 720 5月 29 00:39 lib32 drwxr-xr-x 5 root wheel 5 5月 29 00:49 libdata drwxr-xr-x 9 root wheel 68 5月 29 00:39 libexec drwxr-xr-x 19 root wheel 19 11月 15 2018 local drwxr-xr-x 3 root wheel 3 7月 13 2017 obj drwxr-xr-x 72 root wheel 92 5月 29 07:49 ports drwxr-xr-x 2 root wheel 305 5月 29 00:39 sbin drwxr-xr-x 30 6151 wheel 30 5月 29 00:49 share drwxr-xr-x 26 root wheel 40 5月 29 00:34 src drwxr-xr-x 15 root wheel 18 7月 13 2017 tests 6151って誰だよ…。最早FreeBSD更新とは無関係になってきたので、続きは別記事で。 < Newer Posts 1 2 ... 18 19 20 21 22 23 24 ... 83 84 Older Posts > start.txt 最終更新: 2022-07-27 15:26by Decomo