{"id":1441,"date":"2019-05-01T00:00:00","date_gmt":"2019-05-01T07:00:00","guid":{"rendered":"https:\/\/en.pingcap.com\/blog\/try-to-fix-two-linux-kernel-bugs-while-testing-tidb-operator-in-k8s\/"},"modified":"2024-08-21T19:30:41","modified_gmt":"2024-08-22T02:30:41","slug":"try-to-fix-two-linux-kernel-bugs-while-testing-tidb-operator-in-k8s","status":"publish","type":"post","link":"https:\/\/www.pingcap.com\/ko\/blog\/try-to-fix-two-linux-kernel-bugs-while-testing-tidb-operator-in-k8s\/","title":{"rendered":"Try to Fix Two Linux Kernel Bugs While Testing TiDB Operator in K8s"},"content":{"rendered":"<p>Kubernetes (K8s) is an open-source container orchestration system that automates application deployment, scaling, and management. It&#8217;s the operating system of the cloud-native world. Any defects in K8s or the operation system might put the application in the upper layer at risk.<\/p>\n<p>As the EE (Efficiency Engineering) team at <a href=\"https:\/\/www.pingcap.com\/ko\/\">PingCAP<\/a>, we optimize our office infrastructure and improve office automation and teamwork effectiveness. When we tested <a href=\"https:\/\/github.com\/pingcap\/tidb-operator\">TiDB Operator<\/a> (which creates and manages <a href=\"https:\/\/github.com\/pingcap\/tidb\">\ud2f0DB<\/a> clusters) in K8s, we found two Linux kernel bugs. These bugs have plagued our PingCAP K8s environment for quite a while and aren&#8217;t thoroughly fixed in the K8s community as a whole.<\/p>\n<p>After extensive investigation and diagnosis, we&#8217;ve identified ways to handle these bugs. In this post, I&#8217;ll share with you how we tackled these problems. However, as useful as these solutions are, we consider them workarounds, and we believe that more elegant solutions are possible. The goal of this post is to inspire the K8s community, <a href=\"https:\/\/en.wikipedia.org\/wiki\/Red_Hat_Enterprise_Linux\">RHEL<\/a>, \uadf8\ub9ac\uace0 <a href=\"https:\/\/en.wikipedia.org\/wiki\/CentOS\">CentOS<\/a> so that they can help fix these bugs thoroughly in the near future.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Bug_1_Unstable_kmem_accounting\"><\/span>Bug #1: Unstable kmem accounting<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><strong>Keyword:<\/strong> SLUB: Unable to allocate memory on node -1<\/p>\n<p><strong>Related issues in the community:<\/strong><\/p>\n<ul>\n<li><a href=\"https:\/\/github.com\/kubernetes\/kubernetes\/issues\/61937\">https:\/\/github.com\/kubernetes\/kubernetes\/issues\/61937<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/opencontainers\/runc\/issues\/1725\">https:\/\/github.com\/opencontainers\/runc\/issues\/1725<\/a><\/li>\n<\/ul>\n<h3>Issue description<\/h3>\n<p>When we tested <a href=\"https:\/\/github.com\/tikv\/tikv\">TiKV<\/a>&#8216;s online transaction processing (<a href=\"https:\/\/en.wikipedia.org\/wiki\/Online_transaction_processing\">OLTP<\/a>) performance in K8s, I\/O performance occasionally jittered. However, following items appeared normal:<\/p>\n<ul>\n<li>TiKV and <a href=\"https:\/\/en.wikipedia.org\/wiki\/RocksDB\">RocksDB<\/a> log files; RocksDB is TiKV&#8217;s underlying storage engine<\/li>\n<li>CPU (no bottleneck)<\/li>\n<li>Memory and disk statistics from the load information<\/li>\n<\/ul>\n<p>The only negative indicator was the message, &#8220;SLUB: Unable to allocate memory on node -1&#8221; in the output of the <code>dmesg<\/code> command.<\/p>\n<h3>Issue analysis<\/h3>\n<p>We used <a href=\"https:\/\/github.com\/brendangregg\/perf-tools\/blob\/master\/bin\/funcslower\">funcslower<\/a> in <a href=\"http:\/\/github.com\/brendangregg\/perf-tools\">perf-tools<\/a> to trace kernel functions that were executed slowly and adjusted the threshold value of the <code>hung_task_timeout_secs<\/code> kernel parameter. When we performed the write operations in TiKV, we found the following kernel path information:<\/p>\n<img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"470\" class=\"wp-image-1443\" src=\"https:\/\/en.pingcap.com\/wp-content\/uploads\/2019\/05\/kernel-path-information-2.png\" alt=\"Kernel path information 2\" srcset=\"https:\/\/static.pingcap.com\/files\/2019\/05\/kernel-path-information-2.png 800w, https:\/\/static.pingcap.com\/files\/2019\/05\/kernel-path-information-2-300x176.png 300w, https:\/\/static.pingcap.com\/files\/2019\/05\/kernel-path-information-2-768x451.png 768w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/>\n<p>Based on the information above, we could see that the I\/O jitter was related to the file system executing <code>writepage<\/code>. At the same time, before and after the performance jitter was captured, the <code>dmesg<\/code> output contained a large amount of information about &#8220;SLUB: Unable to allocate memory on node -1&#8221;. This message occurred even when the node had sufficient memory.<\/p>\n<p>We analyzed the call stack information output from <code>hung_task<\/code> and the kernel code. We found that the kernel tried to allocate the <code>bio_vec<\/code> object via <code>kmem_cache_alloc<\/code> when executing the <code>bvec_alloc<\/code> function to allocate the <code>bio_vec<\/code> object.<\/p>\n<p>If this operation failed, the kernel fell back to allocate the <code>bio_vec<\/code> object from the mempool. However, inside the mempool, the system first tried to execute the <code>pool-&gt;alloc<\/code> callback for allocation. If this allocation failed, the kernel set the process to an uninterruptible state and put the process in a wait queue. After other processes returned memory resources to the mempool or the timer timed out (after 5 seconds), the process scheduler invoked the process for retry. The wait time of the wait queue was consistent with the jitter delay of our application monitoring.<\/p>\n<p>When we created the Docker container, we didn&#8217;t set <code>memory.kmem.limit_in_bytes<\/code>. But why was kmem insufficient? To determine whether <code>memory.kmem.limit_in_bytes<\/code> was set, we went to the cgroup memory controller to check the container&#8217;s kmem information. The kmem statistics were enabled, and the kemem limit was set to a very large value.<\/p>\n<p>Because we knew that the kmem accounting was unstable in the RHEL 3.10 kernel, we suspected that a kernel bug caused the SLUB allocation failure. We searched for kernel patch information, and found that it was a kernel bug, and that it had been fixed in Linux kernel version 4.x: <a href=\"https:\/\/github.com\/torvalds\/linux\/commit\/d6e0b7fa11862433773d986b5f995ffdf47ce672\">slub: make dead caches discard free slabs immediately<\/a>. There was also a namespace leak issue associated with kmem accounting: <a href=\"https:\/\/github.com\/torvalds\/linux\/commit\/73f576c04b9410ed19660f74f97521bee6e1c546\">mm: memcontrol: fix cgroup creation failure after many small jobs<\/a>.<\/p>\n<p>So how was kmem accounting enabled? We used the <a href=\"https:\/\/github.com\/iovisor\/bcc\/blob\/master\/tools\/opensnoop.py\">opensnoop<\/a> tool in <a href=\"http:\/\/github.com\/iovisor\/bcc\">bcc<\/a> to monitor the kmem configuration file and captured <a href=\"https:\/\/github.com\/opencontainers\/runc\">runc<\/a> as the file modifier. From the K8s code, we found that kmem accounting was enabled by default in the K8s-dependent <code>runc<\/code> project.<\/p>\n<h3>Solution<\/h3>\n<p>Based on our issue analysis, we can fix the bug in either of the following ways:<\/p>\n<ul>\n<li>Upgrade the existing kernel to a later version.<\/li>\n<li>Disable the kmem accounting feature when starting the container.<\/li>\n<\/ul>\n<p>Now <code>runc<\/code> includes the conditional compilation option, and you can disable kmem accounting via <a href=\"https:\/\/github.com\/opencontainers\/runc#build-tags\">Build Tags<\/a>. After we disabled this feature, our test result showed that the jitter disappeared, and so did the namespace leak and SLUB allocation failure problems.<\/p>\n<h4>Operation steps<\/h4>\n<p>We need to disable the kmem accounting feature on both kubelet and Docker.<\/p>\n<ol>\n<li>Recompile kubelet according to the corresponding kubelet version:\n<ul>\n<li>For kubelet v1.14 or later, add <a href=\"https:\/\/github.com\/kubernetes\/kubernetes\/blob\/release-1.14\/vendor\/github.com\/opencontainers\/runc\/libcontainer\/cgroups\/fs\/kmem_disabled.go#L1\">Build Tags<\/a> when you compile kubelet to disable kmem accounting:<\/li>\n<\/ul>\n<pre><code>make BUILDTAGS=\"nokmem\"\n<\/code><\/pre>\n<ul>\n<li>For kubelet v1.13 or earlier, we cannot add Build Tags when compiling kubelet. Instead, manually replace the <a href=\"https:\/\/github.com\/kubernetes\/kubernetes\/blob\/release-1.12\/vendor\/github.com\/opencontainers\/runc\/libcontainer\/cgroups\/fs\/memory.go#L70-L106\">two functions<\/a> that enable kmem accounting with <a href=\"https:\/\/github.com\/kubernetes\/kubernetes\/blob\/release-1.14\/vendor\/github.com\/opencontainers\/runc\/libcontainer\/cgroups\/fs\/kmem_disabled.go#L5-L11\">the following code<\/a>:<\/li>\n<\/ul>\n<pre><code>func EnableKernelMemoryAccounting(path string) error {\n return nil\n}\n<\/code><\/pre>\n<pre><code>func setKernelMemory(path string, kernelMemoryLimit int64) error {\n return nil\n}\n<\/code><\/pre>\n<p>Then recompile kubelet.<\/li>\n<li>Upgrade <code>docker-ce<\/code> to v18.09.1 or later. In these versions, kmem accounting of <code>runc<\/code> is disabled in Docker.<\/li>\n<li>Reboot the system.<\/li>\n<li>To verify whether the kmem accounting feature of all the containers is disabled in the newly created pod, run the following command:\n<pre><code>cat \/sys\/fs\/cgroup\/memory\/kubepods\/burstable\/pod&lt;pod-uid&gt;\/&lt;container-id&gt;\/memory.kmem.slabinfo\n<\/code><\/pre>\n<p>If the returned result is as follows, it means that the kmem accounting feature is disabled successfully:<\/p>\n<pre><code>&gt; cat: memory.kmem.slabinfo: Input\/output error\n<\/code><\/pre>\n<\/li>\n<\/ol>\n<h2><span class=\"ez-toc-section\" id=\"Bug_2_Network_device_reference_count_leak\"><\/span>Bug #2: Network device reference count leak<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><strong>Keyword:<\/strong> kernel:unregister_netdevice: waiting for eth0 to become free. Usage count = 1<\/p>\n<p><strong>Related issues in the community:<\/strong><\/p>\n<ul>\n<li><a href=\"https:\/\/github.com\/kubernetes\/kubernetes\/issues\/64743\">https:\/\/github.com\/kubernetes\/kubernetes\/issues\/64743<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/projectcalico\/calico\/issues\/1109\">https:\/\/github.com\/projectcalico\/calico\/issues\/1109<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/moby\/moby\/issues\/5618\">https:\/\/github.com\/moby\/moby\/issues\/5618<\/a><\/li>\n<\/ul>\n<p><!-- markdownlint-disable MD024 --><\/p>\n<h3>Issue description<\/h3>\n<p>After the K8s platform ran for a time, the following message was displayed: &#8220;Kernel:unregister_netdevice: waiting for eth0 to become free. Usage count = 1&#8221;. In addition, multiple processes would be in an uninterruptible state. The only workaround for this problem was to restart the server.<\/p>\n<h3>Issue analysis<\/h3>\n<p>We used the crash tool to analyze vmcore. We found that the <code>netdev_wait_allrefs<\/code> function blocked the kernel thread, and that the function was in an infinite loop waiting for <code>dev-&gt;refcnt<\/code> to drop to 0. Because the pod had been released, we suspected that this issue was due to a reference count leak. After analyzing K8s issues, we found that the kernel was the crux of the issue, but there was no simple, stable, and reliable method to reproduce the issue. Also, this issue still occurred in the later community version of the kernel.<\/p>\n<p>To avoid restarting the server every time this issue occurred, we developed a kernel module. When the <code>net_device<\/code> reference count was found to leak, this kernel module would be removed after the reference count was dropped to 0 (to avoid accidentally deleting other NICs that weren&#8217;t referenced by the leak). Besides, to avoid manual cleanup, we wrote a monitoring script that periodically automated this operation.<\/p>\n<p>However, this solution had the following defects:<\/p>\n<ul>\n<li>A delay existed between the starting time of the reference count leak and our discovering the leak via the monitoring system. In this delay, other problems might appear in the K8s system.<\/li>\n<li>It was difficult to judge whether a reference count leak issue existed in the kernel module. <code>netdev_wait_allrefs<\/code> would continually retry releasing the <code>NETDEV_UNREGISTER<\/code> \uadf8\ub9ac\uace0 <code>NETDEV_UNREGISTER_FINAL<\/code> messages to all message subscribers via notification chains. We traced this issue and found there were up to 22 subscribers. It was difficult to access the processing logic of all the callback functions registered by these subscribers and therefore difficult to decide whether we had a way to avoid misjudgement.<\/li>\n<\/ul>\n<h3>Solution<\/h3>\n<p>As we prepared to drill down into the callback function logic registered by each subscriber, we also followed up on the progress of kernel patches and RHEL. We found that <a href=\"https:\/\/access.redhat.com\/solutions\/3659011\">solutions:3659011<\/a> of RHEL had an update that mentioned a patch submitted by the upstream link: <a href=\"https:\/\/github.com\/torvalds\/linux\/commit\/ee60ad219f5c7c4fb2f047f88037770063ef785f\">route: set the deleted fnhe fnhe_daddr to 0 in ip_del_fnhe to fix a race<\/a>.<\/p>\n<p>We applied this patch to the kernel as a hotfix and tested for a week. The issue didn&#8217;t reappear. We reported our test information to RHEL, and they told us they&#8217;d started backporting the patch.<\/p>\n<h4>Operation steps<\/h4>\n<p>We recommend that you use CentOS 7.6 kernel-3.10.0-957 or later.<\/p>\n<ol>\n<li>Install <a href=\"https:\/\/github.com\/dynup\/kpatch\">kpatch<\/a> and kpatch-build dependencies:\n<pre><code>UNAME=$(uname -r)\nsudo yum install gcc kernel-devel-${UNAME%.*} elfutils elfutils-devel\nsudo yum install pesign yum-utils zlib-devel \n  binutils-devel newt-devel python-devel perl-ExtUtils-Embed \n  audit-libs audit-libs-devel numactl-devel pciutils-devel bison\n\n# enable CentOS 7 debug repo\nsudo yum-config-manager --enable debug\n\nsudo yum-builddep kernel-${UNAME%.*}\nsudo debuginfo-install kernel-${UNAME%.*}\n\n# optional, but highly recommended - enable EPEL 7\nsudo yum install ccache\nccache --max-size=5G\n<\/code><\/pre>\n<\/li>\n<li>Install <a href=\"https:\/\/github.com\/dynup\/kpatch\">kpatch<\/a> and kpatch-build:\n<pre><code>git clone https:\/\/github.com\/dynup\/kpatch &amp;&amp; cd kpatch\nmake\nsudo make install\nsystemctl enable kpatch\n<\/code><\/pre>\n<\/li>\n<li>Download and construct the hotfix kernel module:\n<pre><code>curl -SOL https:\/\/raw.githubusercontent.com\/pingcap\/kdt\/master\/kpatchs\/route.patch\nkpatch-build -t vmlinux route.patch (Compiles and generates the kernel module)\nmkdir -p \/var\/lib\/kpatch\/${UNAME}\ncp -a livepatch-route.ko \/var\/lib\/kpatch\/${UNAME}\nsystemctl restart kpatch (Loads the kernel module)\nkpatch list (Checks the loaded module)\n<\/code><\/pre>\n<\/li>\n<\/ol>\n<h2><span class=\"ez-toc-section\" id=\"Conclusion\"><\/span>Conclusion<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>We&#8217;ve fixed these kernel bugs expediently. However, there are more effective long-term solutions. For Bug #1, we hope that the K8s community can provide an argument for kubelet to allow users to disable or enable the kmem accounting feature.<\/p>\n<p>For Bug #2, the optimal solution is for RHEL and CentOS to fix the kernel bug. After TiDB users upgrade to a new version of CentOS, they won&#8217;t have to worry about this problem.<\/p>","protected":false},"excerpt":{"rendered":"<p>This post introduces how the EE team at PingCAP tackled two Linux kernel bugs while testing TiDB Operator in K8s. PingCAP engineers also hope the K8s community, RHEL and CentOS can help fix these bugs thoroughly in the near future.<\/p>","protected":false},"author":226,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"ub_ctt_via":"","footnotes":""},"categories":[6],"tags":[68,33,70],"class_list":["post-1441","post","type-post","status-publish","format-standard","hentry","category-engineering","tag-bug-fix","tag-kubernetes","tag-linux"],"acf":[],"featured_image_src":null,"author_info":{"display_name":"Wenbo Zhang","author_link":"https:\/\/www.pingcap.com\/ko\/blog\/author\/zhangwenbo\/"},"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.9 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Fix Two Linux Kernel Bugs While Testing TiDB Operator in K8s<\/title>\n<meta name=\"description\" content=\"The goal of this post is to inspire the K8s community, RHEL, and CentOS so that they can help fix these bugs thoroughly in the near future.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.pingcap.com\/ko\/blog\/try-to-fix-two-linux-kernel-bugs-while-testing-tidb-operator-in-k8s\/\" \/>\n<meta property=\"og:locale\" content=\"ko_KR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Fix Two Linux Kernel Bugs While Testing TiDB Operator in K8s\" \/>\n<meta property=\"og:description\" content=\"The goal of this post is to inspire the K8s community, RHEL, and CentOS so that they can help fix these bugs thoroughly in the near future.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.pingcap.com\/ko\/blog\/try-to-fix-two-linux-kernel-bugs-while-testing-tidb-operator-in-k8s\/\" \/>\n<meta property=\"og:site_name\" content=\"TiDB\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/facebook.com\/pingcap2015\" \/>\n<meta property=\"article:published_time\" content=\"2019-05-01T07:00:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-08-22T02:30:41+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/en.pingcap.com\/wp-content\/uploads\/2019\/05\/kernel-path-information-2.png\" \/>\n<meta name=\"author\" content=\"Wenbo Zhang\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@PingCAP\" \/>\n<meta name=\"twitter:site\" content=\"@PingCAP\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Wenbo Zhang\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"8\ubd84\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.pingcap.com\/blog\/try-to-fix-two-linux-kernel-bugs-while-testing-tidb-operator-in-k8s\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.pingcap.com\/blog\/try-to-fix-two-linux-kernel-bugs-while-testing-tidb-operator-in-k8s\/\"},\"author\":{\"name\":\"Wenbo Zhang\",\"@id\":\"https:\/\/www.pingcap.com\/#\/schema\/person\/3a46a13870b11ccb3f59734ca38ed634\"},\"headline\":\"Try to Fix Two Linux Kernel Bugs While Testing TiDB Operator in K8s\",\"datePublished\":\"2019-05-01T07:00:00+00:00\",\"dateModified\":\"2024-08-22T02:30:41+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.pingcap.com\/blog\/try-to-fix-two-linux-kernel-bugs-while-testing-tidb-operator-in-k8s\/\"},\"wordCount\":1448,\"publisher\":{\"@id\":\"https:\/\/www.pingcap.com\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.pingcap.com\/blog\/try-to-fix-two-linux-kernel-bugs-while-testing-tidb-operator-in-k8s\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/en.pingcap.com\/wp-content\/uploads\/2019\/05\/kernel-path-information-2.png\",\"keywords\":[\"Bug Fix\",\"Kubernetes\",\"Linux\"],\"articleSection\":[\"Engineering\"],\"inLanguage\":\"ko-KR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.pingcap.com\/blog\/try-to-fix-two-linux-kernel-bugs-while-testing-tidb-operator-in-k8s\/\",\"url\":\"https:\/\/www.pingcap.com\/blog\/try-to-fix-two-linux-kernel-bugs-while-testing-tidb-operator-in-k8s\/\",\"name\":\"Fix Two Linux Kernel Bugs While Testing TiDB Operator in K8s\",\"isPartOf\":{\"@id\":\"https:\/\/www.pingcap.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.pingcap.com\/blog\/try-to-fix-two-linux-kernel-bugs-while-testing-tidb-operator-in-k8s\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.pingcap.com\/blog\/try-to-fix-two-linux-kernel-bugs-while-testing-tidb-operator-in-k8s\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/en.pingcap.com\/wp-content\/uploads\/2019\/05\/kernel-path-information-2.png\",\"datePublished\":\"2019-05-01T07:00:00+00:00\",\"dateModified\":\"2024-08-22T02:30:41+00:00\",\"description\":\"The goal of this post is to inspire the K8s community, RHEL, and CentOS so that they can help fix these bugs thoroughly in the near future.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.pingcap.com\/blog\/try-to-fix-two-linux-kernel-bugs-while-testing-tidb-operator-in-k8s\/#breadcrumb\"},\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.pingcap.com\/blog\/try-to-fix-two-linux-kernel-bugs-while-testing-tidb-operator-in-k8s\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/www.pingcap.com\/blog\/try-to-fix-two-linux-kernel-bugs-while-testing-tidb-operator-in-k8s\/#primaryimage\",\"url\":\"https:\/\/en.pingcap.com\/wp-content\/uploads\/2019\/05\/kernel-path-information-2.png\",\"contentUrl\":\"https:\/\/en.pingcap.com\/wp-content\/uploads\/2019\/05\/kernel-path-information-2.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.pingcap.com\/blog\/try-to-fix-two-linux-kernel-bugs-while-testing-tidb-operator-in-k8s\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.pingcap.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Try to Fix Two Linux Kernel Bugs While Testing TiDB Operator in K8s\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.pingcap.com\/#website\",\"url\":\"https:\/\/www.pingcap.com\/\",\"name\":\"TiDB\",\"description\":\"TiDB | SQL at Scale\",\"publisher\":{\"@id\":\"https:\/\/www.pingcap.com\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.pingcap.com\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"ko-KR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.pingcap.com\/#organization\",\"name\":\"PingCAP\",\"url\":\"https:\/\/www.pingcap.com\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/www.pingcap.com\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/static.pingcap.com\/files\/2021\/11\/pingcap-logo.png\",\"contentUrl\":\"https:\/\/static.pingcap.com\/files\/2021\/11\/pingcap-logo.png\",\"width\":811,\"height\":232,\"caption\":\"PingCAP\"},\"image\":{\"@id\":\"https:\/\/www.pingcap.com\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/facebook.com\/pingcap2015\",\"https:\/\/x.com\/PingCAP\",\"https:\/\/linkedin.com\/company\/pingcap\",\"https:\/\/youtube.com\/channel\/UCuq4puT32DzHKT5rU1IZpIA\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.pingcap.com\/#\/schema\/person\/3a46a13870b11ccb3f59734ca38ed634\",\"name\":\"Wenbo Zhang\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/www.pingcap.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/static.pingcap.com\/files\/2022\/10\/17234942\/avatar.jpg\",\"contentUrl\":\"https:\/\/static.pingcap.com\/files\/2022\/10\/17234942\/avatar.jpg\",\"caption\":\"Wenbo Zhang\"},\"description\":\"Linux Kernel Engineer\",\"url\":\"https:\/\/www.pingcap.com\/ko\/blog\/author\/zhangwenbo\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Fix Two Linux Kernel Bugs While Testing TiDB Operator in K8s","description":"The goal of this post is to inspire the K8s community, RHEL, and CentOS so that they can help fix these bugs thoroughly in the near future.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.pingcap.com\/ko\/blog\/try-to-fix-two-linux-kernel-bugs-while-testing-tidb-operator-in-k8s\/","og_locale":"ko_KR","og_type":"article","og_title":"Fix Two Linux Kernel Bugs While Testing TiDB Operator in K8s","og_description":"The goal of this post is to inspire the K8s community, RHEL, and CentOS so that they can help fix these bugs thoroughly in the near future.","og_url":"https:\/\/www.pingcap.com\/ko\/blog\/try-to-fix-two-linux-kernel-bugs-while-testing-tidb-operator-in-k8s\/","og_site_name":"TiDB","article_publisher":"https:\/\/facebook.com\/pingcap2015","article_published_time":"2019-05-01T07:00:00+00:00","article_modified_time":"2024-08-22T02:30:41+00:00","og_image":[{"url":"https:\/\/en.pingcap.com\/wp-content\/uploads\/2019\/05\/kernel-path-information-2.png","type":"","width":"","height":""}],"author":"Wenbo Zhang","twitter_card":"summary_large_image","twitter_creator":"@PingCAP","twitter_site":"@PingCAP","twitter_misc":{"Written by":"Wenbo Zhang","Est. reading time":"8\ubd84"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.pingcap.com\/blog\/try-to-fix-two-linux-kernel-bugs-while-testing-tidb-operator-in-k8s\/#article","isPartOf":{"@id":"https:\/\/www.pingcap.com\/blog\/try-to-fix-two-linux-kernel-bugs-while-testing-tidb-operator-in-k8s\/"},"author":{"name":"Wenbo Zhang","@id":"https:\/\/www.pingcap.com\/#\/schema\/person\/3a46a13870b11ccb3f59734ca38ed634"},"headline":"Try to Fix Two Linux Kernel Bugs While Testing TiDB Operator in K8s","datePublished":"2019-05-01T07:00:00+00:00","dateModified":"2024-08-22T02:30:41+00:00","mainEntityOfPage":{"@id":"https:\/\/www.pingcap.com\/blog\/try-to-fix-two-linux-kernel-bugs-while-testing-tidb-operator-in-k8s\/"},"wordCount":1448,"publisher":{"@id":"https:\/\/www.pingcap.com\/#organization"},"image":{"@id":"https:\/\/www.pingcap.com\/blog\/try-to-fix-two-linux-kernel-bugs-while-testing-tidb-operator-in-k8s\/#primaryimage"},"thumbnailUrl":"https:\/\/en.pingcap.com\/wp-content\/uploads\/2019\/05\/kernel-path-information-2.png","keywords":["Bug Fix","Kubernetes","Linux"],"articleSection":["Engineering"],"inLanguage":"ko-KR"},{"@type":"WebPage","@id":"https:\/\/www.pingcap.com\/blog\/try-to-fix-two-linux-kernel-bugs-while-testing-tidb-operator-in-k8s\/","url":"https:\/\/www.pingcap.com\/blog\/try-to-fix-two-linux-kernel-bugs-while-testing-tidb-operator-in-k8s\/","name":"Fix Two Linux Kernel Bugs While Testing TiDB Operator in K8s","isPartOf":{"@id":"https:\/\/www.pingcap.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.pingcap.com\/blog\/try-to-fix-two-linux-kernel-bugs-while-testing-tidb-operator-in-k8s\/#primaryimage"},"image":{"@id":"https:\/\/www.pingcap.com\/blog\/try-to-fix-two-linux-kernel-bugs-while-testing-tidb-operator-in-k8s\/#primaryimage"},"thumbnailUrl":"https:\/\/en.pingcap.com\/wp-content\/uploads\/2019\/05\/kernel-path-information-2.png","datePublished":"2019-05-01T07:00:00+00:00","dateModified":"2024-08-22T02:30:41+00:00","description":"The goal of this post is to inspire the K8s community, RHEL, and CentOS so that they can help fix these bugs thoroughly in the near future.","breadcrumb":{"@id":"https:\/\/www.pingcap.com\/blog\/try-to-fix-two-linux-kernel-bugs-while-testing-tidb-operator-in-k8s\/#breadcrumb"},"inLanguage":"ko-KR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.pingcap.com\/blog\/try-to-fix-two-linux-kernel-bugs-while-testing-tidb-operator-in-k8s\/"]}]},{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/www.pingcap.com\/blog\/try-to-fix-two-linux-kernel-bugs-while-testing-tidb-operator-in-k8s\/#primaryimage","url":"https:\/\/en.pingcap.com\/wp-content\/uploads\/2019\/05\/kernel-path-information-2.png","contentUrl":"https:\/\/en.pingcap.com\/wp-content\/uploads\/2019\/05\/kernel-path-information-2.png"},{"@type":"BreadcrumbList","@id":"https:\/\/www.pingcap.com\/blog\/try-to-fix-two-linux-kernel-bugs-while-testing-tidb-operator-in-k8s\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.pingcap.com\/"},{"@type":"ListItem","position":2,"name":"Try to Fix Two Linux Kernel Bugs While Testing TiDB Operator in K8s"}]},{"@type":"WebSite","@id":"https:\/\/www.pingcap.com\/#website","url":"https:\/\/www.pingcap.com\/","name":"\ud2f0DB","description":"TiDB | SQL at Scale","publisher":{"@id":"https:\/\/www.pingcap.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.pingcap.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"ko-KR"},{"@type":"Organization","@id":"https:\/\/www.pingcap.com\/#organization","name":"PingCAP","url":"https:\/\/www.pingcap.com\/","logo":{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/www.pingcap.com\/#\/schema\/logo\/image\/","url":"https:\/\/static.pingcap.com\/files\/2021\/11\/pingcap-logo.png","contentUrl":"https:\/\/static.pingcap.com\/files\/2021\/11\/pingcap-logo.png","width":811,"height":232,"caption":"PingCAP"},"image":{"@id":"https:\/\/www.pingcap.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/facebook.com\/pingcap2015","https:\/\/x.com\/PingCAP","https:\/\/linkedin.com\/company\/pingcap","https:\/\/youtube.com\/channel\/UCuq4puT32DzHKT5rU1IZpIA"]},{"@type":"Person","@id":"https:\/\/www.pingcap.com\/#\/schema\/person\/3a46a13870b11ccb3f59734ca38ed634","name":"Wenbo Zhang","image":{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/www.pingcap.com\/#\/schema\/person\/image\/","url":"https:\/\/static.pingcap.com\/files\/2022\/10\/17234942\/avatar.jpg","contentUrl":"https:\/\/static.pingcap.com\/files\/2022\/10\/17234942\/avatar.jpg","caption":"Wenbo Zhang"},"description":"Linux Kernel Engineer","url":"https:\/\/www.pingcap.com\/ko\/blog\/author\/zhangwenbo\/"}]}},"grav_blocks":false,"card_markup":"<a class=\"card-resource bg-white\" href=\"https:\/\/www.pingcap.com\/ko\/blog\/try-to-fix-two-linux-kernel-bugs-while-testing-tidb-operator-in-k8s\/\"><div class=\"card-resource__content-container\"><div class=\"card-resource__content-head\"><div class=\"card-resource__category\">Engineering<\/div><\/div><h5 class=\"card-resource__title\">Try to Fix Two Linux Kernel Bugs While Testing TiDB Operator in K8s<\/h5><\/div><\/a>","_links":{"self":[{"href":"https:\/\/www.pingcap.com\/ko\/wp-json\/wp\/v2\/posts\/1441","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.pingcap.com\/ko\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.pingcap.com\/ko\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.pingcap.com\/ko\/wp-json\/wp\/v2\/users\/226"}],"replies":[{"embeddable":true,"href":"https:\/\/www.pingcap.com\/ko\/wp-json\/wp\/v2\/comments?post=1441"}],"version-history":[{"count":4,"href":"https:\/\/www.pingcap.com\/ko\/wp-json\/wp\/v2\/posts\/1441\/revisions"}],"predecessor-version":[{"id":19041,"href":"https:\/\/www.pingcap.com\/ko\/wp-json\/wp\/v2\/posts\/1441\/revisions\/19041"}],"wp:attachment":[{"href":"https:\/\/www.pingcap.com\/ko\/wp-json\/wp\/v2\/media?parent=1441"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.pingcap.com\/ko\/wp-json\/wp\/v2\/categories?post=1441"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.pingcap.com\/ko\/wp-json\/wp\/v2\/tags?post=1441"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}