|
About ::
TODO ::
Blog ::
RSS ::
Old blog ::
Projects ::
GIT ::
Gallery ::
Notes
Sun, 12 Oct 2008
Back to the roots.
/devel/other :: Link / Comments () Fri, 10 Oct 2008
How to get back 100 MB/s in several clicks or fixing tbench regression for fun.
/devel/other :: Link / Comments () Thu, 09 Oct 2008
An interesting observation about tbench regression.
/devel/other :: Link / Comments () Wed, 01 Oct 2008
Tbench regression. SLAB vs SLUB.
![]() As was expected, turning off TSO/GSO does not fix the whole issue, performance was increased from 366 MB/s upto 381 MB/s, which is still less than 398 MB/s for 2.6.26-slub. Another interesting issue I found, is SLAB vs SLUB difference. The former is always faster (about 5-7 MB/s difference): 366 vs 361 MB/s for 2.6.27-rc7 and 381 vs 374 MB/s when TSO and GSO are turned off. Pekka Enberg suggested to revert 5595cffc8248e4672c5803547445e85e4053c8fc commit, which could result in this performance degradation, but without this commit SLUB behaves a little bit slower: 372 vs 374 MB/s. I will try to find out why there is a huge drop between 2.6.23 and 2.6.24 (54 MB/s) next. /devel/other :: Link / Comments () Mon, 29 Sep 2008
First fix for the tbench over loopback regression.
current: 187 MB/s patched: 194 MB/sPatch is rather trivial: it disables TSO and GSO in loopback and generically on devices which are capable of scatter-gather (where it was automatically enabled by e5a4a72d4f8 commit, which I biseced to be guilty). Actually TSO disablement part provided more gain than GSO on SG devices. Idea behind patches is clear: we create bigger packet, so we should have smaller overhead of its processing, but apparently GSO/TSO packet creation overhead dominates in loopback at least. My all three (big) test machines died in various (apparently unbootable) bisections, so I tested it in small and very slow Xen domain. Because of that I did not run 2.6.22 kernel, since git operations and compilation take ages on this 'machine'. For example I was only able to perform about dozen or so git checkous/resets/bisections and compilations for the whole day. I've posted patch to the netdev@, let's see the result. Forgot to mention, that I wanted to sell this patch for the DST, POHMELFS or netchannels patch review next time I will post them :) /devel/other :: Link / Comments () Sun, 28 Sep 2008
Tbench Linux regressions with time.
![]() Yes, we suck! I decided to try to fix this issues, and started to bisect 2.6.22->2.6.23 and 2.6.26->2.6.27 on two identical machines, which have 4 logical CPUs (HT enabled) and 4 GB of RAM. Result was quite surprising: second bisection in the 22->23 froze machine in the middle of the compilation, and first bisection in the 26->27 did not boot. Since I ran it remotely, no progress on this til tomorrow. /devel/other :: Link / Comments () Wed, 24 Sep 2008At kernel summit. Check new ones! /devel/other :: Link / Comments () Tue, 23 Sep 2008
2008 Linux Kernel Summit photos.
At kernel summit. Last couple of photos were made at Linux Plumbers Conference (filesystem bof). Not all of them got into the gallery though, I need to try to find missing bits. I needed to get a real flash instead and do not use build-in one, which sometimes mangled the images... Got a look? /devel/other :: Link / Comments () Mon, 22 Sep 2008
Do you know why mammoths are dead?
I'm sorry, I'm not going to waste time on this if you keep acting this dishonest; welcome to my mail filter...If we pretend to not know about the problem, problem comes and hits us out of stand. /devel/other :: Link / Comments () Sun, 21 Sep 2008
Mark IPW2100 driver as broken in linux kernel.
/devel/other :: Link / Comments () Wed, 17 Sep 2008
A small gift from Gumstix.
Texas Instruments X-Loader 1.4.2 (Sep 10 2008 - 08:47:04) Reading boot sector Loading u-boot.bin from mmc U-Boot 1.3.4 (Sep 10 2008 - 08:47:30) OMAP3503-GP rev 2, CPU-OPP2 L3-165MHz Gumstix Overo board + LPDDR/NAND DRAM: 128 MB NAND: 256 MiB *** Warning - bad CRC or NAND, using default environment In: serial Out: serial Err: serial Hit any key to stop autoboot: 0 reading uImage 2501840 bytes read ## Booting kernel from Legacy Image at 82000000 ... Image Name: Angstrom/2.6.27-rc6+r27+giteddca Image Type: ARM Linux Kernel Image (uncompressed) Data Size: 2501776 Bytes = 2.4 MB Load Address: 80008000 Entry Point: 80008000 Verifying Checksum ... OK Loading Kernel Image ... OK OK Starting kernel ... Uncompressing Linux............................................................................ .................................................. Linux version 2.6.27-rc6-omap1 (sakoman@tera) (gcc version 4.2.1) #1 Wed Sep 10 20:32:01 PDT 2008 CPU: ARMv7 Processor [411fc082] revision 2 (ARMv7), cr=00c5387f Machine: Gumstix Overo Memory policy: ECC disabled, Data cache writeback OMAP3430 ES2.2 SRAM: Mapped pa 0x40200000 to va 0xd7000000 size: 0x100000 CPU0: L1 I VIPT cache. Caches unified at level 2, coherent at level 3 CPU0: Level 1 cache is separate instruction and data CPU0: I cache: 16384 bytes, associativity 4, 64 byte lines, 64 sets, supports RA CPU0: D cache: 16384 bytes, associativity 4, 64 byte lines, 64 sets, supports RA WB WT CPU0: Level 2 cache is unified CPU0: unified cache: 262144 bytes, associativity 8, 64 byte lines, 512 sets, supports WA RA WB WT Built 1 zonelists in Zone order, mobility grouping on. Total pages: 32512 Kernel command line: setenv bootargs console=ttyS2,115200n8 root=/dev/mmcblk0p2 rw rootfstype=ext3 rootdelay=1 Clocking rate (Crystal/DPLL/ARM core): 26.0/331/500 MHz GPMC revision 5.0 IRQ: Found an INTC at 0xd8200000 (revision 4.0) with 96 interrupts Total of 96 interrupts on 1 active controller OMAP34xx GPIO hardware version 2.5 PID hash table entries: 512 (order: 9, 2048 bytes) OMAP clockevent source: GPTIMER1 at 32768 Hz Console: colour dummy device 80x30 Dentry cache hash table entries: 16384 (order: 4, 65536 bytes) Inode-cache hash table entries: 8192 (order: 3, 32768 bytes) Memory: 128MB = 128MB total Memory: 124372KB available (4088K code, 368K data, 916K init) SLUB: Genslabs=12, HWalign=32, Order=0-3, MinObjects=0, CPUs=1, Nodes=1 Calibrating delay loop... 499.92 BogoMIPS (lpj=1949696) Mount-cache hash table entries: 512 CPU: Testing write buffer coherency: ok net_namespace: 488 bytes NET: Registered protocol family 16 Found NAND on CS0 Registering NAND on CS0 OMAP DMA hardware revision 4.0 USB: No board-specific platform config found i2c_omap i2c_omap.1: bus 1 rev3.12 at 2600 kHz i2c_omap i2c_omap.3: bus 3 rev3.12 at 400 kHz TWL4030: TRY attach Slave TWL4030-ID0 on Adapter OMAP I2C adapter [1] TWL4030: TRY attach Slave TWL4030-ID1 on Adapter OMAP I2C adapter [1] TWL4030: TRY attach Slave TWL4030-ID2 on Adapter OMAP I2C adapter [1] TWL4030: TRY attach Slave TWL4030-ID3 on Adapter OMAP I2C adapter [1] Initialized TWL4030 USB module SCSI subsystem initialized usbcore: registered new interface driver usbfs usbcore: registered new interface driver hub usbcore: registered new device driver usb musb_hdrc: version 6.0, pio, host, debug=0 musb_hdrc: USB Host mode controller at d80ab000 using PIO, IRQ 92 musb_hdrc musb_hdrc: MUSB HDRC host driver musb_hdrc musb_hdrc: new USB bus registered, assigned bus number 1 usb usb1: configuration #1 chosen from 1 choice hub 1-0:1.0: USB hub found hub 1-0:1.0: 1 port detected usb usb1: New USB device found, idVendor=1d6b, idProduct=0002 usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1 usb usb1: Product: MUSB HDRC host driver usb usb1: Manufacturer: Linux 2.6.27-rc6-omap1 musb-hcd usb usb1: SerialNumber: musb_hdrc Bluetooth: Core ver 2.13 NET: Registered protocol family 31 Bluetooth: HCI device and connection manager initialized Bluetooth: HCI socket layer initialized NET: Registered protocol family 2 IP route cache hash table entries: 1024 (order: 0, 4096 bytes) TCP established hash table entries: 4096 (order: 3, 32768 bytes) TCP bind hash table entries: 4096 (order: 2, 16384 bytes) TCP: Hash tables configured (established 4096 bind 4096) TCP reno registered NET: Registered protocol family 1 VFS: Disk quotas dquot_6.5.1 Dquot-cache hash table entries: 1024 (order 0, 4096 bytes) JFFS2 version 2.2. (NAND) (SUMMARY) © 2001-2006 Red Hat, Inc. msgmni has been set to 243 io scheduler noop registered io scheduler anticipatory registered io scheduler deadline registered io scheduler cfq registered (default) omapfb: configured for panel overo omapfb: DISPC version 3.0 initialized Console: switching to colour frame buffer device 128x48 omapfb: Framebuffer initialized. Total vram 1572864 planes 1 omapfb: Pixclock 54000 kHz hfreq 45.1 kHz vfreq 57.7 Hz Serial: 8250/16550 driver4 ports, IRQ sharing enabled serial8250.0: ttyS0 at MMIO 0x4806a000 (irq = 72) is a ST16654 serial8250.0: ttyS1 at MMIO 0x4806c000 (irq = 73) is a ST16654 serial8250.0: ttyS2 at MMIO 0x49020000 (irq = 74) is a ST16654 console [ttyS2] enabled brd: module loaded loop: module loaded usbcore: registered new interface driver asix usbcore: registered new interface driver cdc_ether usbcore: registered new interface driver usb8xxx libertas_sdio: Libertas SDIO driver libertas_sdio: Copyright Pierre Ossman i2c /dev entries driver TWL4030 GPIO Demux: IRQ Range 384 to 402, Initialization Success input: triton2-pwrbutton as /class/input/input0 triton2 power button driver initialized Driver 'sd' needs updating - please use bus_type methods omap2-nand driver initializing NAND device: Manufacturer ID: 0x2c, Chip ID: 0xba (Micron NAND 256MiB 1,8V 16-bit) cmdlinepart partition parsing not available Creating 5 MTD partitions on "omap2-nand": 0x00000000-0x00080000 : "xloader" 0x00080000-0x00240000 : "uboot" 0x00240000-0x00280000 : "uboot environment" 0x00280000-0x00680000 : "linux" 0x00680000-0x10000000 : "rootfs" ehci-omap ehci-omap.0: new USB bus registered, assigned bus number 2 ehci-omap ehci-omap.0: irq 77, io mem 0x48064800 ehci-omap ehci-omap.0: USB 0.0 started, EHCI 1.00, driver 10 Dec 2004 usb usb2: configuration #1 chosen from 1 choice hub 2-0:1.0: USB hub found hub 2-0:1.0: 3 ports detected usb usb2: New USB device found, idVendor=1d6b, idProduct=0002 usb usb2: New USB device strings: Mfr=3, Product=2, SerialNumber=1 usb usb2: Product: OMAP-EHCI Host Controller usb usb2: Manufacturer: Linux 2.6.27-rc6-omap1 ehci_hcd usb usb2: SerialNumber: ehci-omap.0 Initializing USB Mass Storage driver... usbcore: registered new interface driver usb-storage USB Mass Storage support registered. mice: PS/2 mouse device common for all mice twl4030_rtc twl4030_rtc: rtc core: registered twl4030_rtc as rtc0 twl4030_rtc twl4030_rtc: Power up reset detected. twl4030_rtc twl4030_rtc: Enabling TWL4030-RTC. OMAP Watchdog Timer Rev 0x31: initial timeout 60 sec Bluetooth: HCI UART driver ver 2.2 Bluetooth: HCI H4 protocol initialized Bluetooth: HCI BCSP protocol initialized Bluetooth: Broadcom Blutonium firmware driver ver 1.2 usbcore: registered new interface driver bcm203x Bluetooth: Digianswer Bluetooth USB driver ver 0.10 usbcore: registered new interface driver bpa10x mmci-omap mmci-omap.2: No Slots usbcore: registered new interface driver usbhid usbhid: v2.6:USB HID core driver Advanced Linux Sound Architecture Driver Version 1.0.17. usbcore: registered new interface driver snd-usb-audio ASoC version 0.13.2 overo SoC init TWL4030 Audio Codec init asoc: twl4030 <-> omap-mcbsp-dai mapping ok ALSA device list: #0: overo (twl4030) oprofile: using timer interrupt. TCP cubic registered NET: Registered protocol family 17 NET: Registered protocol family 15 Bluetooth: L2CAP ver 2.11 Bluetooth: L2CAP socket layer initialized Bluetooth: SCO (Voice Link) ver 0.6 Bluetooth: SCO socket layer initialized Bluetooth: RFCOMM socket layer initialized Bluetooth: RFCOMM TTY layer initialized Bluetooth: RFCOMM ver 1.10 Bluetooth: BNEP (Ethernet Emulation) ver 1.3 Bluetooth: BNEP filters: protocol multicast Bluetooth: HIDP (Human Interface Emulation) ver 1.2 RPC: Registered udp transport module. RPC: Registered tcp transport module. ieee80211: 802.11 data/management/control stack, git-1.1.13 ieee80211: Copyright (C) 2004-2005 Intel Corporation ![]() Neat toy! Computer itself actually has a size of the finger (not that thick though), but it does not have a power supply and interface connectors, so essentially unusable as stand-alon board, but with extension motherboard (as on the picture) it becomes very interesting with several usb connectors, hdmi display and audio connectors. WiFi/bluetooth module is based on wi2wi W2CBW003 Marvell 88W8686 chip. Pretty much unlikely Marvell will share a documentation (on my experience if you do not get more than 1000 chips in single order you will not be allowed to enter its intranet and get access to the needed datasheets), so I will not be able to work on wireless driver, but I would gladly implement it otherwise. /devel/other :: Link / Comments ()
Al Viro uses Appele's Mac.
/devel/other :: Link / Comments () Tue, 16 Sep 2008[47477.938968] ipw2100: Fatal interrupt. Scheduling firmware restart. [47478.808276] ipw2100: Fatal interrupt. Scheduling firmware restart. [47480.611796] ipw2100: Fatal interrupt. Scheduling firmware restart. [47483.415218] ipw2100: Fatal interrupt. Scheduling firmware restart. [47487.154543] ipw2100: Fatal interrupt. Scheduling firmware restart.There is no wired access at kernel summit, but Pavel Emelyanov setup a NAT for me, so I can write this exceptionally informative note. /devel/other :: Link / Comments () Mon, 08 Sep 2008
GIT web interface for the projects.
/devel/other :: Link / Comments () Tue, 02 Sep 2008
Linux Kernel Summit.
/devel/other :: Link / Comments () Wed, 20 Aug 2008
To SSD or not to SSD? High-end SSD vs. SAS disks benchmark.
# mke2fs -b 4096 -R stride=16 -j -J size=384 -m 0 -O dir_index /dev/md0Mount options: /dev/md0 /mnt/raid ext3 noatime,reservation,data=writeback,commit=300 0 dirty_writeback_centisecs VM sysctl was set to 3000.First, single disk performance: SAS vs SSD. ![]() ![]() Sequential access speed (both reading and writing) is almost 20% higher for SAS disk than that of SSD. But let's look at random access speed. SSD reading jumps to the maximum theoretical 100-120 MB/s plato very quickly (impressive peaks at 64 and 128 KBs, which can tell us a bit of the firmware structure of the data blocks), SAS disk is definitely a looser here, since it reaches its maximum performance numbers only at 8-16 MB records. But SSD random writing is more than two times slower than that of SAS until the latter reaches its maximum performance. Also very intersting to note, that sequential access is actually noticebly slower than the maximum random access speed for SSD. Now let's check two-SSD-disk SW RAID-0 array performance with different stripe size. ![]() ![]() ![]() Random read peaks move around depending on stripe size. So clearly if your workload depends on random writing, SSD may not be an appropriate solution, and it is definitely the winner in random reading workload. Please also note, that it was high-end SSD with 0.1 ms seek latency, and dight now most of the popular SSDs do not have that shiny numbers. Great thanks to Vladislav Seliverstov for his data and analysis. /devel/other :: Link / Comments () Thu, 07 Aug 2008
To Matthew Garrett.
Summary: Almost all problems caused by bugs in Linux, one problem caused by BIOS vendors interpreting the ACPI specification differently to the Linux implementation and trivially worked around. No sabotage.Except the fact, that it only works for 'Windows XXXX' OSI label. A short analogy. Before. Several years ago there were no problems with ndiswrapper driver with wireless NICs. More years ago there were no problems with reverse engineered drivers for ATA/IDE and usual NICs. Now. Try to tell that you do not support Linux as a server platform, so you will not provide driver or spec for your SATA/SCSI controller or NIC. Some companies even join continual development of the reverse engineered drivers (wireless, ethernet, (s)ata/ide... But of course there are exceptions, no need to make it a red point. Sorry, but we do not support 'Linux' ACPI label in OS/OSI because vendors will not test it and other similar ... is just a dubious excuse not to push them hard enough. The most exciting example is atheros wireless driver situation. /devel/other :: Link / Comments () Sun, 03 Aug 2008
Continuing crazy security ideas.
/devel/other :: Link / Comments () Sat, 02 Aug 2008
Game theory for kernel.
/devel/other :: Link / Comments () Tue, 29 Jul 2008
Another excellent LISP book.
/devel/other :: Link / Comments () Wed, 23 Jul 2008
Manager's thoughts: unused extensibility and used de-facto standards.
/devel/other :: Link / Comments () Sun, 20 Jul 2008
Crazy security idea.
/devel/other :: Link / Comments ()
Project presentation.
/devel/other :: Link / Comments () Tue, 08 Jul 2008
Anecdots and allegories.
/devel/other :: Link / Comments () Wed, 02 Jul 2008We would like to invite you to the 2008 Kernel summit, and we hope that you will be able to join us...I'm trying to recall previous kernel summit: That was fun, but no one wanted to play football For that year I only committed a HIFN driver into the tree, and there was no kevent :) This time in US, thinking... /devel/other :: Link / Comments () Thu, 26 Jun 2008
Hacking your ISP for fun and profit.
/devel/other :: Link / Comments () Tue, 24 Jun 2008
VM gotcha: forbidden double kmapping.
IP: [This happend for exacly above case, when page was first mapped via kmap() in POHMELFS and then via
kmap_atomic() in HMAC crypto processing code.I wonder what will happen if we ever try to send kmapped pages over IPsec tunnel. Likely it will ooops too... This can happen for example when pages are mapped in tcp_sendpage() when calling sendfile()
over the interface, which does not support hardware checksumming
and scater-gather: mapped pages are pushed down the network stack
where they will be eventually encrypted/hashed in IPsec, which
will in turn call kmap_atomic().So, if you will find obscure oops in kmap_atomic()
and friends, first check that calling stack did not map page
earlier.
/devel/other :: Link / Comments () Thu, 19 Jun 2008
CLISP socket streams.
/devel/other :: Link / Comments () Wed, 18 Jun 2008(defmacro with-output-dir ((out pos dir flags) &body form)
`(let ((,pos 2))
(dolist (operation (nthcdr 2 *iozone-tests*))
(let* ((dir (pathname-as-directory dir))
(output-file (make-pathname
:directory (pathname-directory ,dir)
:name operation
:type "gnuplot")))
(with-open-file (,out output-file :direction :output :if-exists ,flags)
,@form))
(incf pos))))
(defun write-gnuplot-headers (dir)
(with-output-dir (out pos dir :supersede)
(format out "set title \"Iozone performance: ~a, KB/s\"~%" operation)
(format out "set terminal png small size 450 350~%")
(format out "set logscale x~%")
(format out "set xlabel \"Record size in KBytes\"~%")
(format out "set ylabel \"Kbytes/sec\"~%")
(format out "set output \"~a.png\"~%" (elt *iozone-tests* pos))
(format out "plot ")))
(defun update-gnuplot-headers (dir file)
(with-output-dir (out pos dir :append)
(unless *first-file-p*
(format out ", "))
(let* ((fstype (pathname-name file))
(name (make-output-name file)))
(format out "\"~a\" using 1:~d title \"~a\" with lines" name (1+ pos) fstype))))
Macros are really the coolest feature of the LISP. Now I believe I started to understand LISP kung-fu.Iozone parser is essentially ready. I was a bit pessimistic yesterday: it took only half of the day and several hours today, and code itself is rather ugly (and frequently really ugly, likely far from the LISP way), but it works: it runs over given dir, searches there for files with given extensions, parses them (removes unneded iozone information), writes result to specified directory. Also runs over iozone test strings and generate gnuplot scripts for them, which will build a graph based on filesystem info it gathered traversing the tree above, so results looks like this: $ ./parser.lisp Processing: /tmp/iozone/tmpfs/nfs.out ... done Processing: /tmp/iozone/tmpfs/pohmelfs.out ... done $ cat /tmp/iozone/tmpfs/out/read.gnuplot set title "Iozone performance: read, KB/s" set terminal png small size 450 350 set logscale x set xlabel "Record size in KBytes" set ylabel "Kbytes/sec" set output "read.png" plot "/tmp/iozone/tmpfs/nfs.out.data" using 1:5 title "nfs" with lines, "/tmp/iozone/tmpfs/pohmelfs.out.data" using 1:5 title "pohmelfs" with lines /devel/other :: Link / Comments () Tue, 17 Jun 2008(defun string_to_list (str)
(let ((num 0) (ret '()) (string_len (length str)))
(dotimes (i string_len)
(let ((sym (elt str i)))
(cond
((not (char-number-p sym))
(unless (eql num 0)
;(format t ": ~d~%" num)
(push num ret)
(setf num 0)))
(t (setf num (+ (* num 10) (to_number sym)))
(when (eql i (- string_len 1))
(push num ret))))))
(nreverse ret)))
Which is a part of my LISP parser for iozone output files. So far it is able to convert its output numbers (performance in KB/sec)
into LISP lists (one list per record), so single line of iozone output becomes a single list of numbers
(ugh, I was forced to write string-to-number conversion function).It is not that serious achievement likely, and it took the whole day, but nevertheless I like it, although I would write the same in C much faster :) Main problem with Lisp for me is its functional-conditioning system. Converted to C it looks like:
if (a) {
if (b) {
if (c) {
do_stuff()
}
}
}
While I would write:if (!a) return; if (!b) return; if (!c) return; do_stuff()So far I did not use macros at all, and all the time looked into Practical Common Lisp book (and frankly got from there directory processing functions, although modified it a bit), but what would you expect from the first project. Tomorrow I will extend it to write gnuplot-compatible file and finally generate some graphs (I do not know how to call external programms from LISP though). Frankly, I'm not yet excited about how cool LISP is, but I like it, since it is different. Just like I like my Ugh, and with proper automatic vim highlightning I am not afraid of parenthesis. Interested reader can grab my sources and comment on ugliness. Also found an 'interesting' article at IEEE about LISP: Migration of Common Lisp Programs to the Java Platform -The Linj Approach :) /devel/other :: Link / Comments () Fri, 06 Jun 2008
Contributors we are losing and kernel summit talk about it.
/devel/other :: Link / Comments () Mon, 02 Jun 2008- If you haven't noticed, I don't take "no" for an answer,Fun thread :) There is actually a serious problem in kernel community, when some new idea is being implemented, and it moves against something which sits in mind of one or another big kernel hacker out there. When such person replies, that this is bad idea (sometimes without technical arguments), people just stop looking at replies and do not follow arguments of the author just because they frequently do not know area in question enough to make decision and thus rely on others. This only works when 'others', i.e. core kernel maintainers, are good and do not base theirs decisions on personal feeling and only get technical side into assumption. Unfortunately it is not always the case, and political methods are used. Sometimes even only political methods are used... /devel/other :: Link / Comments () Sun, 25 May 2008#!/usr/bin/clisp
(defun f (m)
(do ((k 0 (1+ k))
(c 0 n)
(n 1 (+ c n)))
((eql k m)
(format t "~r" c))))
(f 317)
Guess the result:seven hundred and ninety-three vigintillion, five hundred and ninety-one novemdecillion, four hundred and seven octodecillion, eight hundred and four septendecillion, one hundred and fifty-one sexdecillion, nine hundred and twenty-six quindecillion, five hundred and ninety-three quattuordecillion, seven hundred and ninety-three tredecillion, forty-two duodecillion, one hundred and twenty-six undecillion, eight hundred and ninety-one decillion, one hundred and twenty-eight nonillion, eight hundred and nineteen octillion, six hundred and ten septillion, seven hundred and ten sextillion, one hundred and forty quintillion, one hundred and forty-five quadrillion, thirty-seven trillion, nine hundred and fifty-eight billion, two hundred and seventy-three million, seven hundred and seventy-seven thousand, three hundred and ninety-seven
/devel/other :: Link / Comments () Wed, 21 May 2008$ clisp
i i i i i i i ooooo o ooooooo ooooo ooooo
I I I I I I I 8 8 8 8 8 o 8 8
I \ `+' / I 8 8 8 8 8 8
\ `-+-' / 8 8 8 ooooo 8oooo
`-__|__-' 8 8 8 8 8
| 8 o 8 8 o 8 8
------+------ ooooo 8oooooo ooo8ooo ooooo 8
Welcome to GNU CLISP 2.42 (2007-10-16)
This one has, imho, the less ugly command line... And I'm against SLIME
and Emacs. Also tried SBCL, GNU CL and something else, but likely CLIPS will
stay.Instead of sleeping (it will be time to wake up soon in Moscow slums) or at least catching POHMELFS bugs (last several days were solely devoted to this task and fair number of them were fixed as long as some interesting features introduced (probably new), so likely new release will see the light later this week), I'm drinking some beer and making first steps into this. So far looks quite new and probably interesting, but every entrance article about it I read told, that if you are after 25 years old, it is likely impossible to change something in your perception. I'm after, but think that it will be fun and probably will become a really good tool for me. The more I think about it, the more interesting tasks (as long as those I'm already thinking about like CAPTCHA) I find... /devel/other :: Link / Comments () Fri, 25 Apr 2008
Solaris vs 'Have you ever kissed a girl?'
No, but I can kiss the skyHe was 22 that days? :) From my developer's point of view Solaris first sucks because of its contributor agreement. There is no way I can devote my time to organization, which will get my work for free and do whatever they want with it without my opinion as author (Actually the same applies to BSD-style at some degree. Yes, that can be trivial greediness). It is not _that_ bad OS, but there is no known practice in modern medcine of deadman awakening. Slolaris has its niche, but that's it, although Linux can be tuned to be faster (or if it has some bugs, they can be fixed) in that areas, but that does not matter, people who make decisions already know that they want. Pseudo openness of the Solaris is just a marketing noise. Those who want to hear it will hear just that, no matter how things are in real life. /devel/other :: Link / Comments () Tue, 22 Apr 2008
Debunked copy_to_user() from kernel thread problem.
/devel/other :: Link / Comments () Mon, 14 Apr 2008
A hypocrisy.
/devel/other :: Link / Comments () Thu, 10 Apr 2008
get_user_pages() sclability.
/devel/other :: Link / Comments () Thu, 03 Apr 2008
Codying style Becauseitmoreeasilyallowsyoureyestoseethedifferentoperators. B e c a u s e i t m o r e e a s i l y a l l o w s y o u r e y e s t o s e e t h e d i f f e r e n t o p e r a t o r s .The same applies to more common: for (i=0; i<10; ++i) vs for (i = 0; i < 10; ++i)The latter just wastes lots of space and forces eyes to move That is my own opinion, obviously the more people involved, more opinions strike. So, never kick someone when he is on the edge Ugh, and forgot likely the favourite one: for (i=0; i<10; ++i) vs for (i=0; i<10; i++)Update: Oh holy crap: I recall people compared theirs uptimes to show kernel/ maintainer has this big: ===========D arch/alpha maintainer has this big: =D arch/arm maintainer has this big: ==D arch/avr32 maintainer has this big: ============D arch/blackfin maintainer has this big: ===================================D arch/cris maintainer has this big: =D arch/frv maintainer has this big: ====D arch/h8300 maintainer has this big: =D arch/ia64 maintainer has this big: ==D arch/m32r maintainer has this big: ====D arch/m68k maintainer has this big: ==D arch/m68knommu maintainer has this big: =====D arch/mips maintainer has this big: ====D arch/parisc maintainer has this big: D arch/powerpc maintainer has this big: ==D arch/ppc maintainer has this big: =D arch/s390 maintainer has this big: =D arch/sh maintainer has this big: ====D arch/sparc maintainer has this big: ==D arch/sparc64 maintainer has this big: ===D arch/um maintainer has this big: ==D arch/v850 maintainer has this big: ===D arch/x86 maintainer has this big: =D arch/xtensa maintainer has this big: ==DAnd couple of my projects: fs/pohmelfs maintainer has this big: =======D drivers/block/dst/ maintainer has this big: ============D drivers/connector maintainer has this big: ===D drivers/w1 maintainer has this big: =======DNot bad, will put it near the mirror... /devel/other :: Link / Comments () Tue, 01 Apr 2008
I believe Firefox as is can pass Turing test.
gettimeofday({1207056215, 592745}, NULL) = 0
gettimeofday({1207056215, 592792}, NULL) = 0
gettimeofday({1207056215, 592858}, NULL) = 0
gettimeofday({1207056215, 592909}, NULL) = 0
gettimeofday({1207056215, 592957}, NULL) = 0
gettimeofday({1207056215, 593005}, NULL) = 0
gettimeofday({1207056215, 593064}, NULL) = 0
gettimeofday({1207056215, 593139}, NULL) = 0
gettimeofday({1207056215, 593237}, NULL) = 0
gettimeofday({1207056215, 593292}, NULL) = 0
gettimeofday({1207056215, 593346}, NULL) = 0
gettimeofday({1207056215, 593382}, NULL) = 0
gettimeofday({1207056215, 593431}, NULL) = 0
gettimeofday({1207056215, 593491}, NULL) = 0
gettimeofday({1207056215, 593541}, NULL) = 0
gettimeofday({1207056215, 593589}, NULL) = 0
gettimeofday({1207056215, 593638}, NULL) = 0
gettimeofday({1207056215, 593696}, NULL) = 0
gettimeofday({1207056215, 593762}, NULL) = 0
gettimeofday({1207056215, 593843}, NULL) = 0
gettimeofday({1207056215, 593897}, NULL) = 0
gettimeofday({1207056215, 593951}, NULL) = 0
gettimeofday({1207056215, 593987}, NULL) = 0
gettimeofday({1207056215, 594034}, NULL) = 0
gettimeofday({1207056215, 594093}, NULL) = 0
Suddenly it started to eat my CPU by getting time every 50ms... I can not
say why it is needed, except some sign of AI calibrating
its ion cannon. Fortunately it was killed before any damage (except
screaming cooler on the processor) was made.
/devel/other :: Link / Comments () Wed, 19 Mar 2008
I have a very bad carma: hardware specification of the testing machines.
/devel/other :: Link / Comments () Sat, 15 Mar 2008
Linux sucks? I believe I already told that.
# mount /dev/dvd /mnt ...^C # dmesg | tail [ 853.189807] sr 1:0:0:0: [sr0] Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE,SUGGEST_OK [ 853.189822] sr 1:0:0:0: [sr0] Sense Key : Medium Error [current] [ 853.189832] sr 1:0:0:0: [sr0] Add. Sense: No seek complete [ 853.189843] end_request: I/O error, dev sr0, sector 9180408 [ 853.189852] Buffer I/O error on device sr0, logical block 1147551 ... # dd if=/dev/dvd of=/tmp/data bs=1M # mount -o loop /tmp/data /mnt # ls /mnt Doctor HouseSo I can not mount dvd via mount, but can do the same after sequential
read of the dvd into the file. This error with seeking looks like problem with
hardware _or_ linux driver. I know hardware sucks, but if sequential read works
I can not understand why any other does not...Sigh, it is 21 century on the street iirc... Main problem is that anything other sucks even more. And everyone is guilty, for example there is a bug in hifn 795x hardware crypto accelerator driver I wrote, which is in the mainline, or two in DST project, or aywhere else. I wish world to be perfect... /devel/other :: Link / Comments () Fri, 29 Feb 2008
Richard Stallman in Moscow.
/devel/other :: Link / Comments () Tue, 26 Feb 2008
Traffic jam simulator and some math analysis.
/devel/other :: Link / Comments () Tue, 19 Feb 2008
Fedora sucks. It is not even remotely designed for smaller than high-end systems.
error: Couldn't fork %post: Cannot allocate memory Updating : libebml ################### [ 68/1218] error: Couldn't fork %post: Cannot allocate memory Updating : xorg-x11-server-utils ################### [ 69/1218] Updating : fribidi ################### [ 70/1218] error: Couldn't fork %post: Cannot allocate memory Updating : lame-libs ################### [ 71/1218] error: Couldn't fork %post: Cannot allocate memory error: Couldn't fork %pre: Cannot allocate memory error: install: %pre scriptlet failed (2), skipping tk-8.4.17-2.fc8 Updating : libdvdnav ################### [ 73/1218] error: Couldn't fork %post: Cannot allocate memory *** glibc detected *** /usr/bin/python: corrupted double-linked list: 0x15cdde58 ***As you might expect, all 70+ packages above also got ' Cannot allocate memory'
error. My laptop has 256 Mb of RAM and 512 Mb of swap, more than a half was free.After trying to start the same process again, after some applications were killed to get free memory, yum refused to install packages because of broken
dependencies...For example for xorg-x11-server-utils I have:xorg-x11-server-utils-7.3-2.fc8 xorg-x11-server-utils-7.2-1.fc7 xorg-x11-server-utils-7.3-1.fc8But libebml has one FC6 version. For the protocol, FC6 was never
installed on this laptop:libebml-0.7.7-2.fc6 libebml-0.7.7-3.fc8Fedora Core also forces FC9 stopper bug into needinfo one without any single patch/version to test (at least I did not receive any such mail), opened with perfect description, with probability of bufer overflow somewhere in image processing/rendering code, with 100% reproducible example and image to test with, even after other person reported the same problem on rawhide (and marked it as fc9 stopper). How in the hell you expect to get some info after two months of silence from developers? (one month after bug was confirmed in rawhide) Some people still believe in miracles... I would like to test it right now, but I can not because of yum problems...
Old packages, as you might expect, still have that bug somewhere.World is far from being perfect :) I will not turn it off or suspend, I do not believe it will work after that. Instead I will wait until capabale to get new DVD with some other distro. And it will not be Debian either. /devel/other :: Link / Comments () Sat, 16 Feb 2008
How to measure a temperature of the body under very limited conditions.
So, the solution. It is based on the fact, that when human body or part of it is placed into environment with essentially the same temperature, but much bigger thermal capacity, it does not feel this. Try get shower with about 36 degress Centigrade, and you will not feel neither cold, nor hot. Things are different when air on the street is more than 30 degrees Centigrade, that is because of too much different thermal capacity of water (it is huge) and air (very small). So, back to the task. To determine your tempeperature you have to get precise volume of water in the teakettle (let's say 1 liter, I could measure it because I have water counters), connect teakettle to the electricity via ampermeter, measure voltage by voltmeter. Then you have to put your arm into the teakettle and turn it on (beware of heating element) and checkout first time. When your hand will feel itself very comfortable (here is a main error factor) you have to checkout second time. Then remove your arm and wait until water become boiled and write third time. Now, its time for school physics: power of the teakettle, which is equal to multiplication of current strength and voltage, multipled by time difference is equal to weight of the water multipled by its thermal capacity and temperature difference, which was changed during above time frame. So, here are practical results: current strength I = 3.7 A voltage V = 231 V mass of the water m = 1 kg thermal capacity of the water c = 4200 J/(kg*degree) time difference for complete boiling (from unknown temperature to 100 degrees Centigrade) dt0 = 420 seconds temperature difference dT can be found from following equation: I*V*dt0 = m*c*dTSo, we have dT = 100 (temperature of the boiling) - T0 (initial temperature of the water) = I*V*dt0/(m*c), and is equal to 85 degress Centigrade, so initial temperature of the water was about 15 degress Centigrade. Time difference between start of the process and comfortable temperature was about 30 seconds, so placing this timeframe into above equation we can find, that temperature was changed by 6 degress. Since we already found, that initial temperature was about 15 degress Centigrade, calculated temperature of my body is about 21 degrees Centigrade. Its time to go back to grave... P.S. Yes, I'm a former looser-physicist, that's why I became a kernel hacker, this can explain alot... /devel/other :: Link / Comments () Mon, 11 Feb 2008
kernelplanet.org
/devel/other :: Link / Comments () Tue, 05 Feb 2008
Selecting computer language for the new project.
assert youKnowWhatYouReallyWant == true;
if (iAmWritingForPersonalUseOnly()) {
if (iWantAReallyNewParadigm()) { // actually you'll get some irreversible brain damage.
try {
return "Huskell"; // dude, I really mean the DAMAGE!
} catch(ECriticalBrainFailure e) {
if (preferDotNetWorld()){
return "F#"; // it's the same as Gb, ain't it?
} else if (processorCount() >= OH_SO_MANY) {
return "Erlang"; // start thinking in 1000 threads
} else if (preferPunctuation() == STRONGLY){
try {
return "J"; // APL needed a transliteration -- and got it
} catch (EBrainOverolad e) {
return "K"; // better have a bank hire you soon!
}
} else {
throw new RethinkParadigmException();
// you should have better selected Haskeel before
}
}
} else {
if (isDynamicTypingOk()) { // hey, everyone wanna be a cool geek today.
if (cannotLiveWithoutCurlyBraces()) { // well, who can ?!
return "Ruby"; // it's Python done better.
} else if (enjoyIndentation()){
return "Python"; // it's Ruby done right.
} else if (shizophrenia->isOK()){
return "Perl"; // all the expressivenes and imprecision of a human language.
} else if (sourceCodeConceptIsObsolete()){
return "Smalltalk"; // ever modified the value of True -- on a live system?
} else {
throw new LameException("PHP5"); // stick with this, los^W poor dude
}
} else { // static typing obviously
if (isManagedOk()) { // let PC do some job for me, they are so smart nowdays.
//Sick of doing everything myself.
if (preferJavaWorld()) { // die, MS, die!!!
return "Scala"; // huge, really huge. Must be inspired by Noah Arc.
} else if (preferDotNetWorld()) { // stuck on Windows, ha?
return "Nemerle"; // kazalos' by... oh, not again...
} else {
throw new IsThereReallyAnythingElseException();
}
// computers will eliminate the humankind if they get enough control.
} else if (unmanagedOnly()) {
return "D"; // get a whole new language with every new release. Great fun.
} else {
throw new YouWantSomethingStrangeHereException();
}
}
}
} else {
return "Do Whatever Your Boss Says To And Keep Your Mouth Shut Programming Language";
}
I only know C a bit and some time ago I tried Java and knew what C++ was...
I think I'm living out of this new and shiny world of programming, and that's cool.
/devel/other :: Link / Comments () Mon, 04 Feb 2008
Linux.Conf.Au 2008 presentations available.
http://oss.oracle.com/projects/crfs/ $ wc -l lk/*.[ch] | tail -1 7335 total $ wc -l crfsd/*.[ch] | tail -1 5971 totalBut world is so cruel: Not Found The requested URL /projects/crfs/ was not found on this server.Likely it is still a weekend in USA. /devel/other :: Link / Comments () Fri, 18 Jan 2008
Fedora upgrade sucks.
/devel/other :: Link / Comments () Thu, 10 Jan 2008
How to fix Debian upgrade process with "A non-dpkg owned copy of the libc6-i686 package was found." error.
/devel/other :: Link / Comments ()
Why don't I like Debian.
Do you want to upgrade glibc now? [Y/n] A non-dpkg owned copy of the libc6-i686 package was found. It is not safe to upgrade the C library in this situation; please remove that copy of the C library and try again. dpkg: error processing /var/cache/apt/archives/libc6_2.7-5_i386.deb (--install): subprocess pre-installation script returned error exit status 1What in the hell does it mean? How in the hell is this possible? I do not know, but since today I hate Debian. I tried number of things to cure the situation, but failed, I'm pretty sure, there is a probability, that my hands are connected to the ass, and I only think and believe that they are connected to shoulders. After about 3-4 hours of this crap I eventually removed libc6 package from my installation and immediately everything stopped to work: # ls bash: /bin/ls: No such file or directoryThe only reason to break seems-to-be-cool Debian Etch installation was its too old glibc (libc6) package, which does not contain openat() and friends syscalls,
which are extensively used in pohmelfs userspace server.And here is a reason. I do not know level of correctness of this change, but it does not allow to upgrade glibc (and more generally perform dist-upgrade action) from etch to testing in my setup. /devel/other :: Link / Comments ()
My testing environment.
/devel/other :: Link / Comments () |