€•ŒPŒsphinx.addnodes”Œdocument”“”)”}”(Œ rawsource”Œ”Œchildren”]”(Œ translations”Œ LanguagesNode”“”)”}”(hhh]”(hŒ pending_xref”“”)”}”(hhh]”Œdocutils.nodes”ŒText”“”ŒChinese (Simplified)”…””}”Œparent”hsbaŒ attributes”}”(Œids”]”Œclasses”]”Œnames”]”Œdupnames”]”Œbackrefs”]”Œ refdomain”Œstd”Œreftype”Œdoc”Œ reftarget”Œ1/translations/zh_CN/admin-guide/cgroup-v1/hugetlb”Œmodname”NŒ classname”NŒ refexplicit”ˆuŒtagname”hhh ubh)”}”(hhh]”hŒChinese (Traditional)”…””}”hh2sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ1/translations/zh_TW/admin-guide/cgroup-v1/hugetlb”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒItalian”…””}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ1/translations/it_IT/admin-guide/cgroup-v1/hugetlb”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒJapanese”…””}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ1/translations/ja_JP/admin-guide/cgroup-v1/hugetlb”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒKorean”…””}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ1/translations/ko_KR/admin-guide/cgroup-v1/hugetlb”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒPortuguese (Brazilian)”…””}”hh‚sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ1/translations/pt_BR/admin-guide/cgroup-v1/hugetlb”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒSpanish”…””}”hh–sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ1/translations/sp_SP/admin-guide/cgroup-v1/hugetlb”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubeh}”(h]”h ]”h"]”h$]”h&]”Œcurrent_language”ŒEnglish”uh1h hhŒ _document”hŒsource”NŒline”NubhŒsection”“”)”}”(hhh]”(hŒtitle”“”)”}”(hŒHugeTLB Controller”h]”hŒHugeTLB Controller”…””}”(hh¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhh·h²hh³ŒK/var/lib/git/docbuild/linux/Documentation/admin-guide/cgroup-v1/hugetlb.rst”h´KubhŒ paragraph”“”)”}”(hŒJHugeTLB controller can be created by first mounting the cgroup filesystem.”h]”hŒJHugeTLB controller can be created by first mounting the cgroup filesystem.”…””}”(hhÍh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Khh·h²hubhÌ)”}”(hŒ0# mount -t cgroup -o hugetlb none /sys/fs/cgroup”h]”hŒ0# mount -t cgroup -o hugetlb none /sys/fs/cgroup”…””}”(hhÛh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Khh·h²hubhÌ)”}”(hŒÐWith the above step, the initial or the parent HugeTLB group becomes visible at /sys/fs/cgroup. At bootup, this group includes all the tasks in the system. /sys/fs/cgroup/tasks lists the tasks in this cgroup.”h]”hŒÐWith the above step, the initial or the parent HugeTLB group becomes visible at /sys/fs/cgroup. At bootup, this group includes all the tasks in the system. /sys/fs/cgroup/tasks lists the tasks in this cgroup.”…””}”(hhéh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K hh·h²hubhÌ)”}”(hŒANew groups can be created under the parent group /sys/fs/cgroup::”h]”hŒ@New groups can be created under the parent group /sys/fs/cgroup:”…””}”(hh÷h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K hh·h²hubhŒ literal_block”“”)”}”(hŒ3# cd /sys/fs/cgroup # mkdir g1 # echo $$ > g1/tasks”h]”hŒ3# cd /sys/fs/cgroup # mkdir g1 # echo $$ > g1/tasks”…””}”hjsbah}”(h]”h ]”h"]”h$]”h&]”Œ xml:space”Œpreserve”uh1jh³hÊh´Khh·h²hubhÌ)”}”(hŒXThe above steps create a new group g1 and move the current shell process (bash) into it.”h]”hŒXThe above steps create a new group g1 and move the current shell process (bash) into it.”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Khh·h²hubhÌ)”}”(hŒ Brief summary of control files::”h]”hŒBrief summary of control files:”…””}”(hj%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Khh·h²hubj)”}”(hXhugetlb..rsvd.limit_in_bytes # set/show limit of "hugepagesize" hugetlb reservations hugetlb..rsvd.max_usage_in_bytes # show max "hugepagesize" hugetlb reservations and no-reserve faults hugetlb..rsvd.usage_in_bytes # show current reservations and no-reserve faults for "hugepagesize" hugetlb hugetlb..rsvd.failcnt # show the number of allocation failure due to HugeTLB reservation limit hugetlb..limit_in_bytes # set/show limit of "hugepagesize" hugetlb faults hugetlb..max_usage_in_bytes # show max "hugepagesize" hugetlb usage recorded hugetlb..usage_in_bytes # show current usage for "hugepagesize" hugetlb hugetlb..failcnt # show the number of allocation failure due to HugeTLB usage limit hugetlb..numa_stat # show the numa information of the hugetlb memory charged to this cgroup”h]”hXhugetlb..rsvd.limit_in_bytes # set/show limit of "hugepagesize" hugetlb reservations hugetlb..rsvd.max_usage_in_bytes # show max "hugepagesize" hugetlb reservations and no-reserve faults hugetlb..rsvd.usage_in_bytes # show current reservations and no-reserve faults for "hugepagesize" hugetlb hugetlb..rsvd.failcnt # show the number of allocation failure due to HugeTLB reservation limit hugetlb..limit_in_bytes # set/show limit of "hugepagesize" hugetlb faults hugetlb..max_usage_in_bytes # show max "hugepagesize" hugetlb usage recorded hugetlb..usage_in_bytes # show current usage for "hugepagesize" hugetlb hugetlb..failcnt # show the number of allocation failure due to HugeTLB usage limit hugetlb..numa_stat # show the numa information of the hugetlb memory charged to this cgroup”…””}”hj3sbah}”(h]”h ]”h"]”h$]”h&]”jjuh1jh³hÊh´Khh·h²hubhÌ)”}”(hŒ[For a system supporting three hugepage sizes (64k, 32M and 1G), the control files include::”h]”hŒZFor a system supporting three hugepage sizes (64k, 32M and 1G), the control files include:”…””}”(hjAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K"hh·h²hubj)”}”(hXhugetlb.1GB.limit_in_bytes hugetlb.1GB.max_usage_in_bytes hugetlb.1GB.numa_stat hugetlb.1GB.usage_in_bytes hugetlb.1GB.failcnt hugetlb.1GB.rsvd.limit_in_bytes hugetlb.1GB.rsvd.max_usage_in_bytes hugetlb.1GB.rsvd.usage_in_bytes hugetlb.1GB.rsvd.failcnt hugetlb.64KB.limit_in_bytes hugetlb.64KB.max_usage_in_bytes hugetlb.64KB.numa_stat hugetlb.64KB.usage_in_bytes hugetlb.64KB.failcnt hugetlb.64KB.rsvd.limit_in_bytes hugetlb.64KB.rsvd.max_usage_in_bytes hugetlb.64KB.rsvd.usage_in_bytes hugetlb.64KB.rsvd.failcnt hugetlb.32MB.limit_in_bytes hugetlb.32MB.max_usage_in_bytes hugetlb.32MB.numa_stat hugetlb.32MB.usage_in_bytes hugetlb.32MB.failcnt hugetlb.32MB.rsvd.limit_in_bytes hugetlb.32MB.rsvd.max_usage_in_bytes hugetlb.32MB.rsvd.usage_in_bytes hugetlb.32MB.rsvd.failcnt”h]”hXhugetlb.1GB.limit_in_bytes hugetlb.1GB.max_usage_in_bytes hugetlb.1GB.numa_stat hugetlb.1GB.usage_in_bytes hugetlb.1GB.failcnt hugetlb.1GB.rsvd.limit_in_bytes hugetlb.1GB.rsvd.max_usage_in_bytes hugetlb.1GB.rsvd.usage_in_bytes hugetlb.1GB.rsvd.failcnt hugetlb.64KB.limit_in_bytes hugetlb.64KB.max_usage_in_bytes hugetlb.64KB.numa_stat hugetlb.64KB.usage_in_bytes hugetlb.64KB.failcnt hugetlb.64KB.rsvd.limit_in_bytes hugetlb.64KB.rsvd.max_usage_in_bytes hugetlb.64KB.rsvd.usage_in_bytes hugetlb.64KB.rsvd.failcnt hugetlb.32MB.limit_in_bytes hugetlb.32MB.max_usage_in_bytes hugetlb.32MB.numa_stat hugetlb.32MB.usage_in_bytes hugetlb.32MB.failcnt hugetlb.32MB.rsvd.limit_in_bytes hugetlb.32MB.rsvd.max_usage_in_bytes hugetlb.32MB.rsvd.usage_in_bytes hugetlb.32MB.rsvd.failcnt”…””}”hjOsbah}”(h]”h ]”h"]”h$]”h&]”jjuh1jh³hÊh´K%hh·h²hubhŒenumerated_list”“”)”}”(hhh]”hŒ list_item”“”)”}”(hŒPage fault accounting ”h]”hÌ)”}”(hŒPage fault accounting”h]”hŒPage fault accounting”…””}”(hjhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KBhjdubah}”(h]”h ]”h"]”h$]”h&]”uh1jbhj_h²hh³hÊh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œenumtype”Œarabic”Œprefix”hŒsuffix”Œ.”uh1j]hh·h²hh³hÊh´KBubj)”}”(hŒ”hugetlb..limit_in_bytes hugetlb..max_usage_in_bytes hugetlb..usage_in_bytes hugetlb..failcnt”h]”hŒ”hugetlb..limit_in_bytes hugetlb..max_usage_in_bytes hugetlb..usage_in_bytes hugetlb..failcnt”…””}”hj‡sbah}”(h]”h ]”h"]”h$]”h&]”jjuh1jh³hÊh´KFhh·h²hubhÌ)”}”(hX*The HugeTLB controller allows users to limit the HugeTLB usage (page fault) per control group and enforces the limit during page fault. Since HugeTLB doesn't support page reclaim, enforcing the limit at page fault time implies that, the application will get SIGBUS signal if it tries to fault in HugeTLB pages beyond its limit. Therefore the application needs to know exactly how many HugeTLB pages it uses beforehand, and the sysadmin needs to make sure that there are enough available on the machine for all the users to avoid processes getting SIGBUS.”h]”hX,The HugeTLB controller allows users to limit the HugeTLB usage (page fault) per control group and enforces the limit during page fault. Since HugeTLB doesn’t support page reclaim, enforcing the limit at page fault time implies that, the application will get SIGBUS signal if it tries to fault in HugeTLB pages beyond its limit. Therefore the application needs to know exactly how many HugeTLB pages it uses beforehand, and the sysadmin needs to make sure that there are enough available on the machine for all the users to avoid processes getting SIGBUS.”…””}”(hj•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KKhh·h²hubj^)”}”(hhh]”jc)”}”(hŒReservation accounting ”h]”hÌ)”}”(hŒReservation accounting”h]”hŒReservation accounting”…””}”(hjªh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KUhj¦ubah}”(h]”h ]”h"]”h$]”h&]”uh1jbhj£h²hh³hÊh´Nubah}”(h]”h ]”h"]”h$]”h&]”j‚jƒj„hj…j†Œstart”Kuh1j]hh·h²hh³hÊh´KUubj)”}”(hŒ¨hugetlb..rsvd.limit_in_bytes hugetlb..rsvd.max_usage_in_bytes hugetlb..rsvd.usage_in_bytes hugetlb..rsvd.failcnt”h]”hŒ¨hugetlb..rsvd.limit_in_bytes hugetlb..rsvd.max_usage_in_bytes hugetlb..rsvd.usage_in_bytes hugetlb..rsvd.failcnt”…””}”hjÅsbah}”(h]”h ]”h"]”h$]”h&]”jjuh1jh³hÊh´KYhh·h²hubhÌ)”}”(hXOThe HugeTLB controller allows limiting the HugeTLB reservations per control group and enforces the controller limit at reservation time and at the fault of HugeTLB memory for which no reservation exists. Since reservation limits are enforced at reservation time (on mmap or shget), reservation limits never cause the application to get SIGBUS signal if the memory was reserved beforehand. For MAP_NORESERVE allocations, the reservation limit behaves the same as the fault limit, enforcing memory usage at fault time and causing the application to receive a SIGBUS if it's crossing its limit.”h]”hXQThe HugeTLB controller allows limiting the HugeTLB reservations per control group and enforces the controller limit at reservation time and at the fault of HugeTLB memory for which no reservation exists. Since reservation limits are enforced at reservation time (on mmap or shget), reservation limits never cause the application to get SIGBUS signal if the memory was reserved beforehand. For MAP_NORESERVE allocations, the reservation limit behaves the same as the fault limit, enforcing memory usage at fault time and causing the application to receive a SIGBUS if it’s crossing its limit.”…””}”(hjÓh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K^hh·h²hubhÌ)”}”(hX¥Reservation limits are superior to page fault limits described above, since reservation limits are enforced at reservation time (on mmap or shget), and never cause the application to get SIGBUS signal if the memory was reserved beforehand. This allows for easier fallback to alternatives such as non-HugeTLB memory for example. In the case of page fault accounting, it's very hard to avoid processes getting SIGBUS since the sysadmin needs to precisely know the HugeTLB usage of all the tasks in the system and make sure there are enough pages to satisfy all requests. Avoiding tasks getting SIGBUS on overcommitted systems is practically impossible with page fault accounting.”h]”hX§Reservation limits are superior to page fault limits described above, since reservation limits are enforced at reservation time (on mmap or shget), and never cause the application to get SIGBUS signal if the memory was reserved beforehand. This allows for easier fallback to alternatives such as non-HugeTLB memory for example. In the case of page fault accounting, it’s very hard to avoid processes getting SIGBUS since the sysadmin needs to precisely know the HugeTLB usage of all the tasks in the system and make sure there are enough pages to satisfy all requests. Avoiding tasks getting SIGBUS on overcommitted systems is practically impossible with page fault accounting.”…””}”(hjáh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kghh·h²hubj^)”}”(hhh]”jc)”}”(hŒCaveats with shared memory ”h]”hÌ)”}”(hŒCaveats with shared memory”h]”hŒCaveats with shared memory”…””}”(hjöh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Krhjòubah}”(h]”h ]”h"]”h$]”h&]”uh1jbhjïh²hh³hÊh´Nubah}”(h]”h ]”h"]”h$]”h&]”j‚jƒj„hj…j†jÄKuh1j]hh·h²hh³hÊh´KrubhÌ)”}”(hŒèFor shared HugeTLB memory, both HugeTLB reservation and page faults are charged to the first task that causes the memory to be reserved or faulted, and all subsequent uses of this reserved or faulted memory is done without charging.”h]”hŒèFor shared HugeTLB memory, both HugeTLB reservation and page faults are charged to the first task that causes the memory to be reserved or faulted, and all subsequent uses of this reserved or faulted memory is done without charging.”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kthh·h²hubhÌ)”}”(hŒÆShared HugeTLB memory is only uncharged when it is unreserved or deallocated. This is usually when the HugeTLB file is deleted, and not when the task that caused the reservation or fault has exited.”h]”hŒÆShared HugeTLB memory is only uncharged when it is unreserved or deallocated. This is usually when the HugeTLB file is deleted, and not when the task that caused the reservation or fault has exited.”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kxhh·h²hubj^)”}”(hhh]”jc)”}”(hŒ%Caveats with HugeTLB cgroup offline. ”h]”hÌ)”}”(hŒ$Caveats with HugeTLB cgroup offline.”h]”hŒ$Caveats with HugeTLB cgroup offline.”…””}”(hj3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K}hj/ubah}”(h]”h ]”h"]”h$]”h&]”uh1jbhj,h²hh³hÊh´Nubah}”(h]”h ]”h"]”h$]”h&]”j‚jƒj„hj…j†jÄKuh1j]hh·h²hh³hÊh´K}ubhÌ)”}”(hŒtWhen a HugeTLB cgroup goes offline with some reservations or faults still charged to it, the behavior is as follows:”h]”hŒtWhen a HugeTLB cgroup goes offline with some reservations or faults still charged to it, the behavior is as follows:”…””}”(hjMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Khh·h²hubhŒ bullet_list”“”)”}”(hhh]”(jc)”}”(hŒHThe fault charges are charged to the parent HugeTLB cgroup (reparented),”h]”hÌ)”}”(hjbh]”hŒHThe fault charges are charged to the parent HugeTLB cgroup (reparented),”…””}”(hjdh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K‚hj`ubah}”(h]”h ]”h"]”h$]”h&]”uh1jbhj]h²hh³hÊh´Nubjc)”}”(hŒ>the reservation charges remain on the offline HugeTLB cgroup. ”h]”hÌ)”}”(hŒ=the reservation charges remain on the offline HugeTLB cgroup.”h]”hŒ=the reservation charges remain on the offline HugeTLB cgroup.”…””}”(hj{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kƒhjwubah}”(h]”h ]”h"]”h$]”h&]”uh1jbhj]h²hh³hÊh´Nubeh}”(h]”h ]”h"]”h$]”h&]”Œbullet”Œ-”uh1j[h³hÊh´K‚hh·h²hubhÌ)”}”(hXThis means that if a HugeTLB cgroup gets offlined while there is still HugeTLB reservations charged to it, that cgroup persists as a zombie until all HugeTLB reservations are uncharged. HugeTLB reservations behave in this manner to match the memory controller whose cgroups also persist as zombie until all charged memory is uncharged. Also, the tracking of HugeTLB reservations is a bit more complex compared to the tracking of HugeTLB faults, so it is significantly harder to reparent reservations at offline time.”h]”hXThis means that if a HugeTLB cgroup gets offlined while there is still HugeTLB reservations charged to it, that cgroup persists as a zombie until all HugeTLB reservations are uncharged. HugeTLB reservations behave in this manner to match the memory controller whose cgroups also persist as zombie until all charged memory is uncharged. Also, the tracking of HugeTLB reservations is a bit more complex compared to the tracking of HugeTLB faults, so it is significantly harder to reparent reservations at offline time.”…””}”(hj—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K…hh·h²hubeh}”(h]”Œhugetlb-controller”ah ]”h"]”Œhugetlb controller”ah$]”h&]”uh1hµhhh²hh³hÊh´Kubeh}”(h]”h ]”h"]”h$]”h&]”Œsource”hÊuh1hŒcurrent_source”NŒ current_line”NŒsettings”Œdocutils.frontend”ŒValues”“”)”}”(hºNŒ generator”NŒ datestamp”NŒ source_link”NŒ source_url”NŒ toc_backlinks”Œentry”Œfootnote_backlinks”KŒ sectnum_xform”KŒstrip_comments”NŒstrip_elements_with_classes”NŒ strip_classes”NŒ report_level”KŒ halt_level”KŒexit_status_level”KŒdebug”NŒwarning_stream”NŒ traceback”ˆŒinput_encoding”Œ utf-8-sig”Œinput_encoding_error_handler”Œstrict”Œoutput_encoding”Œutf-8”Œoutput_encoding_error_handler”jÐŒerror_encoding”Œutf-8”Œerror_encoding_error_handler”Œbackslashreplace”Œ language_code”Œen”Œrecord_dependencies”NŒconfig”NŒ id_prefix”hŒauto_id_prefix”Œid”Œ dump_settings”NŒdump_internals”NŒdump_transforms”NŒdump_pseudo_xml”NŒexpose_internals”NŒstrict_visitor”NŒ_disable_config”NŒ_source”hÊŒ _destination”NŒ _config_files”]”Œ7/var/lib/git/docbuild/linux/Documentation/docutils.conf”aŒfile_insertion_enabled”ˆŒ raw_enabled”KŒline_length_limit”M'Œpep_references”NŒ pep_base_url”Œhttps://peps.python.org/”Œpep_file_url_template”Œpep-%04d”Œrfc_references”NŒ rfc_base_url”Œ&https://datatracker.ietf.org/doc/html/”Œ tab_width”KŒtrim_footnote_reference_space”‰Œsyntax_highlight”Œlong”Œ smart_quotes”ˆŒsmartquotes_locales”]”Œcharacter_level_inline_markup”‰Œdoctitle_xform”‰Œ docinfo_xform”KŒsectsubtitle_xform”‰Œ image_loading”Œlink”Œembed_stylesheet”‰Œcloak_email_addresses”ˆŒsection_self_link”‰Œenv”NubŒreporter”NŒindirect_targets”]”Œsubstitution_defs”}”Œsubstitution_names”}”Œrefnames”}”Œrefids”}”Œnameids”}”jªj§sŒ nametypes”}”jª‰sh}”j§h·sŒ footnote_refs”}”Œ citation_refs”}”Œ autofootnotes”]”Œautofootnote_refs”]”Œsymbol_footnotes”]”Œsymbol_footnote_refs”]”Œ footnotes”]”Œ citations”]”Œautofootnote_start”KŒsymbol_footnote_start”KŒ id_counter”Œ collections”ŒCounter”“”}”…”R”Œparse_messages”]”(hŒsystem_message”“”)”}”(hhh]”hÌ)”}”(hŒ:Enumerated list start value not ordinal-1: "2" (ordinal 2)”h]”hŒ>Enumerated list start value not ordinal-1: “2†(ordinal 2)”…””}”(hj7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËhj4ubah}”(h]”h ]”h"]”h$]”h&]”Œlevel”KŒtype”ŒINFO”Œsource”hÊŒline”Kuh1j2hh·h²hh³hÊh´KUubj3)”}”(hhh]”hÌ)”}”(hŒ:Enumerated list start value not ordinal-1: "3" (ordinal 3)”h]”hŒ>Enumerated list start value not ordinal-1: “3†(ordinal 3)”…””}”(hjSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËhjPubah}”(h]”h ]”h"]”h$]”h&]”Œlevel”KŒtype”jMŒsource”hÊŒline”Kuh1j2hh·h²hh³hÊh´Krubj3)”}”(hhh]”hÌ)”}”(hŒ:Enumerated list start value not ordinal-1: "4" (ordinal 4)”h]”hŒ>Enumerated list start value not ordinal-1: “4†(ordinal 4)”…””}”(hjnh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËhjkubah}”(h]”h ]”h"]”h$]”h&]”Œlevel”KŒtype”jMŒsource”hÊŒline”Kuh1j2hh·h²hh³hÊh´K}ubeŒtransform_messages”]”Œ transformer”NŒ include_log”]”Œ decoration”Nh²hub.