€•èýŒ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”Œ-/translations/zh_CN/admin-guide/perf-security”Œmodname”NŒ classname”NŒ refexplicit”ˆuŒtagname”hhh ubh)�”}”(hhh]”hŒChinese (Traditional)”…”�”}”hh2sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ-/translations/zh_TW/admin-guide/perf-security”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒItalian”…”�”}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ-/translations/it_IT/admin-guide/perf-security”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒJapanese”…”�”}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ-/translations/ja_JP/admin-guide/perf-security”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒKorean”…”�”}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ-/translations/ko_KR/admin-guide/perf-security”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒPortuguese (Brazilian)”…”�”}”hh‚sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ-/translations/pt_BR/admin-guide/perf-security”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒSpanish”…”�”}”hh–sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ-/translations/sp_SP/admin-guide/perf-security”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubeh}”(h]”h ]”h"]”h$]”h&]”Œcurrent_language”ŒEnglish”uh1h hhŒ _document”hŒsource”NŒline”NubhŒtarget”“”)�”}”(hŒ.. _perf_security:”h]”h}”(h]”h ]”h"]”h$]”h&]”Œrefid”Œ perf-security”uh1hµh´Khhh²hh³ŒG/var/lib/git/docbuild/linux/Documentation/admin-guide/perf-security.rst”ubhŒsection”“”)�”}”(hhh]”(hŒtitle”“”)�”}”(hŒPerf events and tool security”h]”hŒPerf events and tool security”…”�”}”(hhËh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhhÆh²hh³hÃh´KubhÅ)�”}”(hhh]”(hÊ)�”}”(hŒOverview”h]”hŒOverview”…”�”}”(hhÜh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhhÙh²hh³hÃh´KubhŒ paragraph”“”)�”}”(hX9Usage of Performance Counters for Linux (perf_events) [1]_ , [2]_ , [3]_ can impose a considerable risk of leaking sensitive data accessed by monitored processes. The data leakage is possible both in scenarios of direct usage of perf_events system call API [2]_ and over data files generated by Perf tool user mode utility (Perf) [3]_ , [4]_ . The risk depends on the nature of data that perf_events performance monitoring units (PMU) [2]_ and Perf collect and expose for performance analysis. Collected system and performance data may be split into several categories:”h]”(hŒ6Usage of Performance Counters for Linux (perf_events) ”…”�”}”(hhìh²hh³Nh´NubhŒfootnote_reference”“”)�”}”(hŒ[1]_”h]”hŒ1”…”�”}”(hhöh²hh³Nh´Nubah}”(h]”Œid1”ah ]”h"]”h$]”h&]”hÁŒid32”Œdocname”Œadmin-guide/perf-security”uh1hôhhìŒresolved”KubhŒ , ”…”�”}”(hhìh²hh³Nh´Nubhõ)�”}”(hŒ[2]_”h]”hŒ2”…”�”}”(hj h²hh³Nh´Nubah}”(h]”Œid2”ah ]”h"]”h$]”h&]”hÁŒid33”jjuh1hôhhìjKubhŒ , ”…”�”}”hhìsbhõ)�”}”(hŒ[3]_”h]”hŒ3”…”�”}”(hj!h²hh³Nh´Nubah}”(h]”Œid3”ah ]”h"]”h$]”h&]”hÁŒid34”jjuh1hôhhìjKubhŒ¹ can impose a considerable risk of leaking sensitive data accessed by monitored processes. The data leakage is possible both in scenarios of direct usage of perf_events system call API ”…”�”}”(hhìh²hh³Nh´Nubhõ)�”}”(hŒ[2]_”h]”hŒ2”…”�”}”(hj5h²hh³Nh´Nubah}”(h]”Œid4”ah ]”h"]”h$]”h&]”hÁjjjuh1hôhhìjKubhŒE and over data files generated by Perf tool user mode utility (Perf) ”…”�”}”(hhìh²hh³Nh´Nubhõ)�”}”(hŒ[3]_”h]”hŒ3”…”�”}”(hjHh²hh³Nh´Nubah}”(h]”Œid5”ah ]”h"]”h$]”h&]”hÁj0jjuh1hôhhìjKubhŒ , ”…”�”}”hhìsbhõ)�”}”(hŒ[4]_”h]”hŒ4”…”�”}”(hj[h²hh³Nh´Nubah}”(h]”Œid6”ah ]”h"]”h$]”h&]”hÁŒid35”jjuh1hôhhìjKubhŒ^ . The risk depends on the nature of data that perf_events performance monitoring units (PMU) ”…”�”}”(hhìh²hh³Nh´Nubhõ)�”}”(hŒ[2]_”h]”hŒ2”…”�”}”(hjoh²hh³Nh´Nubah}”(h]”Œid7”ah ]”h"]”h$]”h&]”hÁjjjuh1hôhhìjKubhŒ‚ and Perf collect and expose for performance analysis. Collected system and performance data may be split into several categories:”…”�”}”(hhìh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´K hhÙh²hubhŒenumerated_list”“”)�”}”(hhh]”(hŒ list_item”“”)�”}”(hX'System hardware and software configuration data, for example: a CPU model and its cache configuration, an amount of available memory and its topology, used kernel and Perf versions, performance monitoring setup including experiment time, events configuration, Perf command line parameters, etc. ”h]”hë)�”}”(hX&System hardware and software configuration data, for example: a CPU model and its cache configuration, an amount of available memory and its topology, used kernel and Perf versions, performance monitoring setup including experiment time, events configuration, Perf command line parameters, etc.”h]”hX&System hardware and software configuration data, for example: a CPU model and its cache configuration, an amount of available memory and its topology, used kernel and Perf versions, performance monitoring setup including experiment time, events configuration, Perf command line parameters, etc.”…”�”}”(hj“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´Khj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjŠh²hh³hÃh´NubjŽ)�”}”(hŒ«User and kernel module paths and their load addresses with sizes, process and thread names with their PIDs and TIDs, timestamps for captured hardware and software events. ”h]”hë)�”}”(hŒªUser and kernel module paths and their load addresses with sizes, process and thread names with their PIDs and TIDs, timestamps for captured hardware and software events.”h]”hŒªUser and kernel module paths and their load addresses with sizes, process and thread names with their PIDs and TIDs, timestamps for captured hardware and software events.”…”�”}”(hj«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´Khj§ubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjŠh²hh³hÃh´NubjŽ)�”}”(hX¡Content of kernel software counters (e.g., for context switches, page faults, CPU migrations), architectural hardware performance counters (PMC) [8]_ and machine specific registers (MSR) [9]_ that provide execution metrics for various monitored parts of the system (e.g., memory controller (IMC), interconnect (QPI/UPI) or peripheral (PCIe) uncore counters) without direct attribution to any execution context state. ”h]”hë)�”}”(hX Content of kernel software counters (e.g., for context switches, page faults, CPU migrations), architectural hardware performance counters (PMC) [8]_ and machine specific registers (MSR) [9]_ that provide execution metrics for various monitored parts of the system (e.g., memory controller (IMC), interconnect (QPI/UPI) or peripheral (PCIe) uncore counters) without direct attribution to any execution context state.”h]”(hŒ‘Content of kernel software counters (e.g., for context switches, page faults, CPU migrations), architectural hardware performance counters (PMC) ”…”�”}”(hjÃh²hh³Nh´Nubhõ)�”}”(hŒ[8]_”h]”hŒ8”…”�”}”(hjËh²hh³Nh´Nubah}”(h]”Œid8”ah ]”h"]”h$]”h&]”hÁŒid39”jjuh1hôhjÃjKubhŒ& and machine specific registers (MSR) ”…”�”}”(hjÃh²hh³Nh´Nubhõ)�”}”(hŒ[9]_”h]”hŒ9”…”�”}”(hjßh²hh³Nh´Nubah}”(h]”Œid9”ah ]”h"]”h$]”h&]”hÁŒid40”jjuh1hôhjÃjKubhŒá that provide execution metrics for various monitored parts of the system (e.g., memory controller (IMC), interconnect (QPI/UPI) or peripheral (PCIe) uncore counters) without direct attribution to any execution context state.”…”�”}”(hjÃh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´Khj¿ubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjŠh²hh³hÃh´NubjŽ)�”}”(hŒÛContent of architectural execution context registers (e.g., RIP, RSP, RBP on x86_64), process user and kernel space memory addresses and data, content of various architectural MSRs that capture data from this category. ”h]”hë)�”}”(hŒÚContent of architectural execution context registers (e.g., RIP, RSP, RBP on x86_64), process user and kernel space memory addresses and data, content of various architectural MSRs that capture data from this category.”h]”hŒÚContent of architectural execution context registers (e.g., RIP, RSP, RBP on x86_64), process user and kernel space memory addresses and data, content of various architectural MSRs that capture data from this category.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´K%hjÿubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjŠh²hh³hÃh´Nubeh}”(h]”h ]”h"]”h$]”h&]”Œenumtype”Œarabic”Œprefix”hŒsuffix”Œ.”uh1jˆhhÙh²hh³hÃh´Kubhë)�”}”(hX–Data that belong to the fourth category can potentially contain sensitive process data. If PMUs in some monitoring modes capture values of execution context registers or data from process memory then access to such monitoring modes requires to be ordered and secured properly. So, perf_events performance monitoring and observability operations are the subject for security access control management [5]_ .”h]”(hX�Data that belong to the fourth category can potentially contain sensitive process data. If PMUs in some monitoring modes capture values of execution context registers or data from process memory then access to such monitoring modes requires to be ordered and secured properly. So, perf_events performance monitoring and observability operations are the subject for security access control management ”…”�”}”(hj"h²hh³Nh´Nubhõ)�”}”(hŒ[5]_”h]”hŒ5”…”�”}”(hj*h²hh³Nh´Nubah}”(h]”Œid10”ah ]”h"]”h$]”h&]”hÁŒid36”jjuh1hôhj"jKubhŒ .”…”�”}”(hj"h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´K*hhÙh²hubeh}”(h]”Œoverview”ah ]”h"]”Œoverview”ah$]”h&]”uh1hÄhhÆh²hh³hÃh´KubhÅ)�”}”(hhh]”(hÊ)�”}”(hŒperf_events access control”h]”hŒperf_events access control”…”�”}”(hjOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhjLh²hh³hÃh´K2ubhë)�”}”(hX¾To perform security checks, the Linux implementation splits processes into two categories [6]_ : a) privileged processes (whose effective user ID is 0, referred to as superuser or root), and b) unprivileged processes (whose effective UID is nonzero). Privileged processes bypass all kernel security permission checks so perf_events performance monitoring is fully available to privileged processes without access, scope and resource restrictions.”h]”(hŒZTo perform security checks, the Linux implementation splits processes into two categories ”…”�”}”(hj]h²hh³Nh´Nubhõ)�”}”(hŒ[6]_”h]”hŒ6”…”�”}”(hjeh²hh³Nh´Nubah}”(h]”Œid11”ah ]”h"]”h$]”h&]”hÁŒid37”jjuh1hôhj]jKubhX` : a) privileged processes (whose effective user ID is 0, referred to as superuser or root), and b) unprivileged processes (whose effective UID is nonzero). Privileged processes bypass all kernel security permission checks so perf_events performance monitoring is fully available to privileged processes without access, scope and resource restrictions.”…”�”}”(hj]h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´K4hjLh²hubhë)�”}”(hŒµUnprivileged processes are subject to a full security permission check based on the process's credentials [5]_ (usually: effective UID, effective GID, and supplementary group list).”h]”(hŒlUnprivileged processes are subject to a full security permission check based on the process’s credentials ”…”�”}”(hjh²hh³Nh´Nubhõ)�”}”(hŒ[5]_”h]”hŒ5”…”�”}”(hj‡h²hh³Nh´Nubah}”(h]”Œid12”ah ]”h"]”h$]”h&]”hÁj9jjuh1hôhjjKubhŒG (usually: effective UID, effective GID, and supplementary group list).”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´K=0: *scope* includes per-process and system wide performance monitoring but excludes raw tracepoints and ftrace function tracepoints monitoring. CPU and system events happened when executing either in user or in kernel space can be monitored and captured for later analysis. Per-user per-cpu perf_event_mlock_kb locking limit is imposed but ignored for unprivileged processes with CAP_IPC_LOCK [6]_ capability. ”h]”(jÞ)�”}”(hŒ>=0:”h]”hŒ>=0:”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÝh³hÃh´Kôhjgubjî)�”}”(hhh]”hë)�”}”(hX–*scope* includes per-process and system wide performance monitoring but excludes raw tracepoints and ftrace function tracepoints monitoring. CPU and system events happened when executing either in user or in kernel space can be monitored and captured for later analysis. Per-user per-cpu perf_event_mlock_kb locking limit is imposed but ignored for unprivileged processes with CAP_IPC_LOCK [6]_ capability.”h]”(jÊ)�”}”(hŒ*scope*”h]”hŒscope”…”�”}”(hj€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÉhj|ubhX includes per-process and system wide performance monitoring but excludes raw tracepoints and ftrace function tracepoints monitoring. CPU and system events happened when executing either in user or in kernel space can be monitored and captured for later analysis. Per-user per-cpu perf_event_mlock_kb locking limit is imposed but ignored for unprivileged processes with CAP_IPC_LOCK ”…”�”}”(hj|h²hh³Nh´Nubhõ)�”}”(hŒ[6]_”h]”hŒ6”…”�”}”(hj’h²hh³Nh´Nubah}”(h]”Œid26”ah ]”h"]”h$]”h&]”hÁjtjjuh1hôhj|jKubhŒ capability.”…”�”}”(hj|h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´Kîhjyubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjgubeh}”(h]”h ]”h"]”h$]”h&]”uh1j×h³hÃh´KôhjÔh²hubjØ)�”}”(hXt>=1: *scope* includes per-process performance monitoring only and excludes system wide performance monitoring. CPU and system events happened when executing either in user or in kernel space can be monitored and captured for later analysis. Per-user per-cpu perf_event_mlock_kb locking limit is imposed but ignored for unprivileged processes with CAP_IPC_LOCK capability. ”h]”(jÞ)�”}”(hŒ>=1:”h]”hŒ>=1:”…”�”}”(hj»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÝh³hÃh´Kühj·ubjî)�”}”(hhh]”hë)�”}”(hXn*scope* includes per-process performance monitoring only and excludes system wide performance monitoring. CPU and system events happened when executing either in user or in kernel space can be monitored and captured for later analysis. Per-user per-cpu perf_event_mlock_kb locking limit is imposed but ignored for unprivileged processes with CAP_IPC_LOCK capability.”h]”(jÊ)�”}”(hŒ*scope*”h]”hŒscope”…”�”}”(hjÐh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÉhjÌubhXg includes per-process performance monitoring only and excludes system wide performance monitoring. CPU and system events happened when executing either in user or in kernel space can be monitored and captured for later analysis. Per-user per-cpu perf_event_mlock_kb locking limit is imposed but ignored for unprivileged processes with CAP_IPC_LOCK capability.”…”�”}”(hjÌh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´K÷hjÉubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj·ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j×h³hÃh´KühjÔh²hubjØ)�”}”(hX5>=2: *scope* includes per-process performance monitoring only. CPU and system events happened when executing in user space only can be monitored and captured for later analysis. Per-user per-cpu perf_event_mlock_kb locking limit is imposed but ignored for unprivileged processes with CAP_IPC_LOCK capability. ”h]”(jÞ)�”}”(hŒ>=2:”h]”hŒ>=2:”…”�”}”(hjøh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÝh³hÃh´Mhjôubjî)�”}”(hhh]”hë)�”}”(hX/*scope* includes per-process performance monitoring only. CPU and system events happened when executing in user space only can be monitored and captured for later analysis. Per-user per-cpu perf_event_mlock_kb locking limit is imposed but ignored for unprivileged processes with CAP_IPC_LOCK capability.”h]”(jÊ)�”}”(hŒ*scope*”h]”hŒscope”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÉhj ubhX( includes per-process performance monitoring only. CPU and system events happened when executing in user space only can be monitored and captured for later analysis. Per-user per-cpu perf_event_mlock_kb locking limit is imposed but ignored for unprivileged processes with CAP_IPC_LOCK capability.”…”�”}”(hj h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´Kÿhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjôubeh}”(h]”h ]”h"]”h$]”h&]”uh1j×h³hÃh´MhjÔh²hubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÒhj|h²hh³hÃh´Nubeh}”(h]”Œunprivileged-users”ah ]”h"]”Œunprivileged users”ah$]”h&]”uh1hÄhhÆh²hh³hÃh´KàubhÅ)�”}”(hhh]”(hÊ)�”}”(hŒResource control”h]”hŒResource control”…”�”}”(hjBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhj?h²hh³hÃh´MubhÅ)�”}”(hhh]”(hÊ)�”}”(hŒOpen file descriptors”h]”hŒOpen file descriptors”…”�”}”(hjSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhjPh²hh³hÃh´M ubhë)�”}”(hXÝThe perf_events system call API [2]_ allocates file descriptors for every configured PMU event. Open file descriptors are a per-process accountable resource governed by the RLIMIT_NOFILE [11]_ limit (ulimit -n), which is usually derived from the login shell process. When configuring Perf collection for a long list of events on a large server system, this limit can be easily hit preventing required monitoring configuration. RLIMIT_NOFILE limit can be increased on per-user basis modifying content of the limits.conf file [12]_ . Ordinarily, a Perf sampling session (perf record) requires an amount of open perf_event file descriptors that is not less than the number of monitored events multiplied by the number of monitored CPUs.”h]”(hŒ The perf_events system call API ”…”�”}”(hjah²hh³Nh´Nubhõ)�”}”(hŒ[2]_”h]”hŒ2”…”�”}”(hjih²hh³Nh´Nubah}”(h]”Œid27”ah ]”h"]”h$]”h&]”hÁjjjuh1hôhjajKubhŒ— allocates file descriptors for every configured PMU event. Open file descriptors are a per-process accountable resource governed by the RLIMIT_NOFILE ”…”�”}”(hjah²hh³Nh´Nubhõ)�”}”(hŒ[11]_”h]”hŒ11”…”�”}”(hj|h²hh³Nh´Nubah}”(h]”Œid28”ah ]”h"]”h$]”h&]”hÁŒid42”jjuh1hôhjajKubhXL limit (ulimit -n), which is usually derived from the login shell process. When configuring Perf collection for a long list of events on a large server system, this limit can be easily hit preventing required monitoring configuration. RLIMIT_NOFILE limit can be increased on per-user basis modifying content of the limits.conf file ”…”�”}”(hjah²hh³Nh´Nubhõ)�”}”(hŒ[12]_”h]”hŒ12”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”Œid29”ah ]”h"]”h$]”h&]”hÁŒid43”jjuh1hôhjajKubhŒÌ . Ordinarily, a Perf sampling session (perf record) requires an amount of open perf_event file descriptors that is not less than the number of monitored events multiplied by the number of monitored CPUs.”…”�”}”(hjah²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´M hjPh²hubeh}”(h]”Œopen-file-descriptors”ah ]”h"]”Œopen file descriptors”ah$]”h&]”uh1hÄhj?h²hh³hÃh´M ubhÅ)�”}”(hhh]”(hÊ)�”}”(hŒMemory allocation”h]”hŒMemory allocation”…”�”}”(hjµh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhj²h²hh³hÃh´Mubhë)�”}”(hXÜThe amount of memory available to user processes for capturing performance monitoring data is governed by the perf_event_mlock_kb [2]_ setting. This perf_event specific resource setting defines overall per-cpu limits of memory allowed for mapping by the user processes to execute performance monitoring. The setting essentially extends the RLIMIT_MEMLOCK [11]_ limit, but only for memory regions mapped specifically for capturing monitored performance events and related data.”h]”(hŒ‚The amount of memory available to user processes for capturing performance monitoring data is governed by the perf_event_mlock_kb ”…”�”}”(hjÃh²hh³Nh´Nubhõ)�”}”(hŒ[2]_”h]”hŒ2”…”�”}”(hjËh²hh³Nh´Nubah}”(h]”Œid30”ah ]”h"]”h$]”h&]”hÁjjjuh1hôhjÃjKubhŒÝ setting. This perf_event specific resource setting defines overall per-cpu limits of memory allowed for mapping by the user processes to execute performance monitoring. The setting essentially extends the RLIMIT_MEMLOCK ”…”�”}”(hjÃh²hh³Nh´Nubhõ)�”}”(hŒ[11]_”h]”hŒ11”…”�”}”(hjÞh²hh³Nh´Nubah}”(h]”Œid31”ah ]”h"]”h$]”h&]”hÁj‹jjuh1hôhjÃjKubhŒt limit, but only for memory regions mapped specifically for capturing monitored performance events and related data.”…”�”}”(hjÃh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´Mhj²h²hubhë)�”}”(hX˜For example, if a machine has eight cores and perf_event_mlock_kb limit is set to 516 KiB, then a user process is provided with 516 KiB * 8 = 4128 KiB of memory above the RLIMIT_MEMLOCK limit (ulimit -l) for perf_event mmap buffers. In particular, this means that, if the user wants to start two or more performance monitoring processes, the user is required to manually distribute the available 4128 KiB between the monitoring processes, for example, using the --mmap-pages Perf record mode option. Otherwise, the first started performance monitoring process allocates all available 4128 KiB and the other processes will fail to proceed due to the lack of memory.”h]”hX˜For example, if a machine has eight cores and perf_event_mlock_kb limit is set to 516 KiB, then a user process is provided with 516 KiB * 8 = 4128 KiB of memory above the RLIMIT_MEMLOCK limit (ulimit -l) for perf_event mmap buffers. In particular, this means that, if the user wants to start two or more performance monitoring processes, the user is required to manually distribute the available 4128 KiB between the monitoring processes, for example, using the --mmap-pages Perf record mode option. Otherwise, the first started performance monitoring process allocates all available 4128 KiB and the other processes will fail to proceed due to the lack of memory.”…”�”}”(hj÷h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´M"hj²h²hubhë)�”}”(hXDRLIMIT_MEMLOCK and perf_event_mlock_kb resource constraints are ignored for processes with the CAP_IPC_LOCK capability. Thus, perf_events/Perf privileged users can be provided with memory above the constraints for perf_events/Perf performance monitoring purpose by providing the Perf executable with CAP_IPC_LOCK capability.”h]”hXDRLIMIT_MEMLOCK and perf_event_mlock_kb resource constraints are ignored for processes with the CAP_IPC_LOCK capability. Thus, perf_events/Perf privileged users can be provided with memory above the constraints for perf_events/Perf performance monitoring purpose by providing the Perf executable with CAP_IPC_LOCK capability.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´M-hj²h²hubeh}”(h]”Œmemory-allocation”ah ]”h"]”Œmemory allocation”ah$]”h&]”uh1hÄhj?h²hh³hÃh´Mubeh}”(h]”Œresource-control”ah ]”h"]”Œresource control”ah$]”h&]”uh1hÄhhÆh²hh³hÃh´MubhÅ)�”}”(hhh]”(hÊ)�”}”(hŒ Bibliography”h]”hŒ Bibliography”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhj#h²hh³hÃh´M4ubhŒfootnote”“”)�”}”(hŒ%``_”h]”(hŒlabel”“”)�”}”(hŒ1”h]”hŒ1”…”�”}”(hj<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hj6ubhë)�”}”(hj8h]”(hŒ reference”“”)�”}”(hj8h]”hŒ https://lwn.net/Articles/337493/”…”�”}”(hjOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”Œ https://lwn.net/Articles/337493/”Œrefuri”j]uh1jMhjJubh¶)�”}”(hŒ"”h]”h}”(h]”Œhttps-lwn-net-articles-337493”ah ]”h"]”Œ https://lwn.net/articles/337493/”ah$]”h&]”Œrefuri”j]uh1hµŒ referenced”KhjJubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´M6hj6ubeh}”(h]”jah ]”h"]”Œ1”ah$]”h&]”jajjuh1j4h³hÃh´M6hj#h²hjKubj5)�”}”(hŒ@``_”h]”(j;)�”}”(hŒ2”h]”hŒ2”…”�”}”(hj~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjzubhë)�”}”(hj|h]”(jN)�”}”(hj|h]”hŒ;http://man7.org/linux/man-pages/man2/perf_event_open.2.html”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”Œ;http://man7.org/linux/man-pages/man2/perf_event_open.2.html”j^j�uh1jMhjŒubh¶)�”}”(hŒ=”h]”h}”(h]”Œ9http-man7-org-linux-man-pages-man2-perf-event-open-2-html”ah ]”h"]”Œ;http://man7.org/linux/man-pages/man2/perf_event_open.2.html”ah$]”h&]”Œrefuri”j�uh1hµjlKhjŒubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´M7hjzubeh}”(h]”jah ]”h"]”Œ2”ah$]”h&]”(jj?jyjÃj(jsjÕejjuh1j4h³hÃh´M7hj#h²hjKubj5)�”}”(hŒ=``_”h]”(j;)�”}”(hŒ3”h]”hŒ3”…”�”}”(hj¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hj¸ubhë)�”}”(hjºh]”(jN)�”}”(hjºh]”hŒ8http://web.eece.maine.edu/~vweaver/projects/perf_events/”…”�”}”(hjÍh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”Œ8http://web.eece.maine.edu/~vweaver/projects/perf_events/”j^jÛuh1jMhjÊubh¶)�”}”(hŒ:”h]”h}”(h]”Œ4http-web-eece-maine-edu-vweaver-projects-perf-events”ah ]”h"]”Œ8http://web.eece.maine.edu/~vweaver/projects/perf_events/”ah$]”h&]”Œrefuri”jÛuh1hµjlKhjÊubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´M8hj¸ubeh}”(h]”j0ah ]”h"]”Œ3”ah$]”h&]”(j+jRejjuh1j4h³hÃh´M8hj#h²hjKubj5)�”}”(hŒ5``_”h]”(j;)�”}”(hŒ4”h]”hŒ4”…”�”}”(hjúh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjöubhë)�”}”(hjøh]”(jN)�”}”(hjøh]”hŒ0https://perf.wiki.kernel.org/index.php/Main_Page”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”Œ0https://perf.wiki.kernel.org/index.php/Main_Page”j^j uh1jMhj ubh¶)�”}”(hŒ2”h]”h}”(h]”Œ.https-perf-wiki-kernel-org-index-php-main-page”ah ]”h"]”Œ0https://perf.wiki.kernel.org/index.php/main_page”ah$]”h&]”Œrefuri”j uh1hµjlKhj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´M9hjöubeh}”(h]”jjah ]”h"]”Œ4”ah$]”h&]”jeajjuh1j4h³hÃh´M9hj#h²hjKubj5)�”}”(hŒE``_”h]”(j;)�”}”(hŒ5”h]”hŒ5”…”�”}”(hj8 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hj4 ubhë)�”}”(hj6 h]”(jN)�”}”(hj6 h]”hŒ@https://www.kernel.org/doc/html/latest/security/credentials.html”…”�”}”(hjI h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”Œ@https://www.kernel.org/doc/html/latest/security/credentials.html”j^jW uh1jMhjF ubh¶)�”}”(hŒB”h]”h}”(h]”Œ>https-www-kernel-org-doc-html-latest-security-credentials-html”ah ]”h"]”Œ@https://www.kernel.org/doc/html/latest/security/credentials.html”ah$]”h&]”Œrefuri”jW uh1hµjlKhjF ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´M:hj4 ubeh}”(h]”j9ah ]”h"]”Œ5”ah$]”h&]”(j4j‘ejjuh1j4h³hÃh´M:hj#h²hjKubj5)�”}”(hŒ=``_”h]”(j;)�”}”(hŒ6”h]”hŒ6”…”�”}”(hjv h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjr ubhë)�”}”(hjt h]”(jN)�”}”(hjt h]”hŒ8http://man7.org/linux/man-pages/man7/capabilities.7.html”…”�”}”(hj‡ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”Œ8http://man7.org/linux/man-pages/man7/capabilities.7.html”j^j• uh1jMhj„ ubh¶)�”}”(hŒ:”h]”h}”(h]”Œ6http-man7-org-linux-man-pages-man7-capabilities-7-html”ah ]”h"]”Œ8http://man7.org/linux/man-pages/man7/capabilities.7.html”ah$]”h&]”Œrefuri”j• uh1hµjlKhj„ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´M;hjr ubeh}”(h]”jtah ]”h"]”Œ6”ah$]”h&]”(joj²jtj÷jejœejjuh1j4h³hÃh´M;hj#h²hjKubj5)�”}”(hŒ7``_”h]”(j;)�”}”(hŒ7”h]”hŒ7”…”�”}”(hj´ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hj° ubhë)�”}”(hj² h]”(jN)�”}”(hj² h]”hŒ2http://man7.org/linux/man-pages/man2/ptrace.2.html”…”�”}”(hjÅ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”Œ2http://man7.org/linux/man-pages/man2/ptrace.2.html”j^jÓ uh1jMhj ubh¶)�”}”(hŒ4”h]”h}”(h]”Œ0http-man7-org-linux-man-pages-man2-ptrace-2-html”ah ]”h"]”Œ2http://man7.org/linux/man-pages/man2/ptrace.2.html”ah$]”h&]”Œrefuri”jÓ uh1hµjlKhj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´M<hj° ubeh}”(h]”j0ah ]”h"]”Œ7”ah$]”h&]”j+ajjuh1j4h³hÃh´M<hj#h²hjKubj5)�”}”(hŒ?``_”h]”(j;)�”}”(hŒ8”h]”hŒ8”…”�”}”(hjò h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjî ubhë)�”}”(hjð h]”(jN)�”}”(hjð h]”hŒ:https://en.wikipedia.org/wiki/Hardware_performance_counter”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”Œ:https://en.wikipedia.org/wiki/Hardware_performance_counter”j^j uh1jMhj ubh¶)�”}”(hŒ<”h]”h}”(h]”Œ8https-en-wikipedia-org-wiki-hardware-performance-counter”ah ]”h"]”Œ:https://en.wikipedia.org/wiki/hardware_performance_counter”ah$]”h&]”Œrefuri”j uh1hµjlKhj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´M=hjî ubeh}”(h]”jÚah ]”h"]”Œ8”ah$]”h&]”jÕajjuh1j4h³hÃh´M=hj#h²hjKubj5)�”}”(hŒ:``_”h]”(j;)�”}”(hŒ9”h]”hŒ9”…”�”}”(hj0 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hj, ubhë)�”}”(hj. h]”(jN)�”}”(hj. h]”hŒ5https://en.wikipedia.org/wiki/Model-specific_register”…”�”}”(hjA h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”Œ5https://en.wikipedia.org/wiki/Model-specific_register”j^jO uh1jMhj> ubh¶)�”}”(hŒ7”h]”h}”(h]”Œ3https-en-wikipedia-org-wiki-model-specific-register”ah ]”h"]”Œ5https://en.wikipedia.org/wiki/model-specific_register”ah$]”h&]”Œrefuri”jO uh1hµjlKhj> ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´M>hj, ubeh}”(h]”jîah ]”h"]”Œ9”ah$]”h&]”jéajjuh1j4h³hÃh´M>hj#h²hjKubj5)�”}”(hŒ4``_”h]”(j;)�”}”(hŒ10”h]”hŒ10”…”�”}”(hjn h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjj ubhë)�”}”(hjl h]”(jN)�”}”(hjl h]”hŒ/http://man7.org/linux/man-pages/man5/acl.5.html”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”Œ/http://man7.org/linux/man-pages/man5/acl.5.html”j^j� uh1jMhj| ubh¶)�”}”(hŒ1”h]”h}”(h]”Œ-http-man7-org-linux-man-pages-man5-acl-5-html”ah ]”h"]”Œ/http://man7.org/linux/man-pages/man5/acl.5.html”ah$]”h&]”Œrefuri”j� uh1hµjlKhj| ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´M?hjj ubeh}”(h]”jŒah ]”h"]”Œ10”ah$]”h&]”j‡ajjuh1j4h³hÃh´M?hj#h²hjKubj5)�”}”(hŒ:``_”h]”(j;)�”}”(hŒ11”h]”hŒ11”…”�”}”(hj¬ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hj¨ ubhë)�”}”(hjª h]”(jN)�”}”(hjª h]”hŒ5http://man7.org/linux/man-pages/man2/getrlimit.2.html”…”�”}”(hj½ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”Œ5http://man7.org/linux/man-pages/man2/getrlimit.2.html”j^jË uh1jMhjº ubh¶)�”}”(hŒ7”h]”h}”(h]”Œ3http-man7-org-linux-man-pages-man2-getrlimit-2-html”ah ]”h"]”Œ5http://man7.org/linux/man-pages/man2/getrlimit.2.html”ah$]”h&]”Œrefuri”jË uh1hµjlKhjº ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´M@hj¨ ubeh}”(h]”j‹ah ]”h"]”Œ11”ah$]”h&]”(j†jèejjuh1j4h³hÃh´M@hj#h²hjKubj5)�”}”(hŒ<``_”h]”(j;)�”}”(hŒ12”h]”hŒ12”…”�”}”(hjê h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjæ ubhë)�”}”(hjè h]”(jN)�”}”(hjè h]”hŒ7http://man7.org/linux/man-pages/man5/limits.conf.5.html”…”�”}”(hjû h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”Œ7http://man7.org/linux/man-pages/man5/limits.conf.5.html”j^j uh1jMhjø ubh¶)�”}”(hŒ9”h]”h}”(h]”Œ5http-man7-org-linux-man-pages-man5-limits-conf-5-html”ah ]”h"]”Œ7http://man7.org/linux/man-pages/man5/limits.conf.5.html”ah$]”h&]”Œrefuri”j uh1hµjlKhjø ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´MAhjæ ubeh}”(h]”jŸah ]”h"]”Œ12”ah$]”h&]”jšajjuh1j4h³hÃh´MAhj#h²hjKubj5)�”}”(hŒ/``_”h]”(j;)�”}”(hŒ13”h]”hŒ13”…”�”}”(hj( h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hj$ ubhë)�”}”(hj& h]”(jN)�”}”(hj& h]”hŒ*https://sites.google.com/site/fullycapable”…”�”}”(hj9 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”Œ*https://sites.google.com/site/fullycapable”j^jG uh1jMhj6 ubh¶)�”}”(hŒ,”h]”h}”(h]”Œ(https-sites-google-com-site-fullycapable”ah ]”h"]”Œ*https://sites.google.com/site/fullycapable”ah$]”h&]”Œrefuri”jG uh1hµjlKhj6 ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´MBhj$ ubeh}”(h]”jìah ]”h"]”Œ13”ah$]”h&]”jçajjuh1j4h³hÃh´MBhj#h²hjKubj5)�”}”(hŒ7``_”h]”(j;)�”}”(hŒ14”h]”hŒ14”…”�”}”(hjf h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjb ubhë)�”}”(hjd h]”(jN)�”}”(hjd h]”hŒ2http://man7.org/linux/man-pages/man8/auditd.8.html”…”�”}”(hjw h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”Œ2http://man7.org/linux/man-pages/man8/auditd.8.html”j^j… uh1jMhjt ubh¶)�”}”(hŒ4”h]”h}”(h]”Œ0http-man7-org-linux-man-pages-man8-auditd-8-html”ah ]”h"]”Œ2http://man7.org/linux/man-pages/man8/auditd.8.html”ah$]”h&]”Œrefuri”j… uh1hµjlKhjt ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´MChjb ubeh}”(h]”jah ]”h"]”Œ14”ah$]”h&]”j ajjuh1j4h³hÃh´MChj#h²hjKubj5)�”}”(hŒ6``_”h]”(j;)�”}”(hŒ15”h]”hŒ15”…”�”}”(hj¤ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hj  ubhë)�”}”(hj¢ h]”(jN)�”}”(hj¢ h]”hŒ1https://man7.org/linux/man-pages/man8/sudo.8.html”…”�”}”(hjµ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”Œ1https://man7.org/linux/man-pages/man8/sudo.8.html”j^jà uh1jMhj² ubh¶)�”}”(hŒ3”h]”h}”(h]”Œ/https-man7-org-linux-man-pages-man8-sudo-8-html”ah ]”h"]”Œ1https://man7.org/linux/man-pages/man8/sudo.8.html”ah$]”h&]”Œrefuri”jà uh1hµjlKhj² ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´MDhj  ubeh}”(h]”j ah ]”h"]”Œ15”ah$]”h&]”j›ajjuh1j4h³hÃh´MDhj#h²hjKubj5)�”}”(hŒ;``_”h]”(j;)�”}”(hŒ16”h]”hŒ16”…”�”}”(hjâ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjÞ ubhë)�”}”(hjà h]”(jN)�”}”(hjà h]”hŒ6https://git.kernel.org/pub/scm/libs/libcap/libcap.git/”…”�”}”(hjó h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”Œ6https://git.kernel.org/pub/scm/libs/libcap/libcap.git/”j^j uh1jMhjð ubh¶)�”}”(hŒ8”h]”h}”(h]”Œ3https-git-kernel-org-pub-scm-libs-libcap-libcap-git”ah ]”h"]”Œ6https://git.kernel.org/pub/scm/libs/libcap/libcap.git/”ah$]”h&]”Œrefuri”j uh1hµjlKhjð ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´MEhjÞ ubeh}”(h]”j8ah ]”h"]”Œ16”ah$]”h&]”(j3j¾ejjuh1j4h³hÃh´MEhj#h²hjKubeh}”(h]”Œ bibliography”ah ]”h"]”Œ bibliography”ah$]”h&]”uh1hÄhhÆh²hh³hÃh´M4ubeh}”(h]”(Œperf-events-and-tool-security”hÂeh ]”h"]”(Œperf events and tool security”Œ perf_security”eh$]”h&]”uh1hÄhhh²hh³hÃh´KŒexpect_referenced_by_name”}”j* h·sŒexpect_referenced_by_id”}”hÂh·subeh}”(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”jT Œ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”}”(Œ1”]”höaŒ2”]”(j j5joj¹jjijËeŒ3”]”(j!jHeŒ4”]”j[aŒ8”]”jËaŒ9”]”jßaŒ5”]”(j*j‡eŒ6”]”(jej¨jjjíj[j’eŒ13”]”jÝaŒ14”]”jÿaŒ7”]”j!aŒ10”]”j}aŒ15”]”j‘aŒ16”]”(j)j´eŒ11”]”(j|jÞeŒ12”]”j�auŒrefids”}”hÂ]”h·asŒnameids”}”(j* hÂj) j& jIjFjNjKjyjvj<j9j jj¯j¬jjj! j jwjjhjejµjj§j¤jój0jåjâj1 jjj# j jo j9ja j^ j­ jtjŸ jœ jë j0jÝ jÚ j) jÚj j jg jîjY jV j¥ jŒj— j” jã j‹jÕ jÒ j! jŸj j j_ jìjQ jN j� jj� jŒ jÛ j jÍ jÊ j j8j j uŒ nametypes”}”(j* ˆj) ‰jI‰jN‰jy‰j<‰j ‰j¯‰j‰j! ‰jwˆjhˆjµˆj§ˆjóˆjåˆj1 ˆj# ˆjo ˆja ˆj­ ˆjŸ ˆjë ˆjÝ ˆj) ˆj ˆjg ˆjY ˆj¥ ˆj— ˆjã ˆjÕ ˆj! ˆj ˆj_ ˆjQ ˆj� ˆj� ˆjÛ ˆjÍ ˆj ˆj ˆuh}”(hÂhÆj& hÆjFhÙjhöjj j+j!j?j5jRjHjej[jyjojÕjËjéjßj4j*jKjLjojej‘j‡j²j¨jçjÝj jÿj+j!jvjQjtjjj‡j}j›j‘j÷jíj3j)j¾j´jej[j9j|jÃj¹j(jjœj’jj?j¬jPjsjij†j|jšj�jj²jÕjËjèjÞj j#jj6jej_jjzj¤jžj0j¸jâjÜjjjöj j j9j4 j^ jX jtjr jœ j– j0j° jÚ jÔ jÚjî j j jîj, jV jP jŒjj j” jŽ j‹j¨ jÒ jÌ jŸjæ j j jìj$ jN jH jjb jŒ j† j j  jÊ jÄ j8jÞ j j uŒ footnote_refs”}”(j” ]”höaj– ]”(j j5joj¹jjijËej˜ ]”(j!jHejš ]”j[ajœ ]”jËajž ]”jßaj  ]”(j*j‡ej¢ ]”(jej¨jjjíj[j’ej¤ ]”jÝaj¦ ]”jÿaj¨ ]”j!ajª ]”j}aj¬ ]”j‘aj® ]”(j)j´ej° ]”(j|jÞej² ]”j�auŒ citation_refs”}”Œ autofootnotes”]”Œautofootnote_refs”]”Œsymbol_footnotes”]”Œsymbol_footnote_refs”]”Œ footnotes”]”(j6jzj¸jöj4 jr j° jî j, jj j¨ jæ j$ jb j  jÞ eŒ citations”]”Œautofootnote_start”KŒsymbol_footnote_start”KŒ id_counter”Œ collections”ŒCounter”“”}”jb K/s…”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)”…”�”}”(hjì h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêhjé ubah}”(h]”h ]”h"]”h$]”h&]”Œlevel”KŒtype”ŒINFO”Œsource”hÃŒline”Kuh1jç hjQh²hh³hÃh´Kubjè )�”}”(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)”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêhj ubah}”(h]”h ]”h"]”h$]”h&]”Œlevel”KŒtype”j Œsource”hÃŒline”Kuh1jç hjQh²hh³hÃh´K½ubjè )�”}”(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)”…”�”}”(hj# h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêhj ubah}”(h]”h ]”h"]”h$]”h&]”Œlevel”KŒtype”j Œsource”hÃŒline”Kuh1jç hjQh²hh³hÃh´KÄubeŒtransform_messages”]”jè )�”}”(hhh]”hë)�”}”(hhh]”hŒ3Hyperlink target "perf-security" is not referenced.”…”�”}”hj@ sbah}”(h]”h ]”h"]”h$]”h&]”uh1hêhj= ubah}”(h]”h ]”h"]”h$]”h&]”Œlevel”KŒtype”j Œsource”hÃŒline”Kuh1jç ubaŒ transformer”NŒ include_log”]”Œ decoration”Nh²hub.