Kernel

共 215 篇文章。

PRS_NEW: Check it or not?

• Kernel

It seems that I have caught a race condition which can be triggered by renice(1), and we need to take PRS_NEW into account when we need to access several attributes of a process object.

Robert has pointed out that we may want to just initialize the attribute early to avoid the race condition. After reading some old 4.4BSD code it seems that the process object is linked into allproc list *before* everything is initialized.

阅读全文… ( 本文约 97 字,阅读大致需要 1 分钟 )

ULE 2.0 hits -HEAD

• Kernel

Today, Jeff Roberson has committed his version 2.0 ULE scheduler. This new version has addressed several design issues as well as several bugs.

The new scheduler has adopted a circular queue, instead of the double-queue structure which is also found in the Linux O(1) scheduler. The latter has lead to difficulty implementing nice correctly.

For uniprocessor case, ULE is now faster.

MP algorithm has been simplified a bit.

A lot of bugfixes, etc.

To quote the original commit message:

ULE 2.0:

  • Remove the double queue mechanism for timeshare threads. It was slow due to excess cache lines in play, caused suboptimal scheduling behavior with niced and other non-interactive processes, complicated priority lending, etc.
  • Use a circular queue with a floating starting index for timeshare threads. Enforces fairness by moving the insertion point closer to threads with worse priorities over time.
  • Give interactive timeshare threads real-time user-space priorities and place them on the realtime/ithd queue.
  • Select non-interactive timeshare thread priorities based on their cpu utilization over the last 10 seconds combined with the nice value. This gives us more sane priorities and behavior in a loaded system as compared to the old method of using the interactivity score. The interactive score quickly hit a ceiling if threads were non-interactive and penalized new hog threads.
  • Use one slice size for all threads. The slice is not currently dynamically set to adjust scheduling behavior of different threads.
  • Add some new sysctls for scheduling parameters.

Bug fixes/Clean up:

  • Fix zeroing of td_sched after initialization in sched_fork_thread() caused by recent ksegrp removal.
  • Fix KSE interactivity issues related to frequent forking and exiting of kse threads. We simply disable the penalty for thread creation and exit for kse threads.
  • Cleanup the cpu estimator by using tickincr here as well. Keep ticks and ltick/ftick in the same frequency. Previously ticks were stathz and others were hz.
  • Lots of new and updated comments.
  • Many many others.

Tested on: up x86/amd64, 8way amd64.

阅读全文… ( 本文约 506 字,阅读大致需要 3 分钟 )

如何:为 FreeBSD UFS2 文件系统恢复受损的主超级块

• Kernel

HOWTO: Recover damaged FreeBSD UFS2 file systems with damaged master super-block

Copyright © Xin LI, 2006.
All Rights Reserved.

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

  1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
  2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.

THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS’’ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

注意:本文介绍的方法部分,假定读者对UFS文件系统,以及FreeBSD的日常操作相当熟悉;请勿轻易执行本文介绍的操作,本文中的操作,可能导致fsck_ffs(8)无法修正的严重问题。由于在此本人已明确告知读者这一风险,据此,对于由于执行这些操作导致的任何数据损失,本人明示不承担任何责任。

阅读全文… ( 本文约 2049 字,阅读大致需要 5 分钟 )

if_ioctl的锁问题?

• Kernel

今天尝试了一下触发zonelim的方法,不过zonelim没搞出来,却发现了另一个问题——如果并发执行ifconfig配置同一块网卡,似乎有由于欠锁导致的断言失败。打算找时间研究一下。

参与评论

KSE成为内核选项

• Kernel

今天,John Birrell同学commit了一个不大不小的patchset—-将KSE变为内核选项。具体说来,在-CURRENT上,KSE不再是一个必选项了。

KSE是FreeBSD 5.0-CURRENT时的一个非常重要的技术探索,它是对由华盛顿大学THOMAS E. ANDERSON等人提出的调度器激活概念的一个实现。

对于M:N线程来说,调度器激活是一项十分先进的概念。在这个模型中,内核并不需要了解用户态线程的细节,而用户态线程也并不是由内核直接调度,相反,这些线程被绑定到一系列"调度实体"上,内核能够看到这些调度实体,并在上下文切换时激活用户态的线程调度器。由于减少了内核-用户态的上下文切换操作,因此理论上这一模型能够获得更好的性能。

阅读全文… ( 本文约 1079 字,阅读大致需要 3 分钟 )