এনটিপিডি অ্যাডটাইমেক্স (২) কে লিপ সেকেন্ড সন্নিবেশ করানোর জন্য বলার জন্য লাইভলকের কারণে ঘটে। দেখুন lkML পোস্টিং http://lkml.indiana.edu/hypermail/linux/kernel/1203.1/04598.html
রেড হ্যাট এছাড়াও তাদের কেবি নিবন্ধ আপডেট করা উচিত। https://access.redhat.com/knowledge/articles/15145
আপডেট: রেড হ্যাট এখানে শুধু এই সমস্যার জন্য একটি দ্বিতীয় কিলোবাইট নিবন্ধ রয়েছে: https://access.redhat.com/knowledge/solutions/154713 - পূর্ববর্তী নিবন্ধটি একটি আগে, সম্পর্কহীন সমস্যা হয়
কাজের চারপাশে কেবল এনটিপিডি বন্ধ করা। এনটিপিডি যদি ইতিমধ্যে অ্যাডটাইমেক্স (2) কল জারি করে থাকে তবে আপনার 100% নিরাপদ থাকতে এনটিপিডি অক্ষম করতে হবে এবং পুনরায় বুট করতে হবে।
এটি আরএইচএল 6 এবং অন্যান্য ডিস্ট্রোগুলিকে নতুন কার্নেলগুলি চালিয়ে (প্রায় 2.6.26 এর চেয়ে নতুন) প্রভাবিত করে, তবে আরএইচইএল 5 নয়।
লিপ সেকেন্ডটি আসলে হওয়ার আগে এটি হওয়ার কারণটি হ'ল এনটিপিডি কর্নেলটিকে মধ্যরাতে দ্বিতীয় দিকে লিপটি পরিচালনা করতে দেয় তবে মধ্যরাতের আগে লিপ দ্বিতীয়টি প্রবেশ করানোর জন্য কার্নেলকে সতর্ক করতে হবে। এনটিপিডি অতএব লিপ সেকেন্ডের দিনের মাঝে মাঝে অ্যাডটাইমেক্স (2) কে কল করে, এই সময়ে এই বাগটি ট্রিগার করা হয়।
যদি আপনার অ্যাডটাইমেক্স (8) ইনস্টল করা থাকে তবে পতাকা 16 টি সেট করা আছে কিনা তা নির্ধারণ করতে আপনি এই স্ক্রিপ্টটি ব্যবহার করতে পারেন। পতাকা 16 "লিপ সেকেন্ড সন্নিবেশ করছে":
adjtimex -p | perl -p -e 'undef $_, next unless m/status: (\d+)/; (16 & $1) && print "leap second flag is set:\n"'
হালনাগাদ:
রেড হ্যাট তাদের কেবি নিবন্ধটি নোট করার জন্য আপডেট করেছে: "এনএইচআই লিপসেকেন্ড ঘোষণা পাওয়ার সময় এনএমআই ওয়াচডগ একটি হ্যাং সনাক্ত করতে পারে এমন একটি পরিচিত সমস্যা দ্বারা আরএইচইএল 6 গ্রাহক প্রভাবিত হতে পারে This এই সমস্যাটি একটি সময়োচিত পদ্ধতিতে সম্বোধন করা হচ্ছে। যদি আপনার সিস্টেমগুলি প্রাপ্ত হয় লিপসেকেন্ড ঘোষণা এবং এই সমস্যাটি অনুভব করে না, তবে তারা আর প্রভাবিত হয় না।
আপডেট: উপরের ভাষাটি রেড হ্যাট নিবন্ধ থেকে সরানো হয়েছে; এবং দ্বিতীয় কেবি সমাধানটি অ্যাডটাইমেক্স (২) ক্র্যাশ ইস্যুটির বিশদ যুক্ত করা হয়েছিল: https://access.redhat.com/ জ্ঞান / সমাধানগুলি / 154713
তবে আইবিএম ইঞ্জিনিয়ার জন স্টল্টজের এলকেএমএল পোস্টে কোড পরিবর্তন নোট করে যে লিপ সেকেন্ডটি আসলে প্রয়োগ করার সময় অচলাবস্থার সৃষ্টি হতে পারে, সুতরাং আপনি এনটিপিডি অক্ষম করার পরে রিবুট বা অ্যাডটাইমেক্স (8) ব্যবহার করে লিপ সেকেন্ডটি অক্ষম করতে পারেন।
শেষ আপডেট:
ঠিক আছে, আমি কোনও কার্নেল দেব নই, তবে আমি জন স্টুল্টজের প্যাচটি এখানে আবার পর্যালোচনা করেছি: https://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git ; a=commit ;h = 6b43ae8a619d17c4935c3320d2ef9e92bdeed05d
আমি যদি এখনই এটি পড়ছি তবে লিপ সেকেন্ড প্রয়োগ করা হলে সেখানে অন্য অচলাবস্থার কথা ছিল আমার ভুল ছিল। এটি তাদের কেবি প্রবেশের উপর ভিত্তি করে রেড হ্যাটের মতামত বলে মনে হয়। তবে, যদি আপনি এনটিপিডি অক্ষম করে থাকেন, তবে এটি আরও 10 মিনিটের জন্য অক্ষম রাখুন, যাতে এনটিপিডি অ্যাডটাইমেক্স (2) কল করার সময় অচলাবস্থাকে আঘাত না করে।
শীঘ্রই আরও কোনও বাগ আছে কিনা তা আমরা খুঁজে বের করব :)
দ্বিতীয় পোস্ট আপডেট করুন:
আমি শেষ কয়েক ঘন্টা এনটিপিডি এবং প্রি-প্যাচ (বগি) কার্নেল কোডটি পড়ে কাটিয়েছি এবং আমি এখানে খুব ভুল হতে পারি, আমি কী ভাবছিলাম তা ব্যাখ্যা করার চেষ্টা করব:
প্রথমে, এনটিপিডি সমস্ত সময় অ্যাডটাইমেক্স (2) কল করে। এটি এটির "ক্লক লুপ ফিল্টার" এর অংশ হিসাবে এনটিপি_লুপফিল্টার.কে স্থানীয়_ঘড়িতে সংজ্ঞায়িত হয়েছে। আপনি এখানে কোডটি দেখতে পারেন: http://www.opensource.apple.com/source/ntp/ntp-70/ntpd/ntp_loopfilter.c (এনটিপি সংস্করণ 4.2.6 থেকে))
ক্লক লুপ ফিল্টারটি প্রায়শই চলতে থাকে - এটি এনটিপিডি প্রতিবার তার প্রবাহের সার্ভারগুলিতে পোল চালায় যা ডিফল্টরূপে প্রতি 17 মিনিট বা তারও বেশি সময় পরে। ক্লক লুপ ফিল্টারটির প্রাসঙ্গিক বিটটি হ'ল:
if (sys_leap == LEAP_ADDSECOND)
ntv.status |= STA_INS;
এবং তারপর:
ntp_adjtime(&ntv)
অন্য কথায়, যে দিনগুলিতে একটি লিপ দ্বিতীয় হয়, এনটিপিডি "এসটিএএনপিএস" পতাকা সেট করে এবং অ্যাডটাইমেক্স (2) (তার বহনযোগ্যতা-মোড়কের মাধ্যমে) কল করে।
এই সিস্টেম কলটি কার্নেলের দিকে এগিয়ে যায়। এখানে প্রাসঙ্গিক কার্নেল কোডটি রয়েছে: https://github.com/mirferences/linux/blob/a078c6d0e6288fad6d83fb6d5edd91ddb7b6ab33/kernel/time/ntp.c
কার্নেল কোডেপাথ মোটামুটি এটি:
- লাইন 663 - do_adjimex রুটিনের শুরু।
- লাইন 691 - যে কোনও বিদ্যমান লিপ-সেকেন্ড টাইমার বাতিল করুন।
- 709 লাইন - এনটিপি_লোক স্পিনলক ধরুন (এই লকটি সম্ভাব্য লাইভলোক ক্র্যাশে জড়িত রয়েছে)
- লাইন 724 - কল প্রক্রিয়া_জডটাইম_মোড।
- লাইন 616 - কল প্রক্রিয়া_এডজে_ স্ট্যাটাস।
- লাইন 590 - টাইম_স্ট্যাটাস গ্লোবাল ভেরিয়েবল সেট করুন, অ্যাডটাইমেক্স (2) কলটিতে সেট করা পতাকাগুলির ভিত্তিতে
- 592 লাইন - সময়_সেট বৈশ্বিক চলক পরীক্ষা করুন। বেশিরভাগ ক্ষেত্রে, কল করুন এনটিপি_স্টার্ট_লিপ_টিমার।
- 554 লাইন - সময়_স্ট্যাটাস গ্লোবাল ভেরিয়েবল পরীক্ষা করুন। এসটিএএনপিএস সেট করা হবে, তাই লিপ দ্বিতীয় টাইমারটি শুরু করতে টাইমস্টেট টিআইএমআইআইএনএস-এ সেট করুন এবং রাইটিমার_স্টার্ট (অন্য কার্নেল ফাংশন) কল করুন। একটি টাইমার তৈরির প্রক্রিয়াতে, এই কোডটি এক্সটাইম_লকটি ধরে। যদি অন্য সিপিইউ ইতিমধ্যে xটাইম_লক এবং এনটিপি_লোক ধরে ফেলেছে, তবে কার্নেলটি লাইভলক করে। এই কারণেই জন স্টল্টজ প্যাচটি লিখেছিলেন হর্টিমার ব্যবহার এড়াতে। এটিই আজ সবাইকে সমস্যায় ফেলেছিল।
- 598 লাইন - যদি ntp_start_leap_timer আসলে একটি লিপ টাইমার শুরু না করে, সময়_সেটটি TIME_OK এ সেট করুন
- 751 লাইন - ধরে নিলে কার্নেলটি লাইভলক হয় না, স্ট্যাকটি আনউন্ডউড এবং এনটিপি_লোক স্পিনলক প্রকাশিত হবে।
এখানে বেশ কয়েকটি আকর্ষণীয় জিনিস রয়েছে।
প্রথমত, লাইন 691 প্রতি টাইম অ্যাডটাইমেক্স (2) বলা হয়ে বিদ্যমান টাইমার বাতিল করে। তারপরে, 554 টাইমারটি পুনরায় তৈরি করে। এর অর্থ প্রতিবার এনটিপিডি তার ক্লক লুপ ফিল্টারটি চালিয়েছিল, বগী কোডটি চাওয়া হয়েছিল।
সুতরাং আমি বিশ্বাস করি যে রেড হ্যাট ভুল ছিল যখন তারা বলেছিল যে একবার এনটিপিডি লিপ-সেকেন্ড পতাকাটি স্থাপন করেছিল, সিস্টেমটি ক্র্যাশ হবে না। আমি বিশ্বাস করি এনটিপিডি চলমান প্রতিটি সিস্টেমের লিপ-সেকেন্ডের আগে 24 ঘন্টা সময়কালে প্রতি 17 মিনিটে (বা আরও বেশি) লাইভলকের সম্ভাবনা ছিল। আমি বিশ্বাস করি যে এটি এতগুলি সিস্টেম ক্র্যাশ হওয়ার কারণও ব্যাখ্যা করতে পারে; এক ঘন্টার 3 টি সম্ভাবনার তুলনায় ক্র্যাশ হওয়ার এক সময়ের সম্ভাবনা হিট হওয়ার সম্ভাবনা অনেক কম।
আপডেট: https://access.redhat.com/ জ্ঞান / সলিউশনস / 154713 এ রেড হ্যাট এর কেবি সমাধানে , রেড হ্যাট ইঞ্জিনিয়াররা একই সিদ্ধান্তে এসেছিলেন (যে এনটিপিডি চলমান ক্রমাগত বগি কোডটিতে আঘাত করবে)। এবং সত্যই তারা আমার কাজ করার আগে বেশ কয়েক ঘন্টা আগে এটি করেছিল। এই সমাধান প্রধান নিবন্ধ লিঙ্ক করা হয় নি https://access.redhat.com/knowledge/articles/15145 , তাই আমি এখন পর্যন্ত তা খেয়ালই করেন নি।
দ্বিতীয়ত, বোঝায় যে লোড হওয়া সিস্টেমে ক্রাশ হওয়ার সম্ভাবনা বেশি ছিল this লোড হওয়া সিস্টেমগুলি আরও বাধা হ্যান্ডেল করবে, যার ফলে "do_tick" কার্নেল ফাংশনটি প্রায়শই ডাকা হবে, টাইমার তৈরি হওয়ার সময় এই কোডটি চালানোর এবং এনটিপি_লকটি ধরে নেওয়ার আরও বেশি সুযোগ দেবে।
তৃতীয়ত, যখন লিপ-সেকেন্ড আসলে ঘটে তখন সিস্টেমটি ক্র্যাশ হওয়ার কোন সম্ভাবনা আছে? আমি নিশ্চিতভাবে জানি না, তবে সম্ভবত হ্যাঁ, কারণ টাইমারটি যা আগুন জ্বলে ও প্রকৃতপক্ষে লিপ-সেকেন্ড অ্যাডজাস্টমেন্ট কার্যকর করে (এনটিপি_লেপ_সেকেন্ড, লাইন 388) এছাড়াও এনটিপি_লক স্পিনলক ধরে, এবং hrtimer_add_expires_ns এ কল করেছে। আমি জানি না যে এই কলটি কোনও লাইভলকের কারণ হতে পারে কিনা, তবে এটি অসম্ভব বলে মনে হয় না।
অবশেষে, লিপ-সেকেন্ড চলার পরে লিপ-সেকেন্ড পতাকাটি অক্ষম হওয়ার কারণ কী? সেখানে উত্তরটি এনটিপিডি মধ্যরাতের পরে লিপ-সেকেন্ড পতাকা নির্ধারণ বন্ধ করে যখন এটি অ্যাডটাইমেক্স (2) কল করে। যেহেতু পতাকাটি সেট করা নেই, 554 লাইনের চেকটি সত্য হবে না এবং কোনও টাইমার তৈরি হবে না এবং 598 লাইনটি টাইম_স্টেট গ্লোবাল ভেরিয়েবলটি TIME_OK এ পুনরায় সেট করবে। এটি ব্যাখ্যা করে যে আপনি লিপ সেকেন্ডের ঠিক পরে অ্যাডটাইমেক্স (8) দিয়ে পতাকাটি কেন পরীক্ষা করে দেখলে আপনি এখনও লিপ-দ্বিতীয় পতাকা সেট দেখতে পাবেন।
সংক্ষেপে, আজকের সর্বোত্তম পরামর্শটি সর্বোপরি আমি দেওয়া প্রথম বলে মনে হচ্ছে: এনটিপিডি অক্ষম করুন এবং লিপ-দ্বিতীয় পতাকাটি অক্ষম করুন।
এবং কিছু চূড়ান্ত চিন্তা:
- লিনাক্স বিক্রেতাদের মধ্যে কেউ জন স্টল্টসের প্যাচ লক্ষ্য করে তাদের কর্নেলগুলিতে প্রয়োগ করেনি :(
- জন স্টল্টজ কেন কিছু বিক্রেতাদের এটির দরকার ছিল সে সম্পর্কে সতর্ক করলেন না? সম্ভবত লাইভলকের সম্ভাবনা কম বলে মনে হচ্ছে শোনার আক্রমণের প্রয়োজন ছিল না।
- আমি যখন লিপ-সেকেন্ড প্রয়োগ করা হয়েছিল তখন জাভা প্রক্রিয়াগুলি লকআপ বা স্পিনিংয়ের রিপোর্ট শুনেছি। সম্ভবত আমাদের গুগলের নেতৃত্ব অনুসরণ করা উচিত এবং আমরা আমাদের সিস্টেমে কীভাবে লিপ-সেকেন্ড প্রয়োগ করি তা পুনর্বিবেচনা করা উচিত: http://googleblog.blogspot.com/2011/09/time-technology-and-leaping-seconds.html
জন স্টল্টজ থেকে 06/02 আপডেট:
https://lkml.org/lkml/2012/7/1/203
লিপ সেকেন্ডে ফিউটেক্স টাইমারগুলি অকাল এবং অবিচ্ছিন্নভাবে সিপিইউ লোডকে ছড়িয়ে দিয়েছিল কেন এই পদক্ষেপে একটি ধাপে ধাপে পদক্ষেপ ছিল।