チケット #40052

mode=harf + setmainjfont での過大なメモリ消費

登録: 2020-02-23 14:43 最終更新: 2020-02-26 22:47

報告者:
担当者:
(未割り当て)
チケットの種類:
状況:
完了
コンポーネント:
マイルストーン:
(未割り当て)
優先度:
1 - 最低
重要度:
1 - 最低
解決法:
不正
ファイル:
1

詳細

https://github.com/wspr/fontspec/issues/414 と同じかもしれないのと、そもそも mode=harf はサポート対象外かもしれませんが、記録として一応報告します。フォントキャッシュの全消去(Linuxとかでは rm -rf ~/.texlive2019)したあとに下記をすべてのパッケージをtexlive 2019の最新版にしてlualatex-devでコンパイルするとだいたい1.8 ギガバイト程度のメモリを消費しますが、

\documentclass{minimal}
\usepackage{luatexja-fontspec}
\setmainjfont[RawFeature={mode=harf}]{Noto Serif CJK JP}
\setsansjfont[RawFeature={mode=harf}]{Noto Sans CJK JP}
\begin{document}
\noindent
{日本語}\\
{\gtfamily 日本語}\\
\end{document}

同じことを以下のファイルについて実行するとメモリ消費がだいたい0.5 ギガバイトくらいで済みます。1.3ギガバイトのメモリ消費増加はでかいので、一応報告します。

\documentclass{minimal}
\usepackage{luatexja}
\begin{document}
\jfont\notocjk={name:Noto Serif CJK JP:mode=harf;jfm=ujis} at 10pt
\jfont\notocjksans={name:Noto Sans CJK JP:mode=harf;jfm=ujis} at 10pt
\notocjk 日本語
\notocjksans 日本語
\end{document}

チケットの履歴 (5 件中 3 件表示)

2020-02-23 14:43 更新者: emojifreak
  • 新しいチケット "mode=harf + setmainjfont での過大なメモリ消費" が作成されました
2020-02-24 18:38 更新者: h7k
コメント

(今このコンピュータにあるのは Source Han Serif/Sans だったので) mem_usage.zip にいくつかの方法で Source Han Serif/Sans をロードしたときのメモリ使用量の結果を置きました.ソースファイル a.tex を処理したときの time -v の結果は a.tex.mem にあります.

どうやら,メモリ消費量 (Maximum resident set size) が 2 GB あたりと大きくなるのは,Source Han Serif/Sans を mode=node(luaotfload 標準)で読み込んだときのようです.報告どおり

\usepackage{luatexja-fontspec}
\setmainjfont[RawFeature={mode=harf}]{Source Han Serif}
\setsansjfont[RawFeature={mode=harf}]{Source Han Sans}
でも,また
\usepackage{fontspec}
\setmainfont[RawFeature={mode=harf}]{Source Han Serif}
\setsansfont[RawFeature={mode=harf}]{Source Han Sans}
でもメモリ消費量はそのぐらいですが,内部で(おそらく script とか feature の確認用に?)mode=node で Source Han Serif/Sans が読み込まれていることによるのでしょう.

2020-02-26 16:22 更新者: emojifreak
コメント

h7k への返信 fontspecのイシューのほうでharftexの作者から Renderer=HarfBuzz を使えという助言をいただいたので以下のファイルに同じことをやったらだいたいメモリー消費量が0.9 GBくらいになり時間も短くなり改善が見られました。結局luatexjaの問題ではなくて全面的にfontspecにこの現象の原因があるということでしょうか…

\documentclass{minimal}
\usepackage{luatexja-fontspec}
\setmainjfont[Renderer=HarfBuzz]{Noto Serif CJK JP}
\setsansjfont[Renderer=HarfBuzz]{Noto Sans CJK JP}
\begin{document}
\noindent
{日本語}\\
{\gtfamily 日本語}\\
\end{document}
2020-02-26 22:47 更新者: h7k
  • 解決法なし から 不正 に更新されました
  • 状況オープン から 完了 に更新されました
コメント

Renderer=HarfBuzz を使え

なるほど.luatexja ではなく fontspec での指定方法の問題だった,というわけですね. とりあえずここはクローズします.

添付ファイルリスト

  • mem_usage.zip(51KB)
    • Source Han Serif/Sans をいくつかの方法でロードしたときのメモリ使用量

編集

ログインしていません。ログインしていない状態では、コメントに記載者の記録が残りません。 » ログインする