FC2ブログ
2018/02/10

KPTIによるパフォーマンス低下を取り戻したいが?

更新!本当にシステムコールやファイルシステムのつまりを計測できるベンチマークは configureスクリプトだ!
Arch Linux カーネル 4.15.3-2-ARCHで
gzip-1.9のconfigureスクリプトを noptiで起動 カーネルオプションなし 透過ヒュージページあり 透過ヒュージページ+IOMMU有効+pci_bus_perfで
timeを測定したら、それぞれ
nopti

real 0m17.582s
user 0m10.089s
sys 0m5.486s

Transparent Huge Pages 無効

real0m17.124s
user0m10.393s
sys0m5.690s

特別な起動オプションなし

real0m17.581s
user0m10.556s
sys0m5.681s

カーネルオプションに次を付加 "pci=pcie_bus_perf intel_iommu=strict"

real0m17.040s
user0m10.327s
sys0m5.674s



usrに対してsysが半分もあるのに大した差が出なかったので、

私のArchLinuxがいまカーネル4.15.3.2だから、もうこのバージョンでは徹底的にパフォーマンスの低下が抑えられているとみた。
intelのパッチがクズだといったリーナス氏以下カーネルハッカーの実力は人の事を言える以上に本物だったようです。ぜひ最新のカーネルを導入しよう!

Linuxの「Meltdown」パッチが大きなオーバーヘッドを引き起こす?--Netflixのエンジニアが指摘 ZdNet JapanによるとHuge Pagesは本当に効果があるみたいですね。
Huge Pagesは呼び出さないと使えないしメモリ領域も確保が必要です。
Transparent Huge Pages=透過ヒュージページはちょっと遅いがどのアプリでも使えます。
おそらくデフォルトで有効。有効にするには

# echo madvise > /sys/kernel/mm/transparent_hugepage/enabled


ただし本当にHuge Pagesに対応しているとくにデータベースではおかしなことになる。
#高速化ではなく省エネルギーのための最適化の時代が始まった 今俺が始めた なおSSDも標準的な性能なら大きな省エネにつながる 超高速タイプは必要なところにだけ使おう。
2017/11/17

Mozcの変換がおかしくなった

Mozcはユーザーの打った言葉の間違ったところも覚えてしまうので、
定期的に(半年に一回)もしくは 打っている方が何も考えずに変換できなくなったら 学習のリセットをかけましょう。
Mozcの設定ツールから辞書→学習履歴のクリアでできます。
やはりMozc最高。
#Google日本語入力も同じだったりして?

なおそれでも我慢できなければ、
2chで最も評価の高かった、かつてのfcitx-mozc-1.10.1390.102を軽微な修正でビルドできます。
bashのhistoryログから
  223  tar xf ../d/fcitx-mozc-1.10.1390.102.1.tar.xz 
224 cd fcitx-mozc-1.10.1390.102.1/
225 ls
226 cd protobuf/
227 tar xf ../../../d/protobuf-2.5.0.tar.bz2
228 ls
229 ln -s protobuf-2.5.0/ files
299 ln -s /usr/bin/python2 ./python
316 PATH=./:$PATH python2 build_mozc.py gyp
# Googleが作ったプログラムでgccの些細なワーニングで止まりたくない。
333 for a in `find | grep '.mk$'` ; do sed -i '/-Werror/d' $a ;done
334 PATH=`pwd`:$PATH python2 build_mozc.py build_tools -c Release
336 vim gui/dictionary_tool/dictionary_tool.cc
# 221行目 MultiByteTextLineIterator::IsAvailableメソッドで値をboolへ代入してreturnができないのを修正する
338 PATH=`pwd`:$PATH python2 build_mozc.py build unix/fcitx/fcitx.gyp:fcitx-mozc server/server.gyp:mozc_server gui/gui.gyp:mozc_tool renderer/renderer.gyp:mozc_renderer

package.bash
srcdir=./fcitx-mozc-1.10.1390.102.1
pkgdir=./pkg
_bldtype=Release

install -D -m 755 ${srcdir}/out_linux/${_bldtype}/mozc_server "${pkgdir}/usr/lib/mozc/mozc_server"
install -m 755 ${srcdir}/out_linux/${_bldtype}/mozc_tool "${pkgdir}/usr/lib/mozc/mozc_tool"
install -m 755 ${srcdir}/out_linux/${_bldtype}/mozc_renderer "${pkgdir}/usr/lib/mozc/mozc_renderer"

