~hruske Hruške, jabuke, jablane, čežane. » 2008 » Maj
Home Contact Sitemap

Hruške, jabuke, jablane, čežane.

Ste se gdaj vprašali, zakaj Najboljšega soseda nikoli ni doma, ko pridete na obisk?

The Linux rt2x00 channel 12 and 13 problem, solved

Posted on Maj 31st, 2008 in dovhcajt |

Old telephone wires are a challenging communications channel for modern digital communications.The Linux rt2x00 wireless drivers come with channel 12 and 13 disabled by default, this is due to different regulations over the world. In US the wireless usage is restricted to channels 1 to 11, while in Europe, channel 12 and 13 are also permitted. However, the rt2x00 driver has the defaults set not to support the last two channels, and finding a way to enable them requires a fair amount of googling.

To spare other from the pain, here is the solution to rt2x00 channel 12 and 13 problem is to make the new wireless stack mac80211 aware of the fact, that you are not a resident of US. The rt2x00 will then show additional channels as available, if you do ‘iwlist ra0 freq’

Komentarji so izklopljeni

A replacement for bzip2 compression

Posted on Maj 15th, 2008 in debian, linux |

I was looking for a replacement for the old and slow bzip2. Not to say it doesn’t work, it’s just too slow for use case I have, and gzip just doesn’t bring enough space savings. And, after all, why settle for less than you’re able to achieve?

So, after checking out Linux compression utilities, the only one that fits my requirements:

  • it should be included in Debian repositories
  • it should compress approximately as good as bzip2 does in similar time, but should decompress faster
  • if possible, it should be free software

The only real contestant is 7-zip, which uses the super efficient LZMA algorithm for compression. It can be quite slow, though. So, the idea is to try to fine tune the utility, to use at most the space bzip2 would or less, and be faster when decompressing. p7zip, the Unix port, has similar compression settings as gzip has, ranging from 1 to 9. I tested some of them, to find optimal settings for my use case and made some benchmarks. I used three different test files, all of which were tar files, but with different contents. Test case 1 was 40MB of text, test case 2 was about 200MB of a recent Haiku OS image and test case 3 were essentially a 70MB bunch of Java JAR files.

This is how the archives compressed. Numbers are normalized to bzip2, for comparison.
7-zip vs. bzip2: Archive size comparizon

Time needed for compression:
Time needed for compression by algorithm and test case

Time needed for decompression:
Time needed for decompression by algorithm and test case

You can see that 7zip always decompresses faster, and that in general, higher 7z compression makes the archive decompress faster. Interesting.

Some more info:

  • 7zip was Debian package p7zip-full 4.57~dfsg.1-1
  • bzip2 was Debian package 1.0.5-0.1
  • test machine was 2.16GHz Macbook with 2GB RAM, doing only the tests
  • frequency scaling was off
  • all files were first cached in RAM by doing “cat file > /dev/null” so disk I/O was not the bottleneck
Komentarji so izklopljeni

Disconnecting the hard drive, the software way

Posted on Maj 8th, 2008 in debian, linux |

A hard drive recently died, taking away lots of data and filling the logs with failed ide requests. Annoying in too many ways. So, how do you make the disk stop yelling?

The easiest is to make the kernel not see it. There’s a neat trick that enables you to do just that, and it’s called module unbinding. So, basically you unmount the drive (or what’s left of it), then you only need to figure out what device to disconnect from which driver, which isn’t that hard. If you do “ls -al /sys/block/sda/”, you’ll see something like this:

drwxr-xr-x  8 root root    0 maj  8 21:47 .
drwxr-xr-x 20 root root    0 maj  8 21:47 ..
-r--r--r--  1 root root 4096 maj  8 21:47 capability
-r--r--r--  1 root root 4096 maj  8 21:47 dev
lrwxrwxrwx  1 root root    0 maj  8 21:47 device -> ../../devices/pci0000:00/0000:00:1f.2/host2/target2:0:1/2:0:1:0
drwxr-xr-x  2 root root    0 maj  8 21:47 holders
drwxr-xr-x  2 root root    0 maj  8 21:47 power
drwxr-xr-x  3 root root    0 maj  8 21:47 queue
-r--r--r--  1 root root 4096 maj  8 21:47 range
-r--r--r--  1 root root 4096 maj  8 21:47 removable
drwxr-xr-x  4 root root    0 maj  8 21:47 sda1
drwxr-xr-x  4 root root    0 maj  8 21:47 sda2
-r--r--r--  1 root root 4096 maj  8 21:47 size
drwxr-xr-x  2 root root    0 maj  8 21:47 slaves
-r--r--r--  1 root root 4096 maj  8 21:47 stat
lrwxrwxrwx  1 root root    0 maj  8 21:47 subsystem -> ../../block
-rw-r--r--  1 root root 4096 maj  8 21:47 uevent

The line of our interest is

lrwxrwxrwx  1 root root    0 maj  8 21:47 device -> ../../devices/pci0000:00/0000:00:1f.2/host2/target2:0:1/2:0:1:0

where you can see, that the device id is “2:0:1:0″. The last step is to actually unbind the device:

cd /sys/block/sda/device/driver
echo -n "2:0:1:0" > unbind

Et voila, your hard drive is no more as far as the kernel knows.

Komentarji so izklopljeni