Ticket #40052

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

Open Date: 2020-02-23 14:43 Last Update: 2020-02-26 22:47

Reporter:
Owner:
(None)
Type:
Status:
Closed
Component:
MileStone:
(None)
Priority:
1 - Lowest
Severity:
1 - Lowest
Resolution:
Invalid
File:
1

Details

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}

Ticket History (3/5 Histories)

2020-02-23 14:43 Updated by: emojifreak
  • New Ticket "mode=harf + setmainjfont での過大なメモリ消費" created
2020-02-24 18:38 Updated by: h7k
Comment

(今このコンピュータにあるのは 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 Updated by: emojifreak
Comment

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 Updated by: h7k
  • Resolution Update from None to Invalid
  • Status Update from Open to Closed
Comment

Renderer=HarfBuzz を使え

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

Attachment File List

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

Edit

You are not logged in. I you are not logged in, your comment will be treated as an anonymous post. » Login