for mofile in ${srcdir}/unix/fcitx/po/*.po
do
filename=`basename $mofile`
lang=${filename/.po/}
msgfmt -o "${pkgdir}/usr/share/locale/$lang/LC_MESSAGES/fcitx-mozc.mo" "$mofile"
done


install -D -m 755 ${srcdir}/out_linux/${_bldtype}/fcitx-mozc.so \
"${pkgdir}/usr/lib/fcitx/fcitx-mozc.so"
install -D -m 644 ${srcdir}/unix/fcitx/fcitx-mozc.conf \
"${pkgdir}/usr/share/fcitx/addon/fcitx-mozc.conf"
install -D -m 644 ${srcdir}/unix/fcitx/mozc.conf \
"${pkgdir}/usr/share/fcitx/inputmethod/mozc.conf"

install -d "${pkgdir}/usr/share/fcitx/mozc/icon"
install -m 644 "$srcdir/data/images/unix/ime_product_icon_opensource-32.png" "${pkgdir}/usr/share/fcitx/mozc/icon/mozc.png"
install -m 644 "$srcdir/data/images/unix/ui-alpha_full.png" \
"${pkgdir}/usr/share/fcitx/mozc/icon/mozc-alpha_full.png"
install -m 644 "$srcdir//data/images/unix/ui-alpha_half.png" \
"${pkgdir}/usr/share/fcitx/mozc/icon/mozc-alpha_half.png"
install -m 644 "$srcdir/data/images/unix/ui-direct.png" \
"${pkgdir}/usr/share/fcitx/mozc/icon/mozc-direct.png"
install -m 644 "$srcdir/data/images/unix/ui-hiragana.png" \
"${pkgdir}/usr/share/fcitx/mozc/icon/mozc-hiragana.png"
install -m 644 "$srcdir/data/images/unix/ui-katakana_full.png" \
"${pkgdir}/usr/share/fcitx/mozc/icon/mozc-katakana_full.png"
install -m 644 "$srcdir/data/images/unix/ui-katakana_half.png" \
"${pkgdir}/usr/share/fcitx/mozc/icon/mozc-katakana_half.png"
install -m 644 "$srcdir/data/images/unix/ui-dictionary.png" \
"${pkgdir}/usr/share/fcitx/mozc/icon/mozc-dictionary.png"
install -m 644 "$srcdir/data/images/unix/ui-properties.png" \
"${pkgdir}/usr/share/fcitx/mozc/icon/mozc-properties.png"
install -m 644 "$srcdir/data/images/unix/ui-tool.png" \
"${pkgdir}/usr/share/fcitx/mozc/icon/mozc-tool.png"

正直このバージョンが今のArchLinuxのfcitxで平気で使えるのもいいし、
なんだってこのバージョンのMozcはまともな思い通りの変換をしてくれます。
なお学習なしでもいい変換をしたいなら1.5以前がいいらしいし、完璧なプログラムなどはないでしょう。
MozcやGoogle日本語入力は特に最近はグッドな評価もなく、さらに更新もなくほったらかしに!
多分開発元のGoogleは他の会社がmozcに改良フリックを付け足してパクったAndroidアプリ「Lフリック with mozc」に懲りているのだと思います。
それに漢字変換はクラウドの時代ですし( 意 味 深 )
2017/11/03

素晴らしいぼかし解消プログラムを見つけた、が・・・

https://github.com/s-hironobu/Blind-Deblurring

画像拡大の研究を当方ではやっていますが、拡大したあとのぼかしが気になる。かなりピンぼけしている。
それを解消するGUIのプログラムを発見しました。何気に日本人が作っていますね。
無料で使えるぼかし解消プログラムとしてSmartDeblurが有名ですが、円形のノイズが入ってなかなか気になるものです。
これはそういったことがないです。しかもGPLv2でライセンスなのでフリーですね。

が、当方最新のArchLinuxなので、去年更新のプログラムではうまく動かないな、ソースコードからビルドしようとしますが
これが七転八倒して、だいたいこんなパッチを当てればいいかなと。
[NOTICE]この環境ではopencv3が存在するために、/opt/opencv2にopencv2をインストールしています。
だが実はopencv3でもまんまと動いてしまうかもしれません。
あとeigen3とfftwとwxwidgets 当然C++コンパイラーが必要です。

diff orig/Blind-Deblurring-master/Makefile Blind-Deblurring-master/Makefile
3c3
< TOOLKIT = GTK
---
> TOOLKIT = gtk2
8c8,10
< $(WX_CONFIG) --toolkit=$(TOOLKIT)
---
> #$(WX_CONFIG) --toolkit=$(TOOLKIT)
>
> PKG_CONFIG = PKG_CONFIG_PATH=/opt/opencv2/lib/pkgconfig pkg-config
16,20c18,22
< CPPWARNINGS = -Wall -Wundef -Wunused-parameter -Wno-ctor-dtor-privacy -Woverloaded-virtual
< LIBS = -lz -ldl -lm -llzma `pkg-config --libs opencv gtk+-2.0 fftw3` -pthread ./lib/libdeblur.a
< CPPFLAGS = -D_FILE_OFFSET_BITS=64 -DWX_PRECOMP -D__WX$(TOOLKIT)__ -O2 -fno-strict-aliasing \
< `pkg-config --cflags gtk+-2.0` `$(WX_CONFIG) --cppflags` \
< -I . -I/usr/local/include/eigen3
---
> CPPWARNINGS = -Wall -Wundef -Wunused-parameter -Wno-ctor-dtor-privacy -Woverloaded-virtual
> LIBS = -lz -ldl -lm -llzma `$(PKG_CONFIG) --libs opencv2 gtk+-2.0 fftw3 eigen3 ` ./lib/libdeblur.a
> CPPFLAGS = -g -fno-strict-aliasing -fstack-protector-strong -D__WXGTK20__ \
> `$(PKG_CONFIG) --cflags gtk+-2.0 eigen3 fftw3 opencv2` `$(WX_CONFIG) --cxxflags ` \
> -I .
29c31
< -lwx_$(PORTNAME)$(WXUNIVNAME)$(WXUNICODEFLAG)$(WXDEBUGFLAG)_ribbon-$(WX_RELEASE)
---
> `wx-config --libs`
36c38
< $(CPP) -o $@ $(BLINDDEBLUR_OBJECTS) -L$(LIBDIRNAME) $(LIBS) $(__WXLIB_RIBBON_p) $(PLUGIN_ADV_EXTRALIBS)
---
> $(CPP) -o $@ $(BLINDDEBLUR_OBJECTS) -L$(LIBDIRNAME) $(LIBS) $(__WXLIB_RIBBON_p) $(PLUGIN_ADV_EXTRALIBS)


diff orig/Blind-Deblurring-master/libsrc/Makefile Blind-Deblurring-master/libsrc/Makefile
2,3c2,4
< LIBS = `pkg-config --libs opencv fftw3`
< CFLAGS= `pkg-config --cflags opencv` -I /usr/local/include/eigen3/ -I /usr/local/include -I . -DEIGEN_NO_DEBUG
---
> PKG_CONFIG=PKG_CONFIG_PATH=/opt/opencv2/lib/pkgconfig pkg-config
> LIBS = `$(PKG_CONFIG) --libs opencv2 fftw3 eigen3`
> CFLAGS= `$(PKG_CONFIG) --cflags opencv2 eigen3` -I /usr/include -I . -DEIGEN_NO_DEBUG -fPIC
diff orig/Blind-Deblurring-master/libsrc/blind_deblur.cpp Blind-Deblurring-master/libsrc/blind_deblur.cpp
1398c1398,1401
< Mat out[3] = Mat::zeros(rU.rows (), rU.cols (), CV_64F);
---
> Mat out[3];
> out[0] = Mat::zeros(rU.rows (), rU.cols (), CV_64F) ;
> out[1] = Mat::zeros(gU.rows (), gU.cols (), CV_64F) ;
> out[2] = Mat::zeros(bU.rows (), bU.cols (), CV_64F) ;

上のパッチはやっつけ。
diff orig/Blind-Deblurring-master/src/blindDeblur.cpp Blind-Deblurring-master/src/blindDeblur.cpp
19a20
> #include "wx/app.h"
353c354
< IMPLEMENT_APP(MyApp)
---
> wxIMPLEMENT_APP(MyApp);
366c367
< DECLARE_APP(MyApp)
---
> wxDECLARE_APP(MyApp);
diff orig/Blind-Deblurring-master/src/libdeblur.h Blind-Deblurring-master/src/libdeblur.h
111c111
< bool saveImage(const char *filepath) {return true; /*dummy*/};
---
> bool saveImage(const char *filepath) { imwrite(filepath,debluredImage); return true; /*dummy*/};

