মাল্টিপ্লেয়ার এফপিএস সার্ভারের পারফরম্যান্স


12

ব্যান্ডউইথ সম্পর্কে প্রশ্নটি বাদে এটি এমএমও পারফরম্যান্সের সাথে সম্পর্কিত । এটি সিপিইউ লোড সম্পর্কে।

আমি নোড.জেএস এবং ওয়েবজিএল ব্যবহার করে একটি সাধারণ এফপিএস একসাথে রেখেছি। এটি অত্যন্ত সহজ, অনেকটা মিডি মাইজের বাডিমেজ ক্লোনটির মতো। খুব কম চলছে, প্রত্যেকে দুটি মাত্রায় (কোনও উচ্চতা নেই) চলে, সহজ প্রজেক্টিলেস অঙ্কুর করে দেয়ালে চলে যায়।

এই মুহুর্তে, আমি যদি সার্ভারের সাথে একাধিক সংযোগ করি যেখানে প্রতিটি খেলোয়াড় চেনাশোনাগুলিতে স্পিন করার সময় দ্রুত গুলি চালায় তবে সার্ভারটি একটি কোর বাড়িয়ে দেয়ার আগে এবং গতি কমিয়ে দেওয়ার আগে আমি খেলায় প্রায় 15 - 20 খেলোয়াড় পেতে পারি। সার্ভারে 30 fps এ চলার সময় এটি হয়। 10 এফপিএসে, আমি প্রায় 25 - 30 টি সংযোগ পাই। এটি বেশ খারাপ, যেহেতু গেমটি শীঘ্রই আরও অনেক কিছু করতে চলেছে এবং এটির একটি সম্ভাব্য প্রচেষ্টা হিসাবে আমাকে আরও খেলোয়াড়ের ফিট করতে হবে।

আমার ভাই তার সহকর্মীর টিএফ 2 সার্ভার সম্পর্কে কিছু পরিসংখ্যান তুলে ধরেছেন। তার সার্ভারটি আমাদের তুলনায় কম চশমা, তবু এটি টিএফ 2 চালায়, স্পষ্টতই আরও জটিল একটি গেম, প্রতি সেকেন্ডে তীব্র 500 টিকের সাথে, প্রতিটি কোর প্রতি 36 জন ব্যবহারকারী with এছাড়াও, আমরা বর্তমানে তাদের তুলনায় অনেক বেশি ব্যান্ডউইথ ব্যবহার করি তবে আমরা এখনও এটিকে কম করার চেষ্টা করিনি।

এটা কিভাবে সম্ভব? এই পরিমাণে সার্ভারের কার্যকারিতা বাড়ানোর জন্য কী ধরণের কৌশল আছে? আমি জানি এমন কিছু বিষয়গুলির মধ্যে রয়েছে:

  • সার্ভারে ফ্রেমরেট হ্রাস করা এবং ক্লায়েন্টের অবস্থানগুলি ইন্টারপোল্ট করা। আমি কিছু সুবিধা পেয়েছি, তবে স্পষ্টতই টিএফ 2 সার্ভার এটি নিয়েও মাথা ঘামায় না।
  • ক্লায়েন্টের সাথে সংঘর্ষ সনাক্তকরণের মতো ব্যয়বহুল জিনিসগুলি করা এবং এটি সার্ভারে অবিচ্ছিন্নভাবে যাচাই করা। আমি এখনও এই উপর সরানো হয়নি, আমি আজ রাতে করব। তবুও আমি এত বড় লাভ আশা করি না।
  • গণনা হ্রাস করতে অঞ্চলগুলিতে (কোয়াড ট্রি) খেলার ক্ষেত্রটি ভাঙ্গুন। এখনও এই জন্য একটি সুযোগ ছিল না।
  • আমি দুর্ভাগ্যজনক সম্ভাবনা বিবেচনা করেছি যে টিএফ 2 যা ব্যবহার করছে তার চেয়ে নোড.জেএস কেবল ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে বেড়েছে এবং এ জাতীয় উচ্চ তীব্রতার জন্য এটি উপযুক্ত নয় not
  • সার্ভার কনফিগারেশন ম্যাজিক এ সব কি?

