On Wed, Nov 25, 2020 at 07:38:08AM +0900, Akira Yokosawa wrote: > On Tue, 24 Nov 2020 11:22:57 -0800, Paul E. McKenney wrote: > > On Tue, Nov 24, 2020 at 07:29:58AM +0900, Akira Yokosawa wrote: > >> On Mon, 23 Nov 2020 13:15:42 -0800, Paul E. McKenney wrote: > >>> On Mon, Nov 23, 2020 at 12:14:05AM +0900, Akira Yokosawa wrote: > >>>> Hi Paul, > >>>> > >>>> So this *not-pull* request is to show you my WIP branch to add indices > >>>> to perfbook. > >>>> > >>>> Patch 1/7 kicks of the changes by adding index annotations in Glossary. > >>>> > >>>> Patch 2/7 reorganizes back matter of perfbook. Glossary, Bibliography, > >>>> Credits, and the newly added Index belong there. > >>>> I employed "tocbibind" package to include Bibliography in TOC. > >>>> > >>>> Patch 3/7 adds API Index. Annotations for the Index is mostly done in > >>>> toolsoftrade. > >>>> You can see that raw \index or \sindex macros are avoided in .tex source > >>>> files. Using custom macros for annotation can reduce diffs in adding > >>>> annotations. > >>>> glossary.tex is an exception, as every description item has > >>>> \index{} on it. If we add other annotations there, we need to use > >>>> custom macros. > >>>> > >>>> Patch 4/7 adds annotations for people's names. They could be in another > >>>> independent index, but they are merged into the general index. > >>>> As a result, the ratio of people's names in the index is quite high at the > >>>> moment. > >>>> It will decrease as we add annotations for general terms/words. > >>>> Names are presented in the index in the form of "surname, forename" order. > >>>> To enable this, annotation is done by \ppl{forename}{surname}. > >>>> When you need only surname in the text, use \pplsur macro instead. > >>>> For names with abbreviated middle name, there is a \pplmdl command as > >>>> well. > >>>> > >>>> Patch 5/7 highlights indexed words/terms/names in the text. > >>>> This should help us in finding out what needs to be annotated. > >>>> If the color of DarkGreen is problematic for you, please let me know > >>>> which color is easy for you. > >>>> One of the purpose of avoiding raw \index{} macros for annotation is > >>>> to realize this coloring. > >>>> > >>>> Patch 6/7 adds a few more annotations of people's names in "formal". > >>>> > >>>> Patch 7/7 changes the layout of index from default 2 columns to 3 columns. > >>>> As mentioned in the change log, API Index shows a minor glitches of > >>>> extraneous line folding caused by the side effect of \co{} macro. > >>>> This issue has been fixed in the most recent LaTeX released on 2020-10-01. > >>>> I have not figured out if there is some workaround for older LaTeX. > >>> > >>> Nice start! > >>> > >>> This is in the "lt" flavor only, correct? > >> > >> Oh, why did I miss the most important to share? > >> I added a new target "ix" and its derivative "1cix" in patch 1/7. > >> These make targets enable coloring of indexed words/names/APIs added in > >> patch 5/7. I'm not sure the color choice works with your eyes, though. > > > > I guess I could have looked at diffs to Makefile... > > > > I don't see any colors, though, perhaps because I am failing to > > distinguish dark green from black?. > > How does "s/DarkGreen/FireBrick/" look? > > Available color names can be found in page 38 of > http://mirrors.ctan.org/macros/latex/contrib/xcolor/xcolor.pdf > via the "svgnames option. > > Can you choose a color which works with your eyes? Never mind, DarkGreen works. I was expecting the headings in the glossary to change color, which they do not (which should not be a problem). But if I click back on (say) C bounded model checker, I do see the green. Thanx, Paul > Thanks, Akira > > > > >>> The default "make" generates > >>> the perfbook.ind file, but does not include it. But "make lt" doesn't > >>> either. Trying again setting the "toindex" boolean to "true", which does > >>> in fact generate a pair of three-column indexes at the end, very good! > >>> > >>>> The appearance of index pages does not matter so much at the moment, > >>>> I suppose. We need to add annotations first. > >>> > >>> Agreed, the annotations will be a big job. I have a small patch > >>> at the end for minor typos as well. > >> > >> I thought I made quite a few typos. Thanks for catching them. > >> I'll merge it to patch 1/7. > > > > Nevertheless, I suspect that you have corrected quite a few more of > > my typos than I have of yours. ;-) > > > >>>> To do that, we need to agree the organization of index pages. > >>>> Current indices are flat. > >>>> LaTeX indexing framework supports up to 3 levels of hierarchy. > >>>> > >>>> For example: > >>>> > >>>> Flat index > >>>> > >>>> Critical section, <page> > >>>> ... > >>>> Read-side critical section, <page> > >>>> ... > >>>> Write-side critical section, <page> > >>>> > >>>> 2 level index > >>>> > >>>> Critical section, <page> > >>>> read-side, <page> > >>>> write-size, <page> > >>>> ... > >>>> Read-side critical section, see Critical section, read-side > >>>> ... > >>>> Write-side critical section, see Critical section, write-side > >>>> > >>>> Which do you prefer? > >>> > >>> I have a minor preference for the 2-level index. However, it might or > >>> might not be worth it. For example, should "Associativity" be on its own, > >>> or under "Cache"? Or in both places? > >> > >> We will need some experiments. > >> Let me play with terms in glossary.tex. > > > > Sounds good! > > > >>>> I'm *not* thinking of making index of authors of Bibliography. > >>>> Due to the amount of cited material, it will require a ton of cleanups > >>>> in .bib files if you want the author index to look consistent. > >>>> > >>>> Which means, you need to mention names of authors who you want to see > >>>> in the index. Does this sound reasonable to you? > >>> > >>> That makes a lot of sense! > >> > >> OK. > >> > >>> > >>>> I know you are debugging/analyzing/testing RCU and lockdep interaction > >>>> right now. > >>> > >>> But sometimes one must take a break. And I am hoping to make more > >>> progress on updating the last few graphs this week. It turns out that > >>> there are interesting interactions between userspace RCU's call_rcu() > >>> worker threads and jemalloc(), for example. The surprise, especially to > >>> the jemalloc() folks is that jemalloc() doesn't help much, even if the > >>> call_rcu() worker threads to a throw-away allocation to help jemalloc() > >>> realize that it must create caches for those worker threads. > >>> > >>> It is possible that this is a consequence of the fact that the bottleneck > >>> for large RCU-protected hash tables is in the L3 cache rather than in > >>> any particular CPU. Which is an unexpected benefit, as this situation > >>> clearly calls attention to the possibility of this type of bottleneck. > >>> > >>> Not so good for second-edition schedule, though! > >> > >> ;-) ;-) > >> > >>> > >>>> I'm not in a hurry and looking forward to your feedback. > >>> > >>> I am going to list a few additional index entries: CPU, memory, I/O, > >>> multicore, synchronization, cache hit, Moore's Law free lunch, speed of > >>> light, 3D integration, accelerators, CAS, socket, core, thread (hardware > >>> and software), simultaneous multithreading, hyperthreading, interconnect, > >>> interrupt (expansion of IRQ?), inter-processor interrupt (expansion of > >>> IPI?), locality of reference (spatial and temporal), cache prefetching, > >>> cache alignment, cache ways, read-mostly replication, partitioning, > >>> out-of-order execution, super-scalar CPU, hardware transactional memory, > >>> software transactional memory, hazard pointers, reference counters, > >>> lockless, the various counter algorithms, object oriented, object oriented > >>> spaghetti code, stall (for example, pipeline stall due to a cache miss), > >>> double-ended queue, maze (or maze solving), branch prediction, atomic > >>> instructions, atomic read-modify-write instructions, memory barrier, > >>> distributed-system parallelism (as opposed to shared-memory parallelism), > >>> communications miss (of caches), herd (the LKMM tool), coherence order, > >>> reads-from, from-reads, Nidhugg, Promela (and spin?), Linux kernel, > >>> and much more, but that is enough for now. > >> > >> If you want to do it on your own, why not merge the next pull request > >> which will address textwidth of 1c-layout index pages? > >> > >> It should be safe as indexing is not enabled in existing make targets. > > > > I am thinking in terms of merging the index first thing after the > > second edition. Though at the rate I am going on it, you might well > > have it ready beforehand... > > > >>> Should the index expand acronyms? Hennessy and Patterson do for some > >>> acronyms but not others, so we can justify being inconsistent if we > >>> would like. > >> > >> I guess index entries will keep somewhat inconsistent in any way. > >> Keeping them consistent will require huge effort. > > > > As near as I can tell, the more familiar ones were left unexpanded and > > the more specialized ones were expanded. So they left LAN unexpanded, > > but expanded NUMA. In my old edition, anyway. > > > > Thanx, Paul > > > >>> You might argue that some of these need glossary entries, and you > >>> would be quite right. ;-) > >> > >> ;-) > >> > >>> > >>> In other news, I am considering bringing back the quantum-computing > >>> section given that things seem to have stabilized a bit. But it is > >>> still a bit off-topic. > >>> > >>> Again, great start on the index! > >> > >> Glad to know you liked it! > >> > >> Thanks, Akira > >> > >>> > >>> Thanx, Paul > >>> > >>>> Thanks, Akira > >>>> > >>>> -- > >>>> The following changes since commit 810da77e1c66ad543e34a10b197aa9e629c7dc8f: > >>>> > >>>> CodeSamples/formal: Use '{}' for empty init blocks in litmus tests (2020-11-15 12:38:36 -0800) > >>>> > >>>> are available in the Git repository at: > >>>> > >>>> https://github.com/akiyks/perfbook.git tags/for-paul-not-pull-2020.11.23a > >>>> > >>>> for you to fetch changes up to 9cecce4c32c9ff97f3330591d0699c8aa7e2585b: > >>>> > >>>> index: Trial of 3 column (2020-11-22 23:16:58 +0900) > >>>> > >>>> ---------------------------------------------------------------- > >>>> Akira Yokosawa (7): > >>>> PoC of indexing > >>>> Reorganize backmatters > >>>> PoC of additional API Index > >>>> index: Add annotations to people's names for PoC > >>>> Color indexed text conditionally > >>>> index: Add some more people index annotations in 'formal' > >>>> index: Trial of 3 column > >>>> > >>>> .gitignore | 3 + > >>>> Makefile | 10 +- > >>>> SMPdesign/SMPdesign.tex | 2 +- > >>>> SMPdesign/partexercises.tex | 5 +- > >>>> appendix/ack/ack.tex => ack.tex | 6 +- > >>>> appendix/appendix.tex | 20 -- > >>>> count/count.tex | 2 +- > >>>> cpu/cpu.tex | 3 +- > >>>> cpu/hwfreelunch.tex | 6 +- > >>>> cpu/overview.tex | 4 +- > >>>> datastruct/datastruct.tex | 4 +- > >>>> debugging/debugging.tex | 5 +- > >>>> defer/rcurelated.tex | 92 +++++---- > >>>> defer/rcuusage.tex | 3 +- > >>>> formal/axiomatic.tex | 4 +- > >>>> formal/ppcmem.tex | 7 +- > >>>> formal/spinhint.tex | 2 +- > >>>> future/cpu.tex | 12 +- > >>>> future/tm.tex | 2 +- > >>>> glossary.tex | 112 +++++------ > >>>> howto/howto.tex | 37 ++-- > >>>> intro/intro.tex | 8 +- > >>>> memorder/memorder.tex | 6 +- > >>>> perfbook-lt.tex | 75 ++++++- > >>>> toolsoftrade/toolsoftrade.tex | 420 ++++++++++++++++++++-------------------- > >>>> utilities/runlatex.sh | 2 + > >>>> 26 files changed, 470 insertions(+), 382 deletions(-) > >>>> rename appendix/ack/ack.tex => ack.tex (98%)