รายงานความคืบหน้าของ FreeBSD ไตรมาสที่ 2019 ปี XNUMX

ที่ตีพิมพ์ รายงานการพัฒนาโครงการ FreeBSD ตั้งแต่เดือนเมษายนถึงมิถุนายน 2019 ท่ามกลางการเปลี่ยนแปลงที่เราสังเกตได้:

  • คำถามทั่วไปและระบบ
    • ทีมงานหลักตัดสินใจจัดตั้งคณะทำงานเพื่อสำรวจความเป็นไปได้ในการย้ายซอร์สโค้ดจากระบบควบคุมแหล่งที่มา Subversion แบบรวมศูนย์ไปยังระบบ Git แบบกระจายอำนาจ
    • ทำการทดสอบฟัซซี่ของเคอร์เนล FreeBSD โดยใช้ระบบ ซิซคาลเลอร์ และข้อผิดพลาดที่ระบุจำนวนหนึ่งได้รับการแก้ไขแล้ว เพิ่มเลเยอร์สำหรับการทดสอบ fuzzing ของไลบรารีเพื่อความเข้ากันได้กับสภาพแวดล้อมแบบ 32 บิตบนระบบที่มีเคอร์เนล 64 บิต ความสามารถในการรัน syzkaller ในเครื่องเสมือนที่ใช้ bhyve ได้ถูกนำมาใช้แล้ว ในขั้นต่อไป มีการวางแผนที่จะขยายความครอบคลุมของการทดสอบการโทรของระบบ ใช้ LLVM sanitizer เพื่อตรวจสอบเคอร์เนล ใช้ netdump เพื่อบันทึกการถ่ายโอนข้อมูลเคอร์เนลระหว่างการขัดข้องระหว่างการทดสอบแบบคลุมเครือ ฯลฯ
    • งานได้เริ่มขึ้นแล้วในการอัปเดตการใช้งาน zlib ในระดับเคอร์เนล สำหรับการเข้าถึงเคอร์เนลไปยังโค้ด zlib ไดเร็กทอรี contrib/zlib จะถูกเปลี่ยนชื่อเป็น sys/contrib/zlib และไฟล์ส่วนหัว crc.h ก็ถูกเปลี่ยนชื่อด้วยเพื่อหลีกเลี่ยงความขัดแย้งกับ zlib/crc.h ทำความสะอาดโค้ดเดิมที่ขึ้นอยู่กับ zlib และขยายออก ถัดไปมีการวางแผนเพื่อให้ความสามารถในการสร้างเคอร์เนลพร้อมกันกับ zlib เก่าและใหม่สำหรับการถ่ายโอนแบบค่อยเป็นค่อยไปไปยังฟังก์ชันเวอร์ชันใหม่ที่ใช้การบีบอัด
    • โครงสร้างพื้นฐานการจำลองสภาพแวดล้อม Linux (Linuxulator) ได้รับการอัปเดตแล้ว เพิ่มการรองรับเครื่องมือแก้ไขข้อบกพร่อง Linux เช่นยูทิลิตี้ strace มีการเพิ่มแพ็คเกจ linux-c7-strace ลงในพอร์ต ซึ่งสามารถใช้เพื่อติดตามไฟล์ปฏิบัติการของ Linux แทนยูทิลิตี้ truss และ ktrace มาตรฐาน ซึ่งยังไม่สามารถถอดรหัสแฟล็กและโครงสร้างเฉพาะของ Linux บางตัวได้ นอกจากนี้ ยังมีการเพิ่มแพ็คเกจ linux-ltp พร้อมโปรแกรมปฏิบัติการ Linux Test Project และปัญหาความเข้ากันได้กับโปรแกรมปฏิบัติการที่เชื่อมโยงกับ glibc เวอร์ชันใหม่ได้รับการแก้ไขแล้ว
    • การใช้งานการดำเนินการใช้งานไม่ได้ล่าช้าในกลไก pmap ได้ถูกถ่ายโอนไปยังการใช้อัลกอริธึมการประมวลผลคิวที่ทำงานโดยไม่มีการล็อค ซึ่งทำให้สามารถแก้ไขปัญหาความสามารถในการขยายขนาดได้เมื่อดำเนินการดำเนินการ unmap แบบขนานจำนวนมาก
    • กลไกในการบล็อก vnode ในระหว่างการดำเนินการเรียกระบบของตระกูล execve() มีการเปลี่ยนแปลง ซึ่งทำให้สามารถบรรลุประสิทธิภาพที่เพิ่มขึ้นได้เมื่อดำเนินการ execve() สำหรับไฟล์เดียวกันพร้อมกัน (ตัวอย่างเช่น เมื่อดำเนินการประกอบกับการดำเนินการแบบขนาน ของการเปิดตัวคอมไพเลอร์);
  • ความปลอดภัย
    • ไฮเปอร์ไวเซอร์ bhyve ยังคงปรับปรุงการสนับสนุนสำหรับการย้าย Live ของสภาพแวดล้อมเกสต์จากโฮสต์หนึ่งไปยังอีกโฮสต์หนึ่ง และฟังก์ชันบันทึก/กู้คืน ซึ่งช่วยให้คุณสามารถหยุดระบบเกสต์ บันทึกสถานะลงในไฟล์ จากนั้นดำเนินการดำเนินการต่อ
    • ด้วยการใช้ไลบรารี libvdsk นั้น bhyve ได้เพิ่มการรองรับดิสก์อิมเมจในรูปแบบ QCOW2 ต้องมีการติดตั้งจึงจะใช้งานได้
      ดัดแปลงเป็นพิเศษ เวอร์ชันของ bhyve ซึ่งได้รับการแปลงให้ใช้ตัวจัดการการดำเนินการไฟล์ตาม libvdsk ในช่วงระยะเวลาการรายงาน libvdsk ยังดำเนินการเพื่อลดความซับซ้อนของการผสานรวมการสนับสนุนสำหรับรูปแบบใหม่ ประสิทธิภาพการอ่านและเขียนที่ได้รับการปรับปรุง และเพิ่มการสนับสนุนสำหรับการคัดลอกเมื่อเขียน จากงานที่เหลือ การรวม libvdsk เข้ากับโครงสร้างหลักของ bhyve นั้นถูกบันทึกไว้

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

    • มีการเพิ่มแพลตฟอร์มลงในพอร์ตเพื่อตรวจจับการโจมตี วิเคราะห์บันทึก และตรวจสอบความสมบูรณ์ของไฟล์ วาซู (ทางแยกของ Ossec พร้อมรองรับการรวมเข้ากับ ELK-กอง);
  • ระบบย่อยของเครือข่าย
    • ไดรเวอร์ ena ได้รับการอัปเดตเพื่อรองรับอะแดปเตอร์เครือข่าย ENAv2 (Elastic Network Adapter) รุ่นที่สองที่ใช้ในโครงสร้างพื้นฐาน Elastic Compute Cloud (EC2) เพื่อจัดระเบียบการสื่อสารระหว่างโหนด EC2 ที่ความเร็วสูงถึง 25 Gb/s เพิ่มการรองรับ NETMAP ให้กับไดรเวอร์ ena แล้ว
    • FreeBSD HEAD นำสแต็ก MMC/SD ใหม่มาใช้ โดยอิงตามเฟรมเวิร์ก CAM และช่วยให้คุณสามารถเชื่อมต่ออุปกรณ์ด้วยอินเทอร์เฟซ SDIO (Secure Digital I/O) ตัวอย่างเช่น SDIO ใช้ในโมดูล WiFi และ Bluetooth สำหรับบอร์ดจำนวนมาก เช่น Raspberry Pi 3 สแตกใหม่ยังอนุญาตให้ใช้อินเทอร์เฟซ CAM เพื่อส่งคำสั่ง SD จากแอปพลิเคชันในพื้นที่ผู้ใช้ ซึ่งทำให้สามารถสร้างอุปกรณ์ได้ ไดรเวอร์ที่ทำงานในระดับผู้ใช้ งานได้เริ่มต้นขึ้นในการสร้างไดรเวอร์สำหรับชิปไร้สายของ Broadcom ที่ทำงานในโหมด FullMAC (ทางฝั่งชิปนั้นทำงานในลักษณะที่คล้ายกับระบบปฏิบัติการของตัวเองพร้อมกับการใช้งานสแต็กไร้สาย 802.11)
    • งานกำลังดำเนินการเพื่อใช้ NFSv4.2 (RFC-7862) สำหรับ FreeBSD เวอร์ชันใหม่ของ NFS เพิ่มการรองรับฟังก์ชัน posix_fadvise, posix_fallocate, โหมด SEEKHOLE/SEEKDATA ใน lseek และการดำเนินการคัดลอกโลคัลของส่วนของไฟล์บนเซิร์ฟเวอร์ (โดยไม่ต้องถ่ายโอนไปยังไคลเอ็นต์)

      ปัจจุบัน FreeBSD ให้การสนับสนุนพื้นฐานสำหรับการดำเนินการ LayoutError, IOAdvise, Allocate และ Copy สิ่งที่เหลืออยู่คือการใช้การดำเนินการ Seek ที่จำเป็นในการใช้ lseek(SEEKHOLE/SEEKDATA) กับ NFS มีการวางแผนรองรับ NFSv4.2 สำหรับ FreeBSD 13;

  • ระบบจัดเก็บข้อมูลและไฟล์
    • โปรเจ็กต์การทำงานใหม่ไดรเวอร์สำหรับระบบย่อย FUSE (ระบบไฟล์ใน USerspace) ซึ่งช่วยให้สามารถสร้างการใช้งานระบบไฟล์ในพื้นที่ผู้ใช้ใกล้จะเสร็จสิ้นแล้ว ไดรเวอร์ที่ให้มาในตอนแรกนั้นล้าสมัยและมีข้อบกพร่องมากมาย ในฐานะที่เป็นส่วนหนึ่งของโครงการปรับปรุงไดรเวอร์ให้ทันสมัย ​​ได้มีการนำการรองรับโปรโตคอล FUSE 7.23 มาใช้ (รองรับเวอร์ชันก่อนหน้า 7.8 ซึ่งเปิดตัวเมื่อ 11 ปีที่แล้ว) มีการเพิ่มรหัสเพื่อตรวจสอบสิทธิ์การเข้าถึงทางฝั่งเคอร์เนล (“ -o default_permissions”) เรียกไปยัง เพิ่ม VOP_MKNOD, VOP_BMAP และ VOP_ADVLOCK ความสามารถในการขัดจังหวะการทำงานของ FUSE เพิ่มการรองรับสำหรับไปป์ที่ไม่มีชื่อและซ็อกเก็ต unix ใน fusefs ความสามารถในการใช้ kqueue สำหรับ /dev/fuse อนุญาตให้อัปเดตพารามิเตอร์การเมาท์ผ่าน "mount -u" เพิ่มการสนับสนุน สำหรับการส่งออก fusefs ผ่าน NFS ใช้งานบัญชี RLIMIT_FSIZE เพิ่มแฟล็ก FOPEN_KEEP_CACHE และ FUSE_ASYNC_READ มีการเพิ่มประสิทธิภาพการทำงานที่สำคัญ และปรับปรุงองค์กรแคช
    • เพิ่มการรองรับการดำเนินการ BIO_DELETE ลงในรหัสเพจเจอร์สลับซึ่งช่วยให้คุณใช้คำสั่ง TRIM เมื่อลบบล็อกออกจากไดรฟ์ SSD เพื่อยืดอายุการใช้งาน
  • การสนับสนุนฮาร์ดแวร์
    • งานยังคงใช้การรองรับ ARM64 SoC Broadcom BCM5871X พร้อมด้วยโปรเซสเซอร์ ARMv8 Cortex-A57 โดยมีวัตถุประสงค์เพื่อใช้ในเราเตอร์ เกตเวย์ และพื้นที่จัดเก็บข้อมูลเครือข่าย ในช่วงระยะเวลาการรายงาน มีการปรับปรุงการรองรับ iProc PCIe บัสทั้งภายในและภายนอก เพิ่มการรองรับ BNXT Ethernet และงานอยู่ระหว่างดำเนินการเพื่อใช้กลไกเข้ารหัสลับในตัวเพื่อเร่งความเร็ว IPsec คาดว่าจะมีการบูรณาการโค้ดเข้ากับสาขา HEAD ในช่วงครึ่งหลังของปี
    • งานได้เริ่มรองรับ SoC NXP LS64A 1046 บิตที่ใช้โปรเซสเซอร์ ARMv8 Cortex-A72 พร้อมกลไกเร่งความเร็วการประมวลผลแพ็คเก็ตเครือข่ายในตัว, อีเธอร์เน็ต 10 Gb, PCIe 3.0, SATA 3.0 และ USB 3.0 มีการรองรับแพลตฟอร์มพื้นฐาน (SMP แบบหลายผู้ใช้) และ SATA 3.0 แล้ว การรองรับ USB 3.0, SD/MMC และ I2C อยู่ระหว่างการพัฒนา แผนดังกล่าวรวมถึงการรองรับ Ethernet, GPIO และ QSPI คาดว่างานจะแล้วเสร็จและรวมไว้ในสาขา HEAD ในไตรมาสที่ 4 ปี 2019
    • อัปเดตไดรเวอร์ mlx5en และ mlx5ib สำหรับ Mellanox ConnectX-4 [Lx], ConnectX-5 [Ex] และ ConnectX-6 [Dx] Ethernet และอะแดปเตอร์ InfiniBand เพิ่มการรองรับอะแดปเตอร์ Mellanox Socket Direct (ConnectX-6) ซึ่งช่วยให้สามารถรับส่งข้อมูลได้สูงถึง 200Gb/s บนบัส PCIe Gen 3.0 สำหรับชิป BlueField แบบมัลติคอร์ มีการเพิ่มการรองรับไดรเวอร์ RShim แล้ว มีการเพิ่มแพ็กเกจ mstflint พร้อมชุดยูทิลิตีการวินิจฉัยสำหรับอะแด็ปเตอร์ Mellanox เข้ากับพอร์ต
  • แอพพลิเคชั่นและระบบพอร์ต
    • อัปเดตส่วนประกอบสแต็กกราฟิกแล้ว ไดรเวอร์ drm.ko (Direct Rendering Manager) ได้รับการย้ายจากเคอร์เนล Linux 5.0 ไดรเวอร์นี้ถือเป็นรุ่นทดลองและได้ถูกเพิ่มลงในแผนผังพอร์ตเป็นกราฟิก/drm-devel-kmod เนื่องจากไดรเวอร์ใช้เฟรมเวิร์ก Linux KPI ที่อัปเดตเพื่อให้เข้ากันได้กับเคอร์เนล DRM API ของ Linux จึงจำเป็นต้องมี FreeBSD CURRENT เพื่อรัน ไดรเวอร์ vboxvideo.ko drm สำหรับ VirtualBox virtual GPU ได้รับการย้ายจาก Linux ด้วย แพ็คเกจ Mesa ได้รับการอัปเดตเป็นรุ่น 18.3.2 และเปลี่ยนไปใช้ LLVM จากพอร์ต devel/llvm80 แทน devel/llvm60
    • แผนผังพอร์ต FreeBSD มีมากกว่า 37000 พอร์ต จำนวน PR ที่ยังไม่ได้ปิดยังคงอยู่ที่ 2146 ในช่วงระยะเวลาการรายงาน มีการเปลี่ยนแปลง 7837 รายการจากนักพัฒนา 172 คน ผู้เข้าร่วมใหม่สามคนได้รับสิทธิ์ในการเป็นกรรมการ การอัปเดตเวอร์ชันที่สำคัญในพอร์ตต่างๆ ได้แก่: MySQL 5.7, Python 3.6, Ruby 2.5, Samba 4.8, Julia 1.0, Firefox 68.0, Chromium 75.0.3770.100 พอร์ต Go ทั้งหมดได้รับการแปลงให้ใช้แฟล็ก "USES=go" เพิ่มแฟล็ก "USES=cabal" ให้กับตัวจัดการแพ็คเกจ Cabal ที่ใช้สำหรับโค้ด Haskell เปิดใช้งานโหมดการป้องกันสแต็กที่เข้มงวดแล้ว Python เวอร์ชันเริ่มต้นคือ 3.6 แทนที่จะเป็น 2.7
    • ได้เตรียมการเผยแพร่ยูทิลิตี้แล้ว nsysctl 1.0ซึ่งเสนออะนาล็อกให้กับ /sbin/sysctl ที่ใช้ ลิบโซ สำหรับเอาต์พุตและจัดเตรียมชุดตัวเลือกเพิ่มเติม Nsysctl สามารถใช้ในการตรวจสอบสถานะของค่า sysctl ด้วยสายตาและนำเสนอข้อมูลเกี่ยวกับวัตถุในรูปแบบที่มีโครงสร้าง สามารถส่งออกในรูปแบบ XML, JSON และ HTML ได้

ที่มา: opennet.ru

เพิ่มความคิดเห็น