Tags:
Node Thumbnail

ไมโครซอฟท์เปิดตัวระบบไฟล์เสมือน GVFS (Git Virtual File System) ใช้เก็บข้อมูลในระบบ Git โดยเฉพาะ เพื่อให้ Git มีประสิทธิภาพมากขึ้นสำหรับเก็บซอร์สโค้ดขนาดใหญ่มากๆ

ไมโครซอฟท์อธิบายว่า Git ไม่ได้ถูกออกแบบมาให้เก็บไฟล์จำนวนมาก (ตัวอย่างคือซอร์สโค้ดของ Windows มีขนาด 270GB และจำนวนไฟล์ 3.5 ล้านไฟล์) เวลาทำงานกับไฟล์จำนวนมากๆ บางคำสั่งอย่าง git checkout หรือ git status ที่ต้องทำงานกับไฟล์ทั้งหมด ต้องใช้เวลานานเป็นหลายชั่วโมงกว่าจะเสร็จ

แต่ในทางปฏิบัติแล้ว การมี repo ใหญ่ขนาดนี้ไม่มีใครสั่งคอมไพล์ซอร์สโค้ดทั้งหมดอยู่แล้ว ใน repo ขนาด 3 ล้านไฟล์ อาจมีไฟล์ที่เราต้องใช้งานจริงๆ เพียงแค่ 50,000-100,000 ไฟล์เท่านั้น เราไม่ควรต้องรอนานขนาดนั้น

No Description

GVFS จึงถูกออกแบบมาให้เป็นระบบไฟล์เสมือน (virtual file system) ที่อยู่ใต้ชั้นของ repo อีกที เพื่อให้ดูเหมือนว่า repo ของเราดาวน์โหลดไฟล์มาครบทั้งหมดแล้ว (fully hydrated repo) แต่ในความเป็นจริง ไฟล์จะถูกดาวน์โหลดมาใช้งานตอนถูกเรียกใช้ครั้งแรกแทน ประสิทธิภาพในการใช้งานจึงดีขึ้น ลดระยะเวลาจากหลักหลายชั่วโมงมาเหลือหลักนาที-วินาทีเท่านั้น

ข้อดีอีกอย่างของ GVFS คือมันทำงานในระดับที่อยู่ใต้ Git อีกที ดังนั้นเครื่องมือต่างๆ ที่เรียกใช้งาน Git จึงไม่ต้องปรับแต่งแก้ไขใดๆ เพราะมองไม่เห็นชั้นของ GVFS นั่นเอง

ตอนนี้ GVFS ยังอยู่ระหว่างการพัฒนา แต่เปิดซอร์สโค้ดแล้วบน GitHub และยังจำเป็นต้องใช้กับ Git for Windows เวอร์ชันของไมโครซอฟท์ที่ดัดแปลงให้ทำงานร่วมกับ GVFS ได้

ที่มา - MSDN

Get latest news from Blognone

Comments

By: jaideejung007
ContributorWindows PhoneWindows
on 5 February 2017 - 07:31 #968457
jaideejung007's picture

โอ้ว Windows 200 กว่ากิ๊ก เพิ่งรู้เลย

By: icez
ContributoriPhoneAndroidRed Hat
on 5 February 2017 - 08:23 #968459 Reply to:968457

อยากรู้ว่าใช้จริงๆ กี่ไฟล์

By: maxmin on 5 February 2017 - 09:04 #968461

กี่คนที่มีโอกาสเข้าถึงซอร์สโค้ดพวกนั้น

By: grit
iPhoneWindows PhoneWindows
on 5 February 2017 - 19:15 #968499

เจอโค้ด 50+ ล้านบรรทัดของ Windows 270GB เข้าไป
รอมแอนดรอยด์ 20GB (โค้ด 10+ ล้านบรรทัด) กลายเป็นเรื่องจิ๊บๆ ไปเลย

นึกถึงตอนคอมไพล์รอมแอนดรอยด์
- ตอนเห็นขนาดซอร์สโค้ดครั้งแรก: เฮ้ย ซอร์สโค้ดรอมแอนดรอยด์มันขนาดตั้ง 20GB เลยหรอวะเนี่ย คอมไพล์ได้รอมออกมาขนาดติ๊ดเดียะเนี่ยนะ(ถ้าเทียบกับขนาดซอร์สโค้ด)
- อารมณ์หลังจากอ่านข่าวนี้แล้ว: มันก็แค่ 20 GB เองนี่หว่า ฮ่าๆ