তাহলে কেবলমাত্র সার্ভারে প্রয়োজনীয় ন্যূনতম করতে তবুও ত্রুটিবিহীন গেমের অভিজ্ঞতা থাকার জন্য শিল্পের অন্যান্য কৌশলগুলি কী কী? "সিপিইউর সময় বাঁচাতে ক্লায়েন্টের কাছে পিছিয়ে থাকা" এবং "ক্লায়েন্টকে বিশ্বাস করবেন না" এর মধ্যে একটি বিশাল দ্বন্দ্ব রয়েছে, তাই সম্ভবত এটি বিভিন্ন পরিস্থিতিতে লাইনটি কোথায় আঁকা তা জানতে সহায়তা করে?

হালনাগাদ

প্রোফাইলিং হ'ল একমাত্র মন্ত্র যা আমি কখনও খুঁজে পেয়েছি যা একেবারে দুর্গম। আমি দ্রুত আমার কোডের চারপাশে কিছু সময় নির্ধারিত ফাংশন আবৃত করে দিয়েছি (ধন্যবাদ, এফপি!) এবং আমি কখনই প্রত্যাশা করি না তা আবিষ্কার করে: ক্লায়েন্টগুলিতে ডেটা সম্প্রচার করার কাজটি প্রায়োগিক সময় কার্যকর হয়। বিশেষত, এর প্রায় 90% আরও পরীক্ষা করে দেখা গেছে যে এই সময় ক্লায়েন্টের সংখ্যা এবং ডেটার আকার উভয়ের উপর নির্ভরশীল, তবে আরও পরে। একটি 20 ব্যবহারকারী লোডে, আমি আমার সম্প্রচারের সময়টি 90% কেটে ফেলেছি, পুরো ডেটার পরিবর্তে কেবল "{}" প্রেরণ করে 24 মিমি থেকে মাত্র 2 মিমি পর্যন্ত রেখেছি। তবে মাত্র ৫ জন ব্যবহারকারীর সাথে ব্রডকাস্টিংয়ে প্রায় 0.5 এমএস লাগবে। সুতরাং আমি এখানে কিছু অপ্টিমাইজেশন পরিষ্কারভাবে প্রয়োজন।

প্রথম সর্বাধিক সুস্পষ্ট উন্নতি হ'ল দৃষ্টিকোণ পরীক্ষা করা। এটি ডেটা সম্পর্কে যত্নশীল ব্যক্তির সংখ্যা এবং আগ্রহী পক্ষগুলিতে প্রেরিত ডেটার পরিমাণ উভয় হ্রাস করবে। এই অঞ্চলে আমি চেষ্টা করতে পারি এমন অন্য কৌশলগুলি কী আছে, যেগুলি আমার সম্প্রচারের কাজকর্মের ব্যয়কে হ্রাস করার উপর দৃষ্টি নিবদ্ধ করে?


5
প্রোফাইল কোডটি আসলেই আমি প্রস্তাব করতে পারি। আমার ধারণা এটি যে আপনি ভাবেন ঠিক ততটাই সুরযুক্ত নয় এবং এজন্যই টিএফ 2 কম হার্ডওয়ারে উচ্চতর টিক রেট চালাচ্ছে। আমি আরও মনে করি যে টিএফ 2 আপনার প্রস্তাবিত সমস্ত কাজ করতে পারে এবং ফলস্বরূপ যা তাদের পারফরম্যান্স বেশি হয় তাতে অবদান রাখছে।
Nate

1
আমি আপনার সর্বশেষ ফলাফল শুনতে আগ্রহী, আপনি কি নোড.জেএস থেকে আরও ভাল পারফরম্যান্স পেতে সক্ষম হন?
iddqd

উত্তর:


5

আপনার সার্ভারে প্রতিটি খেলায় সমস্ত খেলোয়াড়ের জন্য সমস্ত খেলোয়াড়ের অবস্থা প্রেরণ করা উচিত নয়। পরিবর্তে এটি প্রতিটি ক্লায়েন্টকে একটি বিশেষ কারুকৃত বার্তা প্রেরণ করা উচিত প্রতি 500 এমএস বলার জন্য "আপনার ভিউ পোর্টের এই এক্স প্লেয়ারগুলি 500 এমএসে এই স্থানাঙ্কে থাকা উচিত।" বেশিরভাগ সময় এটি ঠিকঠাক কাজ করবে তবে সার্ভার বুঝতে পারলে এটি ভুল তথ্য দিয়েছে এটি কেবল একটি অতিরিক্ত বার্তা প্রেরণ করে।

এটি নাটকীয়ভাবে নেটওয়ার্ক ট্র্যাফিক হ্রাস পাবে।