この出力ファイルができないようにしてあるのを解消するのに、さんざんステップ実行とバックトレースを取りました。
このやる気のなさに、論文を書いてあとで特許料みたいなものをもらいたいと察したので、プルリクエストはしません。
はっきり言って出力ファイルは結構素晴らしい出来栄えです。

現時点での問題は
1:縦方向が長い画像ではそれが潰れて見えるが、出力ファイルにそのような異常は見られない。
2:ファイルを開くとき全角文字があるファイルパスを開くとSEGFAULTする。
3:sharpnessつまみを引かないと出力画像が映らない。一旦引けば0.0にもどしても出力画像になる。
4:High設定でDeblurを行うとひどくボケているわけでない画像は真っ暗になる。設定を最弱にすると正しく処理されます。
5:全然ボケていない画像を処理するとプログレスバーの値にマイナス?を指定してAssertがかかる。
6:コンパイル時にとても大量のwarningがでる
またたいてい設定はLowで大丈夫で、そうしないと輪郭線ノイズが入ってしまいます。
これらの問題について、「周波数」「フーリエ」というのにめっぽう弱い私は(何が画像拡大だ?)forkしてリクエストを受付てサポートを行う技術力がないので、だれかforkして、Windowsバイナリも作って有名になっちゃってください。
2017/10/13