By: McKay
ContributorAndroidWindowsIn Love
on 5 February 2017 - 19:41 #968502 Reply to:968499
McKay's picture

จริงๆ Windows มีหลาย version นะครับ แถมพัฒนามานาน dependency/module หลายๆตัวก็น่าจะ deprec'd ไปบ้างแล้ว

Gabe Aul [MSFT]:

That size is actually the entire OS repo. It includes Windows OneCore, Desktop, Mobile, HoloLens, Xbox, IOT, etc. Plus tools, and other code we ingest from feeds and store in our tree. It’s the full enchilada, not just Desktop.

คือ scale มันใหญ่หว่า Android แน่ๆอยู่แล้วครับ แต่ผมสงสัยเหมือนคุณ icez นะว่าใช้จริงๆเท่าไหร่


In Soviet Warcraft, Argus comes to you.

By: grit
iPhoneWindows PhoneWindows
on 6 February 2017 - 05:44 #968523 Reply to:968502

โอ้ อย่างนี้นี่เอง ขอบคุณมากๆ ครับ ผมดันไปทึกทักเอาเองว่าหมายถึงตัว Windows อย่างเดียว เลยเทียบจำนวนบรรทัดโค้ดกับ Windows version ที่ผ่านๆ มา (50+ ล้าน) เลยรู้สึกว่าอัตราส่วนขนาดต่อจำนวนบรรทัดโค้ดมันต่างจากแอนดรอยด์เกินไป อย่างนี้ถ้ารวมๆ ทั้งหมดแล้วจำนวนบรรทัดโค้ด 100+ ล้าน ก็แปลว่ายังอยู่ในอัตราส่วนใกล้เคียงกันกับแอนดรอยด์ จะได้เก็บเป็นข้อมูลว่าขนาดต่อจำนวนบรรทัดโค้ดปกติมันน่าจะอยู่ที่ประมาณนี้

แต่ที่สงสัยคือ 20GB ~ 20ล้านKB ~ 10+ ล้าน lines of code ~ 2+KB per 1 line of code
หรือ 270GB ~ 270ล้านKB ~ (90-135) ล้าน lines of code ~ 2-3KB per 1 line of code
ทำไมอัตราส่วนมันถึงอยู่หลัก KB ต่อ 1 บรรทัดโค้ด
คือต่อให้คำนึงถึง cluster size มันก็ไม่น่าจะมีกรณีที่เป็นไปได้
แปลว่าต้องมีบางอย่างที่พลาดไปหรือยังไม่เคยรู้มาก่อน

By: McKay
ContributorAndroidWindowsIn Love
on 6 February 2017 - 09:11 #968533 Reply to:968523
McKay's picture

git repository มันไม่ได้มีแต่ current version source code นี่ครับ ตัว git เองก็เป็น VCS โดยตรงอยู่แล้ว นอกจากนี้ตัว repository เองมันยังเก็บอย่างอื่นที่ไม่ใช่ source code+history ไว้อีกด้วย เช่นไฟล์รูปภาพต่างๆ ดังนั้นจะเอาขนาดไปเทียบกับจำนวนบรรทัดโดยตรงไม่ได้ครับ


In Soviet Warcraft, Argus comes to you.

By: grit
iPhoneWindows PhoneWindows
on 7 February 2017 - 04:16 #968785 Reply to:968533

เริ่มพอเห็นภาพแล้วครับ คือมันต้องมี diff ของแต่ละ version ยิ่งมี version history เยอะก็ยิ่งมีขนาดมากขึ้น ไหนจะข้อมูลอื่นๆ ของแต่ละ version อย่าง md5 อะไรอย่างนี้อีกใช่ไหมครับ ส่วนเรื่องไฟล์รูปภาพนี่ผมไม่ได้นึกถึงเลย นึกว่ามีแต่โค้ดล้วนๆ ขอบคุณมากๆ ครับที่ให้ความรู้