2 पॉइंट द्वारा GN⁺ 2023-11-09 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • कंटेनर के अंदर Go applications: Go developers अक्सर अपनी applications को ऐसे कंटेनरों में deploy करते हैं जहाँ host resources पर एकाधिकार रोकने के लिए CPU limits की आवश्यकता होती है.
  • Go runtime और CPU limits: Go runtime स्वाभाविक रूप से कंटेनर की CPU limits को नहीं पहचानता, जिससे अत्यधिक उपयोग और performance problems हो सकती हैं.
  • Go garbage collector (GC): Go का GC concurrent रूप से चलता है, लेकिन sweep termination और mark termination के दौरान data integrity के लिए छोटे 'stop-the-world' pauses की आवश्यकता होती है.
  • Linux scheduler - CFS: Linux का Completely Fair Scheduler (CFS) CPU time को अनुपातिक रूप से allocate करता है, और processes को अनुमति प्राप्त cores के अनुरूप CPU time मिलता है.
  • Go और CFS की समस्या: Go प्रत्येक CPU core के लिए एक OS thread बनाता है, लेकिन कंटेनर की CPU limits को अनदेखा कर सकता है, जिससे GC का 'stop-the-world' समय लंबा हो सकता है.
  • GOMAXPROCS सेट करना: GOMAXPROCS environment variable का उपयोग करके Go के OS threads को कंटेनर की CPU limits के अनुरूप सेट किया जा सकता है, जिससे GC latency कम होती है.
  • GOMAXPROCS automation: Uber की automaxprocs library कंटेनर limits के आधार पर GOMAXPROCS को अपने आप सेट कर सकती है, जिससे configuration सरल हो जाता है.
  • भविष्य में Go runtime improvements: Go runtime में automatic CPU limit awareness को integrate करने के लिए एक खुला GitHub issue मौजूद है.

निष्कर्ष: कंटेनर के अंदर Go applications में resources के कुशल उपयोग और performance बनाए रखने के लिए CPU limits और GOMAXPROCS को सही तरीके से configure करना महत्वपूर्ण है.

1 टिप्पणियां

 
GN⁺ 2023-11-09
Hacker News की राय
  • कंटेनर वातावरण में CPU limits की बजाय CPU reservation के उपयोग पर चर्चा
  • कंटेनर के अंदर applications द्वारा गलत core count पहचानने की समस्या
  • Docker CFS cgroup settings का विस्तृत विवरण और --cpu-shares इस्तेमाल करने की सिफारिश
  • कंटेनर के भीतर CFS scheduler समस्या का अनुभव और नए scheduler को लेकर जिज्ञासा
  • Go में GOMEMLIMIT जोड़े जाने और memory limit auto-configure करने वाले tool (automemlimit) का उल्लेख
  • Kubernetes cluster के भीतर Go deployments के CPU limits प्रबंधन की चुनौती साझा की गई
  • ko tool के maintainer द्वारा project का उल्लेख करने पर आभार व्यक्त किया गया
  • Go runtime द्वारा CGroups limits पहचानने की संभावना और दूसरे runtimes के समान व्यवहार पर सवाल
  • safe point तक पहुंचने से पहले concurrent work करके GC latency कम करने पर चर्चा
  • कंटेनर वातावरण में .NET CLR team द्वारा समान scenario के लिए किए गए adjustments का उल्लेख