เหตุใดเซิร์ฟเวอร์ Linux NFS จึงถูกใช้งานในเคอร์เนลเมื่อเทียบกับ userspace


33

ฉันแค่สงสัยว่าเหตุใดเซิร์ฟเวอร์ Linux NFS จึงถูกนำไปใช้ในเคอร์เนลซึ่งตรงข้ามกับแอปพลิเคชัน userspace?

ฉันรู้ว่าdaemon ของ userspace NFSมีอยู่จริง แต่ไม่ใช่วิธีมาตรฐานสำหรับการให้บริการเซิร์ฟเวอร์ NFS

ฉันคิดว่าการใช้เซิร์ฟเวอร์ NFS เป็นแอปพลิเคชัน userspace จะเป็นวิธีการที่ต้องการเนื่องจากสามารถเพิ่มความปลอดภัยโดยให้ daemon ทำงานใน userspace แทนเคอร์เนล นอกจากนี้ยังสอดคล้องกับหลักการของ Linux ทั่วไปในการทำสิ่งหนึ่งและทำได้ดี (และ daemons นั้นไม่ควรทำงานกับเคอร์เนล)
ในความเป็นจริงประโยชน์เพียงอย่างเดียวที่ฉันสามารถคิดได้ในการทำงานของเคอร์เนลคือการเพิ่มประสิทธิภาพจากการสลับบริบท (และนั่นคือเหตุผลที่ถกเถียงกัน)

เหตุใดจึงมีการจัดทำเอกสารว่าทำไมจึงมีการนำไปปฏิบัติในทางที่เป็นอยู่? ฉันลอง googling ไปรอบ ๆ แต่หาอะไรไม่เจอ


ดูเหมือนว่าจะมีจำนวนมากสับสนโปรดทราบผมไม่ได้ถามเกี่ยวกับการติดตั้งระบบไฟล์ผมถามเกี่ยวกับการให้บริการด้านเซิร์ฟเวอร์ของระบบแฟ้มเครือข่าย มีความแตกต่างที่ชัดเจนมาก การติดตั้งระบบไฟล์แบบโลคัลต้องการการสนับสนุนสำหรับระบบไฟล์ในเคอร์เนลโดยไม่ได้ใช้ (เช่น samba หรือ unfs3)


NFS เป็นระบบไฟล์ ไดรเวอร์ระบบไฟล์ Userspace ต้องใช้ FUSE ซึ่งโดยทั่วไปแล้วจะไม่ดีต่อประสิทธิภาพ
จอร์แดน

@ จอร์แดนไม่พวกเขาทำไม่ได้ ในความเป็นจริงคุณไม่สามารถเรียกใช้ระบบไฟล์เครือข่าย (NFS, CIFS / samba, coda ฯลฯ ) ผ่านทาง FUSE FUSE ใช้สำหรับติดตั้งระบบไฟล์บนเครื่องโลคัลไม่ใช่ให้บริการ
แพทริค

คุณพูดถูกฉันจะใช้กับลูกค้าเท่านั้น
จอร์แดน

@ jordanm ไม่น่าเสียดาย คุณสามารถเมานต์ระบบไฟล์โดยไม่มี FUSE FUSE เป็นเทคโนโลยีที่ค่อนข้างใหม่อยู่แล้วด้านไคลเอนต์ของระบบไฟล์เครือข่ายมีอยู่นานก่อนที่ FUSE จะทำได้ :-) FUSE ให้วิธีการในการสนับสนุนระบบไฟล์ที่เคอร์เนลไม่ได้จัดเตรียมไว้ให้ (ไม่พยายามที่จะหมายถึงเพียงแค่หวังที่จะกำจัดความเข้าใจที่คลาดเคลื่อน :-P)
Patrick

2
@StarNamer คุณยังพูดถึงลูกค้าอยู่ ฉันกำลังพูดถึงเซิร์ฟเวอร์ คุณสามารถเรียกใช้unfs3(ซึ่งเป็นเซิร์ฟเวอร์ NFS) โดยไม่มีการสนับสนุนเคอร์เนล
แพทริค

คำตอบ:


25

unfs3ตายเท่าที่ฉันรู้ Ganeshaเป็นโครงการเซิร์ฟเวอร์ NFS userspace ที่ใช้งานมากที่สุดในขณะนี้แม้ว่ามันจะยังไม่โตเต็มที่ก็ตาม

แม้ว่าจะให้บริการโปรโตคอลที่แตกต่างกัน Samba เป็นตัวอย่างของไฟล์เซิร์ฟเวอร์ที่ประสบความสำเร็จที่ทำงานใน userspace

ฉันไม่เห็นการเปรียบเทียบประสิทธิภาพเมื่อเร็ว ๆ นี้

