Files
nexus/sreweekly/articles/225/04-the-impact-of-slow-nfs-on-data-systems.html
2026-09-12 17:23:01 +08:00

1482 lines
86 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html lang="en">
<head>
<meta name="pageKey" content="d_lithograph_content">
<!----><!----><!----> <meta name="locale" content="en_US">
<!----> <meta id="config" data-app-id="lithograph" data-app-version="0.0.2138" data-call-tree-id="AAZbPov4jOlrH8YlI8H/mA==" data-multiproduct-name="lithograph-publish-frontend" data-service-name="lithograph-publish-frontend" data-browser-id="0ce80d1f-6dae-4101-85df-5be0ec04c551" data-is-bot="false" data-page-instance="urn:li:page:d_lithograph_content;AYGipNZbQIqjPMseCGtcJg==" data-disable-jsbeacon-pagekey-suffix="false" data-dna-member-lix-treatment="control" data-human-member-lix-treatment="control" data-dfp-member-lix-treatment="control" data-sync-apfc-headers-lix-treatment="control" data-sync-apfc-cb-lix-treatment="control" data-recaptcha-v3-integration-lix-value="control" data-network-interceptor-lix-value="control" data-is-epd-audit-event-enabled="false" data-is-feed-sponsored-tracking-kill-switch-enabled="false" data-sequence-auto-redirect-before-request-enabled="true">
<link rel="canonical" href="https://www.linkedin.com/blog/engineering/data-management/the-impact-of-slow-nfs-on-data-systems">
<!----><!---->
<!---->
<!---->
<!---->
<!---->
<link rel="icon" href="https://static.licdn.com/aero-v1/sc/h/al2o9zrvru7aqj8e1x2rzsrca">
<script>
function getDfd() {let yFn,nFn;const p=new Promise(function(y, n){yFn=y;nFn=n;});p.resolve=yFn;p.reject=nFn;return p;}
window.lazyloader = getDfd();
window.tracking = getDfd();
window.impressionTracking = getDfd();
window.ingraphTracking = getDfd();
window.appDetection = getDfd();
window.pemTracking = getDfd();
window.appRedirectCompleted = getDfd();
</script>
<!---->
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>The impact of slow NFS on data systems</title>
<!---->
<meta property="og:type" content="website">
<meta property="og:title" content="The impact of slow NFS on data systems">
<!---->
<meta property="og:url" content="https://www.linkedin.com/blog/engineering/data-management/the-impact-of-slow-nfs-on-data-systems">
<meta property="og:image" content="https://media.licdn.com/dms/image/v2/D4D08AQFnQcPepeYy8w/croft-frontend-shrinkToFit1024/croft-frontend-shrinkToFit1024/0/1700684146773?e=2147483647&amp;v=beta&amp;t=XJD_B9NC2d_Ecr1Tt9Dll3BV8HUeto0T67d5hNS3Lqs">
<meta name="twitter:title" content="The impact of slow NFS on data systems">
<meta name="twitter:site" content="@linkedin">
<!---->
<!---->
<meta name="robots" content="noarchive">
<meta name="linkedin:pageTag" content="/blog/engineering/data-management/the-impact-of-slow-nfs-on-data-systems">
<meta name="litmsProfileName" content="lithograph">
<!----> <meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="asset-url" id="artdeco/static/images/icons.svg" content="https://static.licdn.com/aero-v1/sc/h/6sz1e821vgereyxaakx87tt4z ">
<link rel="stylesheet" href="https://static.licdn.com/aero-v1/sc/h/lbz6744ddd0wsc02ey2a3dhx">
<!---->
<!----> </head>
<body dir="ltr">
<!---->
<a href="#lithograph-app" class="skip-link btn-md btn-primary absolute z-11 -top-[100vh] focus:top-0">
Skip to main content
</a>
<!---->
<div class="page-header__wrapper page-header__wrapper--margin" data-custom-nav-wrapper="true">
<div class="page-header__container">
<header id="page-header" class="page-header page-header--hide-dropshadow">
<div class="page-header__content-container">
<div class="header__logo">
<a href="https://www.linkedin.com/blog/engineering" class="custom-nav__logo-link">
<img class="header__linkedin-logo header__full-logo" src="https://static.licdn.com/aero-v1/sc/h/6zm111mce7vohqze950ilreo4" alt="LinkedIn Logo">
<img class="header__linkedin-logo header__in-bug" src="https://static.licdn.com/aero-v1/sc/h/5g0hjlcng3j5pgn50n2et1ca2" alt="LinkedIn Logo">
<span class="t-17 t-black t-bold default-header-title">
Engineering Blog
</span>
</a>
</div>
<!---->
<!---->
<button class="stripped header__expand-nav-button" data-mobile-header-navigation-button data-header-expand-navigation-button aria-expanded="false">
<li-icon class="header__expand-nav-icon" a11y-text="Open navigation" type="hamburger-icon"></li-icon>
</button>
<button class="stripped header__expand-nav-button hidden" data-mobile-header-navigation-button data-header-collapse-navigation-button aria-expanded="false">
<li-icon class="header__expand-nav-icon" a11y-text="Close navigation" type="cancel-icon"></li-icon>
</button>
</div>
</header>
</div>
<nav class="header-nav fixed" aria-label="main" data-header-navigation>
<ul class="header-nav__list">
<li>
<div class="artdeco-dropdown">
<div class="artdeco-dropdown__trigger">
<a href="https://www.linkedin.com/blog/engineering/data" class="t-sans t-black--light t-semibold header-nav__toplink" target="_self">
Data
</a>
<button class="header-navigation__button" aria-label="Expand to show more links for Data" aria-expanded="false" data-trigger-dropdown-menu type="button">
<li-icon size="small" type="caret-filled-down-icon"></li-icon>
</button>
<div class="artdeco-dropdown__content header-nav__dropdown-offset">
<ul>
<li>
<div class="artdeco-dropdown__item">
<a href="https://www.linkedin.com/blog/engineering/graph-systems" class="t-14 t-sans t-black t-bold header-nav__link" target="_self">Graph System</a>
</div>
</li>
<li>
<div class="artdeco-dropdown__item">
<a href="https://www.linkedin.com/blog/engineering/economic-graph" class="t-14 t-sans t-black t-bold header-nav__link" target="_self">Economic Graph</a>
</div>
</li>
<li>
<div class="artdeco-dropdown__item">
<a href="https://www.linkedin.com/blog/engineering/skills-graph" class="t-14 t-sans t-black t-bold header-nav__link" target="_self">Skills Graph</a>
</div>
</li>
<li>
<div class="artdeco-dropdown__item">
<a href="https://www.linkedin.com/blog/engineering/knowledge" class="t-14 t-sans t-black t-bold header-nav__link" target="_self">Knowledge Graph</a>
</div>
</li>
<li>
<div class="artdeco-dropdown__item">
<a href="https://www.linkedin.com/blog/engineering/data-management" class="t-14 t-sans t-black t-bold header-nav__link" target="_self">Data Management</a>
</div>
</li>
<li>
<div class="artdeco-dropdown__item">
<a href="https://www.linkedin.com/blog/engineering/data-streaming-processing" class="t-14 t-sans t-black t-bold header-nav__link" target="_self">Data Streams/Processing</a>
</div>
</li>
<li>
<div class="artdeco-dropdown__item">
<a href="https://www.linkedin.com/blog/engineering/data-science" class="t-14 t-sans t-black t-bold header-nav__link" target="_self">Data Science</a>
</div>
</li>
<li>
<div class="artdeco-dropdown__item">
<a href="https://www.linkedin.com/blog/engineering/research" class="t-14 t-sans t-black t-bold header-nav__link" target="_self">Research</a>
</div>
</li>
<li>
<div class="artdeco-dropdown__item">
<a href="https://www.linkedin.com/blog/engineering/ab-testing-experimentation" class="t-14 t-sans t-black t-bold header-nav__link" target="_self">A/B Testing/Experimentation</a>
</div>
</li>
</ul>
</div>
</div>
</div>
</li>
<li>
<div class="artdeco-dropdown">
<div class="artdeco-dropdown__trigger">
<a href="https://www.linkedin.com/blog/engineering/artificial-intelligence" class="t-sans t-black--light t-semibold header-nav__toplink" target="_self">
AI
</a>
<button class="header-navigation__button" aria-label="Expand to show more links for AI" aria-expanded="false" data-trigger-dropdown-menu type="button">
<li-icon size="small" type="caret-filled-down-icon"></li-icon>
</button>
<div class="artdeco-dropdown__content header-nav__dropdown-offset">
<ul>
<li>
<div class="artdeco-dropdown__item">
<a href="https://www.linkedin.com/blog/engineering/machine-learning" class="t-14 t-sans t-black t-bold header-nav__link" target="_self">Machine Learning</a>
</div>
</li>
<li>
<div class="artdeco-dropdown__item">
<a href="https://www.linkedin.com/blog/engineering/natural-language-processing" class="t-14 t-sans t-black t-bold header-nav__link" target="_self">Natural Language Processing</a>
</div>
</li>
<li>
<div class="artdeco-dropdown__item">
<a href="https://www.linkedin.com/blog/engineering/generative-ai" class="t-14 t-sans t-black t-bold header-nav__link" target="_self">Generative AI</a>
</div>
</li>
<li>
<div class="artdeco-dropdown__item">
<a href="https://www.linkedin.com/blog/engineering/data-modeling" class="t-14 t-sans t-black t-bold header-nav__link" target="_self">Data Modeling</a>
</div>
</li>
<li>
<div class="artdeco-dropdown__item">
<a href="https://www.linkedin.com/blog/engineering/responsible-ai" class="t-14 t-sans t-black t-bold header-nav__link" target="_self">Responsible AI</a>
</div>
</li>
</ul>
</div>
</div>
</div>
</li>
<li>
<div class="artdeco-dropdown">
<div class="artdeco-dropdown__trigger">
<a href="https://www.linkedin.com/blog/engineering/trust-and-safety" class="t-sans t-black--light t-semibold header-nav__toplink" target="_self">
Trust & Safety
</a>
<button class="header-navigation__button" aria-label="Expand to show more links for Trust &amp;amp; Safety" aria-expanded="false" data-trigger-dropdown-menu type="button">
<li-icon size="small" type="caret-filled-down-icon"></li-icon>
</button>
<div class="artdeco-dropdown__content header-nav__dropdown-offset">
<ul>
<li>
<div class="artdeco-dropdown__item">
<a href="https://www.linkedin.com/blog/engineering/fairness" class="t-14 t-sans t-black t-bold header-nav__link" target="_self">Fairness</a>
</div>
</li>
<li>
<div class="artdeco-dropdown__item">
<a href="https://www.linkedin.com/blog/engineering/verification" class="t-14 t-sans t-black t-bold header-nav__link" target="_self">Verification </a>
</div>
</li>
<li>
<div class="artdeco-dropdown__item">
<a href="https://www.linkedin.com/blog/engineering/security" class="t-14 t-sans t-black t-bold header-nav__link" target="_self">Security</a>
</div>
</li>
</ul>
</div>
</div>
</div>
</li>
<li>
<div class="artdeco-dropdown">
<div class="artdeco-dropdown__trigger">
<a href="https://www.linkedin.com/blog/engineering/product-design" class="t-sans t-black--light t-semibold header-nav__toplink" target="_self">
Product Design
</a>
<button class="header-navigation__button" aria-label="Expand to show more links for Product Design" aria-expanded="false" data-trigger-dropdown-menu type="button">
<li-icon size="small" type="caret-filled-down-icon"></li-icon>
</button>
<div class="artdeco-dropdown__content header-nav__dropdown-offset">
<ul>
<li>
<div class="artdeco-dropdown__item">
<a href="https://www.linkedin.com/blog/engineering/marketing" class="t-14 t-sans t-black t-bold header-nav__link" target="_self">Marketing </a>
</div>
</li>
<li>
<div class="artdeco-dropdown__item">
<a href="https://www.linkedin.com/blog/engineering/sales" class="t-14 t-sans t-black t-bold header-nav__link" target="_self">Sales</a>
</div>
</li>
<li>
<div class="artdeco-dropdown__item">
<a href="https://www.linkedin.com/blog/engineering/learning" class="t-14 t-sans t-black t-bold header-nav__link" target="_self">Learning</a>
</div>
</li>
<li>
<div class="artdeco-dropdown__item">
<a href="https://www.linkedin.com/blog/engineering/hiring" class="t-14 t-sans t-black t-bold header-nav__link" target="_self">Hiring</a>
</div>
</li>
<li>
<div class="artdeco-dropdown__item">
<a href="https://www.linkedin.com/blog/engineering/profile" class="t-14 t-sans t-black t-bold header-nav__link" target="_self">Profile</a>
</div>
</li>
<li>
<div class="artdeco-dropdown__item">
<a href="https://www.linkedin.com/blog/engineering/messaging-notifications" class="t-14 t-sans t-black t-bold header-nav__link" target="_self">Messaging/Notifications</a>
</div>
</li>
<li>
<div class="artdeco-dropdown__item">
<a href="https://www.linkedin.com/blog/engineering/feed" class="t-14 t-sans t-black t-bold header-nav__link" target="_self">Feed</a>
</div>
</li>
<li>
<div class="artdeco-dropdown__item">
<a href="https://www.linkedin.com/blog/engineering/profile" class="t-14 t-sans t-black t-bold header-nav__link" target="_self">Profile</a>
</div>
</li>
<li>
<div class="artdeco-dropdown__item">
<a href="https://www.linkedin.com/blog/engineering/groups" class="t-14 t-sans t-black t-bold header-nav__link" target="_self">Groups</a>
</div>
</li>
<li>
<div class="artdeco-dropdown__item">
<a href="https://www.linkedin.com/blog/engineering/accessibility" class="t-14 t-sans t-black t-bold header-nav__link" target="_self">Accessibility</a>
</div>
</li>
<li>
<div class="artdeco-dropdown__item">
<a href="https://www.linkedin.com/blog/engineering/member-customer-experience" class="t-14 t-sans t-black t-bold header-nav__link" target="_self">Member/Customer Experience</a>
</div>
</li>
<li>
<div class="artdeco-dropdown__item">
<a href="https://www.linkedin.com/blog/engineering/search" class="t-14 t-sans t-black t-bold header-nav__link" target="_self">Search</a>
</div>
</li>
<li>
<div class="artdeco-dropdown__item">
<a href="https://www.linkedin.com/blog/engineering/recommendations" class="t-14 t-sans t-black t-bold header-nav__link" target="_self">Recommendations</a>
</div>
</li>
<li>
<div class="artdeco-dropdown__item">
<a href="https://www.linkedin.com/blog/engineering/skills" class="t-14 t-sans t-black t-bold header-nav__link" target="_self">Skills</a>
</div>
</li>
</ul>
</div>
</div>
</div>
</li>
<li>
<div class="artdeco-dropdown">
<div class="artdeco-dropdown__trigger">
<a href="https://www.linkedin.com/blog/engineering/infrastructure" class="t-sans t-black--light t-semibold header-nav__toplink" target="_self">
Infrastructure
</a>
<button class="header-navigation__button" aria-label="Expand to show more links for Infrastructure" aria-expanded="false" data-trigger-dropdown-menu type="button">
<li-icon size="small" type="caret-filled-down-icon"></li-icon>
</button>
<div class="artdeco-dropdown__content header-nav__dropdown-offset">
<ul>
<li>
<div class="artdeco-dropdown__item">
<a href="https://www.linkedin.com/blog/engineering/code" class="t-14 t-sans t-black t-bold header-nav__link" target="_self">Code</a>
</div>
</li>
<li>
<div class="artdeco-dropdown__item">
<a href="https://www.linkedin.com/blog/engineering/scalability" class="t-14 t-sans t-black t-bold header-nav__link" target="_self">Scalability</a>
</div>
</li>
<li>
<div class="artdeco-dropdown__item">
<a href="https://www.linkedin.com/blog/engineering/distributed-systems" class="t-14 t-sans t-black t-bold header-nav__link" target="_self">Distributed Systems</a>
</div>
</li>
<li>
<div class="artdeco-dropdown__item">
<a href="https://www.linkedin.com/blog/engineering/graph-systems" class="t-14 t-sans t-black t-bold header-nav__link" target="_self">Graph Systems</a>
</div>
</li>
<li>
<div class="artdeco-dropdown__item">
<a href="https://www.linkedin.com/blog/engineering/architecture" class="t-14 t-sans t-black t-bold header-nav__link" target="_self">Architecture</a>
</div>
</li>
<li>
<div class="artdeco-dropdown__item">
<a href="https://www.linkedin.com/blog/engineering/analytics" class="t-14 t-sans t-black t-bold header-nav__link" target="_self">Analytics</a>
</div>
</li>
<li>
<div class="artdeco-dropdown__item">
<a href="https://www.linkedin.com/blog/engineering/automation" class="t-14 t-sans t-black t-bold header-nav__link" target="_self">Automation</a>
</div>
</li>
<li>
<div class="artdeco-dropdown__item">
<a href="https://www.linkedin.com/blog/engineering/platform-platformization" class="t-14 t-sans t-black t-bold header-nav__link" target="_self">Platforms/Platformization</a>
</div>
</li>
<li>
<div class="artdeco-dropdown__item">
<a href="https://www.linkedin.com/blog/engineering/cloud-computing" class="t-14 t-sans t-black t-bold header-nav__link" target="_self">Cloud Computing</a>
</div>
</li>
<li>
<div class="artdeco-dropdown__item">
<a href="https://www.linkedin.com/blog/engineering/open-source" class="t-14 t-sans t-black t-bold header-nav__link" target="_self">Open Source</a>
</div>
</li>
<li>
<div class="artdeco-dropdown__item">
<a href="https://www.linkedin.com/blog/engineering/additional-innovations" class="t-14 t-sans t-black t-bold header-nav__link" target="_self">Additional Innovations</a>
</div>
</li>
</ul>
</div>
</div>
</div>
</li>
<li>
<div class="artdeco-dropdown">
<div class="artdeco-dropdown__trigger">
<a href="https://www.linkedin.com/blog/engineering/talent" class="t-sans t-black--light t-semibold header-nav__toplink" target="_self">
Talent
</a>
<button class="header-navigation__button" aria-label="Expand to show more links for Talent" aria-expanded="false" data-trigger-dropdown-menu type="button">
<li-icon size="small" type="caret-filled-down-icon"></li-icon>
</button>
<div class="artdeco-dropdown__content header-nav__dropdown-offset">
<ul>
<li>
<div class="artdeco-dropdown__item">
<a href="https://www.linkedin.com/blog/engineering/culture" class="t-14 t-sans t-black t-bold header-nav__link" target="_self">Culture</a>
</div>
</li>
<li>
<div class="artdeco-dropdown__item">
<a href="https://www.linkedin.com/blog/engineering/developer-experience-productivity" class="t-14 t-sans t-black t-bold header-nav__link" target="_self">Developer Experience/Productivity</a>
</div>
</li>
<li>
<div class="artdeco-dropdown__item">
<a href="https://www.linkedin.com/blog/engineering/leadership" class="t-14 t-sans t-black t-bold header-nav__link" target="_self">Leadership</a>
</div>
</li>
</ul>
</div>
</div>
</div>
</li>
</ul>
</nav>
<nav class="custom-header__nav--mobile invisible" data-mobile-navigation="true" aria-label="main">
<ul class="custom-header__list--mobile">
<li class="custom-header__list-item--mobile" data-mobile-navigation-list-item="true">
<a href="https://www.linkedin.com/blog/engineering/data" class="t-16 t-sans t-black t-semibold header-nav__toplink" target="_self">
Data
</a>
<button class="header-navigation__button" aria-label="Expand to show more links for Data" aria-expanded="false" data-label-expand="Expand to show more links for Data" data-label-collapse="Collapse to show less links for Data" data-mobile-dropdown-trigger type="button">
<li-icon size="small" type="chevron-down-icon"></li-icon>
</button>
<ul class="custom-header__dropdownlink-list--mobile hidden" data-dropdownlinks-list="true">
<li>
<a href="https://www.linkedin.com/blog/engineering/graph-systems" class="t-sans t-black t-normal header-nav__link" target="_self">Graph System</a>
</li>
<li>
<a href="https://www.linkedin.com/blog/engineering/economic-graph" class="t-sans t-black t-normal header-nav__link" target="_self">Economic Graph</a>
</li>
<li>
<a href="https://www.linkedin.com/blog/engineering/skills-graph" class="t-sans t-black t-normal header-nav__link" target="_self">Skills Graph</a>
</li>
<li>
<a href="https://www.linkedin.com/blog/engineering/knowledge" class="t-sans t-black t-normal header-nav__link" target="_self">Knowledge Graph</a>
</li>
<li>
<a href="https://www.linkedin.com/blog/engineering/data-management" class="t-sans t-black t-normal header-nav__link" target="_self">Data Management</a>
</li>
<li>
<a href="https://www.linkedin.com/blog/engineering/data-streaming-processing" class="t-sans t-black t-normal header-nav__link" target="_self">Data Streams/Processing</a>
</li>
<li>
<a href="https://www.linkedin.com/blog/engineering/data-science" class="t-sans t-black t-normal header-nav__link" target="_self">Data Science</a>
</li>
<li>
<a href="https://www.linkedin.com/blog/engineering/research" class="t-sans t-black t-normal header-nav__link" target="_self">Research</a>
</li>
<li>
<a href="https://www.linkedin.com/blog/engineering/ab-testing-experimentation" class="t-sans t-black t-normal header-nav__link" target="_self">A/B Testing/Experimentation</a>
</li>
</ul>
</li>
<li class="custom-header__list-item--mobile" data-mobile-navigation-list-item="true">
<a href="https://www.linkedin.com/blog/engineering/artificial-intelligence" class="t-16 t-sans t-black t-semibold header-nav__toplink" target="_self">
AI
</a>
<button class="header-navigation__button" aria-label="Expand to show more links for AI" aria-expanded="false" data-label-expand="Expand to show more links for AI" data-label-collapse="Collapse to show less links for AI" data-mobile-dropdown-trigger type="button">
<li-icon size="small" type="chevron-down-icon"></li-icon>
</button>
<ul class="custom-header__dropdownlink-list--mobile hidden" data-dropdownlinks-list="true">
<li>
<a href="https://www.linkedin.com/blog/engineering/machine-learning" class="t-sans t-black t-normal header-nav__link" target="_self">Machine Learning</a>
</li>
<li>
<a href="https://www.linkedin.com/blog/engineering/natural-language-processing" class="t-sans t-black t-normal header-nav__link" target="_self">Natural Language Processing</a>
</li>
<li>
<a href="https://www.linkedin.com/blog/engineering/generative-ai" class="t-sans t-black t-normal header-nav__link" target="_self">Generative AI</a>
</li>
<li>
<a href="https://www.linkedin.com/blog/engineering/data-modeling" class="t-sans t-black t-normal header-nav__link" target="_self">Data Modeling</a>
</li>
<li>
<a href="https://www.linkedin.com/blog/engineering/responsible-ai" class="t-sans t-black t-normal header-nav__link" target="_self">Responsible AI</a>
</li>
</ul>
</li>
<li class="custom-header__list-item--mobile" data-mobile-navigation-list-item="true">
<a href="https://www.linkedin.com/blog/engineering/trust-and-safety" class="t-16 t-sans t-black t-semibold header-nav__toplink" target="_self">
Trust &amp; Safety
</a>
<button class="header-navigation__button" aria-label="Expand to show more links for Trust &amp;amp; Safety" aria-expanded="false" data-label-expand="Expand to show more links for Trust &amp;amp; Safety" data-label-collapse="Collapse to show less links for Trust &amp;amp; Safety" data-mobile-dropdown-trigger type="button">
<li-icon size="small" type="chevron-down-icon"></li-icon>
</button>
<ul class="custom-header__dropdownlink-list--mobile hidden" data-dropdownlinks-list="true">
<li>
<a href="https://www.linkedin.com/blog/engineering/fairness" class="t-sans t-black t-normal header-nav__link" target="_self">Fairness</a>
</li>
<li>
<a href="https://www.linkedin.com/blog/engineering/verification" class="t-sans t-black t-normal header-nav__link" target="_self">Verification </a>
</li>
<li>
<a href="https://www.linkedin.com/blog/engineering/security" class="t-sans t-black t-normal header-nav__link" target="_self">Security</a>
</li>
</ul>
</li>
<li class="custom-header__list-item--mobile" data-mobile-navigation-list-item="true">
<a href="https://www.linkedin.com/blog/engineering/product-design" class="t-16 t-sans t-black t-semibold header-nav__toplink" target="_self">
Product Design
</a>
<button class="header-navigation__button" aria-label="Expand to show more links for Product Design" aria-expanded="false" data-label-expand="Expand to show more links for Product Design" data-label-collapse="Collapse to show less links for Product Design" data-mobile-dropdown-trigger type="button">
<li-icon size="small" type="chevron-down-icon"></li-icon>
</button>
<ul class="custom-header__dropdownlink-list--mobile hidden" data-dropdownlinks-list="true">
<li>
<a href="https://www.linkedin.com/blog/engineering/marketing" class="t-sans t-black t-normal header-nav__link" target="_self">Marketing </a>
</li>
<li>
<a href="https://www.linkedin.com/blog/engineering/sales" class="t-sans t-black t-normal header-nav__link" target="_self">Sales</a>
</li>
<li>
<a href="https://www.linkedin.com/blog/engineering/learning" class="t-sans t-black t-normal header-nav__link" target="_self">Learning</a>
</li>
<li>
<a href="https://www.linkedin.com/blog/engineering/hiring" class="t-sans t-black t-normal header-nav__link" target="_self">Hiring</a>
</li>
<li>
<a href="https://www.linkedin.com/blog/engineering/profile" class="t-sans t-black t-normal header-nav__link" target="_self">Profile</a>
</li>
<li>
<a href="https://www.linkedin.com/blog/engineering/messaging-notifications" class="t-sans t-black t-normal header-nav__link" target="_self">Messaging/Notifications</a>
</li>
<li>
<a href="https://www.linkedin.com/blog/engineering/feed" class="t-sans t-black t-normal header-nav__link" target="_self">Feed</a>
</li>
<li>
<a href="https://www.linkedin.com/blog/engineering/profile" class="t-sans t-black t-normal header-nav__link" target="_self">Profile</a>
</li>
<li>
<a href="https://www.linkedin.com/blog/engineering/groups" class="t-sans t-black t-normal header-nav__link" target="_self">Groups</a>
</li>
<li>
<a href="https://www.linkedin.com/blog/engineering/accessibility" class="t-sans t-black t-normal header-nav__link" target="_self">Accessibility</a>
</li>
<li>
<a href="https://www.linkedin.com/blog/engineering/member-customer-experience" class="t-sans t-black t-normal header-nav__link" target="_self">Member/Customer Experience</a>
</li>
<li>
<a href="https://www.linkedin.com/blog/engineering/search" class="t-sans t-black t-normal header-nav__link" target="_self">Search</a>
</li>
<li>
<a href="https://www.linkedin.com/blog/engineering/recommendations" class="t-sans t-black t-normal header-nav__link" target="_self">Recommendations</a>
</li>
<li>
<a href="https://www.linkedin.com/blog/engineering/skills" class="t-sans t-black t-normal header-nav__link" target="_self">Skills</a>
</li>
</ul>
</li>
<li class="custom-header__list-item--mobile" data-mobile-navigation-list-item="true">
<a href="https://www.linkedin.com/blog/engineering/infrastructure" class="t-16 t-sans t-black t-semibold header-nav__toplink" target="_self">
Infrastructure
</a>
<button class="header-navigation__button" aria-label="Expand to show more links for Infrastructure" aria-expanded="false" data-label-expand="Expand to show more links for Infrastructure" data-label-collapse="Collapse to show less links for Infrastructure" data-mobile-dropdown-trigger type="button">
<li-icon size="small" type="chevron-down-icon"></li-icon>
</button>
<ul class="custom-header__dropdownlink-list--mobile hidden" data-dropdownlinks-list="true">
<li>
<a href="https://www.linkedin.com/blog/engineering/code" class="t-sans t-black t-normal header-nav__link" target="_self">Code</a>
</li>
<li>
<a href="https://www.linkedin.com/blog/engineering/scalability" class="t-sans t-black t-normal header-nav__link" target="_self">Scalability</a>
</li>
<li>
<a href="https://www.linkedin.com/blog/engineering/distributed-systems" class="t-sans t-black t-normal header-nav__link" target="_self">Distributed Systems</a>
</li>
<li>
<a href="https://www.linkedin.com/blog/engineering/graph-systems" class="t-sans t-black t-normal header-nav__link" target="_self">Graph Systems</a>
</li>
<li>
<a href="https://www.linkedin.com/blog/engineering/architecture" class="t-sans t-black t-normal header-nav__link" target="_self">Architecture</a>
</li>
<li>
<a href="https://www.linkedin.com/blog/engineering/analytics" class="t-sans t-black t-normal header-nav__link" target="_self">Analytics</a>
</li>
<li>
<a href="https://www.linkedin.com/blog/engineering/automation" class="t-sans t-black t-normal header-nav__link" target="_self">Automation</a>
</li>
<li>
<a href="https://www.linkedin.com/blog/engineering/platform-platformization" class="t-sans t-black t-normal header-nav__link" target="_self">Platforms/Platformization</a>
</li>
<li>
<a href="https://www.linkedin.com/blog/engineering/cloud-computing" class="t-sans t-black t-normal header-nav__link" target="_self">Cloud Computing</a>
</li>
<li>
<a href="https://www.linkedin.com/blog/engineering/open-source" class="t-sans t-black t-normal header-nav__link" target="_self">Open Source</a>
</li>
<li>
<a href="https://www.linkedin.com/blog/engineering/additional-innovations" class="t-sans t-black t-normal header-nav__link" target="_self">Additional Innovations</a>
</li>
</ul>
</li>
<li class="custom-header__list-item--mobile" data-mobile-navigation-list-item="true">
<a href="https://www.linkedin.com/blog/engineering/talent" class="t-16 t-sans t-black t-semibold header-nav__toplink" target="_self">
Talent
</a>
<button class="header-navigation__button" aria-label="Expand to show more links for Talent" aria-expanded="false" data-label-expand="Expand to show more links for Talent" data-label-collapse="Collapse to show less links for Talent" data-mobile-dropdown-trigger type="button">
<li-icon size="small" type="chevron-down-icon"></li-icon>
</button>
<ul class="custom-header__dropdownlink-list--mobile hidden" data-dropdownlinks-list="true">
<li>
<a href="https://www.linkedin.com/blog/engineering/culture" class="t-sans t-black t-normal header-nav__link" target="_self">Culture</a>
</li>
<li>
<a href="https://www.linkedin.com/blog/engineering/developer-experience-productivity" class="t-sans t-black t-normal header-nav__link" target="_self">Developer Experience/Productivity</a>
</li>
<li>
<a href="https://www.linkedin.com/blog/engineering/leadership" class="t-sans t-black t-normal header-nav__link" target="_self">Leadership</a>
</li>
</ul>
</li>
</ul>
<div class="custom-header__button-share-container--mobile">
<!---->
</div>
</nav>
</div>
<main role="main">
<div id="lithograph-app">
<section id="component-container" data-attach-collapse-behavior="true">
<div id class="component component-articleHeadline" data-component-type="articleHeadline">
<div class="article-headline-container">
<p class="article-headline__topic">
<a class="t-14" href="https://www.linkedin.com/blog/engineering/data-management">Data Management</a>
</p>
<h1 class="article-headline t-40" data-article-title="The impact of slow NFS on data systems">The impact of slow NFS on data systems</h1>
<div class="article-meta t-14 article-meta__hairline">
<div class="article-meta__byline-container">
<p class="t-14 t-black--light" data-published-date="2020-6-23">
June 23, 2020
</p>
</div>
<div class="social-share">
<ul class="social-share__list share-list" title="Share via" data-share-list>
<li class="share-list__item share-item">
<a href="#" class="share-item__link medium-round-muted-tertiary-button" role="button" data-tracking-control-name="_linkedin_share" data-share-type="linkedin" aria-label="Share on LinkedIn, New window will open">
<li-icon class="share-item__icon" type="linkedin-icon"></li-icon>
</a>
</li>
<li class="share-list__item share-item">
<a href="#" class="share-item__link medium-round-muted-tertiary-button" role="button" data-tracking-control-name="_facebook_share" data-share-type="facebook" aria-label="Share on Facebook, New window will open">
<li-icon class="share-item__icon" type="facebook-icon"></li-icon>
</a>
</li>
<li class="share-list__item share-item">
<a href="#" class="share-item__link medium-round-muted-tertiary-button" role="button" data-tracking-control-name="_twitter_share" data-share-type="twitter" aria-label="Share on X, New window will open">
<svg class="share-item__icon share-item__icon--twitter" viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" fill="currentColor" focusable="false" aria-hidden="true" role="none">
<path d="M13.9 10.47L21.35 2h-1.76l-6.46 7.35L7.96 2H2l7.81 11.12L2 22h1.76l6.83-7.77L16.04 22H22l-8.1-11.53zm-2.42 2.75l-.79-1.11L4.4 3.3h2.71l5.08 7.11.79 1.11 6.6 9.24h-2.71l-5.39-7.54z"></path>
</svg>
</a>
</li>
</ul>
</div>
</div>
</div>
</div>
<div id class="component component-migratedContent" data-component-type="migratedContent">
<div class="rich-text">
<p><a href="https://engineering.linkedin.com/espresso/introducing-espresso-linkedins-hot-new-distributed-document-store" target="_blank" data-tracking-control-name="_anchor_link">Espresso</a> is LinkedIn's defacto <a href="https://en.wikipedia.org/wiki/NoSQL" target="_blank" data-tracking-control-name="_anchor_link">NoSQL database</a> solution. It is an online, distributed, fault-tolerant database that powers most of LinkedIn’s applications including member profiles, <a href="https://www.linkedin.com/static?key=about_inmail" target="_blank" data-tracking-control-name="_anchor_link">InMail</a> (LinkedIn's member-to-member messaging system), sections of the main LinkedIn homepage, our <a href="https://www.linkedin.com/mobile?trk=hb_ft_mobile" target="_blank" data-tracking-control-name="_anchor_link">mobile applications</a>, and more. Since Espresso caters to many critical features, its responsiveness and reliability are paramount. Espresso stores about 2PB of data (before replication) across its clusters and its busiest cluster serves around 3M QPS.</p>
<p>Our backend systems play an important role in maintaining the integrity of the member experience. The Espresso backup service takes a complete snapshot of its databases once every day. This service runs on all serving storage nodes that contain shards of production data and these backups are persisted in a centralized network file system (NFS) cluster. Snapshots are vital for Espresso’s cluster health because they power functions such as offline processing and disaster recovery.&nbsp;</p>
<p>Though the backup process does not acquire any locks that can affect online operations, we identified an instance where NFS issues cascaded and affected the performance of the underlying Espresso storage nodes. In turn, this led to degraded performance during the backup and at times, even affected Espresso’s availability SLAs.</p>
<h2>Triaging SLA misses during backup</h2>
<p>When we started noticing these service degradation issues, Espresso’s response latencies to its upstream services were higher than our agreed-upon SLA. We also noted that our database service struggled to cope up with I/O requests to other block devices during NFS issues.</p>
<p>To address the problem, we started with basic triage, such as increasing NFS <a href="https://access.redhat.com/solutions/753853" target="_blank" data-tracking-control-name="_anchor_link">rsize and wsize</a>, but didn’t see a noticeable impact. We had also throttled our backup write speeds drastically. This helped improve our availability during ideal state, but we still saw sporadic drops in SLA across a few Espresso clusters from time to time during backups. At one point, we decided these workarounds were not sufficient. As we took a closer look, we discovered that the NFS degradation was affecting the online serving side processes and not just the backups.</p>
<p><b>NFS server side back pressure<br> </b>When NFS server’s performance degrades, the NFS server shrinks its <a href="https://en.wikipedia.org/wiki/Transmission_Control_Protocol#Flow_control" target="_blank" data-tracking-control-name="_anchor_link">advertised window</a> to intimate the client to back off and reduce its write rate. The NFS client queues the data in its send Q and slowly forwards the write to the server. Let’s see what happens when we do a packet capture while writing to NFS.</p>
</div>
</div>
<div id class="component component-githubGist" data-component-type="githubGist">
<div class="github-gist" data-github-gist data-gist-src="https://gist.github.com/kalyanceg/296c8467fb5b1817575053a7389fef3d.js" data-gist-title="Github Gist Embed"></div>
<!---->
</div>
<div id class="component component-migratedContent" data-component-type="migratedContent">
<div class="rich-text">
<p>In observing the initial packet capture, the receive buffer advertised by NFS server shrinks to 9 and eventually 0, causing NFS clients to throttle. Up to this point, we had assumed NFS was slower since response latencies to access, <i>read,</i>&nbsp;and <i>write</i> calls were higher. After analyzing packet captures using <i>tcpdump</i>, we were able to confirm that NFS server was actually going through a performance degradation, which, in turn, causes the senders (NFS clients) to slow down. After seeing a correlation between drop in SLA and issues originating in NFS servers, we started looking at how an independent backup process affects Espresso’s serving process.</p>
<p><b>Reproducing the service degradation<br> </b>In order to reproduce the issue, we simulated NFS server degradation by adding an iptables rule to drop all outgoing NFS packets. We observed increased CPU usage by kswapd and also observed that the NFS writes didn’t come to an immediate halt when we applied the rules.</p>
</div>
</div>
<div id class="component component-githubGist" data-component-type="githubGist">
<div class="github-gist" data-github-gist data-gist-src="https://gist.github.com/kalyanceg/c0a43d077e8691b96beaac15eb19fce5.js" data-gist-title="Github Gist Embed"></div>
<!---->
</div>
<div id class="component component-migratedContent" data-component-type="migratedContent">
<div class="rich-text">
<p>Based on this experiment of unreachable NFS, we determined that NFS writes reached the storage node’s page cache and stayed in the Dirty/<i>Writeback</i> buffer. They are flushed to the NFS server only when there is a memory pressure. These flushed pages can’t be removed from the page cache of the storage node until the NFS server acknowledges the data. Such pages are counted as <i>NFS_Unstable</i>.</p>
<p>From the nfs(5) <a href="https://linux.die.net/man/5/nfs" target="_blank" data-tracking-control-name="_anchor_link">man page</a>, we know that the NFS client delays sending application writes to the server until one of four events occur:&nbsp;</p>
<ul>
<li>Memory pressure forces reclamation of system memory resources.</li>
<li>An application flushes file data explicitly with sync(2), msync(2), or fsync(3).</li>
<li>An application closes a file with close(2).</li>
<li>The file is locked/unlocked via fcntl(2).</li>
</ul>
<h2>Understanding Linux page cache internals</h2>
<p>To understand how we can control eviction of dirty pages from linux page cache, we need to understand a suite of <a href="https://www.kernel.org/doc/Documentation/sysctl/vm.txt" target="_blank" data-tracking-control-name="_anchor_link">sysctl parameters</a>. Let’s discuss a few of these parameters in depth.&nbsp;</p>
<ul>
<li>Linux kernel limits the number of dirty pages that can stay in page cache by sysctl values <a href="https://www.kernel.org/doc/Documentation/sysctl/vm.txt" target="_blank" data-tracking-control-name="_anchor_link">dirty_ratio and dirty_background_ratio</a>.&nbsp;</li>
<li>Here, dirty_background_ratio is the threshold (calculated as a percentage of available memory) at which kswapd will be called to evict dirty pages to disk and this will not cause major performance impact except kswapd using CPU resources.&nbsp;</li>
<li>The parameter dirty_ratio (calculated as a percentage of available memory) is the threshold at which any process requesting disk writes will itself start writing out dirty data to disk.&nbsp;</li>
</ul>
<p>The number of page scans done in the background by kswapd is reported by <a href="https://linux.die.net/man/1/sar" target="_blank" data-tracking-control-name="_anchor_link">sar</a> as pgscank (k signifies the kswapd eviction) and number of page scans done on demand when a process generates write is reported by sar as pgscand (d signifies on demand)</p>
</div>
</div>
<div id class="component component-standaloneImage" data-component-type="standaloneImage">
<div class="standalone-image-component standalone-image-component--article-width">
<figure>
<img class="standalone-image-component__image" sizes="(max-width: 480px) 480px, (max-width: 767px) 767px, (max-width: 1024px) 1024px, 1920px" data-delayed-url="https://media.licdn.com/dms/image/v2/D4D08AQHOJWoLxDQtXg/croft-frontend-shrinkToFit1024/croft-frontend-shrinkToFit1024/0/1700684146883?e=2147483647&amp;v=beta&amp;t=7KNOYRT5YQ5X1qSsEbg5uzcXVN5_cHSBcxbW-mQttVw" alt="sampe-sar-output-screenshot">
<!----> </figure>
</div>
</div>
<div id class="component component-migratedContent" data-component-type="migratedContent">
<div class="rich-text">
<p><i>Sample sar output</i></p>
<p>As discussed, pgscank, which happens in the background, is not contagious enough to affect the performance of other processes, though it increases kswapd’s CPU and IO usage momentarily. But pgscand is contagious and can affect the performance of other processes. Let's take an example to understand how pgscand affects other processes:</p>
<ol>
<li>Process ‘A’ is generating writes</li>
<li>During this time the kernel sees the sum of <i>Writeback</i>, <i>Dirty,</i> and <i>Unstable</i> pages stay as high as the dirty_ratio due to degraded performance of NFS server</li>
<li>Process ‘A’ now has to wait till some of these dirty pages are freed up before getting its <i>write</i> request satisfied</li>
</ol>
<p>If the NFS server throttles the sender by a small window size (as we first conveyed in the packet capture), NFS writes gets accumulated in the pagecache as dirty pages, and breaches the dirty ratio. Disk writes of other processes can now be delayed because they have to do an <i>on demand</i> pagescan.&nbsp;</p>
<p>Spikes in <i>pgscand</i> lined up exactly with the SLA drops we faced and we were now able to establish the relationship of our SLA drops to the poor performance of the NFS server.&nbsp;</p>
<p><i>pgscand</i> happening in storage nodes during our sporadic SLA drops is depicted below.</p>
</div>
</div>
<div id class="component component-standaloneImage" data-component-type="standaloneImage">
<div class="standalone-image-component standalone-image-component--article-width">
<figure>
<img class="standalone-image-component__image" sizes="(max-width: 480px) 480px, (max-width: 767px) 767px, (max-width: 1024px) 1024px, 1920px" data-delayed-url="https://media.licdn.com/dms/image/v2/D4D08AQGM2tjD_Ce1Og/croft-frontend-shrinkToFit1024/croft-frontend-shrinkToFit1024/0/1700684146884?e=2147483647&amp;v=beta&amp;t=22-Qt5wtGXgqBZGf-6bDZDgBGsjVshFicrkXMXces1c" alt="sample-graph-of-daily-aggregate-pgscand">
<!----> </figure>
</div>
</div>
<div id class="component component-migratedContent" data-component-type="migratedContent">
<div class="rich-text">
<p><i>Aggregate number of pages scanned by pgscand in one of our clusters</i></p>
</div>
</div>
<div id class="component component-standaloneImage" data-component-type="standaloneImage">
<div class="standalone-image-component standalone-image-component--article-width">
<figure>
<img class="standalone-image-component__image" sizes="(max-width: 480px) 480px, (max-width: 767px) 767px, (max-width: 1024px) 1024px, 1920px" data-delayed-url="https://media.licdn.com/dms/image/v2/D4D08AQGoEmIc9tHCYA/croft-frontend-shrinkToFit1024/croft-frontend-shrinkToFit1024/0/1700684146925?e=2147483647&amp;v=beta&amp;t=znSxNJde34BwOWNLPUdGfxAf3rgcT_w9FG444WF89qA" alt="graph-showing-daily-latency">
<!----> </figure>
</div>
</div>
<div id class="component component-migratedContent" data-component-type="migratedContent">
<div class="rich-text">
<p><i>95p latency by Espresso during the same period as the prior graph</i></p>
<h2>Mitigating side effects of dirty pages</h2>
<p>Our solution is to prevent NFS from dirtying too many pages, so that <i>dirty_ratio</i> is not reached during backups. We considered two isolation options:</p>
<ol>
<li>Use cgroups and limit memory and disk I/O of the backup process</li>
<li>Leverage <a href="https://www.kernel.org/doc/Documentation/ABI/testing/sysfs-class-bdi" target="_blank" data-tracking-control-name="_anchor_link">sysfs-class-bdi</a> to limit writeback cache used by NFS&nbsp;</li>
</ol>
<p>Before we moved forward with one of the two solutions, we wanted to reap early benefits of isolation. We decided to have a feedback mechanism on the NFS cluster’s health as we write to it, and rate limit writes, so that we don’t hit <i>dirty_ratio</i> on the client-side. We came up with a solution to make the backup call <i>fsync</i> periodically after a configured batch of NFS writes. The backup jobs would wait for <i>fsync</i> to return before sending more writes to NFS. As a result, the dirty pages are capped by the configured batch size of NFS writes.</p>
<p>A sample barebone script exemplifying this approach is illustrated below. The script writes 100MB and waits for <i>fsync</i> to return before submitting more writes. To validate that the dirty pages are capped at 100MB, we simulated a slow NFS server, by blocking the writes using iptables. The sum of <i>Dirty</i>, <i>Writeback</i>, and <i>unstable</i> memory is capped at 100MB. </p>
</div>
</div>
<div id class="component component-githubGist" data-component-type="githubGist">
<div class="github-gist" data-github-gist data-gist-src="https://gist.github.com/kalyanceg/b4a3d1fb41b21f89755bdadd623413f2.js" data-gist-title="Github Gist Embed"></div>
<!---->
</div>
<div id class="component component-githubGist" data-component-type="githubGist">
<div class="github-gist" data-github-gist data-gist-src="https://gist.github.com/kalyanceg/85afb654d77e4fa105593e697f80adf1.js" data-gist-title="Github Gist Embed"></div>
<!---->
</div>
<div id class="component component-migratedContent" data-component-type="migratedContent">
<div class="rich-text">
<p>If the NFS server is not healthy, <i>fsync</i> would take a lot of time—this acts as a feedback to the Espresso storage node. Though this eliminates impact on the client side, the NFS servers bear the heat, as <i>fsync</i> makes sure dirty data reaches the final backing store from all the caches both on the client and the server.&nbsp;</p>
<h2>Assessing the impact</h2>
<p>We assessed the impact on backup times while calling <i>fsync</i> for every 100MB writes. Tests performed on a 100GB data-set write experienced a slowdown of the write rate by 14%. This was a tradeoff we could take to shield the online data serving process from impacts during backups. The change helped us boost the platform’s availability.&nbsp;</p>
</div>
</div>
<div id class="component component-standaloneImage" data-component-type="standaloneImage">
<div class="standalone-image-component standalone-image-component--article-width">
<figure>
<img class="standalone-image-component__image" sizes="(max-width: 480px) 480px, (max-width: 767px) 767px, (max-width: 1024px) 1024px, 1920px" data-delayed-url="https://media.licdn.com/dms/image/v2/D4D08AQHuqaxzWAkn3A/croft-frontend-shrinkToFit1024/croft-frontend-shrinkToFit1024/0/1700684146955?e=2147483647&amp;v=beta&amp;t=g4yoWgzGfl-rbKaZ3cOncNI03JKjkZQas8Cysehew6o" alt="diagram-showing-availability-trends">
<!----> </figure>
</div>
</div>
<div id class="component component-migratedContent" data-component-type="migratedContent">
<div class="rich-text">
<p>This graph captures our monthly availability for one of our critical clusters. When we introduced the <i>fsync</i> change, the oscillations greatly reduced from the first week of February and stayed close to 99.999% (from 99.992% in October).</p>
<h2>Conclusion</h2>
<p>As we’ve shared <a href="https://engineering.linkedin.com/blog/2017/05/building-the-sre-culture-at-linkedin" target="_blank" data-tracking-control-name="_anchor_link">previously on this blog</a>, “site up” is Linkedin SRE team’s first priority. In regards to our online datastore, Espresso, we wanted to ensure utmost resilience in the face of external degradations. In this journey, we unearthed the behavior of shared page cache across block devices and discovered how one slow block device can affect the performance of processes even when those processes don’t use the slow block device.&nbsp;</p>
<h2>Acknowledgements</h2>
<p>I would like to thank our Storage team for helping us throughout the endeavor. In addition, I would like to thank <a href="https://www.linkedin.com/in/jia-zeng-2a4b7aa2/" target="_blank" data-tracking-control-name="_anchor_link">Jia Zeng</a> for incorporating <i>fsync</i> changes in Espresso. Also, a big thanks to <a href="https://www.linkedin.com/in/ministryofsillywalks/" target="_blank" data-tracking-control-name="_anchor_link">Cyrus Dasadia</a> for reviewing this blog post. Finally, I would like to acknowledge the constant encouragement and support from my manager, <a href="https://www.linkedin.com/in/sankarhariharan/" target="_blank" data-tracking-control-name="_anchor_link">Sankar Hariharan</a>.</p>
</div>
</div>
<div id class="component component-postList" data-component-type="postList">
<section id="postList0FocusPoint" class="component__content-container list-layout" data-post-list>
<!---->
<hr class="artdeco-divider">
<section class="list-layout__headline-container">
<p class="list-layout__headline t-32 t-sans">Related articles</p>
<!---->
</section>
<!---->
<!----> </section>
</div>
<!----> </section>
</div>
<script src="https://static.licdn.com/aero-v1/sc/h/8hfbuq1ftcvnnx4dd5067pi0t" async></script>
<script src="https://static.licdn.com/aero-v1/sc/h/bknx7jzs0ylu540sn4wuo6bue" async></script>
<script src="https://static.licdn.com/aero-v1/sc/h/egqq1vs0784qd3h3801e2w9lr" async></script>
</main>
<footer class="li-footer bg-transparent w-full ">
<ul class="li-footer__list flex flex-wrap flex-row items-start justify-start w-full h-auto min-h-[50px] my-[0px] mx-auto py-3 px-2 papabear:p-0">
<li class="li-footer__item font-sans text-xs text-color-text-solid-secondary flex flex-shrink-0 justify-start p-1 relative w-50% papabear:justify-center papabear:w-auto">
<span class="sr-only">LinkedIn</span>
<icon class="li-footer__copy-logo text-color-logo-brand-alt inline-block self-center h-[14px] w-[56px] mr-1" data-delayed-url="https://static.licdn.com/aero-v1/sc/h/5mebydpuuijm3uhv1q375inqh"></icon>
<span class="li-footer__copy-text flex items-center">&copy; 2026</span>
</li>
<li class="li-footer__item font-sans text-xs text-color-text-solid-secondary flex flex-shrink-0 justify-start p-1 relative w-50% papabear:justify-center papabear:w-auto">
<a class="li-footer__item-link flex items-center font-sans text-xs font-bold text-color-text-solid-secondary hover:text-color-link-hover focus:text-color-link-focus" href="https://about.linkedin.com?trk=content_footer-about" data-tracking-control-name="content_footer-about" data-tracking-will-navigate>
About
</a>
</li>
<li class="li-footer__item font-sans text-xs text-color-text-solid-secondary flex flex-shrink-0 justify-start p-1 relative w-50% papabear:justify-center papabear:w-auto">
<a class="li-footer__item-link flex items-center font-sans text-xs font-bold text-color-text-solid-secondary hover:text-color-link-hover focus:text-color-link-focus" href="https://www.linkedin.com/accessibility?trk=content_footer-accessibility" data-tracking-control-name="content_footer-accessibility" data-tracking-will-navigate>
Accessibility
</a>
</li>
<li class="li-footer__item font-sans text-xs text-color-text-solid-secondary flex flex-shrink-0 justify-start p-1 relative w-50% papabear:justify-center papabear:w-auto">
<a class="li-footer__item-link flex items-center font-sans text-xs font-bold text-color-text-solid-secondary hover:text-color-link-hover focus:text-color-link-focus" href="https://www.linkedin.com/legal/user-agreement?trk=content_footer-user-agreement" data-tracking-control-name="content_footer-user-agreement" data-tracking-will-navigate>
User Agreement
</a>
</li>
<li class="li-footer__item font-sans text-xs text-color-text-solid-secondary flex flex-shrink-0 justify-start p-1 relative w-50% papabear:justify-center papabear:w-auto">
<a class="li-footer__item-link flex items-center font-sans text-xs font-bold text-color-text-solid-secondary hover:text-color-link-hover focus:text-color-link-focus" href="https://www.linkedin.com/legal/privacy-policy?trk=content_footer-privacy-policy" data-tracking-control-name="content_footer-privacy-policy" data-tracking-will-navigate>
Privacy Policy
</a>
</li>
<!---->
<li class="li-footer__item font-sans text-xs text-color-text-solid-secondary flex flex-shrink-0 justify-start p-1 relative w-50% papabear:justify-center papabear:w-auto">
<a class="li-footer__item-link flex items-center font-sans text-xs font-bold text-color-text-solid-secondary hover:text-color-link-hover focus:text-color-link-focus" href="https://www.linkedin.com/legal/cookie-policy?trk=content_footer-cookie-policy" data-tracking-control-name="content_footer-cookie-policy" data-tracking-will-navigate>
Cookie Policy
</a>
</li>
<li class="li-footer__item font-sans text-xs text-color-text-solid-secondary flex flex-shrink-0 justify-start p-1 relative w-50% papabear:justify-center papabear:w-auto">
<a class="li-footer__item-link flex items-center font-sans text-xs font-bold text-color-text-solid-secondary hover:text-color-link-hover focus:text-color-link-focus" href="https://www.linkedin.com/legal/copyright-policy?trk=content_footer-copyright-policy" data-tracking-control-name="content_footer-copyright-policy" data-tracking-will-navigate>
Copyright Policy
</a>
</li>
<li class="li-footer__item font-sans text-xs text-color-text-solid-secondary flex flex-shrink-0 justify-start p-1 relative w-50% papabear:justify-center papabear:w-auto">
<a class="li-footer__item-link flex items-center font-sans text-xs font-bold text-color-text-solid-secondary hover:text-color-link-hover focus:text-color-link-focus" href="https://brand.linkedin.com/policies?trk=content_footer-brand-policy" data-tracking-control-name="content_footer-brand-policy" data-tracking-will-navigate>
Brand Policy
</a>
</li>
<li class="li-footer__item font-sans text-xs text-color-text-solid-secondary flex flex-shrink-0 justify-start p-1 relative w-50% papabear:justify-center papabear:w-auto">
<a class="li-footer__item-link flex items-center font-sans text-xs font-bold text-color-text-solid-secondary hover:text-color-link-hover focus:text-color-link-focus" href="https://www.linkedin.com/psettings/guest-controls?trk=content_footer-guest-controls" data-tracking-control-name="content_footer-guest-controls" data-tracking-will-navigate>
Guest Controls
</a>
</li>
<li class="li-footer__item font-sans text-xs text-color-text-solid-secondary flex flex-shrink-0 justify-start p-1 relative w-50% papabear:justify-center papabear:w-auto">
<a class="li-footer__item-link flex items-center font-sans text-xs font-bold text-color-text-solid-secondary hover:text-color-link-hover focus:text-color-link-focus" href="https://www.linkedin.com/help/linkedin/answer/34593?trk=content_footer-community-guide" data-tracking-control-name="content_footer-community-guide" data-tracking-will-navigate>
Community Guidelines
</a>
</li>
<!---->
<li class="li-footer__item font-sans text-xs text-color-text-solid-secondary flex flex-shrink-0 justify-start p-1 relative w-50% papabear:justify-center papabear:w-auto">
<div class="collapsible-dropdown collapsible-dropdown--footer collapsible-dropdown--up flex items-center relative hyphens-auto language-selector z-2">
<!---->
<ul class="collapsible-dropdown__list hidden container-raised absolute w-auto overflow-y-auto flex-col items-stretch z-[9999] bottom-[100%] top-auto" role="menu" tabindex="-1">
<li class="language-selector__item" role="presentation">
<!-- Adding aria-label to both the li and the button because screen reader focus goes to button on desktop and li on mobile-->
<button aria-label="العربية (Arabic)" class="font-sans text-xs link block py-[5px] px-2 w-full hover:cursor-pointer hover:bg-color-action hover:text-color-text-on-dark focus:bg-color-action focus:text-color-text-on-dark
language-selector__link !font-regular" data-tracking-control-name="language-selector-ar_AE" data-locale="ar_AE" role="menuitem" lang="ar_AE">
العربية (Arabic)
</button>
</li>
<li class="language-selector__item" role="presentation">
<!-- Adding aria-label to both the li and the button because screen reader focus goes to button on desktop and li on mobile-->
<button aria-label="বাংলা (Bangla)" class="font-sans text-xs link block py-[5px] px-2 w-full hover:cursor-pointer hover:bg-color-action hover:text-color-text-on-dark focus:bg-color-action focus:text-color-text-on-dark
language-selector__link !font-regular" data-tracking-control-name="language-selector-bn_IN" data-locale="bn_IN" role="menuitem" lang="bn_IN">
বাংলা (Bangla)
</button>
</li>
<li class="language-selector__item" role="presentation">
<!-- Adding aria-label to both the li and the button because screen reader focus goes to button on desktop and li on mobile-->
<button aria-label="Čeština (Czech)" class="font-sans text-xs link block py-[5px] px-2 w-full hover:cursor-pointer hover:bg-color-action hover:text-color-text-on-dark focus:bg-color-action focus:text-color-text-on-dark
language-selector__link !font-regular" data-tracking-control-name="language-selector-cs_CZ" data-locale="cs_CZ" role="menuitem" lang="cs_CZ">
Čeština (Czech)
</button>
</li>
<li class="language-selector__item" role="presentation">
<!-- Adding aria-label to both the li and the button because screen reader focus goes to button on desktop and li on mobile-->
<button aria-label="Dansk (Danish)" class="font-sans text-xs link block py-[5px] px-2 w-full hover:cursor-pointer hover:bg-color-action hover:text-color-text-on-dark focus:bg-color-action focus:text-color-text-on-dark
language-selector__link !font-regular" data-tracking-control-name="language-selector-da_DK" data-locale="da_DK" role="menuitem" lang="da_DK">
Dansk (Danish)
</button>
</li>
<li class="language-selector__item" role="presentation">
<!-- Adding aria-label to both the li and the button because screen reader focus goes to button on desktop and li on mobile-->
<button aria-label="Deutsch (German)" class="font-sans text-xs link block py-[5px] px-2 w-full hover:cursor-pointer hover:bg-color-action hover:text-color-text-on-dark focus:bg-color-action focus:text-color-text-on-dark
language-selector__link !font-regular" data-tracking-control-name="language-selector-de_DE" data-locale="de_DE" role="menuitem" lang="de_DE">
Deutsch (German)
</button>
</li>
<li class="language-selector__item" role="presentation">
<!-- Adding aria-label to both the li and the button because screen reader focus goes to button on desktop and li on mobile-->
<button aria-label="Ελληνικά (Greek)" class="font-sans text-xs link block py-[5px] px-2 w-full hover:cursor-pointer hover:bg-color-action hover:text-color-text-on-dark focus:bg-color-action focus:text-color-text-on-dark
language-selector__link !font-regular" data-tracking-control-name="language-selector-el_GR" data-locale="el_GR" role="menuitem" lang="el_GR">
Ελληνικά (Greek)
</button>
</li>
<li class="language-selector__item" role="presentation">
<!-- Adding aria-label to both the li and the button because screen reader focus goes to button on desktop and li on mobile-->
<button aria-label="English (English) selected" class="font-sans text-xs link block py-[5px] px-2 w-full hover:cursor-pointer hover:bg-color-action hover:text-color-text-on-dark focus:bg-color-action focus:text-color-text-on-dark
language-selector__link--selected" data-tracking-control-name="language-selector-en_US" data-locale="en_US" role="menuitem" lang="en_US">
<strong>English (English)</strong>
</button>
</li>
<li class="language-selector__item" role="presentation">
<!-- Adding aria-label to both the li and the button because screen reader focus goes to button on desktop and li on mobile-->
<button aria-label="Español (Spanish)" class="font-sans text-xs link block py-[5px] px-2 w-full hover:cursor-pointer hover:bg-color-action hover:text-color-text-on-dark focus:bg-color-action focus:text-color-text-on-dark
language-selector__link !font-regular" data-tracking-control-name="language-selector-es_ES" data-locale="es_ES" role="menuitem" lang="es_ES">
Español (Spanish)
</button>
</li>
<li class="language-selector__item" role="presentation">
<!-- Adding aria-label to both the li and the button because screen reader focus goes to button on desktop and li on mobile-->
<button aria-label="فارسی (Persian)" class="font-sans text-xs link block py-[5px] px-2 w-full hover:cursor-pointer hover:bg-color-action hover:text-color-text-on-dark focus:bg-color-action focus:text-color-text-on-dark
language-selector__link !font-regular" data-tracking-control-name="language-selector-fa_IR" data-locale="fa_IR" role="menuitem" lang="fa_IR">
فارسی (Persian)
</button>
</li>
<li class="language-selector__item" role="presentation">
<!-- Adding aria-label to both the li and the button because screen reader focus goes to button on desktop and li on mobile-->
<button aria-label="Suomi (Finnish)" class="font-sans text-xs link block py-[5px] px-2 w-full hover:cursor-pointer hover:bg-color-action hover:text-color-text-on-dark focus:bg-color-action focus:text-color-text-on-dark
language-selector__link !font-regular" data-tracking-control-name="language-selector-fi_FI" data-locale="fi_FI" role="menuitem" lang="fi_FI">
Suomi (Finnish)
</button>
</li>
<li class="language-selector__item" role="presentation">
<!-- Adding aria-label to both the li and the button because screen reader focus goes to button on desktop and li on mobile-->
<button aria-label="Français (French)" class="font-sans text-xs link block py-[5px] px-2 w-full hover:cursor-pointer hover:bg-color-action hover:text-color-text-on-dark focus:bg-color-action focus:text-color-text-on-dark
language-selector__link !font-regular" data-tracking-control-name="language-selector-fr_FR" data-locale="fr_FR" role="menuitem" lang="fr_FR">
Français (French)
</button>
</li>
<li class="language-selector__item" role="presentation">
<!-- Adding aria-label to both the li and the button because screen reader focus goes to button on desktop and li on mobile-->
<button aria-label="हिंदी (Hindi)" class="font-sans text-xs link block py-[5px] px-2 w-full hover:cursor-pointer hover:bg-color-action hover:text-color-text-on-dark focus:bg-color-action focus:text-color-text-on-dark
language-selector__link !font-regular" data-tracking-control-name="language-selector-hi_IN" data-locale="hi_IN" role="menuitem" lang="hi_IN">
हिंदी (Hindi)
</button>
</li>
<li class="language-selector__item" role="presentation">
<!-- Adding aria-label to both the li and the button because screen reader focus goes to button on desktop and li on mobile-->
<button aria-label="Magyar (Hungarian)" class="font-sans text-xs link block py-[5px] px-2 w-full hover:cursor-pointer hover:bg-color-action hover:text-color-text-on-dark focus:bg-color-action focus:text-color-text-on-dark
language-selector__link !font-regular" data-tracking-control-name="language-selector-hu_HU" data-locale="hu_HU" role="menuitem" lang="hu_HU">
Magyar (Hungarian)
</button>
</li>
<li class="language-selector__item" role="presentation">
<!-- Adding aria-label to both the li and the button because screen reader focus goes to button on desktop and li on mobile-->
<button aria-label="Bahasa Indonesia (Indonesian)" class="font-sans text-xs link block py-[5px] px-2 w-full hover:cursor-pointer hover:bg-color-action hover:text-color-text-on-dark focus:bg-color-action focus:text-color-text-on-dark
language-selector__link !font-regular" data-tracking-control-name="language-selector-in_ID" data-locale="in_ID" role="menuitem" lang="in_ID">
Bahasa Indonesia (Indonesian)
</button>
</li>
<li class="language-selector__item" role="presentation">
<!-- Adding aria-label to both the li and the button because screen reader focus goes to button on desktop and li on mobile-->
<button aria-label="Italiano (Italian)" class="font-sans text-xs link block py-[5px] px-2 w-full hover:cursor-pointer hover:bg-color-action hover:text-color-text-on-dark focus:bg-color-action focus:text-color-text-on-dark
language-selector__link !font-regular" data-tracking-control-name="language-selector-it_IT" data-locale="it_IT" role="menuitem" lang="it_IT">
Italiano (Italian)
</button>
</li>
<li class="language-selector__item" role="presentation">
<!-- Adding aria-label to both the li and the button because screen reader focus goes to button on desktop and li on mobile-->
<button aria-label="עברית (Hebrew)" class="font-sans text-xs link block py-[5px] px-2 w-full hover:cursor-pointer hover:bg-color-action hover:text-color-text-on-dark focus:bg-color-action focus:text-color-text-on-dark
language-selector__link !font-regular" data-tracking-control-name="language-selector-iw_IL" data-locale="iw_IL" role="menuitem" lang="iw_IL">
עברית (Hebrew)
</button>
</li>
<li class="language-selector__item" role="presentation">
<!-- Adding aria-label to both the li and the button because screen reader focus goes to button on desktop and li on mobile-->
<button aria-label="日本語 (Japanese)" class="font-sans text-xs link block py-[5px] px-2 w-full hover:cursor-pointer hover:bg-color-action hover:text-color-text-on-dark focus:bg-color-action focus:text-color-text-on-dark
language-selector__link !font-regular" data-tracking-control-name="language-selector-ja_JP" data-locale="ja_JP" role="menuitem" lang="ja_JP">
日本語 (Japanese)
</button>
</li>
<li class="language-selector__item" role="presentation">
<!-- Adding aria-label to both the li and the button because screen reader focus goes to button on desktop and li on mobile-->
<button aria-label="한국어 (Korean)" class="font-sans text-xs link block py-[5px] px-2 w-full hover:cursor-pointer hover:bg-color-action hover:text-color-text-on-dark focus:bg-color-action focus:text-color-text-on-dark
language-selector__link !font-regular" data-tracking-control-name="language-selector-ko_KR" data-locale="ko_KR" role="menuitem" lang="ko_KR">
한국어 (Korean)
</button>
</li>
<li class="language-selector__item" role="presentation">
<!-- Adding aria-label to both the li and the button because screen reader focus goes to button on desktop and li on mobile-->
<button aria-label="मराठी (Marathi)" class="font-sans text-xs link block py-[5px] px-2 w-full hover:cursor-pointer hover:bg-color-action hover:text-color-text-on-dark focus:bg-color-action focus:text-color-text-on-dark
language-selector__link !font-regular" data-tracking-control-name="language-selector-mr_IN" data-locale="mr_IN" role="menuitem" lang="mr_IN">
मराठी (Marathi)
</button>
</li>
<li class="language-selector__item" role="presentation">
<!-- Adding aria-label to both the li and the button because screen reader focus goes to button on desktop and li on mobile-->
<button aria-label="Bahasa Malaysia (Malay)" class="font-sans text-xs link block py-[5px] px-2 w-full hover:cursor-pointer hover:bg-color-action hover:text-color-text-on-dark focus:bg-color-action focus:text-color-text-on-dark
language-selector__link !font-regular" data-tracking-control-name="language-selector-ms_MY" data-locale="ms_MY" role="menuitem" lang="ms_MY">
Bahasa Malaysia (Malay)
</button>
</li>
<li class="language-selector__item" role="presentation">
<!-- Adding aria-label to both the li and the button because screen reader focus goes to button on desktop and li on mobile-->
<button aria-label="Nederlands (Dutch)" class="font-sans text-xs link block py-[5px] px-2 w-full hover:cursor-pointer hover:bg-color-action hover:text-color-text-on-dark focus:bg-color-action focus:text-color-text-on-dark
language-selector__link !font-regular" data-tracking-control-name="language-selector-nl_NL" data-locale="nl_NL" role="menuitem" lang="nl_NL">
Nederlands (Dutch)
</button>
</li>
<li class="language-selector__item" role="presentation">
<!-- Adding aria-label to both the li and the button because screen reader focus goes to button on desktop and li on mobile-->
<button aria-label="Norsk (Norwegian)" class="font-sans text-xs link block py-[5px] px-2 w-full hover:cursor-pointer hover:bg-color-action hover:text-color-text-on-dark focus:bg-color-action focus:text-color-text-on-dark
language-selector__link !font-regular" data-tracking-control-name="language-selector-no_NO" data-locale="no_NO" role="menuitem" lang="no_NO">
Norsk (Norwegian)
</button>
</li>
<li class="language-selector__item" role="presentation">
<!-- Adding aria-label to both the li and the button because screen reader focus goes to button on desktop and li on mobile-->
<button aria-label="ਪੰਜਾਬੀ (Punjabi)" class="font-sans text-xs link block py-[5px] px-2 w-full hover:cursor-pointer hover:bg-color-action hover:text-color-text-on-dark focus:bg-color-action focus:text-color-text-on-dark
language-selector__link !font-regular" data-tracking-control-name="language-selector-pa_IN" data-locale="pa_IN" role="menuitem" lang="pa_IN">
ਪੰਜਾਬੀ (Punjabi)
</button>
</li>
<li class="language-selector__item" role="presentation">
<!-- Adding aria-label to both the li and the button because screen reader focus goes to button on desktop and li on mobile-->
<button aria-label="Polski (Polish)" class="font-sans text-xs link block py-[5px] px-2 w-full hover:cursor-pointer hover:bg-color-action hover:text-color-text-on-dark focus:bg-color-action focus:text-color-text-on-dark
language-selector__link !font-regular" data-tracking-control-name="language-selector-pl_PL" data-locale="pl_PL" role="menuitem" lang="pl_PL">
Polski (Polish)
</button>
</li>
<li class="language-selector__item" role="presentation">
<!-- Adding aria-label to both the li and the button because screen reader focus goes to button on desktop and li on mobile-->
<button aria-label="Português (Portuguese)" class="font-sans text-xs link block py-[5px] px-2 w-full hover:cursor-pointer hover:bg-color-action hover:text-color-text-on-dark focus:bg-color-action focus:text-color-text-on-dark
language-selector__link !font-regular" data-tracking-control-name="language-selector-pt_BR" data-locale="pt_BR" role="menuitem" lang="pt_BR">
Português (Portuguese)
</button>
</li>
<li class="language-selector__item" role="presentation">
<!-- Adding aria-label to both the li and the button because screen reader focus goes to button on desktop and li on mobile-->
<button aria-label="Română (Romanian)" class="font-sans text-xs link block py-[5px] px-2 w-full hover:cursor-pointer hover:bg-color-action hover:text-color-text-on-dark focus:bg-color-action focus:text-color-text-on-dark
language-selector__link !font-regular" data-tracking-control-name="language-selector-ro_RO" data-locale="ro_RO" role="menuitem" lang="ro_RO">
Română (Romanian)
</button>
</li>
<li class="language-selector__item" role="presentation">
<!-- Adding aria-label to both the li and the button because screen reader focus goes to button on desktop and li on mobile-->
<button aria-label="Русский (Russian)" class="font-sans text-xs link block py-[5px] px-2 w-full hover:cursor-pointer hover:bg-color-action hover:text-color-text-on-dark focus:bg-color-action focus:text-color-text-on-dark
language-selector__link !font-regular" data-tracking-control-name="language-selector-ru_RU" data-locale="ru_RU" role="menuitem" lang="ru_RU">
Русский (Russian)
</button>
</li>
<li class="language-selector__item" role="presentation">
<!-- Adding aria-label to both the li and the button because screen reader focus goes to button on desktop and li on mobile-->
<button aria-label="Svenska (Swedish)" class="font-sans text-xs link block py-[5px] px-2 w-full hover:cursor-pointer hover:bg-color-action hover:text-color-text-on-dark focus:bg-color-action focus:text-color-text-on-dark
language-selector__link !font-regular" data-tracking-control-name="language-selector-sv_SE" data-locale="sv_SE" role="menuitem" lang="sv_SE">
Svenska (Swedish)
</button>
</li>
<li class="language-selector__item" role="presentation">
<!-- Adding aria-label to both the li and the button because screen reader focus goes to button on desktop and li on mobile-->
<button aria-label="తెలుగు (Telugu)" class="font-sans text-xs link block py-[5px] px-2 w-full hover:cursor-pointer hover:bg-color-action hover:text-color-text-on-dark focus:bg-color-action focus:text-color-text-on-dark
language-selector__link !font-regular" data-tracking-control-name="language-selector-te_IN" data-locale="te_IN" role="menuitem" lang="te_IN">
తెలుగు (Telugu)
</button>
</li>
<li class="language-selector__item" role="presentation">
<!-- Adding aria-label to both the li and the button because screen reader focus goes to button on desktop and li on mobile-->
<button aria-label="ภาษาไทย (Thai)" class="font-sans text-xs link block py-[5px] px-2 w-full hover:cursor-pointer hover:bg-color-action hover:text-color-text-on-dark focus:bg-color-action focus:text-color-text-on-dark
language-selector__link !font-regular" data-tracking-control-name="language-selector-th_TH" data-locale="th_TH" role="menuitem" lang="th_TH">
ภาษาไทย (Thai)
</button>
</li>
<li class="language-selector__item" role="presentation">
<!-- Adding aria-label to both the li and the button because screen reader focus goes to button on desktop and li on mobile-->
<button aria-label="Tagalog (Tagalog)" class="font-sans text-xs link block py-[5px] px-2 w-full hover:cursor-pointer hover:bg-color-action hover:text-color-text-on-dark focus:bg-color-action focus:text-color-text-on-dark
language-selector__link !font-regular" data-tracking-control-name="language-selector-tl_PH" data-locale="tl_PH" role="menuitem" lang="tl_PH">
Tagalog (Tagalog)
</button>
</li>
<li class="language-selector__item" role="presentation">
<!-- Adding aria-label to both the li and the button because screen reader focus goes to button on desktop and li on mobile-->
<button aria-label="Türkçe (Turkish)" class="font-sans text-xs link block py-[5px] px-2 w-full hover:cursor-pointer hover:bg-color-action hover:text-color-text-on-dark focus:bg-color-action focus:text-color-text-on-dark
language-selector__link !font-regular" data-tracking-control-name="language-selector-tr_TR" data-locale="tr_TR" role="menuitem" lang="tr_TR">
Türkçe (Turkish)
</button>
</li>
<li class="language-selector__item" role="presentation">
<!-- Adding aria-label to both the li and the button because screen reader focus goes to button on desktop and li on mobile-->
<button aria-label="Українська (Ukrainian)" class="font-sans text-xs link block py-[5px] px-2 w-full hover:cursor-pointer hover:bg-color-action hover:text-color-text-on-dark focus:bg-color-action focus:text-color-text-on-dark
language-selector__link !font-regular" data-tracking-control-name="language-selector-uk_UA" data-locale="uk_UA" role="menuitem" lang="uk_UA">
Українська (Ukrainian)
</button>
</li>
<li class="language-selector__item" role="presentation">
<!-- Adding aria-label to both the li and the button because screen reader focus goes to button on desktop and li on mobile-->
<button aria-label="Tiếng Việt (Vietnamese)" class="font-sans text-xs link block py-[5px] px-2 w-full hover:cursor-pointer hover:bg-color-action hover:text-color-text-on-dark focus:bg-color-action focus:text-color-text-on-dark
language-selector__link !font-regular" data-tracking-control-name="language-selector-vi_VN" data-locale="vi_VN" role="menuitem" lang="vi_VN">
Tiếng Việt (Vietnamese)
</button>
</li>
<li class="language-selector__item" role="presentation">
<!-- Adding aria-label to both the li and the button because screen reader focus goes to button on desktop and li on mobile-->
<button aria-label="简体中文 (Chinese (Simplified))" class="font-sans text-xs link block py-[5px] px-2 w-full hover:cursor-pointer hover:bg-color-action hover:text-color-text-on-dark focus:bg-color-action focus:text-color-text-on-dark
language-selector__link !font-regular" data-tracking-control-name="language-selector-zh_CN" data-locale="zh_CN" role="menuitem" lang="zh_CN">
简体中文 (Chinese (Simplified))
</button>
</li>
<li class="language-selector__item" role="presentation">
<!-- Adding aria-label to both the li and the button because screen reader focus goes to button on desktop and li on mobile-->
<button aria-label="正體中文 (Chinese (Traditional))" class="font-sans text-xs link block py-[5px] px-2 w-full hover:cursor-pointer hover:bg-color-action hover:text-color-text-on-dark focus:bg-color-action focus:text-color-text-on-dark
language-selector__link !font-regular" data-tracking-control-name="language-selector-zh_TW" data-locale="zh_TW" role="menuitem" lang="zh_TW">
正體中文 (Chinese (Traditional))
</button>
</li>
<!---->
</ul>
<button class="language-selector__button select-none relative pr-2 font-sans text-xs font-bold text-color-text-low-emphasis hover:text-color-link-hover hover:cursor-pointer focus:text-color-link-focus focus:outline-dotted focus:outline-1" aria-expanded="false" data-tracking-control-name="footer-lang-dropdown_trigger">
<span class="language-selector__label-text mr-0.5 break-words">
Language
</span>
<icon class="language-selector__label-chevron w-2 h-2 absolute top-0 right-0" data-delayed-url="https://static.licdn.com/aero-v1/sc/h/cyolgscd0imw2ldqppkrb84vo"></icon>
</button>
</div>
</li>
</ul>
<!----> </footer>
<script src="https://static.licdn.com/aero-v1/sc/h/e69gtg8c61dzqklxridy0htl9" async></script>
<!---->
<!----><!---->
</body>
</html>