imagemagickで高品質画像拡大

lifehackerのサイトで紹介されている、画像拡大を繰り返したあとにシャープにする方法を
https://www.lifehacker.jp/2017/02/170204_20170204_picture_size.html
自動でやってみましょう。

最新版は一番下へ!

Linux上のbashとImageMagickというコマンドツール集で一発
cascon.sh
convert -filter catrom -resize 105% "$1" tmp1.tiff
for a in `seq 1 30`
do
mogrify -filter catrom -resize 105% tmp1.tiff
done
convert -sharpen 0x2 tmp1.tiff "$2"


$ bash cascon.sh input.jpg output.png
105%を31回で1.05の31乗だから4.53倍の画像になります。
ディープラーニング以前のプログラムを繰り返し使うことで、それよりも遥かに早く、結果を得ることができ、
ディープラーニングとちがい、「お絵描き」みたいになりません。
出力ファイルを見てそのまんまピントがすこしボケた写真だなぐらいにみえる精度はあります。
外部に漏らしたくない画像を拡大するときにうってつけでしょう。
文書の場合は、拡大したあとにSmartDeblurというプログラムが処理が重たいものの、断然読みやすくなるはずです。
なおJPEG特有のノイズは対処が難しい。自動化処理で解決すると髪の毛が絵になってしまう。
この記事が好評であればコマンドラインツールをあらたに作ったり、Windows用のプログラムも用意するかもしれません。

2017/10
GIMP 2.8.22で画像拡大アルゴリズムがどうも大幅に進化しているようでこのスクリプトが要らなくなった。唯一必要なのがジャギーの痕跡が目立つ場合です。

2018/02 2つの画像拡大アルゴリズムで互いの欠点を補う。この効果は目を見張る。色も正しくなりました。倍率は5.01倍
2018/02/04 フィルターを変更 わずかにもう少しなめらかになった
TEMPFILE=`mktemp --suffix=.tiff`
convert -enhance "$1" "${TEMPFILE}"
for i in ` seq 117 118 | tac `
do
mogrify -filter spline -resize "${i}"% "${TEMPFILE}"
done

for j in ` seq 101 117 | tac `
do
mogrify -filter Lanczos -resize "${j}"% "${TEMPFILE}"
done

convert "${TEMPFILE}" "$2"
rm "${TEMPFILE}"

はい。できる限りのことはやりました。JPEGのノイズもSplineのぼかしで消えてくれます。
きっと これは違うと思えるはずです。それも二次元の画像で。
多分描線の筆さばきまで見えてくるよう感覚だと思います。
2017/08/27

LinuxでUSBメモリが使えない

SSDのためにカーネルパラメータにscsi_mod.use_blk_mq=1を入れていると
USBメモリがI/Oエラーですぐに使えなくなります。
私のが古いだけかもしれません。
このカーネルパラメータをなくして再起動すると正常に使えるようになります。

なおExpresscard-USB3.0アダプタでWindowsでまともに使えなくなったものでもLinuxで平気で動くことがままあります。
PCIeのUSB3.0アダプタでも同じようなものだと思います。