আরেকটি বিষয় বিবেচনা করার বিষয় হ'ল সার্ভারে গেম টিক না দেওয়া, তার পরিবর্তে ক্লায়েন্ট কেবল তখনই কোনও বার্তা প্রেরণ করে যখন কোনও ক্রিয়া ঘটে (পরিবর্তিত দিকনির্দেশ, শট ফায়ারড) এবং তারপরে কোনও ক্রিয়া পাওয়ার পরে সার্ভারে এগিয়ে গণনা করা উচিত।


হ্যাঁ, আমি এখনই চেক লাইনের দর্শন যোগ করছি। আসলে লাভগুলি সর্বনিম্ন ছিল, 25 প্লেয়ারের জন্য 45 এমএস থেকে কমিয়ে 35 এমএসে। তবে সম্প্রচারের পরিবর্তে স্বতন্ত্র প্রেরণ কমান্ড ব্যবহার করার জন্য কিছু অতিরিক্ত ওভারহেড থাকতে পারে। এবং আমি কেবল ইনপুটটিতে বার্তা প্রেরণ করি। তবে আপনি ঠিক বলেছেন, ইনপুটটি কেবল তখনই টিক না দেওয়ার একটি উপায় থাকতে পারে।
Tesserex

1

আমি দুর্ভাগ্যজনক সম্ভাবনা বিবেচনা করেছি যে টিএফ 2 যা ব্যবহার করছে তার চেয়ে নোড.জেএস কেবল ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে বেড়েছে এবং এ জাতীয় উচ্চ তীব্রতার জন্য এটি উপযুক্ত নয় not

এটা সম্ভবত এই। টিএফ 2 এর সার্ভারটি সি / সি ++ ব্যবহার করে লেখা হয়েছে, এবং এভাবে নোড.জেএস (যা আমি যদি সঠিকভাবে মনে করি তবে জাভাস্ক্রিপ্ট জাভাতে ব্যাখ্যায় ব্যবহৃত হয়েছে) এর চেয়ে দ্রুত হতে চলেছে

গুগলের ওয়েবজিএল ভিত্তিক কোভাক সার্ভারের জন্য জাভা ব্যবহার করে এবং উত্স কোডটি এখানে পাওয়া যায়: http://code.google.com/p/quake2-gwt-port/ । এটি কীভাবে সম্পন্ন হয়েছে তা দেখার জন্য এটি দেখার পক্ষে উপযুক্ত হতে পারে। আপনি যখন সার্ভারে ফ্রেমরেট থাকার কথা বলছেন তখন আপনি কী বোঝাতে চেয়েছেন তা আমিও ভাবছি। সার্ভারে কোনও কিছু রেন্ডার করার কোনও কারণ নেই, ক্লায়েন্টের পাঠানো কমান্ড প্রসেসিংয়ের জন্য এটি কেবল সেখানেই থাকা উচিত।

পরিশেষে, কর্মক্ষমতা উন্নয়নের আশায় ক্লায়েন্টের উপর ব্যয়বহুল গণনা অফলোড করার চেয়ে "নিয়ম ক্লায়েন্টকে বিশ্বাস করবেন না" তার চেয়ে বেশি গুরুত্বপূর্ণ। বিশেষত সংঘর্ষ সনাক্তকরণের মতো গুরুত্বপূর্ণ। সম্ভবত তাই যখন আপনার গেমটি জাভাস্ক্রিপ্ট ভিত্তিক হয় এবং হ্যাক করা মোটামুটি সহজ হয় (সংকলিত টিএফ 2 এর মতো কোনও তুলনায়)।

আমি জানি এটি খুব একটা উত্তর নয়, তবে আশা করি এটি আপনাকে কয়েকটি দিক নির্দেশ করবে যা পারফরম্যান্স উন্নত করতে সহায়তা করতে পারে।


7
আমার ফ্রেম রেটের পরিবর্তে টিক রেট বলা উচিত ছিল। অবশ্যই সার্ভারে কিছুই রেন্ডার করে না। আমি বিরতি বলতে গেম লুপের কমান্ডগুলিকে প্রক্রিয়াকরণ করে। এছাড়াও কয়েকটি উত্তর প্রস্তাব দেয় যে আপনি ক্লায়েন্টকে সংঘর্ষ সনাক্তকরণের মতো জিনিসগুলি দিতে পারবেন, যতক্ষণ না আপনি প্রতি কয়েক সেকেন্ডে এলোমেলো যাচাইকরণ করেন। কেউ বলেছে এটি ছলকে বরং দ্রুত ছাড়ে।
টেসেরেক্স
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.