ปัญหาอื่น ๆ :

  • แอ็พพลิเคชันทั่วไปค้นหาไฟล์โดยชื่อพา ธ แต่nfsdต้องสามารถค้นหาได้โดย filehandle นี่เป็นเรื่องยุ่งยากและต้องการการสนับสนุนจากระบบไฟล์ (และระบบไฟล์ทั้งหมดนั้นไม่สามารถรองรับได้) ในอดีตที่ผ่านมามันเป็นไปไม่ได้ที่จะทำสิ่งนี้จาก userspace แต่เมล็ดล่าสุดได้เพิ่ม name_to_handle_at(2)และopen_by_handle_at(2)สายระบบ
  • ฉันดูเหมือนจะจำการบล็อกการโทรด้วยการล็อกไฟล์ว่าเป็นปัญหา ฉันไม่แน่ใจว่าเซิร์ฟเวอร์ userspace จัดการกับพวกเขาในวันนี้ได้อย่างไร (คุณผูกเธรดเซิร์ฟเวอร์ที่รอการล็อกหรือคุณโพลหรือไม่)
  • ความหมายของระบบไฟล์ที่ใหม่กว่า (เปลี่ยนคุณลักษณะการมอบหมายการล็อคการแบ่งใช้) อาจถูกนำมาใช้อย่างง่ายดายในเคอร์เนลก่อน (ในทางทฤษฎี - พวกเขาส่วนใหญ่ยังไม่ได้รับ)
  • คุณไม่ต้องการตรวจสอบสิทธิ์โควต้า ฯลฯ ด้วยมือ - แทนคุณต้องการเปลี่ยน uid ของคุณและใช้รหัส vfs ของเคอร์เนลทั่วไปเพื่อทำสิ่งนั้น และลีนุกซ์ก็มีสายระบบ ( setfsuid(2)) ที่ควรทำ ด้วยเหตุผลที่ฉันลืมฉันคิดว่ามันได้รับการพิสูจน์แล้วว่ามีความซับซ้อนในการใช้งานเซิร์ฟเวอร์มากกว่าที่ควรจะเป็น

โดยทั่วไปจุดแข็งของเคอร์เนลเซิร์ฟเวอร์คือการรวมกันอย่างใกล้ชิดกับ vfs และระบบไฟล์ที่ส่งออก เราสามารถทำสิ่งนั้นได้ด้วยการให้เคอร์เนลอินเทอร์เฟซมากขึ้น (เช่นการเรียกระบบ filehandle) แต่นั่นไม่ใช่เรื่องง่าย ในทางกลับกันบางระบบไฟล์ที่คนต้องการส่งออกวันนี้ (เช่น gluster) จริง ๆ แล้วส่วนใหญ่อยู่ใน userspace เคอร์เนล nfsd สามารถส่งออกได้โดยใช้ FUSE - แต่อาจต้องใช้ส่วนขยายอีกครั้งในอินเทอร์เฟซ FUSE สำหรับฟีเจอร์ที่ใหม่กว่าและอาจมีปัญหาด้านประสิทธิภาพ

รุ่นสั้น: คำถามที่ดี!


2
ผู้อ่านควรทราบว่า Bruce เป็นผู้ดูแลเซิร์ฟเวอร์ linux NFS ดังนั้นเขาจึงรู้ว่าเขากำลังพูดถึงอะไร :)
Dan Pritts

@derfian FYI - คุณอาจต้องการที่จะแสดงความคิดเห็นที่นี่เพื่อผลกระทบที่" unfs3มีชีวิตอยู่และย้ายไป Github" ?
ms-ati

ฉันแสดงความคิดเห็นข้างต้นเพราะ @derfian หรือผู้ใช้ StackOverflow ( unix.stackexchange.com/users/23034/derfian ) เป็นผู้ดูแลของ unfs3 และเพิ่งประกาศว่ามันยังไม่ตายตัวอย่างเช่นในความคิดเห็น Github นี้
ms-ati

สำหรับการเขียนโดยผู้ดูแล NFS คำตอบนี้ค่อนข้างคลุมเครือ
Torsten Bronger

18

Olaf Kirch พัฒนาทั้งพื้นที่ผู้ใช้และเคอร์เนลเวอร์ชันพื้นฐานของเซิร์ฟเวอร์ NFS ในหนังสือปี 2000 ของเขา "Linux Network Administration" เขาพูดว่า:

เคอร์เนล 2.2.0 สนับสนุนเซิร์ฟเวอร์ NFS ที่ใช้เคอร์เนลรุ่นทดลองซึ่งพัฒนาโดย Olaf Kirch และพัฒนาเพิ่มเติมโดย HJ Lu, G. Allan Morris และ Trond Myklebust การสนับสนุน NFS ที่ใช้เคอร์เนลให้การสนับสนุนที่สำคัญในประสิทธิภาพของเซิร์ฟเวอร์

ฉันคิดว่าเมื่อเซิร์ฟเวอร์ NFS ถูกย้ายเข้าไปในเคอร์เนลเพื่อปรับปรุงประสิทธิภาพไม่มีใครเห็นเหตุผลที่จะนำมันออกมาอีกครั้ง


8

Starnamer นั้นถูกต้อง (ฉันเป็นหนึ่งในผู้ทดสอบเบต้า)

วางไว้ในเคอร์เนลเป็นความพยายามที่จะปรับปรุงประสิทธิภาพสุดซึ้ง (ส่วนใหญ่ให้กับลูกค้า PCNFS) และเมื่อปัญหาที่ได้รับการแก้ไขไม่มีใครมองมันอีกครั้ง

มีข้อบกพร่องหลายประการที่มี NFS ในเคอร์เนลซึ่งไม่น้อยไปกว่านี้คือมันไม่ได้เล่นอย่างดีกับสิ่งอื่นใดที่สัมผัสกับระบบไฟล์เดียวกัน ไม่ทราบว่ามันจะกลายเป็นปัญหา

เราอายุน้อยกว่าและโง่มากขึ้น ฯลฯ เป็นต้น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.